硬件基础知识和典型应用-关于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芯片帮你缓存图像数据.
读取每一个字节的数据也是靠一个引脚产生时钟上升沿,不过这个引脚是单片机自己产生.
现在就是说你想啥时候读取数据就啥时候读取....
最后关于程序
去淘宝搜索摄像头,然后基本上都会给例程!!!