智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 5657|回复: 6
打印 上一主题 下一主题

[摄像头] OV7620 SCCB读取

[复制链接]

3

主题

10

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1455
威望
748
贡献
425
兑换币
234
注册时间
2012-4-11
在线时间
141 小时
毕业学校
华侨大学
跳转到指定楼层
1#
发表于 2012-10-12 10:36:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
欲对ov7620的pclk更改分频,但对SCCB协议不熟悉,在网上找了个例程,但只有对寄存器进行写入的,没有读取函数,希望有做过的人帮忙看下,给加个读取函数。(用意:想先将现在有的设置读取出来,再进行修改,免得悲剧了……)
谢谢啦!
下面是基于xs128的源程序:
  1. #include <hidef.h>      /* common defines and macros */
  2. #include "derivative.h"      /* derivative-specific definitions */

  3. #define SCL PORTB_PB0
  4. #define SDA PORTB_PB1
  5. #define SDA_DR  DDRB_DDRB1
  6. #define SCL_DR  DDRB_DDRB0
  7. #define OUT  1
  8. #define IN  0

  9. /*************************************************
  10. Function: SCCB_Wait
  11. Description: delay
  12. Input: no
  13. Output: no
  14. More:no
  15. *************************************************/
  16. void SCCB_Wait(void)   
  17. {
  18.   unsigned char i;

  19.   for(i=0;i<10;i++)
  20.   {
  21.     _asm nop;
  22.   }
  23. }

  24. /*************************************************
  25. Function: SCCB_Start
  26. Description: signal of start
  27. Input: no
  28. Output: no
  29. More:no
  30. *************************************************/
  31. void SCCB_Start(void)   
  32. {
  33.   SDA_DR=OUT;
  34.   SDA = 1;
  35.   SCL = 1;
  36.   SCCB_Wait();
  37.   SDA = 0;
  38.   SCCB_Wait();
  39.   SCL = 0;
  40. }

  41. /*************************************************
  42. Function: SCCB_Stop
  43. Description: signal of stop
  44. Input: no
  45. Output: no
  46. More:no
  47. *************************************************/
  48. void SCCB_Stop(void)   
  49. {
  50.   SDA_DR=OUT;
  51.   SDA = 0;
  52.   SCCB_Wait();
  53.   SCL = 1;
  54.   SCCB_Wait();
  55.   SDA = 1;
  56.   SCCB_Wait();
  57. }

  58. /*************************************************
  59. Function: SCCB_SendAck
  60. Description: send ack to slave
  61. Input: signal of ack
  62. Output: no
  63. More:no
  64. *************************************************/
  65. void SCCB_SendAck(byte ack)
  66. {
  67.   
  68.   SDA_DR=OUT;
  69.   SDA = ack;
  70.   SCL = 1;
  71.   SCCB_Wait();
  72.   SCL = 0;
  73. }

  74. /*************************************************
  75. Function: SCCB_SendByte
  76. Description: send data  to SCCB register
  77. Input: byte of data
  78. Output: return ack  1:receive ack  0:no ack
  79. More:no
  80. *************************************************/
  81. byte SCCB_SendByte(unsigned char bytedata)
  82. {
  83.   
  84.   unsigned char i;
  85.   byte ack;
  86.   SDA_DR=OUT;
  87.   for(i=0;i<8;i++)
  88.   {
  89.     if(bytedata & 0x80)
  90.       SDA = 1;
  91.     else
  92.       SDA = 0;

  93.     bytedata <<= 1;
  94.     SCCB_Wait();

  95.     SCL = 1;
  96.     SCCB_Wait();
  97.     SCL = 0;
  98.     SCCB_Wait();
  99.   }

  100.   SDA = 1;
  101.   SDA_DR=IN;
  102.   SCCB_Wait();
  103.   SCL = 1;
  104.   SCCB_Wait();

  105.   ack = SDA;   

  106.   SCL = 0;
  107.   SCCB_Wait();

  108.   return ack;
  109. }


  110. /******************************************************
  111. Function: SCCB_ReceiveByte
  112. Description: receive data  from SCCB register
  113. Input: no
  114. Output: data
  115. More:no
  116. ********************************************************/
  117. unsigned char SCCB_ReceiveByte(void)  
  118. {
  119.   unsigned char i;
  120.   unsigned char bytedata = 0;
  121.   SDA_DR=IN;
  122.   for(i=0;i<8;i++)
  123.   {
  124.     SCL = 1;
  125.     SCCB_Wait();

  126.     bytedata <<= 1;

  127.     if(SDA)
  128.     {
  129.       bytedata |= 0x01;
  130.     }
  131.     SCL = 0;
  132.     SCCB_Wait();
  133.   }

  134.   return bytedata;
  135. }

  136. /******************************************************
  137. Function: SCCB_ByteWrite
  138. Description: write the data to the address
  139. Input: device  0xC0  write to  OV6620
  140.                0XC1  read from OV6620
  141.                0x42  write to  OV7620
  142.                0x43  read from OV7620
  143. Output: no
  144. More:no
  145. ********************************************************/

  146. void SCCB_ByteWrite(unsigned char device,unsigned char address,unsigned char bytedata)
  147. {     
  148.    unsigned char i;

  149.    byte ack;

  150.    for(i=0;i<20;i++)
  151.    {
  152.      SCCB_Start();
  153.      ack = SCCB_SendByte(device);
  154.      if(ack==1)
  155.      {
  156.        SCCB_Stop();
  157.        continue;
  158.      }
  159.      
  160.      ack = SCCB_SendByte(address);
  161.      if(ack==1)
  162.      {
  163.        SCCB_Stop();
  164.        continue;
  165.      }
  166.      
  167.      ack = SCCB_SendByte(bytedata);
  168.      if(ack==1)
  169.      {
  170.        SCCB_Stop();
  171.        continue;
  172.      }
  173.      SCCB_Stop();
  174.      if(ack==0)  break;    //file://正/常,跳出循环
  175.    }
  176. }




  177. /******************************************************
  178. Function: main
  179. Description: no
  180. Input: no
  181. Output: no
  182. More:no
  183. ********************************************************/
  184. void main(void) {

  185.   EnableInterrupts;
  186.   SDA_DR=1;
  187.   SCL_DR=1;
  188.   
  189.   //SCCB_ByteWrite(0xC0,0x06,0xC0);  //ov6620设置函数
  190.   //SCCB_ByteWrite(0xC0,0x03,0x80);
  191.   //SCCB_ByteWrite(0xC0,0x0C,0x20);
  192.   
  193.   
  194.   SCCB_ByteWrite(0x42,0x12,0x64);     //7620镜像设置  缺省值0x24
  195.   SCCB_ByteWrite(0x42,0x06,0xA0);     //7620亮度调节  0xff最大 0x00最小
  196.   SCCB_ByteWrite(0x42,0x03,0x80);     //7620对比度调节

  197.   SCCB_Wait();

  198.   for(;;) {} /* wait forever */

  199. }
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

