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还是很方便。
|