注册 登录
查看: 687|回复: 13

我们的鹰眼图像采集有问题,

[复制链接]
发表于 2014-2-20 17:25:02 | 显示全部楼层 |阅读模式
本帖最后由 如果你永不畏惧 于 2014-2-20 17:30 编辑

发过来的数据都不对?可能是什么原因呢?我们用的是初始化函数就是山外哥提供的,但是当我使用这个初始化后
{OV7725_COM7 ,0x40}   但是行中断和像素时钟没有了,场中断正常,当我们屏蔽掉这个//{OV7725_COM7 ,0x40}
后,行中断和像素中断时钟,场中断正常都正常,但是图像是这样。这是为什么呢?




初始化如下:
{OV7725_COM4         , 0xC1},
    {OV7725_CLKRC        , 0x80},
    {OV7725_COM2         , 0x03},
    {OV7725_COM3         , 0xD0},
    //{OV7725_COM7         , 0x00},
    {OV7725_HSTART       , 0x3F},
    {OV7725_HSIZE        , 0x50},
    {OV7725_VSTRT        , 0x03},
    {OV7725_VSIZE        , 0x78},
    {OV7725_HREF         , 0x00},
    {OV7725_SCAL0        , 0x0A},
    {OV7725_AWB_Ctrl0    , 0xE0},
    {OV7725_DSPAuto      , 0xff},
    {OV7725_DSP_Ctrl2    , 0x0C},
    {OV7725_DSP_Ctrl3    , 0x00},
    {OV7725_DSP_Ctrl4    , 0x00},

#if (OV7725_EAGLE_W == 80)
    {OV7725_HOutSize     , 0x14},
#elif (OV7725_EAGLE_W == 160)
    {OV7725_HOutSize     , 0x28},
#elif (OV7725_EAGLE_W == 240)
    {OV7725_HOutSize     , 0x3c},
#elif (OV7725_EAGLE_W == 320)
    {OV7725_HOutSize     , 0x50},
#else

#endif

#if (OV7725_EAGLE_H == 60 )
    {OV7725_VOutSize     , 0x1E},
#elif (OV7725_EAGLE_H == 120 )
    {OV7725_VOutSize     , 0x3c},
#elif (OV7725_EAGLE_H == 180 )
    {OV7725_VOutSize     , 0x5a},
#elif (OV7725_EAGLE_H == 240 )
    {OV7725_VOutSize     , 0x78},
#else

#endif

    {OV7725_EXHCH        , 0x00},
    {OV7725_GAM1         , 0x0c},
    {OV7725_GAM2         , 0x16},
    {OV7725_GAM3         , 0x2a},
    {OV7725_GAM4         , 0x4e},
    {OV7725_GAM5         , 0x61},
    {OV7725_GAM6         , 0x6f},
    {OV7725_GAM7         , 0x7b},
    {OV7725_GAM8         , 0x86},
    {OV7725_GAM9         , 0x8e},
    {OV7725_GAM10        , 0x97},
    {OV7725_GAM11        , 0xa4},
    {OV7725_GAM12        , 0xaf},
    {OV7725_GAM13        , 0xc5},
    {OV7725_GAM14        , 0xd7},
    {OV7725_GAM15        , 0xe8},
    {OV7725_SLOP         , 0x20},
    {OV7725_LC_RADI      , 0x00},
    {OV7725_LC_COEF      , 0x13},
    {OV7725_LC_XC        , 0x08},
    {OV7725_LC_COEFB     , 0x14},
    {OV7725_LC_COEFR     , 0x17},
    {OV7725_LC_CTR       , 0x05},
    {OV7725_BDBase       , 0x99},
    {OV7725_BDMStep      , 0x03},
    {OV7725_SDE          , 0x04},
    {OV7725_BRIGHT       , 0x00},
    {OV7725_CNST         , 57},
    {OV7725_SIGN         , 0x06},
    {OV7725_UVADJ0       , 0x11},
    {OV7725_UVADJ1       , 0x02},

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2014-2-20 18:15:59 | 显示全部楼层
是K60还是KL26?直接用我们新的代码可行不?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-20 18:32:45 | 显示全部楼层
山外メ雲ジ 发表于 2014-2-20 18:15
是K60还是KL26?直接用我们新的代码可行不?

