OV7670 图像采集初始化 死循环
各位大虾,我用DSP控制OV7670进行图像采集,SCCB调试通过,可以测到SDA和SCL的高低电平变化,但是一直在在OV7670的初始化程序中死循环,程序是根据wangguanfu给的例程修改的,以下是OV7670初始化程序代码:/* OV7670_init() */
//返回1成功,返回0失败
uchar OV7670_init(void)
{
uchar temp;
uchar i;
uchar ovidmsb=0;
uchar ovidlsb=0;
InitSCCB();//io init..
temp=0x80;
if(0==wrOV7670Reg(0x12, temp)) //Reset SCCB
{
return 0;
}
delay_ms(100);
rt = rdOV7670Reg(0x0a, & ovidmsb );
if(ovidmsb !=0x76)
{
return 0;
}
rt=rdOV7670Reg(0x0b, & ovidlsb );
if(ovidlsb !=0x60)
{
return 0;
}
delay_ms(100);
for(i=0;i<172;i++) //程序无法进入这里,是什么原因呢?
{
if( 0==wrOV7670Reg(change_reg,change_reg))
{
return 0;
}
}
delay_ms(100);
return 0x01; //ok
}
另外我用示波器测场信号和行信号出现很奇怪的现象,DSP工作的时候同时测这两个信号,居然都是场信号的波形,单独测的时候却各自都是正确的波形,硬件出问题了吗还是里面SCCB的延时不对,电源是3.3V,加了个IN4001稳压二极管(0.4V),降到3.0V左右。7670的输入时钟是由DSP输出的时钟提供,37.5MHZ.
跪求指导啊! 你好,你用什么型号的DSP啊,我现在也准备用OV7670采集图像,DSP是5509A的, 现在在看SCCb和IIC相关的,以后可不可以交流一下。
我QQ251808067 我用的是2000系列的,我现在解决了SCCB的配置了,下一步就是将采集的图像数据进行转换显示 能留个QQ号码吗? 还有请问你你是用的GPIO模拟的SCCb吗? 2000系列的我不太懂。 求个sccb协议的详细资料 我在网站上没找到关于sccb的资料 楼主,你的图像采集的问题解决了吗啊?我也是用DSP采集图像,目前解决到SCCB配置这一步,但不知道图像采集怎么进行了。可不可知道一下呢?先谢谢了。 81楼有SCCB驱动源码:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3207784&bbs_page_no=1&search_mode=3&search_text=jk36125&bbs_id=9999 回复【2楼】rclsq
-----------------------------------------------------------------------
你好 我在用DSP采集OV7670图像时遇到一些问题,想请教请教你,行吗? 我的QQ:251808067,先谢谢了. 回复【楼主位】rclsq
电源是3.3V,加了个IN4001稳压二极管(0.4V),降到3.0V左右。7670的输入时钟是由DSP输出的时钟提供,37.5MHZ.
-----------------------------------------------------------------------
电源可以直接供3.3V 去检查SCL的频率,不要超过200KHZ (我的模块的内部上拉是4.7K) 你的模块的内部上拉我看过,是10K mark 回复【11楼】ds444
你的模块的内部上拉我看过,是10k
-----------------------------------------------------------------------
只有很早的才是10K,就算10K 200KHZ 也能过! 另外 LZ的是OV7670吗??OV7670的产品ID是7673H,你的代码怎么是7660呢?
if(0==wrOV7670Reg(0x12, temp)) //Reset SCCB
{
return 0;
}
delay_ms(100);
rt = rdOV7670Reg(0x0a, & ovidmsb );
if(ovidmsb !=0x76)
{
return 0;
}
rt=rdOV7670Reg(0x0b, & ovidlsb );
if(ovidlsb !=0x60)
{
return 0;
}
-------------------------------------------- 不用延时
你照我的寄存器初始化,绝对OK,注意,一个一个字节的写,OV的sensor大多不支持连续写
把EZUSB_WriteI2C换成你的I2C函数
for(i=0;i<sizeof(OV7670REG);i+=2) EZUSB_WriteI2C(OV7670REG,OV7670REG);
static BYTE OV7670REG[]=
{
0x12,0x80,0x11,0x80,0x3a,0x04,0x12,0x00,0x17,0x13,
0x18,0x01,0x32,0xb6,0x19,0x02,0x1a,0x7a,0x03,0x0a,
0x0c,0x00,0x3e,0x00,0x70,0x3a,0x71,0x35,0x72,0x11,
0x73,0xf0,0xa2,0x02,0x7a,0x20,0x7b,0x10,0x7c,0x1e,
0x7d,0x35,0x7e,0x5a,0x7f,0x69,0x80,0x76,0x81,0x80,
0x82,0x88,0x83,0x8f,0x84,0x96,0x85,0xa3,0x86,0xaf,
0x87,0xc4,0x88,0xd7,0x89,0xe8,0x13,0xe0,0x01,0x58,
0x02,0x68,0x00,0x00,0x10,0x00,0x0d,0x40,0x14,0x18,
0xa5,0x05,0xab,0x07,0x24,0x95,0x25,0x33,0x26,0xe3,
0x9f,0x78,0xa0,0x68,0xa1,0x03,0xa6,0xd8,0xa7,0xd8,
0xa8,0xf0,0xa9,0x90,0xaa,0x94,0x13,0xe5,0x0e,0x61,
0x0f,0x4b,0x16,0x02,0x1e,0x07,0x21,0x02,0x22,0x91,
0x29,0x07,0x33,0x0b,0x35,0x0b,0x37,0x1d,0x38,0x71,
0x39,0x2a,0x3c,0x78,0x4d,0x40,0x4e,0x20,0x69,0x00,
0x6b,0x0a,0x74,0x10,0x8d,0x4f,0x8e,0x00,0x8f,0x00,
0x90,0x00,0x91,0x00,0x92,0x19,0x96,0x00,0x9a,0x80,
0xb0,0x84,0xb1,0x0c,0xb2,0x0e,0xb3,0x82,0xb8,0x0a,
0x43,0x14,0x44,0xf0,0x45,0x34,0x46,0x58,0x47,0x28,
0x48,0x3a,0x59,0x88,0x5a,0x88,0x5b,0x44,0x5c,0x67,
0x5d,0x49,0x5e,0x0e,0x64,0x04,0x65,0x20,0x66,0x05,
0x94,0x04,0x95,0x08,0x6c,0x0a,0x6d,0x55,0x6e,0x11,
0x6f,0x9f,0x6a,0x40,0x01,0x40,0x02,0x40,0x4f,0x80,
0x50,0x80,0x51,0x00,0x52,0x22,0x53,0x5e,0x54,0x80,
0x58,0x9e,0x41,0x08,0x3f,0x00,0x75,0x04,0x76,0xe1,
0x4c,0x00,0x77,0x01,0x3d,0xc2,0x4b,0x09,0xc9,0x60,
0x41,0x38,0x56,0x40,0x34,0x11,0x3b,0x0a,0xa4,0x88,
0x96,0x00,0x97,0x30,0x98,0x20,0x99,0x30,0x9a,0x84,
0x9b,0x29,0x9c,0x03,0x9d,0x4c,0x9e,0x3f,0x78,0x04,
0x79,0x01,0xc8,0xf0,0x79,0x0f,0xc8,0x00,0x79,0x10,
0xc8,0x7e,0x79,0x0a,0xc8,0x80,0x79,0x0b,0xc8,0x01,
0x79,0x0c,0xc8,0x0f,0x79,0x0d,0xc8,0x20,0x79,0x09,
0xc8,0x80,0x79,0x02,0xc8,0xc0,0x79,0x03,0xc8,0x40,
0x79,0x05,0xc8,0x30,0x79,0x26,0x2d,0x00,0x2e,0x00,
0x13,0xe7,0x09,0x01,0x11,0x00
}; SCCB 就是I2C 模拟SCCB关键还是要控制好延时,我开始延时不正确,读出来始终都是0xff。而且写数据时返回SDA口始终返回高电平 回复【14楼】wangguanfu
-----------------------------------------------------------------------
你好,我想问一下,能否用51单片机模拟SCCB时序,对OV7670的寄存器进行读写(51单片机的高电平为5V),谢谢! 关注。。。。
页:
[1]