搜索
bottom↓
回复: 336

OV7670+FIFO+LCD DIY简易数码照相机(有图有源码),分别基于M16和STM32

  [复制链接]

出0入0汤圆

发表于 2010-11-8 21:45:43 | 显示全部楼层 |阅读模式
前不久做的,先是是在M16上实验,然后开了块OV7670+AL422(视频FIFO)的小板子,代码移植到了STM32上,总的来讲,M16上可以达到1帧/S的现实,STM32上估计有10帧/S.像素为340*240,RGB565格式。先上图

飞线搭的系统 (原文件名:2.jpg)


摄像头配置为彩带输出的图像 (原文件名:3 彩带输出.jpg)


拍摄图片1 (原文件名:1.jpg)


拍摄图片2 (原文件名:2.jpg)


拍摄图片3 (原文件名:3.jpg)


OV7670模组+AL422 FIFO (原文件名:4.jpg)


OV7670模组+AL422 FIFO (原文件名:5.jpg)

以下是M16上的代码,视频初始化和CSSB的控制参考了坛子里的代码,有人叫他“摄像头贩子”呵呵:
M16的代码,ICC编译ourdev_596258BWZJDX.rar(文件大小:2.75M) (原文件名:M16_2.8寸9325 + OV7670测试1_3.rar)
M16下的工程最后用ICC打开,因为里面的文件比较杂,有CH375和FATFS的文件,这些都没有加入工程,大家不要弄混了。
接下来是OV7670和AL422模块的原理图:
点击此处下载 ourdev_596264PVTI2N.pdf(文件大小:62K) (原文件名:Schematic Prints.pdf)
下面是OV7670的中英文pdf,对初学者很有帮助,搞定了一个OV的片子,其他的摄像头也是一样的。
OV7670英文手册ourdev_596265A6GL8F.pdf(文件大小:567K) (原文件名:OV7660.pdf)
OV7670中文手册ourdev_596266ETCFGG.pdf(文件大小:594K) (原文件名:OV7670 中文版数据手册1.01.pdf)


先看下大家是否感兴趣,如果可以的话随后再发布STM32下的代码和调试经验以及要注意的细节。
STM32代码在31楼,调试经验在2楼。

出0入0汤圆

发表于 2010-11-8 21:59:04 | 显示全部楼层
竟然sf了?

出0入0汤圆

 楼主| 发表于 2010-11-8 22:05:13 | 显示全部楼层