我用的是K60   编译器是codewarrior10.5 没有用IAR,所以我是照着你们你们给的程序另外写了一个。你看看是不是初始化的问题?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-20 18:37:09 | 显示全部楼层
如果你永不畏惧 发表于 2014-2-20 18:32
我用的是K60   编译器是codewarrior10.5 没有用IAR,所以我是照着你们你们给的程序另外写了一个。你看看是 ...

你们新的代码?我不知道我用的是不是新的代码?        这个代码是我从你这个网站上下的。
回复 支持 反对

使用道具 举报

发表于 2014-2-20 19:00:41 | 显示全部楼层
如果你永不畏惧 发表于 2014-2-20 18:37
你们新的代码?我不知道我用的是不是新的代码?        这个代码是我从你这个网站上下的。

一天攻破K60的是新的代码,论坛置顶帖子里。
回复 支持 反对

使用道具 举报

发表于 2014-2-20 19:02:46 | 显示全部楼层
如果你永不畏惧 发表于 2014-2-20 18:32
我用的是K60   编译器是codewarrior10.5 没有用IAR,所以我是照着你们你们给的程序另外写了一个。你看看是 ...

试下直接用我们的代码看看效果。现在我也不好判断原因。

行中断和像素时钟没有了,这情况我也没出现过。按理,用我们的配置问题,应该是没问题的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-20 19:19:00 | 显示全部楼层
山外メ雲ジ 发表于 2014-2-20 19:02
试下直接用我们的代码看看效果。现在我也不好判断原因。

行中断和像素时钟没有了,这情况我也没出现过 ...

现在我把这个问题调好了,但是还有个问题就是当我摄像头不动的时候,图像在不停的乱动,我不知道是什么原因。你能把你初始化的代码给我发个么,看看是不是我初始化的问题!谢谢了!
回复 支持 反对

使用道具 举报

发表于 2014-2-20 19:21:59 | 显示全部楼层
如果你永不畏惧 发表于 2014-2-20 19:19
现在我把这个问题调好了,但是还有个问题就是当我摄像头不动的时候,图像在不停的乱动,我不知道是什么原 ...

这个不停地乱动,是什么意思?
图像闪烁?还是图像没采集好?

如果是图像闪烁,那是因为日光灯的原因导致的。
如果是图像错位,可能是图像信号受到干扰
回复 支持 反对

使用道具 举报

