做自己的摄像头模块
如果想好一些的页面格式或者下载源代码可以到我的个人网站:http://sites.google.com/site/jk36125/Home/wo-deov7640she-xiang-tou-mo-kuai做这个摄像头本来也很无奈.
因为买不到好的模块啊.
不是太贵就是质量太差,要不就是又贵又差.
所以就想,不如自己做一个好了.
事情就这样定下来了.
从淘宝寄来OV7640的当天就把硬件完成了.
麻烦的其实是软件.OV官方说"为了给第三方开发者空间,所以不提供例程".
所以我只好抱着一个标记着"preliminary"的OV7640文档.看着含糊不清的说明慢慢的尝试.
电路原理图:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_418124.gif
(原文件名:OV7640电路原理图.gif)
做完的实物:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_418127.JPG
(原文件名:实物图.JPG)
在Linux上编写了上位机的程序来采集图象,采用串口 115200,n,8,1 进行通信.
OV7640拍摄的图象:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_418128.jpg
(原文件名:样片.jpg)
左图为RGB565,QVGA,右图为255级灰度.
关于SCCB的总线协议:
SCCB协议充分展现了产商的协议不统一是一件多么麻烦的事情.
SCCB协议就是 Serial Camera Control Bus. 不晓得它和I2C哪个先出生.
这里只说明单字节操作.
SCCB的单字节写操作协议完全和I2C一样:
起始位 ---> 器件地址(0x42) ---> ACK ---> 内部寄存器地址 ---> ACK ---> 写入数据 ---> ACK ---> 结束位
在I2C总线当中,器件地址的最后一位为 0 时表示为写操作的开始,最后一位为 1 时表示读操作的开始.
所以在使用ARM9例如 AT91系列的TWI总线接口时,器件地址应该等于 0x21(7位),再根据读写操作的选择补充最后一位为1或者为0.
SCCB协议的单字节随机地址读协议比I2C的多出了一个停止位:
起始位 --> 器件地址(0x42) --> ACK --> 内部寄存器地址 --> ACK --> 结束位 --> 起始位 --> 器件地址(0x43) -->ACK --> 数据 --> NOACK --> 停止位
而I2C的单字节随机地址读操作为:
起始位 --> 器件地址(0x42) --> ACK --> 内部寄存器地址 --> ACK --> 起始位 --> 器件地址(0x43) -->ACK --> 数据 --> NOACK --> 停止位
红色标记的读协议就是SCCB总线所特有的.
不管怎样,如果用现成的ARM9外设的I2C接口,只能执行写操作.如果需要读操作需要自己编写SCCB的模拟总线,加上SCCB多生出来的一个停止位.
关于OV系列的寄存器设置:
这个要怪OV,你说不给例程也就罢了吧,连个寄存器的使用说明都没有.许多设置含含糊糊的让人不知所错.
我只好一一尝试.不管怎样,下面的这些寄存器对于采集图象来说是常用的(针对OV7640):
地址 主要用途 范例值
0x11 OV器件时钟分频 0x3f时钟分频到最大,其余选项为默认
0x28 选择黑白模式(OV7141)或者彩色模式(OV7640) 0x60 选择黑白模式,其余选项为默认(系统默认为彩色模式)
0x14 QVGA格式或者VGA格式选择 0x24 QVGA输出, 0x04 VGA输出
0x1F RGB565或者RGB555格式选择 0x11 RGB565输出
0x12 自动白平衡,RGB和YUV设置 0x18 关闭自动白平衡,其余默认
如果在OV7141~黑白模式下设置OV7640彩色模式用到的寄存器会造成图象黑屏.
有一些寄存器的功能有重叠,例如在0x1F设置了RGB565或者RGB55输出,就不需要在0x12中选择RGB输出.
关于硬件的连接方法(for ARM):
输入线: HREF VSYNC PCLK Y
输出线: PWDNRESET
外部时钟: CLK
SCCB总线: TWI等I2C总线(只能写),或者模拟SCCB总线(读写)
关于图象采集:
对于图象的采集需要用到 HREF VSYNC PCLK Y
其中HREF 为行同步, VSYNC为帧同步,PCLK为数据输出的时钟,Y为数据总线.
VSYNC出现一次正脉冲说明一帧图象已经准备好,HREF由0-->1说明1行图象数据已经准备好.
采集顺序为:
等待VSNYC的正脉冲 ---> (循环)等待HREF由 0 到 1 ---> (循环)当PCLK由 0--->1的时候采集Y上的数据 --> HREF由 1 到 0(一行结束)
关于采集图象的质量:
CMOS的30万摄像头,我本来也不对图象质量报太高期望.
不管怎么说,问题出现在两个方面:
1. 所用的镜头滤镜
2. 图象采集的频率
很难找到和手头芯片一致符合的镜头,某些不合适的镜头的滤镜可能会造成图象的色彩失真.
采集的频率决定了自动白平衡和自动增益的参数设定,如果采集的频率很小,例如1秒钟只采集一幅图象,那么自动白平衡有可能得不到足够的参数而使得图象失 真.这个时候关闭自动白平衡反而会比较好.
关于输出图象格式:
采集到的图象通常有几种格式:黑白,RGB565,RGB555,RGB原始图象
黑白图象为 255 级灰度,每一个字节的数据对应一个象素.不需要转换.
RGB565的输出顺序为: 第一字节 第二字节
R4 R3 R2 R1 R0 G5 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0
转换为RGB24: R G B
(R4 R3 R2 R1 R0) * 8 (G5 G4 G3G2 G1 G0) * 4 (B4 B3 B2 B1 B0) * 8
也就是说RGB565的两个字节数据对应一个象素.
RGB555的输出顺序为: 第一字节 第二字节
X R4 R3 R2 R1 R0 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0
例程:
图象采集:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_418129.GIF
(原文件名:图象读取代码.GIF)
后记:81楼有代码 发完帖子好像不能修改的样子 不错啊,可以做自己的监控系统了! 就是串口太慢了 usb转串口(pl2301),能到900多k,可以试试 漂亮 不错 ding 顶一个 不錯,頂一個 非常不错
电压=?V
电流=?mA 不错啊! 不错,不知道你这个模块是在哪里买的啊。 厉害啊! 刚在淘宝上搜了下,45块钱但没把握自己能玩转,所以不敢下手啊! 真羡慕楼主 toaf00
电压用5V OV7640的功耗是40mw左右
to loves123
这个就是我自己做的模块啊```汗 这个好,有时间也要做一个,到时还得多多请教楼主, 佩服 镜头啥的咋办的? 【18楼】 wswh2o 水之影
用电脑摄像头的那种就可以 用单片机驱动数字摄像头
作者:xlander 发表时间:2008-3-1 阅读次数:9074
http://www.getproject.com.cn/Article/Show/73.aspx
眼下,视频监控已经渗透到各个领域,几乎已经无所不在了,前段时间盛传的地铁情侣拥吻,再次掀起有关公共场合的隐私保护的讨论。不管讨论的结果怎样,那都是社会学层面的讨论,从技术层面来看,就跟枪和炮一样,技术在给社会带来科学进步的同时,也不可避免的给社会带来潜在的威胁。
如果你想在视频监控这个热门领域里捞一把,这里收录的三篇文章会指导你很好的完成入门试验。
./bbs_upload34876/files_12/ourdev_422862.jpg
( (原文件名:用单片机驱动数字摄像头1.jpg))
先从简单的开始,有关如何驱动数字摄像头,这里有一篇文章《数字摄像头的驱动和接口》,作者采用的单片机是ATmega16,至于摄像头,则采用了ETC公司的摄像头模块C3088,C3088采用的CMOS传感器是Omnivision公司的OV6620,OV6620的分辨率是356*292,适合运算能力较低的单片机使用。作者共享了实验报告和实现代码。不过,作者只读取了传感器的Y通道,所以采集到的图像是黑白的。不过,对于个人试验来说,C3088既然号称是国外进口,价格肯定不会便宜,所以还是从轮子做起好了,既能锻炼自己,又能节省成本,一举两得。
视频采集在视频领域技术难度并不大,所以想凭视频采集在视频领域里混饭吃,是非常难的,基本属于温饱,饿不死,但也不会暴富。要想发财,就得下功夫,给视频采集来个“粗加工”,也就是图象处理和图像识别,比方说车牌识别、人脸识别、或者车站门口的行李扫描,这些产品都需要用到图像处理和识别技术,所以,我们再来看这个稍微复杂一点的,AVR摄像头是基于GNU GPL的开源项目,采用ATMega8单片机,通过图像处理技术,摄像头最多可以跟踪8个不同的物体,这个摄像头最物尽其用的场合非机器人足球莫属。这个摄像头识别物体的方法是颜色识别,属于图像识别的入门阶段,拿来学习刚刚好。下载原理图和代码。
掌握了图像识别,你过上了小康生活了,比起出手阔绰的富豪们,你还需要继续努力,这一次算是“深加工”好了。接下来的这一个就非常复杂了,来自康奈尔大学的自动搜索机器人,他们采用的摄像头模块也是C3088,这个机器人既可以通过无线遥控,也可以自动寻找和收集红色的小球。这是一个非常复杂的项目,除了车辆的组装以外,还涉及机器视觉、运动控制、无线通讯等等,具体的内容不是几句话可以说清楚地,不过,他们共享了所有的设计材料,这些材料都可以在这里下载得到。如果你看到这样的项目后,产生一种发自肺腑的绝望,感觉自己永远没有出头之日的话,那就大可不必了,其实老天爷对人是公平的,像这样的工程不是一个人做得了的,就像长城不是一个人修的一样。假如可以在视频采集领域赚1块钱,只需要你一个人就够了,而在机器人领域可以赚100块钱,但是你需要与另外的99个人合作才行,你的所得也还是1块钱。所以,你所得到的,永远都是你所付出的,踏踏实实做好、做强自己擅长的工作就足够了。
最后来看看自动搜索机器人的工作成果:
(原文件名:用单片机驱动数字摄像头2.jpg)
(原文件名:用单片机驱动数字摄像头3.jpg)
有关cmucam3实际采集到的图像见,http://robotdevices.blogspot.com/ 另一个开源摄像头
作者:xlander 发表时间:2008-3-11 阅读次数:3166
(原文件名:数字摄像头4.jpg)
用单片机驱动数字摄像头里提到的AVR摄像头是基于ATMega8的,今天收录的CMUcam则是基于NXP LPC2106的,这个摄像头已经升级到第三代了。
CMUcam3在硬件上并不开源,而是软件开源,而且还提供了丰富的实例,比方说颜色跟踪、移动探测、以及一些基本的图像压缩和处理算法等等。
CMUcam3虽然在硬件上并不开源,但是保留了重新烧写固件的接口,用户可以修改代码并升级新的固件。网站上还提供了相关软件(包括编译器、烧写器、实例代码等),供用户下载。http://www.cmucam.org/wiki/Downloads mark 顶啊 mark Mark~~~ 终于有人玩摄像头了,顶顶 mark,真的很强大,我项目完成有空好好看。 mark很强大,有没考虑输出AV信号,缩小体积,出售模块 楼主的网页打不开,能否重新给过 mark很强大,有没考虑输出AV信号,缩小体积,出售模块
-----
只要AV输出就没那么麻烦了,监控市场上输出AV信号的模块多的是 mark 佩服,高高手啊!!!!
摄像头都热转印,佩服,佩服 好文章 帮了我大忙啊 本人最近也在弄摄像头做识别的 顶了 mark 想问一下楼主电路照片中间正方形那个是不是CCD元件啊? 不用镜头就可以吗? jh mark 不错 mark 帮顶, mark mark mark 好呀 mark mark 不错 很好很强大。 mark mark 关注一下 呵呵,顶一下 mark,有谁能把上面的资料打包一下方便大家下载啊,我都不知道下那个 mark 不错啊 mark mark 很不错哦
mark之! mark mark
顺便问一下有人推荐一下具有Global Shutter功能的摄像头模块么? 记号 备份 不错记号~ 楼主您好,我现在也想做一个摄像头,您能不能给点指导,QQ519349341 写得非常的好,顶~ mark 摄像头 写得确实很不错! mark MARK!! 牛X mark mark 顶一个 mark 顶一个 mark mark mark mark 1年前的老帖子居然被顶到首页了······
那楼主我再小挖一下坟好了。嘿嘿。 一年后看到自己发的贴子,感触颇多,补上迟到的源代码:
SCCB总线驱动:
点击此处下载 ourdev_583519EWE4PO.rar(文件大小:2K) (原文件名:SCCB.rar)
AT91RM9200通用IO读取图像源代码(汇编):
点击此处下载 ourdev_583520UIEZGI.rar(文件大小:978字节) (原文件名:vison.rar) 赞一个 lz 辛苦 mark一下 这种封装如何焊接啊????
楼主给点意见来啊....
MASK!~ mask 回复【84楼】dgtg
-----------------------------------------------------------------------
非常好焊接,只要用稍细的烙铁在每个焊盘处轻触一下就可以。不需要用拖焊。但是要注意静电防护,最好待个静电手环。 mark mark mark MARK 向你学习 mark mark 记号!ov7640 20V2A ov7640
flag!! 再顶 mark mark
页:
[1]
2