这么快就有回复啊,先占个位
在这个方案中,主要注意FIFO的读写时序,以及什么时候开启FIFO,什么时候从FIFO读数据来处理(比如显示)。一下是一些经验:

    调试该摄像头的时候最好有个LCD配合,否则大量的数据将给调试带来困难。首先我遇到的困难是OV7670的配置问题,粗看一眼,OV的寄存器多达100多个,涉及到很多专业的光学和摄像专业词汇。我的做法是网上找了别人能用的初始化配置数据,然后写到我的OV里面,然后再翻开datasheet,根据需要更改特定的寄存器值。以下是一些我目前认为重要的寄存器:

    0x12:这个寄存器用来设置图像的输出格式,有VGA(640*480),QVGA(320*240)等,另外就是配置图像数据的格式,有YUV,RGB565,Bayer RGB RAW。最后这个寄存器的最高位是用来软件复位所有寄存器的值的。

    0x71:这个寄存器对于调试的时候是很有用的,通过将其值配置为0x80,可以让摄像头输出8条彩带,当采集不到数据,或采集到的图像不正确的时候不妨设置一下该寄存器的值看图像是否为彩带,或是发生了什么样的畸变。下图是采集到的彩带图形(其实彩带图形0x70和0x71配合使用的,一般设置0x70寄存器为0即可)。




    0x11:这个寄存器用来配置OV的内部时钟相对于外部时钟的分频,即内部时钟是通过外部时钟分频得到的。资料上说OV的外部时钟典型值是24M,我按要求给了,但是当设置分频3时按道理像素时钟应该为8M,但得到的结果并非如此,但通过设置不同的分频系数,像素时钟确实是按照分频系数线性变化的,具体的时钟变化公式需要进一步研究。这个寄存器也是通过与0x6b寄存器配合使用的。接下来讲一下0x6b。

    0x6b:这个寄存器是内部时钟的倍频系数配置寄存器。我也尚未清楚为何有了分频(0x11)还要一个倍频。通过实验确实发现这两个寄存器的配置以不同的组合出现时对应的像素时钟是安线性关系改变的。但无论怎么组合,最后的内部时钟是无法超过外部时钟的。这个寄存器还可以配置内部LDO是否开启。开启了内部LDO功能后硬件上可以少一个1.8V的线性稳压器给内核供电。

    其他的寄存器诸如白平衡,RGB增益设置等因为暂时未用到,所以没有具体配置来看效果。

    另一方面,OV与FIFO的组合要需要注意一定的时序。一个简单而有效的组合是这样的:OV的场同步接入MCU的外部中断(上升沿触发),这样当一个场同步的到来时(在较窄的高电平到来后,接着就是有效的场同步了【低电平】)开启FIFO的写时使能,这样数据就在行同步与MCU的控制下按照像素时钟依次写入FIFO。当一场图像数据已经进入了FIFO以后,也标志着下一场数据将要来到,也即下一个场同步的上升沿即将到来,当下一个上升沿触发并进入中断后,MCU应该关掉FIFO的写使能,然后开始读FIFO的数据,知道数据读完以后再开始下一次的数据采集。所以调试的第一步是一个正常工作的外中断。我在用STM32调试时由于对其外中断不甚了解,走了些弯路,主要注意刚进外中断时应该先清中断标志再进行中断操作,否则系统可能一直处于中断嵌套中。

    再一点是FIFO的读写指针复位。FIFO的这两个指针复位对于数据同步很重要,如果不能正常复位,得到图像会出现移位或畸变。按照FIFO的datasheet,指针的复位分别有两种:Write Reset ,Read Reset;RE RRST,WE WRST。在读复位时我采用的是Read Reste,要求RE和OE都为低,然后在读复位引脚为低时重复两个以上的读时钟。写复位使用的是WE WRST,当WE为高时,拉低写复位引脚,稍微延时后拉高写复位引脚,WE引脚状态不用再管,交由中断程序正常控制,只要记住写复位的时候WE要先为高即可。

出0入58汤圆

发表于 2010-11-8 22:16:51 | 显示全部楼层
兴趣中,上STM32吧

出0入0汤圆

 楼主| 发表于 2010-11-8 22:27:02 | 显示全部楼层
回复【3楼】tiky
-----------------------------------------------------------------------

其实STM32和AVR下的都是差不多的,一个中断,一个LCD并行接口,一个FIFO接口,然后就是时序问题了。因为数据存在FIFO中,想什么时候用就什么时候用,像素空间再小点的话,用来实时颜色识别是没有问题的。

出0入0汤圆

发表于 2010-11-8 22:29:35 | 显示全部楼层
cool

出0入0汤圆

发表于 2010-11-8 22:40:56 | 显示全部楼层
回复【楼主位】zidong404
-----------------------------------------------------------------------

楼主 小弟最近在弄摄像头+al422b+单片机,可是图像有时有图像显示,有时什么也没有啊,检查快一个月了 依然没有进展,请您指教一下啊啊 谢谢 我的qq534301306,万分感谢啊

出0入0汤圆

发表于 2010-11-8 22:41:35 | 显示全部楼层
拜托楼主了啊

出0入0汤圆

发表于 2010-11-8 22:52:16 | 显示全部楼层
我也用的这种OV7670+FIFO+RF方案,板子这星期就能到,有时间也调调。
如果按照手册那种时序,不知道这个FIFO的时序有什么特殊要求没,

出0入0汤圆

 楼主| 发表于 2010-11-8 23:07:59 | 显示全部楼层
回复【6楼】huaixiaohai
-----------------------------------------------------------------------

我遇到过这种情况,可能是AL422的读写指针没有正确复位,你检查一下。

出0入0汤圆

 楼主| 发表于 2010-11-8 23:11:07 | 显示全部楼层
回复【8楼】pentong
-----------------------------------------------------------------------

FIFO的时序确实是个问题,如果读指针或写指针没有正确复位,出来的图像可能畸变或偏蓝或偏绿。另外就是像素时钟线一定要稳定,如果用飞线的话可能引入干扰,导致图像出现大片的噪声。

出0入0汤圆

发表于 2010-11-8 23:15:04 | 显示全部楼层
回复【9楼】zidong404
-----------------------------------------------------------------------
大哥 你就加我一下qq吧 我都快检查一个月了 想死的心都有了 谢谢你啊

