搜索
bottom↓
回复: 3

ov7670(带fifo模块)出现花屏移屏问题求助

[复制链接]
(183250872)

出0入0汤圆

发表于 2016-3-29 13:18:29 | 显示全部楼层 |阅读模式
单片机是msp430f5529,摄像头是带fifo模块的0v7670,方法是采一帧图像读一帧图像的方式,显示的是用TFT液晶,320*240的。但是最后显示的画面总是出现移屏或者花屏现象。我也怀疑过是不是读写地址复位那部分出问题了,但是自己能力有限不知道怎么解决。望做过的同学看看是怎么回事,也欢迎对这方面有了解的大神们提出意见或者给个初始化程序。
整个采集显示问题基本解决了,有时候是可以做到正常显示。还出现过一个问题,有时也好过,但是我在读数据后加了个数据处理再显示,然后又出现移屏问题了。
  1. while(1)
  2.   {
  3.          if(fifo_ready == 1)
  4.         {     
  5.             unsigned long FIFO_DATA,temp;
  6.             fifo_ready = 0;   
  7.             fifo_rrst();
  8.             FIFO_OE_L;
  9.             for(i = 0;i < 240;i ++)     //共采集320*240个点
  10.             {
  11.                 for(j = 0;j < 320;j ++) ////这里需要改,数据读取时入口问题
  12.                 {
  13.                     FIFO_RCLK_L;        //拉低PCLK,并行读取先读高八位再读低八位。
  14.                     FIFO_RCLK_H;
  15.                     FIFO_DATA = READ_DATA();   
  16.                     FIFO_DATA <<= 8;
  17.                     FIFO_RCLK_L;
  18.                     FIFO_RCLK_H;
  19.                     temp =  READ_DATA();
  20.                     FIFO_DATA |= temp;  
  21.              //       Image_Deal();
  22.                     if(FIFO_DATA > 0xe000)
  23.                        FIFO_DATA = 0;
  24.                //     if(FIFO_DATA > 0x0008 && FIFO_DATA < 0x001f)        //blue
  25.                 //      FIFO_DATA = 0;
  26.                     if(FIFO_DATA > 0x0040 && FIFO_DATA < 0x07e0)        //green
  27.                       FIFO_DATA = 0;
  28.                  ili9341_set_drawpoint(j,i,FIFO_DATA);
  29.                  
  30.                 }
  31.             }
  32.     //        FIFO_OE_H;
  33.             VSYNCCnt = 0;           //开始下一帧数据采集        
  34.             sei();
  35.                
  36.             P1OUT ^= BIT0;
  37.         }
  38.   }
复制代码

图像不知道怎么上传不了,,,简单描述一下。屏幕显示正常,但是左右移位,有时上下移位。相当于把左边的切下来放在了右边。花屏就是整体颜色扭曲了,仔细看也能发现真实图像的轮廓。我也怀疑过是fifo读写地址归零的程序错了,但是不知道怎么改
  1. void fifo_wrst()
  2. {
  3.   FIFO_WEN_L;   //这里可能需要将延时加长一点
  4.    _NOP();
  5.   _NOP();

  6.   FIFO_WRST_L;
  7.   _NOP();
  8.   _NOP();
  9.   _NOP();
  10.   _NOP();
  11.   _NOP();
  12.   _NOP();

  13.   FIFO_WRST_H;
  14. }
  15. void fifo_rrst()
  16. {
  17.   uchar i;
  18.   FIFO_OE_L;
  19.   FIFO_RRST_L;
  20.   for(i = 0;i < 6;i ++)
  21.   {
  22.       FIFO_RCLK_L;
  23.       _NOP();
  24.       FIFO_RCLK_H;
  25.       _NOP();
  26.    }
  27.   FIFO_OE_H;
  28.   FIFO_RRST_H;
  29. }
复制代码

还有这个地方没怎么看懂,总感觉关闭打开电平错了
  1. #pragma vector = PORT2_VECTOR
  2. __interrupt void PORT_2(void)
  3. {
  4.     P2IFG &= ~BIT2;
  5.     if(VSYNCCnt == 0)
  6.     {
  7.         fifo_wrst();
  8.         FIFO_WEN_H;        //场同步有效后打开FIFO写使能  
  9.         FIFO_OE_H;
  10.     }
  11.     VSYNCCnt++;
  12.      if(VSYNCCnt >= 3)
  13.      {
  14.         FIFO_WEN_L;        //关闭FIFO写使能
  15.         fifo_ready = 1;
  16.         cli();
  17.      }
  18. }
复制代码
(3) 写操作:
当/WE为低电平时,在WCK信号的上升沿,数据通过DI7—DI0写入到写寄存器,参照WCK的输入周期,写入的数据须满足建立时间和保持时间的要求。当/WE为高电平时,写操作被禁止,写地址指针停在当前位置上;当/WE再次变为低电平时,写地址指针从当前位置开始。
总感觉上面这两个有点问题,还有就是我觉得应该是   VSYNCCnt >= 2 ,但是如果我改成 2 的话,图像显示就出现问题,显示着显示着就不显示了。有知道fifo模块详细运作方式的麻烦告诉一下~因为我对于移屏现象总解释不通,理论上就不应该啊,除非摄像头在采集时的图像就已经移屏了。欢迎同样在研究这方面的大神提出点建议,探讨探讨。



(183168775)

出0入0汤圆

 楼主| 发表于 2016-3-30 12:06:46 | 显示全部楼层
有同样遇到这样的问题的么-.-|||,自顶+1
(182372533)

出0入0汤圆

 楼主| 发表于 2016-4-8 17:17:28 | 显示全部楼层
终于上传图片成功了。这两张主要就是移屏问题。又是也会出现左右移屏。有同样出现过问题的么?求解答

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(181936315)

出0入0汤圆

发表于 2016-4-13 18:27:46 | 显示全部楼层
本帖最后由 ywlzh 于 2016-4-13 18:30 编辑

曾经做过OV7670颜色跟踪的实验     
没有出现过楼主这样的情况

         
  1.      LCD_Scan_Dir(U2D_L2R);                //从上到下,从左到右
  2.                 LCD_SetCursor(0x00,0x0000);        //设置光标位置
  3.                 LCD_WriteRAM_Prepare();     //开始写入GRAM       
  4.                 OV7670_RRST=0;                                //开始复位读指针
  5.                 OV7670_RCK=0;
  6.                 OV7670_RCK=1;
  7.                 OV7670_RCK=0;
  8.                 OV7670_RRST=1;                                //复位读指针结束
  9.                 OV7670_RCK=1;  
  10.                 for(j=0;j<76800;j++)                        //对摄像头的数据开始处理
  11.                 {
  12.                         OV7670_RCK=0;
  13.                         color=GPIOF->IDR&0XFF;            //读数据
  14.                         OV7670_RCK=1;
  15.                         color<<=8;  
  16.                         OV7670_RCK=0;
  17.                         color|=GPIOF->IDR&0XFF;           //读数据
  18.                         OV7670_RCK=1;
  19.                         LCD->LCD_RAM=color;            //读出来的数据直接给LCD
  20.                 }                                          
复制代码
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2022-1-18 12:19

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

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