camera - Arduino + OV7670 - 不带 FIFO - 读取快照

标签 camera arduino clock

我知道互联网上有很多关于 OV7670 的信息(例如 http://forum.arduino.cc/index.php?topic=159557.0),并且我读了很多相关内容,但似乎缺少一些内容。

首先,我研究了如何从相机中逐像素读取以构建矩形 600 X 480 图像,考虑到此处文档中描述的 HREF、VSYNCH 和 PCLOCK,这很容易理解: http://www.voti.nl/docs/OV7670.pdf 。我将 XCLOCK 理解为我需要提供给 OV7670 作为一种周期 Controller 的输入,而 RESET 将用于重置它。

因此,此时我认为此类相机的功能可以通过连接以下引脚来实现:

  • D0..D7 - 用于连接到 arduino 数字引脚 0 到 7 作为 arduino 板上输入的数据(像素)
  • XCLK - 用于连接到 arduino 数字引脚 8 作为 arduino 板输出的相机时钟
  • PCLK - 用于连接到 arduino 数字引脚 9 作为 arduino 板上输入的像素时钟
  • HREF - 定义线路何时开始/结束连接到 arduino 数字引脚 10 作为 arduino 板上的输入
  • VSYCH - 定义帧何时开始/结束连接到 arduino 数字引脚 11 作为 arduino 板上的输入
  • GRD - 连接到 arduino GRD 的接地
  • 3V3 - 3,3 输入连接到 arduino 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;
}

为了检查是否正在从相机读取某些内容,我只需将其打印到 Serial 9600,即从数据引脚读取的字节作为数字。但目前我只收到零值。我用来检索图像的代码存储在此处:https://gist.github.com/franciscospaeth/8503747 .

让 OV7670 与 Arduino 一起工作的人是否已经弄清楚我做错了什么?我想我错误地使用了 XCLOCK,对吗?我该怎么做才能让它正常工作?

我搜索了很多,没有找到任何使用arduino的相机的SSCCE(http://sscce.org/),如果有人有请告诉我。

<小时/>

这个问题也出现在arduino论坛(http://forum.arduino.cc/index.php?topic=211741.0)上。

最佳答案

你的想法不错,但是...... xclock 需要是一个时钟(在你的程序中只是从 0 到 1 的转换并且在那里卡住) 您还需要使用 I2C 与 SIOC 和 SIOD 来配置相机(或者您可以使用默认设置,但我不确定是否是适合您的正确输出格式,30F/s,VGA,YUV 格式......)

在同一循环中使用串行输出和读取数据,代码执行速度会变慢 我建议您切换 xclock 引脚并在 if() 中移动像素打印。此外,如果您只想读取一个字节,那么您将只能在非常精确的时间内读取数据,那么在 HREF 从 0 到 1 的转换之后,您需要等待 PCLK 从 0 到 1 的新转换(您在 PCLK 的 784x2 转换后,将只能看到 HREF 的 0-1 转换,(每行 640 个事件像素 + 144 个死区时间)x 2(对于 YUV 或 RGB,每个像素接收 2 个字节))

关于camera - Arduino + OV7670 - 不带 FIFO - 读取快照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21220738/

相关文章:

ios - 在 iOS 上获取相机当前曝光持续时间值?

android - 如何在三星 Galaxy Tab 上使用相机闪光灯/led 作为手电筒?

c++ - 乘法返回不正确的值

php - 实时倒计时时钟

c - CLOCK_REALTIME有什么用?

matlab - 能同步Matlab的数据采集工具箱和图像采集工具箱吗?

c - Arduino serial.print() 在实际字符后添加一个额外的字符

Python 只向 Arduino 发送一次信号

使用 clock() 函数计算 C 中 system() 命令的运行时间

javascript - 使用网络摄像头捕获个人资料图片并在 Canvas 中显示图片