出0入0汤圆

发表于 2010-11-8 23:16:53 | 显示全部楼层
真的是没有办法啦 请直接一下吧
加我qq吧谢谢啊534301306

出0入0汤圆

 楼主| 发表于 2010-11-8 23:19:31 | 显示全部楼层
回复【12楼】huaixiaohai
-----------------------------------------------------------------------

请参考我三楼的经验,实在不行,我们明天再交流可否?

出0入0汤圆

发表于 2010-11-8 23:20:59 | 显示全部楼层
回复【13楼】zidong404
-----------------------------------------------------------------------

你先加我为qq好友 行吗 十分感谢啊

出0入0汤圆

发表于 2010-11-8 23:29:31 | 显示全部楼层
回复【13楼】zidong404
-----------------------------------------------------------------------

还在吗 实在是找不到原因了 要不不会这么着急啊 麻烦了
在线等你啊

出0入0汤圆

发表于 2010-11-8 23:58:05 | 显示全部楼层
有问题可以直接放上来大家一起讨论,互利啊~

出0入0汤圆

发表于 2010-11-8 23:59:52 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-9 00:49:44 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-9 00:50:09 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-11-9 11:09:13 | 显示全部楼层
今天上午网站一直进不了,不知道怎么回事

出0入0汤圆

 楼主| 发表于 2010-11-9 11:11:12 | 显示全部楼层
回复【12楼】huaixiaohai
-----------------------------------------------------------------------

已经加了QQ

出0入0汤圆

发表于 2010-11-9 11:17:49 | 显示全部楼层
不错

出0入0汤圆

发表于 2010-11-9 11:22:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-9 11:24:40 | 显示全部楼层
期待 STM32。。。。

出0入0汤圆

发表于 2010-11-9 11:24:44 | 显示全部楼层

出0入0汤圆

发表于 2010-11-9 11:32:52 | 显示全部楼层
cool~~

出0入0汤圆

 楼主| 发表于 2010-11-9 11:43:09 | 显示全部楼层
回复【24楼】_yuming
-----------------------------------------------------------------------

STM32的整理好后就上

出0入0汤圆

发表于 2010-11-9 11:47:10 | 显示全部楼层
相当酷.

出0入0汤圆

发表于 2010-11-9 12:00:56 | 显示全部楼层
酷比了

出0入0汤圆

发表于 2010-11-9 12:09:43 | 显示全部楼层
恭喜下LZ

出0入0汤圆

 楼主| 发表于 2010-11-9 13:22:40 | 显示全部楼层
这是STM32下的代码,MDK4.12编译,如果是MDK3.x的可能打不开,不够使用列表的几个文件就可以了,LCD驱动支持ILI9325,9320等多种控制器。工程模板直接使用坛子里的,下面是文件列表:

工程文件列表 (原文件名:文件列表.jpg)
代码:
STM32下的代码,MDK4.12ourdev_596436A6QMT6.rar(文件大小:1.82M) (原文件名:STM32_LCD_OV7670.rar)

出0入0汤圆

发表于 2010-11-9 22:47:48 | 显示全部楼层
马克

出0入0汤圆

发表于 2010-11-10 08:20:48 | 显示全部楼层
楼主是个好人

出0入0汤圆

发表于 2010-11-10 14:34:20 | 显示全部楼层

这是第一次采集 (原文件名:1.jpg)


这是第二次采集 (原文件名:3.jpg)


这是第三次采集 (原文件名:4.jpg)
以上都是静态的采集一幅图片 那为大哥能告诉我是什么原因

出0入0汤圆

 楼主| 发表于 2010-11-10 16:11:50 | 显示全部楼层
回复【34楼】huaixiaohai
-----------------------------------------------------------------------

    图像中的噪点应该是像素时钟不稳引起的,在飞线搭的硬件平台上很有可能出现,另外图像第二张和第三张图片中出现了一定的扭曲,记得我以前也遇到过,如果多采集几张又会出现一张正常的图像。建议再看下AL422的读写指针复位。

出0入0汤圆

发表于 2010-11-10 18:47:17 | 显示全部楼层
回复【35楼】zidong404
-----------------------------------------------------------------------

搞了一个下午 还是不行啊

出0入0汤圆

