野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12170|回复: 12

彩色摄像头OV7725图像采集出错

[复制链接]
发表于 2016-1-25 21:28:53 | 显示全部楼层 |阅读模式
买了野火的OV7725,打算用K60采集一副图像,串口发送给电脑,用matlab打开并显示图像,然后

这算是比较好的图像了,拍摄的是蓝色和黄绿色,还能开清楚一点点东西。大多数图像其实是这样的:

问题有:
OV7725寄存器配置成 80*60 的图像,和视频里的 320*240不一样,我只改了读数据的次数,还有寄存器配置,还要改其他的吗?
我把程序贴上来吧
while(1)
    {
      if(vs_flag==2)
      {
        RRST_L;   //  FIFO prepare
        RCLK_L;
        delay_few();
        RCLK_H;
        RRST_H;
        RCLK_L;      


        ij=0;
        for(ii=0;ii<60;ii++)
        {
          DMA_EN(DMA_CH0);
          for(jj=0;jj<160;jj++)   //  80个点  160个数据 ,PCLK上升沿时FIFO输出数据,DMA是由PCLK的下降沿触发
          {
            RCLK_H;
            RCLK_L;
          }
         //   DMA的目的地址是BUFF,传输次数为160次。
          for(iii=0;iii<160;iii=iii+2)    //   把80个点的RGB数据存放好
          {
              R[ij]=(BUFF[iii] & 248)>>3;              // 先取的是高八位 RGB565  即 BUFF[iii]为高八位
              B[ij]=(BUFF[iii+1]) & 31;                  
              G[ij]=((BUFF[iii] & 7)<<3) | ((BUFF[iii+1] & 224)>>5);
              ij++;
          }

        }

          printf(" \n\n R \n    ");    //   把数据发送出去
          for(iii=0;iii<4800;iii++)
          {
            temm=R[iii];
            printf("  %d  ",temm );
          }
          printf(" \n\n G \n ");
          for(iii=0;iii<4800;iii++)
          {
            temm=G[iii];
            printf("  %d  ",temm );
          }
          printf(" \n\n B \n ");
          for(iii=0;iii<4800;iii++)
          {
            temm=B[iii];
            printf("  %d  ",temm );
          }

        vs_flag=0;            
        printf("   a photo end");
      }
    }
}

/*!
*  @brief      PORTB中断服务函数
*  @since      v5.0
*/
void PORTB_IRQHandler()
{
    uint8  n = 0;    //引脚号
    uint32 flag = PORTB_ISFR;
    PORTB_ISFR  = ~0;                                   //清中断标志位

    n = 18;                                             //场中断
    if(flag & (1 << n))                                 //PTB18触发中断
    {
      if(vs_flag==0)
      {
        WRST_L;
        WE_H;
        vs_flag=1;
        WE_H;
        WRST_H;
      }
      else if(vs_flag==1)
      {
        WE_L;
        vs_flag=2;
      }
        //camera_vsync();

    }

}


大概的采集程序就这些,是逐行采集数据,然后在matlab上打印。然而图像是错误的,应该是数据错乱了,火哥求指点。

回复

使用道具 举报

 楼主| 发表于 2016-1-25 21:59:12 | 显示全部楼层
今晚采集的图像:
15.2.png
15.3.png
15.4.png

我拆过摄像头的镜头,焦距变了。。。。。。。 会是主要原因吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-27 11:29:47 | 显示全部楼层
咋没人呢,唉。。。。。
回复 支持 反对

使用道具 举报

发表于 2016-1-29 16:48:43 | 显示全部楼层
丶丨贝尔 发表于 2016-1-27 11:29
咋没人呢,唉。。。。。

检查数据口接线是否松动,线序是否正确,能到部分图像轮廓应该已经工作了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-31 11:19:18 | 显示全部楼层
cancore 发表于 2016-1-29 16:48
检查数据口接线是否松动,线序是否正确,能到部分图像轮廓应该已经工作了

我换了摄像头的镜头,是个新的,然后拍出来的图像是这样的   
图片贴不了,贴下面吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-31 11:20:41 | 显示全部楼层

颜色有问题,这张还行,其它的就不太好了,有些连轮廓也看不清楚,是线路松动吗?
换了镜头.png
回复 支持 反对

使用道具 举报

发表于 2016-2-4 01:05:43 | 显示全部楼层
数据线传输不稳定,直接将摄像头插到板上就好了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-9 15:13:54 | 显示全部楼层
碧云天书 发表于 2016-2-4 01:05
数据线传输不稳定,直接将摄像头插到板上就好了。

帮忙看看程序的时序是否正确?。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-9 15:14:50 | 显示全部楼层
火哥帮忙看看程序咯,我怀疑是不是读数据的时序有问题,有数据漏读的话就会引起数据错位
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-18 11:44:24 来自手机 | 显示全部楼层
技术人猿还没上班么  我这是移植的,不是用在野火板子上
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-26 22:55:22 | 显示全部楼层
顶  时序对吗
回复 支持 反对

使用道具 举报

发表于 2016-3-6 08:17:55 来自手机 | 显示全部楼层
如果只是颜色错误,应该重点检查数据线连接是否正确,编号有没有搞错
回复 支持 反对

使用道具 举报

发表于 2016-4-18 10:32:56 | 显示全部楼层
请问可以发送一下源码给我吗?我也在做这个,感谢啊!77176732@qq.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-26 01:22 , Processed in 0.052715 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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