发表于 2014-2-20 19:22:40 | 显示全部楼层
如果你永不畏惧 发表于 2014-2-20 19:19
现在我把这个问题调好了,但是还有个问题就是当我摄像头不动的时候,图像在不停的乱动,我不知道是什么原 ...
  1. /*!
  2. *     COPYRIGHT NOTICE
  3. *     Copyright (c) 2013,山外科技
  4. *     All rights reserved.
  5. *     技术讨论:山外我行论坛 http://www.vcan123.com
  6. *
  7. *     除注明出处外,以下所有内容版权均属山外科技所有,未经允许,不得用于商业用途,
  8. *     修改内容时必须保留山外科技的版权声明。
  9. *
  10. * @file       FIRE_OV7725_Eagle.c
  11. * @brief      鹰眼ov7725驱动代码
  12. * @author     山外科技
  13. * @version    v5.0
  14. * @date       2013-09-07
  15. */

  16. #include "common.h"
  17. #include "MK60_gpio.h"
  18. #include "MK60_port.h"
  19. #include "MK60_dma.h"
  20. #include "FIRE_camera.h"



  21. #define OV7725_EAGLE_Delay_ms(time)  DELAY_MS(time)


  22. uint8   *ov7725_eagle_img_buff;

  23. volatile IMG_STATUS_e      ov7725_eagle_img_flag = IMG_FINISH;   //图像状态

  24. //内部函数声明
  25. static uint8 ov7725_eagle_reg_init(void);
  26. static void ov7725_eagle_port_init();


  27. /*!
  28. *  @brief      鹰眼ov7725初始化
  29. *  @since      v5.0
  30. */
  31. uint8 ov7725_eagle_init(uint8 *imgaddr)
  32. {
  33.     ov7725_eagle_img_buff = imgaddr;
  34.     while(ov7725_eagle_reg_init() == 0);
  35.     ov7725_eagle_port_init();
  36.     return 0;
  37. }

  38. /*!
  39. *  @brief      鹰眼ov7725管脚初始化(内部调用)
  40. *  @since      v5.0
  41. */
  42. void ov7725_eagle_port_init()
  43. {
  44.     //DMA通道0初始化,PTA27触发源(默认上升沿),源地址为PTB_B0_IN,目的地址为:IMG_BUFF,每次传输1Byte
  45.     dma_portx2buff_init(CAMERA_DMA_CH, (void *)&PTB_B0_IN, (void *)ov7725_eagle_img_buff, PTA27, DMA_BYTE1, CAMERA_DMA_NUM, DADDR_KEEPON);

  46.     DMA_DIS(CAMERA_DMA_CH);
  47.     disable_irq(PORTA_IRQn);                        //关闭PTA的中断
  48.     DMA_IRQ_CLEAN(CAMERA_DMA_CH);                   //清除通道传输中断标志位
  49.     DMA_IRQ_EN(CAMERA_DMA_CH);
  50.        
  51.     port_init(PTA27, ALT1 | DMA_FALLING | PULLUP );         //PCLK

  52.     port_init(PTA29, ALT1 | IRQ_RISING | PULLUP | PF);     //场中断,上拉,上降沿触发中断,带滤波

  53. }

  54. /*!
  55. *  @brief      鹰眼ov7725场中断服务函数
  56. *  @since      v5.0
  57. */
  58. void ov7725_eagle_vsync(void)
  59. {

  60.     //场中断需要判断是场结束还是场开始
  61.     if(ov7725_eagle_img_flag == IMG_START)                   //需要开始采集图像
  62.     {
  63.         ov7725_eagle_img_flag = IMG_GATHER;                  //标记图像采集中
  64.         disable_irq(PORTA_IRQn);

  65.         DMA_EN(CAMERA_DMA_CH);                  //使能通道CHn 硬件请求
  66.         DMA_DADDR(CAMERA_DMA_CH) = (uint32)ov7725_eagle_img_buff;    //恢复地址
  67.     }
  68.     else                                        //图像采集错误
  69.     {
  70.         disable_irq(PORTA_IRQn);                        //关闭PTA的中断
  71.         ov7725_eagle_img_flag = IMG_FAIL;                    //标记图像采集失败
  72.     }
  73. }

  74. /*!
  75. *  @brief      鹰眼ov7725 DMA中断服务函数
  76. *  @since      v5.0
  77. */
  78. void ov7725_eagle_dma()
  79. {
  80.     ov7725_eagle_img_flag = IMG_FINISH ;
  81.     DMA_IRQ_CLEAN(CAMERA_DMA_CH);           //清除通道传输中断标志位
  82. }

  83. /*!
  84. *  @brief      鹰眼ov7725采集图像(采集到的数据存储在 初始化时配置的地址上)
  85. *  @since      v5.0
  86. */
  87. void ov7725_eagle_get_img()
  88. {
  89.     ov7725_eagle_img_flag = IMG_START;                   //开始采集图像
  90.     PORTA_ISFR = ~0;                        //写1清中断标志位(必须的,不然回导致一开中断就马上触发中断)
  91.     enable_irq(PORTA_IRQn);                         //允许PTA的中断
  92.     while(ov7725_eagle_img_flag != IMG_FINISH)           //等待图像采集完毕
  93.     {
  94.         if(ov7725_eagle_img_flag == IMG_FAIL)            //假如图像采集错误,则重新开始采集
  95.         {
  96.             ov7725_eagle_img_flag = IMG_START;           //开始采集图像
  97.             PORTA_ISFR = ~0;                //写1清中断标志位(必须的,不然回导致一开中断就马上触发中断)
  98.             enable_irq(PORTA_IRQn);                 //允许PTA的中断
  99.         }
  100.     }
  101. }


  102. /*OV7725初始化配置表*/
  103. reg_s ov7725_eagle_reg[] =
  104. {
  105.     //寄存器,寄存器值次
  106.     {OV7725_COM4         , 0xC1},
  107.     {OV7725_CLKRC        , 0x00},
  108.     {OV7725_COM2         , 0x03},
  109.     {OV7725_COM3         , 0xD0},
  110.     {OV7725_COM7         , 0x40},
  111.     {OV7725_HSTART       , 0x3F},
  112.     {OV7725_HSIZE        , 0x50},
  113.     {OV7725_VSTRT        , 0x03},
  114.     {OV7725_VSIZE        , 0x78},
  115.     {OV7725_HREF         , 0x00},
  116.     {OV7725_SCAL0        , 0x0A},
  117.     {OV7725_AWB_Ctrl0    , 0xE0},
  118.     {OV7725_DSPAuto      , 0xff},
  119.     {OV7725_DSP_Ctrl2    , 0x0C},
  120.     {OV7725_DSP_Ctrl3    , 0x00},
  121.     {OV7725_DSP_Ctrl4    , 0x00},

  122. #if (CAMERA_W == 80)
  123.     {OV7725_HOutSize     , 0x14},
  124. #elif (CAMERA_W == 160)
  125.     {OV7725_HOutSize     , 0x28},
  126. #elif (CAMERA_W == 240)
  127.     {OV7725_HOutSize     , 0x3c},
  128. #elif (CAMERA_W == 320)
  129.     {OV7725_HOutSize     , 0x50},
  130. #else

  131. #endif

  132. #if (CAMERA_H == 60 )
  133.     {OV7725_VOutSize     , 0x1E},
  134. #elif (CAMERA_H == 120 )
  135.     {OV7725_VOutSize     , 0x3c},
  136. #elif (CAMERA_H == 180 )
  137.     {OV7725_VOutSize     , 0x5a},
  138. #elif (CAMERA_H == 240 )
  139.     {OV7725_VOutSize     , 0x78},
  140. #else

  141. #endif

  142.     {OV7725_EXHCH        , 0x00},
  143.     {OV7725_GAM1         , 0x0c},
  144.     {OV7725_GAM2         , 0x16},
  145.     {OV7725_GAM3         , 0x2a},
  146.     {OV7725_GAM4         , 0x4e},
  147.     {OV7725_GAM5         , 0x61},
  148.     {OV7725_GAM6         , 0x6f},
  149.     {OV7725_GAM7         , 0x7b},
  150.     {OV7725_GAM8         , 0x86},
  151.     {OV7725_GAM9         , 0x8e},
  152.     {OV7725_GAM10        , 0x97},
  153.     {OV7725_GAM11        , 0xa4},
  154.     {OV7725_GAM12        , 0xaf},
  155.     {OV7725_GAM13        , 0xc5},
  156.     {OV7725_GAM14        , 0xd7},
  157.     {OV7725_GAM15        , 0xe8},
  158.     {OV7725_SLOP         , 0x20},
  159.     {OV7725_LC_RADI      , 0x00},
  160.     {OV7725_LC_COEF      , 0x13},
  161.     {OV7725_LC_XC        , 0x08},
  162.     {OV7725_LC_COEFB     , 0x14},
  163.     {OV7725_LC_COEFR     , 0x17},
  164.     {OV7725_LC_CTR       , 0x05},
  165.     {OV7725_BDBase       , 0x99},
  166.     {OV7725_BDMStep      , 0x03},
  167.     {OV7725_SDE          , 0x04},
  168.     {OV7725_BRIGHT       , 0x00},
  169.     {OV7725_CNST         , 0xFF},
  170.     {OV7725_SIGN         , 0x06},
  171.     {OV7725_UVADJ0       , 0x11},
  172.     {OV7725_UVADJ1       , 0x02},

  173. };

  174. uint8 ov7725_eagle_cfgnum = ARR_SIZE( ov7725_eagle_reg ) ; /*结构体数组成员数目*/


  175. /*!
  176. *  @brief      鹰眼ov7725寄存器 初始化
  177. *  @return     初始化结果(0表示失败,1表示成功)
  178. *  @since      v5.0
  179. */
  180. uint8 ov7725_eagle_reg_init(void)
  181. {
  182.     uint16 i = 0;
  183.     uint8 Sensor_IDCode = 0;
  184.     SCCB_GPIO_init();

  185.     //OV7725_Delay_ms(50);
  186.     if( 0 == SCCB_WriteByte ( OV7725_COM7, 0x80 ) ) /*复位sensor */
  187.     {
  188.         DEBUG_PRINTF("\n警告:SCCB写数据错误");
  189.         return 0 ;
  190.     }

  191.     OV7725_EAGLE_Delay_ms(50);

  192.     if( 0 == SCCB_ReadByte( &Sensor_IDCode, 1, OV7725_VER ) )    /* 读取sensor ID号*/
  193.     {
  194.         DEBUG_PRINTF("\n警告:读取ID失败");
  195.         return 0;
  196.     }
  197.     DEBUG_PRINTF("\nGet ID success,SENSOR ID is 0x%x", Sensor_IDCode);
  198.     DEBUG_PRINTF("\nConfig Register Number is %d ", ov7725_eagle_cfgnum);
  199.     if(Sensor_IDCode == OV7725_ID)
  200.     {
  201.         for( i = 0 ; i < ov7725_eagle_cfgnum ; i++ )
  202.         {
  203.             if( 0 == SCCB_WriteByte(ov7725_eagle_reg[i].addr, ov7725_eagle_reg[i].val) )
  204.             {
  205.                 DEBUG_PRINTF("\n警告:写寄存器0x%x失败", ov7725_eagle_reg[i].addr);
  206.                 return 0;
  207.             }
  208.         }
  209.     }
  210.     else
  211.     {
  212.         return 0;
  213.     }
  214.     DEBUG_PRINTF("\nOV7725 Register Config Success!");
  215.     return 1;
  216. }

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-20 19:25:33 | 显示全部楼层
山外メ雲ジ 发表于 2014-2-20 19:02
试下直接用我们的代码看看效果。现在我也不好判断原因。