发表于 2010-11-10 18:51:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-12 21:11:10 | 显示全部楼层
特别感谢楼主啊 十分感谢啊 你是个好人啊

出0入0汤圆

发表于 2010-11-13 05:46:03 | 显示全部楼层
学习中,非常感谢

出0入0汤圆

发表于 2010-11-13 10:07:09 | 显示全部楼层
好帖要顶!

出0入0汤圆

发表于 2010-11-13 17:29:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-13 21:20:24 | 显示全部楼层
请教 楼主 DVDD 为什么可以直接接电容呀,我看到DATASHEET上这个是需要1.8V电压的,另外wangguanfu的OV7725也是接了LDO的?

出0入0汤圆

发表于 2010-11-13 21:31:58 | 显示全部楼层
OV7670和OV7725可不需要外部1.8V的LDO,我的OV7725带LDO的是早期的模块,现在的一律不外带LDO,但DVDD 脚必须要接退藕电容!
PS:OV7670和OV7725自带1.8V LDO,通过SCCB总线开启内部LDO就好(上电复位后默认内部LDO开启的)!

出0入0汤圆

发表于 2010-11-13 21:33:11 | 显示全部楼层
34楼的图片问题是AL422B的读或写地址指针没有正常复位

出0入0汤圆

发表于 2010-11-13 21:35:45 | 显示全部楼层
mark!~

出0入0汤圆

 楼主| 发表于 2010-11-16 14:09:20 | 显示全部楼层
这几天不在,多谢wangguanfu帮助解答了。

出0入0汤圆

发表于 2010-11-16 14:38:10 | 显示全部楼层
很不错。

出0入0汤圆

发表于 2010-11-16 14:48:52 | 显示全部楼层
楼主是个好人!!

出0入0汤圆

发表于 2010-11-16 15:24:12 | 显示全部楼层
mark.............

出0入0汤圆

发表于 2010-11-18 20:51:42 | 显示全部楼层
回复【楼主位】zidong404
-----------------------------------------------------------------------

楼主 你做的OV7670模组+Al422B 买吗?

出0入0汤圆

发表于 2010-11-18 22:33:23 | 显示全部楼层
mark 一下

出0入0汤圆

 楼主| 发表于 2010-11-19 18:38:21 | 显示全部楼层
回复【50楼】weiwei_614
楼主 你做的OV7670模组+Al422B 买吗?
-----------------------------------------------------------------------
你需要的话可以联系我,旺旺号是:zidong404。

出0入0汤圆

发表于 2010-11-19 23:52:56 | 显示全部楼层
楼主,我看了7670手册,AVDD、DOVDD的电压最大3.0V,但是看了你的原理图,用的是3.3V
确定能用么,会烧7670么?

出0入0汤圆

 楼主| 发表于 2010-11-20 11:06:33 | 显示全部楼层
回复【53楼】chenyixing
楼主,我看了7670手册,avdd、dovdd的电压最大3.0v,但是看了你的原理图,用的是3.3v
确定能用么,会烧7670么?
-----------------------------------------------------------------------

不会,你看错了吧,最大电压限制是4.5V
请看下图:

(原文件名:1.jpg)

模拟电源和IO电源都是4.5V,只有内核电源是3.0V,内核电压是由内部稳压提供的1.8V。

出0入0汤圆

发表于 2010-11-20 12:42:26 | 显示全部楼层
回复【54楼】zidong404
回复【53楼】chenyixing  
楼主,我看了7670手册,avdd、dovdd的电压最大3.0v,但是看了你的原理图,用的是3.3v  
确定能用么,会烧7670么?
-----------------------------------------------------------------------
不会,你看错了吧,最大电压限制是4.5v
请看下图:


(原文件名:1.jpg)
引用图片
模拟电源和io电源都是4.5......
-----------------------------------------------------------------------

你的理解是错误的!,这个是极限参数,只适合做实验
若使用内部LDO,dovdd的电压最大3.0v,最小2.5V(当然 3.3V也能工作,不会坏,只适合做实验,)
3.3V电压,图象的噪音将明显增加(光线不足的时候更糟糕)

出0入0汤圆

发表于 2010-11-20 12:53:37 | 显示全部楼层
3.0的LDO也很好找呀

出0入0汤圆

发表于 2010-11-20 12:55:42 | 显示全部楼层
请教AL422B问题,AL422B有3Mbit的存储空间,若是按YCbCr4:2:2存的话就是一个像素占用两个字节,那640*480的彩色图片不是没法存了?
(原文件名:14144.jpg)
你们是怎么处理这问题的?

