视频采集显示总结

  从开学开始写程序,写了大约三个周,程序写的差不多了,然后又调试了一个周,今天可以将ov7670采集的数据显示在显示屏上面了,在调试的过程

遇到了很多bug,简单的几分钟能解决,麻烦的可以调试上一天,而且quartus编译速度又慢,调试一次就得几分钟,等的过程也是比较煎熬的。趁现在刚调试

过了没多久,记录一下之前遇见的bug以及解决过程。

  1. 第一个遇到的问题是速度匹配的问题,这个问题想了好久,也貌似搞了两天才解决的,描述一下遇到的问题,首先整个系统可以分为 ov7670 -- fifo -- sdram -- fifo -- vga , 因为VGA刷新到有效区域的时候,第二个FIFO里面必须有数,要不然fifo就会被读空 ,所以sdram给出的数据的速度必须大于vga的刷新的速度,刚开始用的是sdram是50M,速度根本跟不上VGA的速度,fifo很快就被读空,然后我就把sdram提高到100M,还是不行,但是我之前看得网上得人大部分都是用100M写得,我知道这是我代码得问题,可能是我之间得延时时间太长了吧,所以我把时间能精简得精简了一些,把vga速度从50M降到40M,vga速度是可以匹配了,如果把ov7670给加上之后,sdram读写速度又跟不上了,因为ov7670出来得每一帧数据都需要显示,不能调,除非整帧舍弃,我又把vga速度尝试降到35M,但是显示屏不支持,这时候我思考怎么把sdram得速度提上去,要不要提高到150M,在我考虑得时候,突然想到了另一个点子,之前sdram写核读数据都是4个一组得读写,看了一下sdram数据手册,有页突发得,4个一组得和8个一组,于是我改成8个一组,改成每组数据8个之后,速度终于可以匹配上了。
  2. 第二个遇到的问题是显示区域大小,我看OV7670的官方手册上说,每一个HREF对应640tps,我以为是640组数据,每组数据是8bit,因为每一个像素是由是由两组数据组合而成好的,,我以为宽只有320个大小,实际上我i用sigtab抓的时候并不是这样,他是640个像素呢。
  3. 第三方问题是我刚写完程序得时候,把程序下进去,vga上显示还乱一片,不过也正常,第一遍也不可能就写得没有bug,于是我就先开始验证ov7670有没有写对,ov7670主要分为两个点第一是iic时序,第二就是配置时序,为了验证写得对不对,我就用上探针,先把要读得数据写进去,然后再读出来,看一下寄存器得值有没有被写进去,感觉调试这种事情,严谨一些还是很有好出得,要不到最后数据没出来,你都不知道是哪个地方出了问题,寄存器配置我用的CB写得,因为一共100多个,我就直接用别人配好得了。
  4. 第四个问题是再我想看ov7670得href和vs信号时,发现vs和href信号之间是紧着得,跟时序图不一样,那时我想难道时我寄存器配置得问题吗?考虑了一个下午,没有结果,为哦就在fpga交流群问了一下,也没人回复,然后问了一下fpga好友,他说我得sigtab采样时钟不对,我当时用vga时钟踩得,不是同步得,所以我又把sigtab采样时钟改成pclk,果真好了。
  5. 第五个问题,ov7670有好几种调试模式,其中有显示八条彩条得模式,我再显示屏上显示出来得条纹是斜得,而且很乱,感觉许多颜色交杂在仪器了,因为是斜的,我就思考是不是ov7670的一行数据大于vga显示的一行数据,因为只有这样,在vga上才会出现倾斜的现象,检查了一下,也没毛病,于是我就把,sdram调整成640X480大小,这样sdram的行和列正好对应这ov7670的大小,在调试的时候发现,最后一列数据没有写进去,原来换行的时候,最后一列数据还没开始写,就开始换行了,改了之后图像就变直了。
  6. 当调成正常模式,在vga上可以模糊的显示图像了,但是是动的,这是侯问题定位在ov7670,sdram前fifo,sdram后FIFO,sdarm这四个点,于是我把SDRAM写的数据换成自己预先调号的,这样如果可以的话,证明问题出在前半部分,否则就是后半部分出问题了,结果数据是波动的,这样的话,后半部分肯定有问题,我用sigtab抓了一下数据,发现读出来的数据不对,难道是sdram出问题了吗?我又用之前的测试方法(sdram写进去的数据是列),重新测了一遍之后数据没问题呀,但是如果是行,读出来的数据就不对,一时半会没想到问题出在哪个地方,于是我就把{行,列}一起写进sdram里面,测了一下,发现行还是不对,但是列是对的,这时我怀疑sdram写时序和读时序,其中有一个或者两个都没在规定的时间写进去,改了一下时序,还是不行,然后看了一下别人写的代码,我的少了一个预重电过程,加上之后,图像完美的呈现在vga上。

时间: 2024-10-14 01:06:23

视频采集显示总结的相关文章

基于FPGA的LCD+CMOS视频采集显示使用小结

