硬件基础知识和典型应用-关于OVXXXX 系列摄像头使用说明

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnHardware" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

说明

首先能够采集OVXXXX系列的摄像头数据并不是什么高端和困难的事情!

现在说一下怎么采集摄像头数据(不带FIFO)

1.摄像头就是里面有很多采集点组成

如果说一个摄像头是 240*320的

就是说横着有240个采集点,竖着有320个采集点,共76800个采集点

2.以OV7670为例(假设采集240*320个像素点,模式输出是RGB422)

3.3V和GNG  -- 摄像头供电

-------------------------------------------------------------------------

SDA和SCL为IIC配置摄像头的引脚

可以设置摄像头具体横竖采集的像素点个数

可以设置采集模式,列如:RGB 422(就是说一个像素点用 8位数据表示 ,前面4位代表红色,中间2位代表蓝色,最后2位代表绿色)

列如: 采集的数据是  0xF0 (1111 0000)  就是纯绿色

采集的数据是  0x00 (0000 1100)  就是纯蓝色

采集的数据是  0x00 (0000 1000)  就是不怎么蓝的颜色

有可能有人会问这颜色识别的有点不好呀,分辨率有点低.其实有RGB565,但是呢为了方便叙述,咱先按照RGB422来讲解.

-------------------------------------------------------------------------

VS (VSYNC) ----摄像头工作的时候,这个引脚来一个高脉冲说明摄像头开始采集一副图像了(采集240*320个像素点)

注意哈,一般咱们把开始采集一副图像就做开始采集一帧图像

一般摄像头采集是从左到右 从上到下采集,当然也可以使用IIC发送命令控制它采集的模式

-------------------------------------------------------------------------

HS (HREF) ---- 当这个引脚变为高电平,说明摄像头正在输出某一行像素点

假设是刚开始采集,那么这个引脚第一次变为高电平,说明摄像头正在输出第一行的像素点(从左到右 240个)

第一行的像素点采集完了,就会变为低电平,然后开始采集第二行,这个引脚又会主动变为高电平

然后就是这样子循环.

-------------------------------------------------------------------------

PLK ---- 当这个引脚变为高电平,说明摄像头正在输出一个像素点的数据

假设是刚开始采集,那么这个引脚第一次变为来一个高脉冲,说明摄像头正在输出第一行的第一个像素点的数据

-------------------------------------------------------------------------

D0 - D7引脚  ---- 这个是输出实际像素点采集的数据的引脚

配合上面的 PLK引脚,当PLK引脚来一个高脉冲以后,读取D0 - D7引脚的值

便可获取采集的像素点的数据.假设是刚开始采集采集的数据是 1111 0000  (0xF0)

就说明采集的第一行的第一个像素点的数据是 0xF0 纯绿色

最后总结

假设是 240*320

VS (VSYNC)  ,  HS (HREF) 和 PLK  引脚都接到单片机的中断引脚上

D0 - D7 接到单片机的随意8个引脚上

当检测到 VS (VSYNC) 来了一个高脉冲说明开始采集一帧图像了

然后检测 HS (HREF) 引脚变为了高电平

说明开始采集一行图像了,然后只要PLK引脚来一个高脉冲,说明摄像头输出了

一个像素点的数据,然后单片机读取 D0 - D7 就获取了数据了

然后通过 PLK 和  D0 - D7就可以获取第一行的 240个数据

第一行输出完成 HS (HREF) 引脚变为了低电平

开始输出第二行的时候 HS (HREF) 引脚变为了高电平

然后只要PLK引脚来一个高脉冲,说明摄像头输出了

一个像素点的数据,然后单片机读取 D0 - D7 就获取了数据了

然后通过 PLK 和  D0 - D7就可以获取第二行的 240个数据

然后就是循环采集320行数据.

难在哪里呢?

从上面的介绍可以看出好像挺简单的

那难在哪里呢?

1.难点1

大部分人的基础知识不够,就是说连基本的IIC通信,中断采集都不会

注意哈,我说的是会!!!

列如我问下: 等待芯片应答具体是啥?

发送非应答具体是啥??

2.难点2

摄像头输出的频率实在是太快了

真的是太快了!!!!一般的单片机达不到这种速度

咱们只看 PCLK 的输出速度哈

下图中大概是 PCLK的高电平时间 大概是8ns

整个周期才16ns .....这是普通单片机做不到的

一般情况下就是72M主频的STM32F103 执行中断的时间也是约1us

即使是关闭所有的其它外设,中断时间也只能达到 400ns

然后摄像头模组加个FIFO芯片

FIFO的作用是啥?

没有FIFO的时候,摄像头输出数据是主动的,时钟也是摄像头主动发出的,咱单片机只能接收判断

FIFO芯片帮你缓存图像数据.

读取每一个字节的数据也是靠一个引脚产生时钟上升沿,不过这个引脚是单片机自己产生.

现在就是说你想啥时候读取数据就啥时候读取....

最后关于程序

去淘宝搜索摄像头,然后基本上都会给例程!!!

原文地址:https://www.cnblogs.com/yangfengwu/p/14720167.html