搜索
bottom↓
回复: 15

OV7670出现的奇怪问题(SCCB寄存器读取隔一个错一个)

[复制链接]

出0入0汤圆

发表于 2011-3-15 03:20:56 | 显示全部楼层 |阅读模式
本来写进去的寄存器和值分别如下:
{0x3a, 0x04},
        {0x40, 0xd0},
        {0x12, 0x14},
        {0x32, 0x80},
        {0x17, 0x16},
        {0x18, 0x04},
        {0x19, 0x02},
        {0x1a, 0x7b},//0x7a,
        {0x03, 0x06},//0x0a,
        {0x0c, 0x00},
。。。。。。


执行初始化程序,将值写进寄存器:
        for(i=0;i<CHANGE_REG_NUM;i++)
        {
                if( 0 == wrOV7670Reg (change_reg[0],change_reg[1])   )
                {
                        return 0;
                }
        }

尝试着回读:
        for(i=0;i<10;i++)
        {
            temp=0;
                //Delay_nMS(10);
                if( 0 == rdOV7670Reg (change_reg[0],&temp)   )
                {
                        //return 0;
                }
                  tmp_reg=temp;
        }

下面是寄存器读回的数据:刚好是隔一个对一个(出现00读取失败的时候均发生在是在if(0==SCCBwriteByte(0x42))


查看读会的寄存器值 (原文件名:未命名.jpg)


////////////////////////////
//功能:读OV7660寄存器
//返回:1-成功        0-失败
uchar rdOV7670Reg(uchar regID, uchar *regDat)
{
        int i;
        //通过写操作设置寄存器地址
        startSCCB();
        for (i = DEL_OV7670; i > 0; i--);
        if(0==SCCBwriteByte(0x42))
        {
                stopSCCB();
                return(0);
        }
        for (i = DEL_OV7670; i > 0; i--);
          if(0==SCCBwriteByte(regID))
        {
                stopSCCB();
                return(0);
        }
        stopSCCB();
       
        for (i = DEL_OV7670; i > 0; i--);
       
        //设置寄存器地址后,才是读
        startSCCB();
        if(0==SCCBwriteByte(0x43))
        {
                stopSCCB();
                return(0);
        }
        for (i = DEL_OV7670; i > 0; i--);
          *regDat=SCCBreadByte();
          noAck();
          stopSCCB();
          return(1);
}


这究竟是怎么会事,调试7660两个晚上了,还没出来,郁闷!!!

出0入0汤圆

发表于 2011-3-15 09:20:24 | 显示全部楼层
读函数有问题,少了端口设置

出0入0汤圆

发表于 2011-3-15 09:21:14 | 显示全部楼层
/*
-----------------------------------------------
   功能: 写入一个字节的数据到SCCB
   参数: 写入数据
返回值: 发送成功返回1,发送失败返回0
-----------------------------------------------
*/
unsigned char SCCBwriteByte(unsigned char m_data)
{
        unsigned char j,tem;

        for(j=0;j<8;j++) //循环8次发送数据
        {
                if((m_data<<j)&0x80)
                {
                        SCCB_SID_H();       
                }
                else
                {
                        SCCB_SID_L();       
                }
                delay_us(500);
                SCCB_SIC_H();       
                delay_us(500);
                SCCB_SIC_L();       
                delay_us(500);

        }
        delay_us(100);
        SCCB_SID_IN;/*设置SDA为输入*/
        delay_us(500);
        SCCB_SIC_H();       
        delay_us(100);
        if(SCCB_SID_STATE){tem=0;}   //SDA=1发送失败,返回0}
        else {tem=1;}   //SDA=0发送成功,返回1
        SCCB_SIC_L();       
        delay_us(500);       
        SCCB_SID_OUT;/*设置SDA为输出*/

        return (tem);  
}

出0入0汤圆

发表于 2011-3-15 09:23:50 | 显示全部楼层
先顶一下,继续。

出0入0汤圆

 楼主| 发表于 2011-3-15 13:25:58 | 显示全部楼层
回复【2楼】wangguanfu
-----------------------------------------------------------------------

   我就是抄的大哥您的程序,只不过delay_us(500);用了软件延时做的。
如果 SCCBwriteByte有问题的话,前面的寄存器书籍应该写不进去吧,
还有,如果是有问题的话,为什么刚好隔一个错一个啊?

出0入0汤圆

 楼主| 发表于 2011-3-15 22:43:27 | 显示全部楼层
哦,搞定了,原来开始的时候延时不对,换了wangguanfu 摄像头专家的定时器延时就搞定了。

出0入0汤圆

发表于 2011-3-15 22:59:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-1 13:33:04 | 显示全部楼层
我的出现的问题是有些寄存器能写,有些不能写哦,不知什么原因,希望能指点一下

出0入0汤圆

发表于 2011-6-1 13:35:15 | 显示全部楼层
回复【2楼】wangguanfu
-----------------------------------------------------------------------

我的OV7670出现的问题是有些寄存器能写,有些不能写哦,不知什么原因,希望能指点一下!我用的是FPGA,verilog hdl编程。有些寄存器写会有应答信号,有些即没有应答信号,写不成功!求教了

出0入0汤圆

发表于 2012-6-14 20:56:51 | 显示全部楼层
关注。。。。。

出0入0汤圆

发表于 2012-6-28 16:48:47 | 显示全部楼层
一个寄存器读两次   还没来得及看那的问题

出0入0汤圆

发表于 2012-6-28 21:23:10 | 显示全部楼层
中间延迟一段时间再写,就像写24C02一样

出0入0汤圆

发表于 2012-7-31 19:20:12 | 显示全部楼层
haibo2806 发表于 2011-3-15 22:43
哦,搞定了,原来开始的时候延时不对,换了wangguanfu 摄像头专家的定时器延时就搞定了。 ...

延时。。。

出0入0汤圆

发表于 2013-8-29 18:10:23 | 显示全部楼层
nicholasdlut 发表于 2012-7-31 19:20
延时。。。

能公布代码么?我发现我的OV7670也是读寄存器为0,写就不知道能写多少了。。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 09:01

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

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