出0入0汤圆

发表于 2010-11-20 13:13:13 | 显示全部楼层
zidong404 楼主帮下忙啊

出0入0汤圆

发表于 2010-11-20 13:13:32 | 显示全部楼层
顶顶顶

出0入0汤圆

发表于 2010-11-20 13:33:54 | 显示全部楼层
用RAW RGB 一帧 384KB

出0入0汤圆

 楼主| 发表于 2010-11-20 14:12:05 | 显示全部楼层
回复【57楼】dml1101 丁丁
请教al422b问题,al422b有3mbit的存储空间,若是按ycbcr4:2:2存的话就是一个像素占用两个字节,那640*480的彩色图片不是没法存了?

(原文件名:14144.jpg)
引用图片
你们是怎么处理这问题的?

-----------------------------------------------------------------------
要存放640*480的图像,要么只只用灰度Y部分,要么就要换FIFO或者用两片FIFO串联使用。
640*480 的RGB RAW数据也要640*480*2= 600K

同时,如果你的处理器从fifo取数据足够快的话是不用将一帧图像全部缓存的,可以边存边边取呀。像TI的专用视频处理器DM643也只有几K的片内FIFO,同样能完成采集。

出0入0汤圆

 楼主| 发表于 2010-11-20 14:15:56 | 显示全部楼层
回复【55楼】wangguanfu
你的理解是错误的!,这个是极限参数,只适合做实验
若使用内部LDO,dovdd的电压最大3.0v,最小2.5V(当然 3.3V也能工作,不会坏,只适合做实验,)
3.3V电压,图象的噪音将明显增加(光线不足的时候更糟糕)
-----------------------------------------------------------------------

我当然知道是极限容忍电压,这些CMOS的数字摄像头不是只能用在实验上采集显示玩玩而已么?要不就是放在手机上增加一个鸡肋的照相功能。真正的图像处理是用CCD加解码芯片做的。

出0入0汤圆

发表于 2010-11-20 16:52:45 | 显示全部楼层
回复【62楼】zidong404
回复【55楼】wangguanfu  
你的理解是错误的!,这个是极限参数,只适合做实验  
若使用内部ldo,dovdd的电压最大3.0v,最小2.5v(当然 3.3v也能工作,不会坏,只适合做实验,)  
3.3v电压,图象的噪音将明显增加(光线不足的时候更糟糕)
-----------------------------------------------------------------------
我当然知道是极限容忍电压,这些cmos的数字摄像头不是只能用在实验上采集显示玩玩而已么?要不就是放在手机上增加一个鸡肋的照相功能。真正的图像处理是用ccd加解码芯片做的。
-----------------------------------------------------------------------

OK,当我没说

出0入0汤圆

发表于 2010-11-20 17:10:06 | 显示全部楼层
640*480 的RGB RAW数据=640*480,也就是384KB足够放一帧
lz错误的

出0入0汤圆

发表于 2010-11-20 17:13:17 | 显示全部楼层
强啊,mark

出0入0汤圆

发表于 2010-11-20 17:36:20 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-11-20 18:52:04 | 显示全部楼层
回复【63楼】wangguanfu
OK,当我没说
-----------------------------------------------------------------------
呵呵,只是讨论下wangguanfu 大侠不要当真了,我也是一家之言。

出0入0汤圆

 楼主| 发表于 2010-11-20 19:01:06 | 显示全部楼层
回复【64楼】wangdong
640*480 的rgb raw数据=640*480,也就是384kb足够放一帧
lz错误的
-----------------------------------------------------------------------

恩,确实是我搞错了,640*480的RGB RAW占640*480个字节。

出0入0汤圆

发表于 2010-11-20 23:27:15 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-11-21 16:56:08 | 显示全部楼层
回复【61楼】zidong404
-----------------------------------------------------------------------
要存放640*480的图像,要么只只用灰度Y部分,要么就要换FIFO或者用两片FIFO串联使用。
640*480 的RGB RAW数据也要640*480*2= 600K

同时,如果你的处理器从fifo取数据足够快的话是不用将一帧图像全部缓存的,可以边存边边取呀。像TI的专用视频处理器DM643也只有几K的片内FIFO,同样能完成采集。