基于FPGA的LCD+CMOS视频采集显示 液晶显示器采用扫描模式,RGB888 电源采用:+5V供电 usb供电有时候会出现供电不足的问题 显示器接口有两种选择:16bit或24bit  分别对应 24p和40p座子,任选一种即可. 和开发板对应 底板与lcd管脚需要对应分配 接下来就可以测试lcd显示图案 lcd显示 7725图像 因为显示器分辨率和摄像头视频不对应,所以需要简单的缩放处理,即有效像素显示区域 lcd显示mt9v034视频

Window 下 VFW 视频采集与显示

引言 经过几天的努力终于将VFW视频采集与显示功能完整实现了,不得不说网上对这方面完整的详细讲解文章是在太少了.所以就要本人来好好总结一下让后来者不再像我一样折腾好久.在本文中我将详细讲解VFW视频采集过程的实现,以及采集后视频的显示方法. VFW简介 虽然这是篇技术博文,但是我觉得用一个东西,那么关于它的概述还是不能少,所以特从百度上copy了下VFW的概念描述,如果读者不想看可以直接去观看正文部分. VFW(Video for Windows)是Microsoft推出的关于数字视频的一个软件

Windows Media Foundation 音视频采集 小记

写在前面 我是个讲文明的人…… 不过有的时候实在忍不住了也要吐槽几句: 1. 我真是跟不上时代,到现在了还在研究 Windows 应用开发…… 咳: 2. DirectShow 是傻X!我只是想要获取 Camera 裸数据,尼玛却要让我学习神马各种 .ax, filter, graph... 相关资料少.又晦涩: 3. 在此祝愿 Windows XP 及其之前的版本早点退出历史舞台,这样 DirectShow 就不是必须的了! 音视频采集 Windows 7 以后, Media Foundati

QT+OPENCV视频采集

今天终于有了自己的博客了!由于我的时间有限,又初来咋到,只好小试牛刀,写个简单的! Qt学习网站:http://www.yafeilinux.com/ OpenCV中文论坛:http://www.opencv.org.cn/index.PHP/Template:Code 首先介绍下opencv :OpenCV的全称是:Open Source Computer Vision Library.  OpenCV于1999年由Intel建立,现在由Willow Garage提供支持.OpenCV是一个基

FPGA_VIP_V101 摄像头视频采集 调试总结之SDRAM引起的水平条纹噪声问题

此问题困扰我很近,终于在最近的项目调整中总结了规律并解决了. 因为之前对sdram并不熟悉,用得也不是太多,于是从淘宝购买了各自廉价的sdram,其中型号: htt56v6229cot-7 hy57v641620etp-h hy57b561620etp-h hy57v641620ftp-7 hy57v561620ct-6 进行评估,各自玩,在简单的测试例程中并未发现没什么区别(SDRAM串口调试.SDRAM-VGA显示.摄像头视频缓冲) 各种例程玩转,觉得非常high,偶尔有遇到不同例程对sdr

(转)摄像头视频采集压缩及传输

引言:摄像头基本的功能还是视频传输,那么它是依靠怎样的原理来实现的呢?所谓视频传输:    就是将图片一张张传到屏幕,由于传输速度很快,所以可以让大家看到连续动态的画面,就像放电影一样.一般当画面的传输数量达到每秒24帧时,画面就有了连续性.下边我们将介绍摄像头视频采集压缩及传输的整个过程.一.摄像头的工作原理(获取视频数据)摄像头的工作原理大致为:景物通过镜头(LENS)生成的光学图像投射到图像传感器表面上,然后转为电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(

用DirectShow实现视频采集-流程构建

DirectShow作为DirectX的一个子集,它为用户提供了强大.方便的多媒体开接口,并且它拥有直接操作硬件的能力,这使得它的效率远胜于用GDI等图形方式编写的多媒体程序.前面一篇文章已经对DirectShow作了粗略的介绍,阐述了它的原理及一些编程方法.这里结合实践中运用DirectShow实现视频采集(WIN32)来加深对DirectShow的理解和操作能力. 1.系统环境及开发环境 l       系统支持DirectX(Win 2K以上系统) l       VC++  6.0安装有

v4l2视频采集摄像头

v4l2 --是Linux内核中关于视频设备的内核驱动框架,为上层访问底层的视频设备提供了统一的接口./dev/vidioX 1.打开设备文件 fd=open("/dev/video3",O_RDWR); /dev/video3:视频设备文件名 O_RDWR:可读可写 fd: open成功反返回文件描述符 jpeg yuv 2.查询设备支持哪种格式 struct v4l2_fmtdesc fmt; //查询设备格式所用结构体 fmt.type = V4L2_BUF_TYPE_VIDEO

基于VFW视频采集及数据处理

准备工作:建立基于对话框的程序,并添加控件及需要的成员变量: 1.     采用capCreateCaptureWindow函数创建视频采集窗口 m_CapWnd =capCreateCaptureWindow(_T("My Video Capture"), WS_CHILD | WS_VISIBLE,0, 0, LocalRect.Width(),LocalRect.Height(), LocalWnd->GetSafeHwnd(),IDC_VIDEO_LOCAL); // m