3

主题

10

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1455
威望
748
贡献
425
兑换币
234
注册时间
2012-4-11
在线时间
141 小时
毕业学校
华侨大学
推荐
 楼主| 发表于 2012-10-13 22:18:12 | 只看该作者
本帖最后由 漫步星空 于 2012-10-13 22:21 编辑

已经解决,按照这样的顺序读取成功
StartBit,发送写ID,接收响应,发送读地址,接收响应,StopBit,StartBit,发送读ID,接收响应,读数据,StopBit。感谢DEMOK的源程序!
回复 支持 0 反对 1

使用道具 举报

140

主题

1016

帖子

2

精华

功勋会员

智能车八届元老!武汉岱默科技创始人!

Rank: 10Rank: 10Rank: 10

积分
32723

特殊贡献奖章资源大师奖章论坛骨干奖章推广达人奖章优秀版主奖章热心会员奖章论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

QQ
威望
4239
贡献
25778
兑换币
1456
注册时间
2009-12-9
在线时间
1353 小时
推荐
发表于 2012-10-12 22:32:27 | 只看该作者
以上基于XS128的SCCB写程序是我做的
要想读取SCCB,7620的设备地址是0X43,时序驱动方法的一样,读取相应寄存器,返回值就是该寄存器的值
回复 支持 1 反对 0

使用道具 举报

3

主题

10

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1455
威望
748
贡献
425
兑换币
234
注册时间
2012-4-11
在线时间
141 小时
毕业学校
华侨大学
3#
 楼主| 发表于 2012-10-13 09:49:51 | 只看该作者
本帖最后由 漫步星空 于 2012-10-13 09:54 编辑

  1. void SCCB_ByteWrite(unsigned char device,unsigned char address)

  2. //void SCCB_ByteWrite(unsigned char device,unsigned char address,unsigned char bytedata)
  3. {     
  4.    unsigned char i;

  5.    byte ack;

  6.    for(i=0;i<20;i++)
  7.    {
  8.      SCCB_Start();
  9.      ack = SCCB_SendByte(device);
  10.      if(ack==1)
  11.      {
  12.        SCCB_Stop();
  13.        continue;
  14.      }
  15.      
  16.      ack = SCCB_SendByte(address);
  17.      if(ack==1)
  18.      {
  19.        SCCB_Stop();
  20.        continue;
  21.      }
  22.      /*
  23.      ack = SCCB_SendByte(bytedata);
  24.      if(ack==1)
  25.      {
  26.        SCCB_Stop();
  27.        continue;
  28.      }
  29.      */
  30.      SCCB_Stop();
  31.      if(ack==0)  break;    //file://正/常,跳出循环
  32.    }
  33. }
  34. ……
  35.   SCCB_ByteWrite(0x43,0x03);
  36.   temp=SCCB_ReceiveByte();
  37.   SCCB_Wait();
复制代码
是这样写吗?
回复 支持 反对

使用道具 举报

9

主题

44

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3094
QQ
威望
873
贡献
1877
兑换币
184
注册时间
2011-10-16
在线时间
172 小时
5#
发表于 2013-1-27 22:09:52 | 只看该作者
DEMOK 发表于 2012-10-12 22:32
以上基于XS128的SCCB写程序是我做的
要想读取SCCB,7620的设备地址是0X43,时序驱动方法的一样,读取相应寄 ...

为什么ov7620的设备地址是0x43?
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

高级会员

Rank: 4

积分
568
威望
250
贡献
150
兑换币
159
注册时间
2012-11-21
在线时间
84 小时
6#
发表于 2013-7-28 20:29:26 | 只看该作者
要学摄像头需要学什么啊  K60和128
回复 支持 反对

使用道具 举报

17

主题

280

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2298

优秀会员奖章活跃会员奖章

威望
1496
贡献
218
兑换币
575
注册时间
2012-9-26
在线时间
292 小时
7#
发表于 2013-10-3 21:06:30 | 只看该作者
本帖最后由 luomusic 于 2013-10-3 21:22 编辑
漫步星空 发表于 2012-10-13 22:18
已经解决,按照这样的顺序读取成功:
StartBit,发送写ID,接收响应,发送读地址,接收响应, ...

。。
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-28 17:23 , Processed in 0.147606 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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