谢谢楼主,回答的很好,解除了我的疑问!

出0入0汤圆

发表于 2010-11-22 15:30:27 | 显示全部楼层
楼主还在吗?问你个问题啊

出0入0汤圆

发表于 2010-11-22 16:31:07 | 显示全部楼层
楼主请问你的一帧图像数据是通过串口传输到上位机的吗

是不是当从图像传感器采集完一帧数据的时候,然后从FIFO输出端输出数据到STM32的GPIO口,通过读这个GPIO的数据输入寄存器里的数据,将读出的一个字节,就通过串口上位机呢?

可是我遇到了一个问题啊,原来程序里设置的是LCD中显示的连续的图像,如果我们要只发送一帧的数据到上位机,就要在图像传感器采集完一帧数据的时候停止工作,不再采集,然后从FIFO中读数据,你是怎么停止它工作的

我原来想的是停止FIFO的写入,但是这个时候呢,从FIFO中读数据给串口的时候,总是只发送251个字节,从来不能完成一帧数据的发送

后来我在发送数据前面加了个语句,让图像传感器的XCLK关闭,这个时候可以正确发送字节个数了,但是加上这句话LCD却不显示图像了,这是为什么呢?请教啊

出0入0汤圆

 楼主| 发表于 2010-11-23 11:34:49 | 显示全部楼层
回复【72楼】wfits521
楼主请问你的一帧图像数据是通过串口传输到上位机的吗
是不是当从图像传感器采集完一帧数据的时候,然后从fifo输出端输出数据到stm32的gpio口,通过读这个gpio的数据输入寄存器里的数据,将读出的一个字节,就通过串口上位机呢?
可是我遇到了一个问题啊,原来程序里设置的是lcd中显示的连续的图像,如果我们要只发送一帧的数据到上位机,就要在图像传感器采集完一帧数据的时候停止工作,不再采集,然后从fifo中读数据,你是怎么停止它工作的
我原来想的是停止fifo的写入,但是这个时候呢,从fifo中读数据给串口的时候,总是只发送251个字节,从来不能完成一帧数据的发送
后来我在发送数据前面加了个语句,让图像传感器的xclk关闭,这个时候可以正确发送字节个数了,但是加上这句话lcd却不显示图像了,这是为什么呢?请教啊
-----------------------------------------------------------------------
首先,发到串口显示和用LCD显示是一个道理,都是从FIFO读出数据,只是发到串口太慢,所以我用的是LCD显示;
只读一帧数据的话确实是停止FIFO的写入,但是不能关闭写入的时钟,而是关闭写时能WEN控制信号,因为FIFO内部是用SDRM做的双口RAM,SDRAM需要一个刷新时钟,这个时钟来源是读或写FIFO时钟之中较高的一个,典型值为1MHZ以上,具体请参考AL422B datasheet。所以你关闭xclk的方法是不对的,应该关闭的是FIFO的WEN写使能。在关闭了WEN后,就可以慢慢从FIFO读出数据,而不用担心数据被下一帧“冲刷”掉。记住,FIFO要正常工作一定要提供一个1M以上的连续时钟信号,xclk不能关闭。

出0入0汤圆

发表于 2010-11-23 16:12:24 | 显示全部楼层
奥,谢谢楼主,我这个问题上午解决了哈哈,但是一直不明白为什么现在晓得了非常感谢啊

我原来一直以为XCLK只是负责提供图像传感器的时钟,以为关掉后不会对FIFO有影响,结果当时关掉了,竟然LCD屏显示绿色,也就是没读进数据去,后来我试着,加了个变量循环了几次以后在关掉就不影响了呵呵

对啦,再问你个问题啊,你是怎么把数据传到上位机的,是在LCD中显示以后,然后从LCD中读取的吗

我想直接从FIFO中读取,发到串口,这样读GPIO寄存器的数据输入寄存器就可以了吗?从这里读出的数据还需要转换吗?

楼主可以加俺QQ不?251478105

非常感谢啦

出0入0汤圆

发表于 2010-11-23 16:18:48 | 显示全部楼层
还有啊,我在从串口发送数据的时候,我试了下如果不关闭XCLK,每次都只发送251个字节,不能完全发送一帧图像的数据,只有关掉后才能发送一帧的数据,这个不晓得什么原因,但是关掉以后吧,发送的数据感觉也不大正常,现在是LCD显示正常了,串口发送有问题

