智能车制作

标题: 可怜可怜我啊....怎么配置OV7620摄像头啊? [打印本页]

作者: 尕玍紿    时间: 2013-4-4 17:07
标题: 可怜可怜我啊....怎么配置OV7620摄像头啊?
K60,系统频率211MHz
SCCB代码和OV7620配置代码如下,为什么就是不行呢!!!到底怎么配置摄像头啊,图像烂死了....

OV7620配置代码:
/////////////////////////////////////////////////////
配置摄像头:初始化函数
void ov7620_init(void)
{
        SIO_D_OUT;//sccb管脚初始化  输入方向
        SIO_C_OUT;//sccb管脚初始化  输入方向
        wrOV7620Reg(0x14, 0x24);//QVGA
        wrOV7620Reg(0x2D, 0x95);//自动亮度 自动适应光频率
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
写 摄像头寄存器 函数
void wrOV7620Reg(uint8 regID, uint8 regDat)
{
  uint8 i;
  uint8 ack;
  for(i=0;i<20;i++)
  {
    startSCCB();
    ack = SCCBwriteByte(0x42);
    if(ack==1){
      stopSCCB();
      continue;
    }
    ack = SCCBwriteByte(regID);
    if(ack==1){
      stopSCCB();
      continue;
    }
    ack = SCCBwriteByte(regDat);
    if(ack==1){
      stopSCCB();
      continue;
    }
    stopSCCB();
    if(ack==0) break;
  }
}
/////////////////////////////////////////////////////!!!!!!!!!!!!!!!!!!!!!!1
/////////////////////////////////////////////////////!!!!!!!!!!!!!!!!!!!!!!!
//功能:读OV7620寄存器         !!!!!!!!!看这函数,感觉有可能错!!!!!!!!!!!
//返回:1-成功 0-失败             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
uint8 rdOV7620Reg(uint8 regID, uint8 *regDat)
{
//通过写操作设置寄存器地址
startSCCB();
if(0==SCCBwriteByte(0x42))
{
  stopSCCB();
  return(0);
}
SCCBdelay();
  if(0==SCCBwriteByte(regID))
{
  stopSCCB();
  return(0);
}
stopSCCB();
SCCBdelay();

//设置寄存器地址后,才是读
startSCCB();
if(0==SCCBwriteByte(0x43))
{
  stopSCCB();
  return(0);
   }
SCCBdelay();
   *regDat=SCCBreadByte();
   SCCBdelay();
   stopSCCB();
   return(1);
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
SCCB:

void SCCBdelay()//  该延时函数测试过了,用它进行延时,然后对一个管脚输出取反,测得该脚输出频率为397KHz
{
    unsigned char a;
    for(a=39;a>0;a--)
      asm("nop");
   
}
/*
-----------------------------------------------
   功能: start命令,SCCB的起始信号
   参数: 无
返回值: 无
-----------------------------------------------
*/
void startSCCB(void)
{
    SIO_D_OUT;
    SIO_D_SET;     //数据线高电平
    SIO_C_SET;    //在时钟线高的时候数据线由高至低
    SCCBdelay();
    SIO_D_CLR;
    SCCBdelay();
    SIO_C_CLR;  //数据线恢复低电平,单操作函数必要
}
/*
-----------------------------------------------
   功能: stop命令,SCCB的停止信号
   参数: 无
返回值: 无
-----------------------------------------------
*/
void stopSCCB(void)
{
    SIO_D_OUT;
    SIO_D_CLR;
    SCCBdelay();
    SIO_C_SET;
    SCCBdelay();
    SIO_D_SET;
    SCCBdelay();
}
void SCCB_SendAck(uint8 ack)
{
  SIO_D_OUT;
  if(ack==1)
    gpio_ctrl (PORTB, 9, 1);
  else gpio_ctrl (PORTB, 9, 0);
  SIO_C_SET;
  SCCBdelay();
  SIO_C_CLR;
}

uint8 SCCBwriteByte(uint8 bytedata)
{
  uint8 i,ack;
  SIO_D_OUT;
  for(i=0;i<8;i++) //循环8次发送数据
  {
    if(bytedata&0x80){
      SIO_D_SET;
    }
    else{
      SIO_D_CLR;
    }
    bytedata<<=1;
    SCCBdelay();
    SIO_C_SET;
    SCCBdelay();
    SIO_C_CLR;
    SCCBdelay();
   }
   SIO_D_SET;
   SIO_D_IN;/*设置SDA为输入*/
   SCCBdelay();
   SIO_C_SET;
   SCCBdelay();
   ack = SIO_D_STATE;
   SIO_C_CLR;
   SCCBdelay();
   return ack;  
}
/*
-----------------------------------------------
   功能: 一个字节数据读取并且返回
   参数: 无
返回值: 读取到的数据
-----------------------------------------------
*/
uint8 SCCBreadByte(void)
{
uint8 read,j;
read=0x00;

SIO_D_IN;/*设置SDA为输入*/
for(j=8;j>0;j--) //循环8次接收数据
{      
  SIO_C_SET;
  SCCBdelay();
  read=read<<1;
  if(SIO_D_STATE)
  {
    read |=0x01;
  }
  SIO_C_CLR;
  SCCBdelay();
}
return(read);
}
/////////////////////////////////////////////////////

求代码........................发份能用的来!!!!
纠结好久了.................................



作者: 奋斗小青年、    时间: 2013-4-4 17:08

作者: 尕玍紿    时间: 2013-4-4 20:49
突然 想起电平转换这回事!
摄像头与K60进行SCCB通信 应该要进行电平转换吧......一个3.3V,一个5V
可是电平转换怎么做呢? 以前都是用与门搞定的,可是现在好像不行的感觉...不过试过才知道!
我觉得不行是因为:
K6O与摄像头之间用74HC08进行电平转换:
1.7408是与门,它应该是单向性的吧?这样摄像头的应答信号怎么传给K60啊?

2.摄像头的信号传回来给K60不需要做5V转3.3的吗? 如果要,那与门根本不能实现啊!
求大神解答...........................急!!!!!!!!!!都快被气到 过清明了!!!

作者: m__dd    时间: 2013-4-7 19:56
尕玍紿 发表于 2013-4-4 20:49
突然 想起电平转换这回事!
摄像头与K60进行SCCB通信 应该要进行电平转换吧......一个3.3V,一个5V
可是电 ...

7620不是兼容3.3V吗?
作者: paradox9    时间: 2013-4-8 09:27
尕玍紿 发表于 2013-4-4 20:49
突然 想起电平转换这回事!
摄像头与K60进行SCCB通信 应该要进行电平转换吧......一个3.3V,一个5V
可是电 ...

k60 IO口支持5伏输入的呃
作者: pois0n    时间: 2013-4-8 11:50
SCCB与I2C一样,需要上拉电阻。
作者: 尕玍紿    时间: 2013-4-8 16:32
pois0n 发表于 2013-4-8 11:50
SCCB与I2C一样,需要上拉电阻。

谢谢....
作者: Likeu    时间: 2013-4-12 14:59
pois0n 发表于 2013-4-8 11:50
SCCB与I2C一样,需要上拉电阻。

上啦电阻是什么意思?怎么做的

作者: pois0n    时间: 2013-4-12 15:40
Likeu 发表于 2013-4-12 14:59
上啦电阻是什么意思?怎么做的

I2C信号线需要上拉电阻。详情百度一下,电阻和电压是有个适配关系的。

作者: shashouhuoshan    时间: 2013-4-20 18:41
可以试用5V转3.3V电平转换芯片NLSX4373,转换速度20Mb/s.




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2