我知道有很多在互联网上(例如http://forum.arduino.cc/index.php?topic=159557.0)关于OV7670,我读了很多关于它,但似乎缺少一些东西。Arduino + OV7670 - 无FIFO - 读取快照
首先,我看看如何从相机读取像素来构建矩形600 X 480图像,考虑到文档中描述的HREF,VSYNCH和PCLOCK,这很容易理解:http://www.voti.nl/docs/OV7670.pdf。我将XCLOCK理解为一个输入,我需要将它作为一种循环控制器提供给OV7670,而RESET则可以重置它。
所以在这一点我认为这种相机的功能将通过配线以下引脚被覆盖:
- D0..D7 - 数据(像素)连接到Arduino的数字引脚0至7作为Arduino板
- XCLK INPUT - 用于相机时钟连接到Arduino的数字销8从Arduino板OUTPUT
- PCLK - 用于像素时钟连接到Arduino的DIGITA升上Arduino板
- HREF销9作为输入 - 定义当一个行开始/结束连接到Arduino的数字销10作为输入上Arduino板
- VSYCH - 定义当一个帧开始/结束连接到Arduino的数字销11作为输入上Arduino板
- GRD - GROUD连接的Arduino GRD
- 3V3 - 连接到Arduino的3,3 INPUT 3,3V
- RESET - 连接到Arduino的RESET
- PWDN - 连接到Arduino的GRD
从我的角度来看这种方法的实施将是这样的: 代码:
for each loop function do
write high to XCLK
if VSYNCH is HIGH
return;
if HREF is LOW
return;
if lastPCLOCK was HIGH and currentPCLOCK is LOW
readPixelFromDataPins();
end for
我的readPixelFromDataPins()
基本上只读了第一个字节(因为我只是测试,如果我甚至可以从相机中读取某些东西),它写成如下:
代码:
byte readPixelFromDataPins() {
byte result = 0;
for (int i = 0; i < 8; i++) {
result = result << 1 | digitalRead(data_p[i]);
}
return result;
}
为了检查,如果事情被从相机中读取我只是把它打印到串口9600,字节从数据引脚为数字阅读。但目前我只收到零值。我用来检索图像的代码存储在这里:https://gist.github.com/franciscospaeth/8503747。
有人让OV7670与Arduino一起工作已经搞清楚我做错了什么?我想我错误地使用了XCLOCK吧?我该怎么做才能使它工作?
我搜索了很多,我没有找到任何SSCCE(http://sscce.org/)这款相机使用arduino,如果有人请让我知道。
这个问题出现在arduino论坛(http://forum.arduino.cc/index.php?topic=211741.0)上。
@XaverKapeller - 请在编辑更加小心。您只将其中一个文件的内容替换为工作存储库的链接。 –
@ChrisStratton我没有删除链接,我刚搬到它跌到了谷底。而且他只链接了一个文件,所以我在这里复制了它的内容。 –
我承认我只是从我的存储库发布一个链接而感到有点懒惰。所有你需要的代码都在capImg()中。您将需要为您的应用程序修改它。重要的是,我使用cli()禁用中断,而不是使用digitalRead来获取数据,而是使用端口映射。 – user3462295