出0入0汤圆

 楼主| 发表于 2010-11-23 17:16:44 | 显示全部楼层
回复【75楼】wfits521
还有啊,我在从串口发送数据的时候,我试了下如果不关闭xclk,每次都只发送251个字节,不能完全发送一帧图像的数据,只有关掉后才能发送一帧的数据,这个不晓得什么原因,但是关掉以后吧,发送的数据感觉也不大正常,现在是lcd显示正常了,串口发送有问题
-----------------------------------------------------------------------

    不关闭xclk,存在fifo的数据就会被下一帧数据覆盖掉,关闭xclk,FIFO的写时钟就没有了,虽然数据不会被覆盖,但是FIFO内部是SDRAM,没有时钟刷新,数据也不能保存。如果从FIFO读出数据放到LCD显示,读的速度较快,可以维持FIFO内部SDRAM的工作,但是读出数据后用串口发送,因为串口很慢,导致读的速度跟不上,FIFO 内部SDRAM不能正常工作,所以会出错。
    要解决这个矛盾也很容易,就是保证xclk一直都能输入到FIFO的写时钟,而用单片机来控制FIFO的写势能,这时硬件要增加一个与非门,具体可以参考我的电路图。这样的话,FIFO存满一帧图像后可以快读也可以慢读,同过串口发送当然不成问题了。

出0入0汤圆

发表于 2010-11-23 20:21:00 | 显示全部楼层
标一哈。
头像被屏蔽

出0入0汤圆

发表于 2010-11-23 20:59:06 | 显示全部楼层
踩一下

出0入0汤圆

发表于 2010-12-3 13:30:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-4 17:13:23 | 显示全部楼层
谢谢分享!
头像被屏蔽

出0入0汤圆

发表于 2010-12-4 21:18:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-8 17:05:08 | 显示全部楼层
要是能完成jpg 图像压缩保存到sd卡这样这个东西就能成产品了

出0入0汤圆

发表于 2010-12-8 17:05:39 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-12-8 19:11:32 | 显示全部楼层
回复【82楼】yxyfish
要是能完成jpg 图像压缩保存到sd卡这样这个东西就能成产品了
-----------------------------------------------------------------------

jpg压缩对STM32来说似乎有点吃紧,保存为BMP到是比较现实。

出0入0汤圆

发表于 2010-12-9 10:09:32 | 显示全部楼层
回复【82楼】yxyfish
要是能完成jpg 图像压缩保存到sd卡这样这个东西就能成产品了
-----------------------------------------------------------------------

换带的JPEG传感器模块就OK了,如OV2640或MT9D111 (小声的说 本人很多)

出0入0汤圆

发表于 2010-12-9 12:59:07 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-1-3 12:59:07 | 显示全部楼层
MARK........

出0入0汤圆

发表于 2011-1-3 19:10:20 | 显示全部楼层
GOOD

出0入0汤圆

发表于 2011-1-3 21:24:20 | 显示全部楼层
jh

出0入0汤圆

发表于 2011-1-4 14:58:45 | 显示全部楼层
好贴,学习了。

出0入0汤圆

发表于 2011-1-5 15:58:50 | 显示全部楼层
模块有卖的吗?

出0入0汤圆

发表于 2011-1-5 17:03:03 | 显示全部楼层
记号~~

出0入0汤圆

 楼主| 发表于 2011-1-5 20:13:52 | 显示全部楼层
回复【91楼】hemin
模块有卖的吗?
----------------------------------------------------------------------
有的,请看:http://shop63905457.taobao.com/

出0入0汤圆

发表于 2011-1-25 14:14:46 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-25 15:56:15 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2011-1-25 16:12:09 | 显示全部楼层
楼主移植到几百兆hz的fpga上是否可以高清了呢?fpga+stm32

出0入0汤圆

发表于 2011-1-25 16:16:26 | 显示全部楼层
楼主移植到几百兆hz的fpga上是否可以高清了呢?fpga+stm32

出0入0汤圆

 楼主| 发表于 2011-1-25 19:13:16 | 显示全部楼层
FPGA挂一个SDRAM,接上200W的摄像头应该是可以的,光是采集并显示的话应该能做视频流畅播放。

出0入0汤圆

发表于 2011-1-29 10:55:05 | 显示全部楼层
好资料,对我帮助很大,谢谢啦
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2022-8-7 23:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表