行中断和像素时钟没有了,这情况我也没出现过 ...

具体说是图像错位
回复 支持 反对

使用道具 举报

发表于 2014-2-20 19:27:20 | 显示全部楼层
如果你永不畏惧 发表于 2014-2-20 19:25
具体说是图像错位

错位问题,可能是开中断时没清场中断,也可能是场中断受干扰(配置成下拉和无源滤波试试)
回复 支持 反对

使用道具 举报

发表于 2014-2-20 19:55:42 来自手机 | 显示全部楼层
如果你永不畏惧 发表于 2014-2-20 18:32
我用的是K60   编译器是codewarrior10.5 没有用IAR,所以我是照着你们你们给的程序另外写了一个。你看看是 ...

我的代码的寄存器初始化跟你不一样哦,用的是山外例程,至少我的山外例程里的ov7725-CLKRC对应的寄存器的值是0x00,你的是0x80
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-20 22:49:44 | 显示全部楼层
鹰眼有没有消隐区?    会不会数据猜到消隐去了呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-20 22:50:06 | 显示全部楼层
470895476 发表于 2014-2-20 19:55
我的代码的寄存器初始化跟你不一样哦,用的是山外例程,至少我的山外例程里的ov7725-CLKRC对应的寄存器的 ...


鹰眼有没有消隐区?    会不会数据猜到消隐去了呢?
回复 支持 反对

使用道具 举报

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

本版积分规则

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