ggttkl 发表于 2016-3-29 13:18:29

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

单片机是msp430f5529,摄像头是带fifo模块的0v7670,方法是采一帧图像读一帧图像的方式,显示的是用TFT液晶,320*240的。但是最后显示的画面总是出现移屏或者花屏现象。我也怀疑过是不是读写地址复位那部分出问题了,但是自己能力有限不知道怎么解决。望做过的同学看看是怎么回事,也欢迎对这方面有了解的大神们提出意见或者给个初始化程序。
整个采集显示问题基本解决了,有时候是可以做到正常显示。还出现过一个问题,有时也好过,但是我在读数据后加了个数据处理再显示,然后又出现移屏问题了。
while(1)
{
         if(fifo_ready == 1)
      {   
            unsigned long FIFO_DATA,temp;
            fifo_ready = 0;   
            fifo_rrst();
            FIFO_OE_L;
            for(i = 0;i < 240;i ++)   //共采集320*240个点
            {
                for(j = 0;j < 320;j ++) ////这里需要改,数据读取时入口问题
                {
                  FIFO_RCLK_L;      //拉低PCLK,并行读取先读高八位再读低八位。
                  FIFO_RCLK_H;
                  FIFO_DATA = READ_DATA();   
                  FIFO_DATA <<= 8;
                  FIFO_RCLK_L;
                  FIFO_RCLK_H;
                  temp =READ_DATA();
                  FIFO_DATA |= temp;
             //       Image_Deal();
                  if(FIFO_DATA > 0xe000)
                     FIFO_DATA = 0;
               //   if(FIFO_DATA > 0x0008 && FIFO_DATA < 0x001f)      //blue
                //      FIFO_DATA = 0;
                  if(FIFO_DATA > 0x0040 && FIFO_DATA < 0x07e0)      //green
                      FIFO_DATA = 0;
               ili9341_set_drawpoint(j,i,FIFO_DATA);
               
                }
            }
    //      FIFO_OE_H;
            VSYNCCnt = 0;         //开始下一帧数据采集      
            sei();
               
            P1OUT ^= BIT0;
      }
}
图像不知道怎么上传不了,,,简单描述一下。屏幕显示正常,但是左右移位,有时上下移位。相当于把左边的切下来放在了右边。花屏就是整体颜色扭曲了,仔细看也能发现真实图像的轮廓。我也怀疑过是fifo读写地址归零的程序错了,但是不知道怎么改
void fifo_wrst()
{
FIFO_WEN_L;   //这里可能需要将延时加长一点
   _NOP();
_NOP();

FIFO_WRST_L;
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();

FIFO_WRST_H;
}
void fifo_rrst()
{
uchar i;
FIFO_OE_L;
FIFO_RRST_L;
for(i = 0;i < 6;i ++)
{
      FIFO_RCLK_L;
      _NOP();
      FIFO_RCLK_H;
      _NOP();
   }
FIFO_OE_H;
FIFO_RRST_H;
}

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



ggttkl 发表于 2016-3-30 12:06:46

有同样遇到这样的问题的么-.-|||,自顶+1

ggttkl 发表于 2016-4-8 17:17:28

终于上传图片成功了。这两张主要就是移屏问题。又是也会出现左右移屏。有同样出现过问题的么?求解答

ywlzh 发表于 2016-4-13 18:27:46

本帖最后由 ywlzh 于 2016-4-13 18:30 编辑

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

            LCD_Scan_Dir(U2D_L2R);                //从上到下,从左到右
                LCD_SetCursor(0x00,0x0000);        //设置光标位置
                LCD_WriteRAM_Prepare();   //开始写入GRAM       
                OV7670_RRST=0;                                //开始复位读指针
                OV7670_RCK=0;
                OV7670_RCK=1;
                OV7670_RCK=0;
                OV7670_RRST=1;                                //复位读指针结束
                OV7670_RCK=1;
                for(j=0;j<76800;j++)                        //对摄像头的数据开始处理
                {
                        OV7670_RCK=0;
                        color=GPIOF->IDR&0XFF;          //读数据
                        OV7670_RCK=1;
                        color<<=8;
                        OV7670_RCK=0;
                        color|=GPIOF->IDR&0XFF;           //读数据
                        OV7670_RCK=1;
                        LCD->LCD_RAM=color;            //读出来的数据直接给LCD
                }                                          
页: [1]
查看完整版本: ov7670(带fifo模块)出现花屏移屏问题求助