打印
[嵌入式linux]

智能倒车镜

[复制链接]
1186|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
OV7670 是 OV(OmniVision)公司生产的一颗 1/6 寸的 CMOS VGA 图像传感器。该传感器体积小、工作电压低,提供单片 VGA 摄像头和影像处理器的所有功能。通过 SCCB 总线控制,可以输出整帧、子采样、取窗口等方式的各种分辨率 8 位影像数据。该产品 VGA 图像最高达到 30 帧/秒。用户可以完全控制图像质量、数据格式和传输方式。所有图像处理功能过程包括伽玛曲线、白平衡、度、色度等都可以通过 SCCB 接口编程。
这个是官方的说法,实际上,我们自己做的话,只要知道把图像值取回来就可以了,但是,实际上,这个摄像头图像传输不是那么稳定,接插口不太好的好,传回来的数据就很不给力了。目前采用的方案,是将rgb数据直接读回来。采用的是带FIFO的摄像头,对于单片机的压力比较小,比较纠结的是,采用不带fifi,要求io速率达到24M,这个就是lpc54102达不到的了。
由于lpc54102的flash也不太大,我们需要350*240的显示,那么对应于这款单片机来说,能够存储的图像非常有限,只能说,会造成图像传输比较卡顿。准备后期尝试一下ov2640.
由于直接用FIFO的采样工作比较简单,使用MO就可以将数据采集回来,目前的打算是,mo收集数据,M4进行图像的简单传输和存储。
         
   贴一点代码上来。
#define Input1_PIN         24   /*GPIO pin number  */
#define Input1_PORT        0    /*GPIO port number   */
#define Input2_PIN         23   /*GPIO pin number  */
#define Input2_PORT        0    /*GPIO port number   */
#define Input3_PIN         22   /*GPIO pin number  */
#define Input3_PORT        0    /*GPIO port number   */
#define Input4_PIN         21   /*GPIO pin number  */
#define Input4_PORT        0    /*GPIO port number   */
#define Input5_PIN         20   /*GPIO pin number  */
#define Input5_PORT        0    /* GPIO port number   */
#define Input6_PIN         19   /*GPIO pin number  */
#define Input6_PORT        0    /*GPIO port number   */
#define Input7_PIN         18   /*GPIO pin number  */
#define Input7_PORT        0    /*GPIO port number   */
    SystemCoreClockUpdate();
         Board_Init();
         Board_LED_Set(0,false);
         /*Configure pins as GPIO */
         Chip_IOCON_PinMuxSet(LPC_IOCON,  Input1_PORT,Input1_PIN
                            (IOCON_FUNC0|IOCON_DIGITAL_EN|IOCON_GPIO_MODE|IOCON_MODE_PULLUP));
//pin1-pin7相同配置。//
         Chip_IOCON_PinMuxSet(LPC_IOCON,  SYSC_PORT,SYSC_PIN
                            (IOCON_FUNC0|IOCON_DIGITAL_EN|IOCON_GPIO_MODE|IOCON_MODE_PULLUP));
         Chip_IOCON_PinMuxSet(LPC_IOCON,CONF1_PORT,CONF1_PIN
                            (IOCON_FUNC0|IOCON_DIGITAL_EN|IOCON_GPIO_MODE|IOCON_MODE_INACT));
开始的时候不习惯lpc的引脚配置,看看定义和源码,可以发现引脚功能还是很强大,其实也挺清楚,逻辑以清晰,有很多配置和功能一般条件下不需要。
配置完引脚,其他的和普通单片机就完全一样了。参考原子的程序,贴一段上来。
为了配合sccb时序,还需要配置一下sccb的引脚配置,都差不多。
void SCCB_Start(void)
{
   SCCB_SDA=1;   
   SCCB_SCL=1;      
   delay_us(50);  延时没有想到好的办法,现在只有两种办法,一个是开定时器计算,一个是空循环计数,希望有好办法的提醒我一下。
   SCCB_SDA=0;
   delay_us(50);   
   SCCB_SCL=0;       //  
}
//OV7670白平衡设置。
void OV7670_Light_Mode(u8 mode)
{
         u8reg13val=0XE7;//
         u8reg01val=0;
         u8reg02val=0;
         switch(mode)
         {
                   case1://sunny
                            reg13val=0XE5;
                            reg01val=0X5A;
                            reg02val=0X5C;
                            break;      
                   case2://cloudy
                            reg13val=0XE5;
                            reg01val=0X58;
                            reg02val=0X60;
                            break;      
                   case3://office
                            reg13val=0XE5;
                            reg01val=0X84;
                            reg02val=0X4c;
                            break;      
                   case4://home
                            reg13val=0XE5;
                            reg01val=0X96;
                            reg02val=0X40;
                            break;      
         }
         SCCB_WR_Reg(0X13,reg13val);/com8设置
         SCCB_WR_Reg(0X01,reg01val);蓝色通道
         SCCB_WR_Reg(0X02,reg02val);/红色通道
}                                      
基本配置还是比较方便,速度慢之外,带fifo的ov7670还是很方便。

1.2.jpg (240.71 KB )

1.2.jpg

相关帖子

沙发
luvemcu| | 2016-10-11 09:03 | 只看该作者
好产品,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

22

帖子

1

粉丝