收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
先了解一下基础知识:现在市面上的OV7670模块分两种:1、带FIFO芯片;2、不带FIFO芯片。当然带FIFO的要贵一点~下面介绍带FIFO和不带FIFO的工作原理:
图1:不带FIFO
图2:带FIFO
下面就讲解这两种方式的适用范围:
-
不带FIFO:这种方法最简单,最直接,但是最不好实现的方法,原因是多数的CMOS芯片(如OV7670)的时钟速度可以高达24M,一般单片机的IO口速度根本达不到(stm32的IO速度,寄存器比库函数快,博主之前测,用库函数IO口速度好像是2.5Mhz,而用寄存器IO口速度是8M吧,速度相差较大)。当然,高级的MCU,如ARM9以上或者DSP图像处理芯片等,本身处理速度快,内存大而且有的还带camera接口,可以不用带FIFO。主要是人家价格也高啊
-
但也不是不是完全没有办法在低速上实现采集,方法也很简单,那么就是降低CMOS 的输出速度,不过这需要靠外部的晶振和内部的PLL 电路以及像素时钟速度,帧速等多个寄存器共同设置,并且要和MCU 的IO 速度匹配才可实现。但不建议这么做,原因是:这种寄存器设置将带来更多的学习困难和理解困难,并导致硬件图像的采集速度可能下降到0.5 帧以下,同时带来图像失真的可能。
-
还有一种方法就是DMA方式采集,代码复杂,速度在5-10帧左右。(博主本来想用该方法的,可是基础差,调试困难。会接着调试~)
-
注:部分CMOS 时钟速度不快,可以单片机直接采集,如OV7660,但该芯片已经停产。
-
带FIFO:由于采用了FIFO 做为数据缓冲,数据采集大大简便,用户只需要关心是如何读取即可,不需要关心具体数据是如何采集到的,这样可减小甚至不用关心CMOS 的控制以及时序关系,就能够实现图像的采集。
注意:FIFO不具备地址功能,因此他也就不具备数据的定位(选址)读取功能,所以不可能有真正的数据处理能力!
总的来说:带FIFO比不带FIFO操作起来更简单,8位MCU也能胜任。下面我们参考战舰摄像头实验(带FIFO的OV7670模块)
二、OV7670的图像数据输出格式:(参考战舰开发指南)
先简单了解几个定义:
- VGA:分辨率为640*480的输出模式
- QVGA:分辨率为320*240的输出格式
- QQVGA:分辨率为160*120的输出格式
- PCLK:像素时钟,一个PCLK时钟,输出1个像素或半个像素
- VSYNC:帧同步信号
- HREF/HSYNC:行同步信号
先看行输出时序:
图3:OV7670行输出时序
图3中,图像数据在HREF为高的时候输出,当HREF变高后,每一个PCLK时钟,输出一个字节数据。比如我们采用VGA时序,RGB565格式输出,每两个字节组成一个像素的颜色(高字节在前,低字节在后),这样每行输出总共有640*2个PCLK周期,输出640*2个字节。
在来看
帧时序:
图4:OV7670帧时序
在图4中,VSYNC位高时产生一个帧同步信号,故当产生两个帧同步信号时,一帧数据输出完成。注意:图中的HSYNC和HREF其实是一个引脚产生的信号,只是在不同的场合下面,使用不同的信号方式。
三、战舰OV7670模块原理图讲解:
图5:战舰OP7670模块原理图
收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!