OV7670分辨率设置
- 格式:pptx
- 大小:154.97 KB
- 文档页数:4
2012-03-24 20:42OV7670调试的问题拿出来请大家共同解决硬件:STM32+OV7670+AL422B (电路参照zidong404的)软件思路也是参考zidong404的,现在图像显示基本出来了,但是效果很不好,最关键的是不知道从哪修改。
液晶ssd1289显示的图片如下:输出格式:QVGA RGB565 320*240出现的问题:1、图像分块,而且三块显示的是同一幅图片,不知道是缓存指针读写复位不正常的是不,程序和zidong404的一样的?2、图像重叠,一次显示不是全屏,只是半屏?好像写入的数据不够?我现在很模糊的几个问题是:1、配置QVGA RGB565格式写入缓存AL422的数据是不是320*240*2个字节?如果是,那为何一次显示只有半屏呢?2、还有窗口设置我不是太懂OV7660_config_window(272,16,320,240);// set 240*320 ,谁能帮忙解释一下,272和16这几个数据是怎么得到的?3、还有__nop();这条指令的运用,是直接用吗?需要包含什么文件吗? 51里面用它不是包含一个文件才能使用它吗?弄了半天终于弄出来了!在这里要感谢zidong404的指点。
现在分享一下我的调试结果:1、上面第一和第二个问题出现的原因很简单,摄像头配置出来的图片数据是横屏格式240行,每行320个点,每个像素2个字节,而我的液晶屏配置是竖屏显示的,所以图像分块。
这一点虽然没问题了,但我感觉这样的话图像分块应该是不规则的,而结果是三块一样的图像。
2、还有读写指针复位,如果写指针复位延时不够也会图像分块。
3、还有XCLK时钟我的是8M,这个我试了36M的影响不大,但是不能超过50M,STM32系统时钟72M直接加上也能显示图像,但是有一层绿色的背景色。
4、还有PLL倍频选择旁路PLL图像也会分块,图像发生畸变,大于输入时钟*4就OK了。
5、显示的时候有时液晶背景颜色会是淡黄的不知为何?图像显示正常。
关于OV7725程序移植OV7670总结用了三天的时间,终于搞定了程序的移植。
也是第一次移植stm32程序。
最终的移植成功版本,改了SCCB通信、FIFO读写时序、寄存器配置、引脚修改的一些地方。
一、移植过程中SCCB通信遇到的问题1.由于野火的OV7725摄像头内置上拉电阻,所以在配置时SDA和SDL都被设置成了Mode_OD (开漏模式),但是战舰带的OV7670摄像头并没有内置上拉电阻,所以不能用开漏模式,否则不能正常输出高电平,SDA线也不会被主机拉高。
于是参考了战舰的例程。
战舰对SCL线设置为了PP(推挽输出模式),SDA线的输出则需要切换。
如下:在战舰的例程上进行修改时,由于需要修改一些IO口,所以需要把这句改掉。
我尝试用这样的手法修改:发现并不可行。
查询网络,原因可能是在运行中途修改管脚模式时,由于32的LCKK:锁密钥,并不能直接修改管脚工作模式。
我们选择对底层寄存器进行操作。
于是乎这样改:*注:SDA为PC7口。
2. 还有需要修改的地方就是:在需要读取SDA电平状态的时候,要用SCCB_SDA_IN 这个语句把替换掉SDA_H,而不是先SDA_H 然后再SCCB_SDA_IN 。
否则不能正确读取到SDA线的电平。
3.最后一步,器件ID:在这一段代码用到:二、FIFO读数据时序的修改1.由于每个人选择的数据口可能不同,有的是0-7位,有的是8-15位,所以我这里给出了两种不同的读取时序。
H_MY_READ_FIFO_PIXEL(YUV)是当数据位选择的是8-15位时候用的;L_MY_READ_FIFO_PIXEL(YUV)是当数据位选择的是0-7位时候用的。
*注:因为我要的二值化的图像,所以只读取了YUV 分量中的Y分量。
下面这段代码是读取RGB565的:三、寄存器的配置1. 我用的YUV,没有给每位寄存器重定义。
所以要结合Datasheet自行查看。
/*以下为 YUV参数设置*/{0x12, 0x10},{0x3a, 0x14},{0x3d, 0x80},//0 0 : Y U Y V (3a:14 3d:80)//0 1 : Y V Y U (3a:14 3d:81)//1 0 : U Y V Y (3a:18 3d:80)//1 1 : V Y U Y (3a:18 3d:81){0x67, 0x11}, //手工设置 U{0x68, 0xFF}, //手工设置 V{0x40, 0xC0}, //YUV输出//输出窗口设置{0x32, 0x80}, //HREF{0x17, 0x16}, //HSTART{0x18, 0x04},//HSTOP{0x19, 0x02},//VSTRT{0x1a, 0x7a},//0x7a, VSTOP{0x03, 0x0a},//0x0a, VREF{0x0c, 0x0c},{0x15, 0x00},{0x3e, 0x00},//10{0x70, 0x00},{0x71, 0x01},{0x72, 0x11},{0x73, 0x09},//{0xa2, 0x02},//15{0x11, 0x00},//时钟分频设置,0,不分频.{0x7a, 0x20},{0x7b, 0x1c},{0x7c, 0x28},{0x7d, 0x3c},//20{0x7e, 0x55},{0x7f, 0x68},{0x80, 0x76},{0x81, 0x80},{0x82, 0x88},{0x83, 0x8f},{0x84, 0x96},{0x85, 0xa3},{0x86, 0xaf},{0x87, 0xc4},//30{0x88, 0xd7},{0x89, 0xe8},{0x13, 0xe0},{0x00, 0x00},//AGC{0x10, 0x00},{0x0d, 0x00},{0x14, 0x20},//0x38, limit the max gain {0xa5, 0x05},{0xab, 0x07},{0x24, 0x75},//40{0x25, 0x63},{0x26, 0xA5},{0x9f, 0x78},{0xa0, 0x68},{0xa1, 0x03},//0x0b,{0xa6, 0xdf},//0xd8,{0xa7, 0xdf},//0xd8,{0xa8, 0xf0},{0xa9, 0x90},{0xaa, 0x94},//50{0x13, 0xe5},{0x0e, 0x61},{0x0f, 0x4b},{0x16, 0x02},{0x1e, 0x27},//图像输出镜像控制.0x07, {0x21, 0x02},{0x22, 0x91},{0x29, 0x07},{0x33, 0x0b},{0x35, 0x0b},//60{0x37, 0x1d},{0x38, 0x71},{0x39, 0x2a},{0x3c, 0x78},{0x4d, 0x40},{0x4e, 0x20},{0x69, 0x5d},{0x6b, 0x40},//PLL*4=48Mhz{0x74, 0x19},{0x8d, 0x4f},{0x8e, 0x00},//70{0x8f, 0x00},{0x90, 0x00},{0x91, 0x00},{0x92, 0x00},//0x19,//0x66{0x96, 0x00},{0x9a, 0x80},{0xb0, 0x84},{0xb1, 0x0c},{0xb2, 0x0e},{0xb3, 0x82},//80{0xb8, 0x0a},{0x43, 0x14},{0x44, 0xf0},{0x45, 0x34},{0x46, 0x58},{0x47, 0x28},{0x48, 0x3a},{0x59, 0x88},{0x5a, 0x88},{0x5b, 0x44},//90{0x5c, 0x67},{0x5d, 0x49},{0x5e, 0x0e},{0x64, 0x04},{0x65, 0x20},{0x66, 0x05},{0x94, 0x04},{0x95, 0x08},{0x6c, 0x0a},{0x6d, 0x55},{0x4f, 0x80},{0x50, 0x80},{0x51, 0x00},{0x52, 0x22},{0x53, 0x5e},{0x54, 0x80},//{0x54, 0x40},//110{0x09, 0x03},//驱动能力最大{0x6e, 0x11},//100{0x6f, 0x9f},//0x9e for advance AWB {0x55, 0x00},//亮度{0x56, 0x40},//对比度{0x57, 0x80},//0x402.RGB565的配置:/*以下为OV7670 QVGA RGB565参数 */ {0x3a, 0x04},//{0x40, 0x10},{0x12, 0x14},{0x32, 0x80},{0x17, 0x16},{0x18, 0x04},//5{0x19, 0x02},{0x1a, 0x7b},//0x7a,{0x03, 0x06},//0x0a,{0x0c, 0x0c},{0x15, 0x02},{0x3e, 0x00},//10{0x70, 0x00},{0x71, 0x01},{0x72, 0x11},{0x73, 0x09},//{0xa2, 0x02},//15{0x11, 0x00},{0x7a, 0x20},{0x7b, 0x1c},{0x7c, 0x28},{0x7d, 0x3c},//20{0x7e, 0x55},{0x7f, 0x68},{0x80, 0x76},{0x81, 0x80},{0x82, 0x88},{0x83, 0x8f},{0x84, 0x96},{0x85, 0xa3},{0x86, 0xaf},{0x87, 0xc4},//30{0x88, 0xd7},{0x89, 0xe8},{0x13, 0xe0},{0x00, 0x00},//AGC{0x10, 0x00},{0x0d, 0x00},{0x14, 0x30},//0x38, limit the max gain {0xa5, 0x05},{0xab, 0x07},{0x24, 0x75},//40{0x25, 0x63},{0x26, 0xA5},{0x9f, 0x78},{0xa0, 0x68},{0xa1, 0x03},//0x0b,{0xa6, 0xdf},//0xd8,{0xa7, 0xdf},//0xd8,{0xa8, 0xf0},{0xa9, 0x90},{0xaa, 0x94},//50{0x13, 0xf5},{0x0e, 0x61},{0x0f, 0x4b},{0x16, 0x02},{0x1e, 0x07},//0x07,{0x21, 0x02},{0x22, 0x91},{0x29, 0x07},{0x33, 0x0b},{0x35, 0x0b},//60{0x37, 0x1d},{0x38, 0x71},{0x39, 0x2a},{0x3c, 0x78},{0x4d, 0x40},{0x4e, 0x20},{0x69, 0x5d},{0x6b, 0x40},//PLL{0x74, 0x19},{0x8d, 0x4f},{0x8e, 0x00},//70{0x8f, 0x00},{0x90, 0x00},{0x91, 0x00},{0x92, 0x00},//0x19,//0x66{0x96, 0x00},{0x9a, 0x80},{0xb0, 0x84},{0xb1, 0x0c},{0xb2, 0x0e},{0xb3, 0x82},//80{0xb8, 0x0a},{0x43, 0x14},{0x44, 0xf0},{0x45, 0x34},{0x46, 0x58},{0x47, 0x28},{0x48, 0x3a},{0x59, 0x88},{0x5a, 0x88},{0x5b, 0x44},//90{0x5c, 0x67},{0x5d, 0x49},{0x5e, 0x0e},{0x64, 0x04},{0x65, 0x20},{0x66, 0x05},{0x94, 0x04},{0x95, 0x08},{0x6c, 0x0a},{0x6d, 0x55},{0x4f, 0x80},{0x50, 0x80},{0x51, 0x00},{0x52, 0x22},{0x53, 0x5e},{0x54, 0x80},//{0x54, 0x40},//110{0x6e, 0x11},//100{0x6f, 0x9f},//0x9e for advance AWB {0x55, 0x00},//亮度{0x56, 0x45},//对比度{0x57, 0x80},//0x40四、移植过程中引脚的修改1.外部中断的修改我需要修改的引脚有FIFO-OE / FIFO-RCLK / FIIFO-RRST / SCL / SDA / VSYNC / WRST其他的不用多说,VSYNC需要修改的地方还是蛮多的~(我用的外部中断口是PB13)其中需要注意的是:macOV7670_VSYNC_EXTI_IRQ这个,Pin13口需要用这个,具体用哪个要查书。
PC104对OV7670寄存器的读写摘要:Ominisrision 公司的新型摄像头模组OV7670,具有体积小、输出图像格式多、接口方便、寄存器可读写等特点,是嵌入式系统中图像采集的理想选择。
通过设置OV7670 的寄存器的值,可以更好地实现对摄像头的控制,得到更加理想的图像。
本文介绍了PC104 系统对OV7670 摄像头模组寄存器读写的过程及编程方法。
关键词:OV7670;图像采集;PC104;SCCB 嵌入式系统中的图像采集是进行图像处理的基础,只有在采集时就进行前端的处理和控制,才能减少图像中的噪声,为后续的图像处理提供良好的数据。
OV7670 开放了控制寄存器,用户可以通过SCCB 总线来实现读写操作,可以设置图像输出格式、控制曝光等,为具体的应用场景提供了更底层的支持。
正确的读写寄存器就成为获得图像的第一步。
1 OV7670 摄像头模组简介OV7670 CAMERACHIPTM 图像传感器,体积小、工作电压低,提供单片VGA 摄像头和影像处理器的所有功能。
通过SCCB 总线控制,可以输出整帧、子采样、取窗口等方式的各种分辨率8 位影响数据。
该产品VGA 图像最高达到30 帧/秒。
用户可以完全控制图像质量、数据格式和传输方式。
所有图像处理功能过程包括伽玛曲线、白平衡、饱和度、色度等都可以通过SCCB 接口编程。
OmmiVision 图像传感器应用独有的传感器技术,通过减少或消除光学或电子缺陷如固定图案噪声、托尾、浮散等,提高图像质量,得到清晰的稳定的彩色图像。
功能框图如图1 所示。
为了保证图像采集的连续性和完整性,外加一个384K,8 位的FIFO,AL422 为图像采集和处理作缓冲。
OV7670 与AL422 的连接如图2 所示。
2 两线SCCB SCCB(Serial Camera Control Bus),即串行摄像机控制总线,是。
高通 CAMIF 和 OV sensor 调试总结手机事业部 CDMA 二部 时慧钦 2008 年 2 月 【摘要】 要借用某高通平台的 camera 接口,联合 OV(OmniVision)公司的 sensor,实现手机摄像头的拍照及 录像功能,需要处理两芯片、显示屏和需求配合的问题,在这个过程中遇到并解决了许多问题。
【关键词】 拍照 预览 CAMIF一、问题的提出新手上路,第一次见到 ov sensor,第一次认识 Qualcomm 的 CAMIF,没有任何经验,调试中遇到 诸多劫难,如没有预览不到任何象素点、图像色彩不对、拍照无效区域、dispsize 设置不合适预览全屏 问题、黑白模式上层设不成、预览和拍照范围不一致的问题、软件转 90 度压扁问题等等。
二、解决思路先做基础理论的储备。
VGA :640x480; QVGA :320x240; YUV 格式:4:2:2 曝光控制/伽玛增益/白平衡等都是效果方面的调整。
对于象素数较大的 sensor,如 1280x1024,由于数据量较大,通常预览分辨率 640x512 拍照分辨率 是 1280x1024,且拍照时的 PCLK 是预览时的 2 倍,这样可以对 VFE(video front end)来说是同样的 帧速率。
Ov7670 的寄存器 0x15 的 bit6 可以切换 sensor 输出 HREF 或 HSYNC,我们用 HREF。
Camera_process_config_vfe 初始化 VFE 寄存器; Qcamraw_set_header 设置 sensor 帧头; 代码分层: 层 代码位置 Drivers camsensor services camera Oem 层 Oemcamera.c App 层 Qcamera.c/Qcamcorder.cTrace32命令:data.image addr. 640. 480. /GS8, 可方便的看某buffer地址中的图片, 判断取到的预览图 片内容和最终显示的屏上的差异。
摄像机的录像分辨率设置在摄像机的应用中,录像分辨率设置是一个重要的参数,它直接影响到所录制视频的质量和文件大小。
合理的分辨率选择可以在保证画面清晰度的同时,有效控制存储空间的占用。
本文将探讨摄像机录像分辨率设置的相关问题,以帮助读者正确选择合适的录像分辨率。
一、什么是录像分辨率录像分辨率是指录制视频时所采集的图像的细节程度,通常用水平像素和垂直像素表示。
例如,一种常见的分辨率为1920x1080,即水平像素为1920,垂直像素为1080。
分辨率越高,图像的细节表现能力越好,但同时也会占用更多的存储空间。
二、常见的录像分辨率1. 1080p(1920x1080)1080p是目前最为常见的高清分辨率,它提供了相对较高的图像质量,在大多数情况下都能满足普通用户的需求。
1080p分辨率的视频在播放时具有较好的清晰度和细节表现,适合于大屏幕播放和高质量演示。
2. 720p(1280x720)720p分辨率相对于1080p来说,图像的细节表现能力稍逊一筹,但在很多应用场景下仍然足够。
由于720p分辨率的视频文件较1080p分辨率小,存储空间占用更低,适合于存储和传输速度有限的环境。
3. VGA(640x480)和QVGA(320x240)VGA和QVGA是常见的低分辨率选项,通常用于特殊应用场景或者要求较低的监控环境。
虽然相对于高分辨率来说,图像质量较差,但存储空间占用较小,适合于存储需求和带宽限制较高的场景。
三、如何选择合适的录像分辨率在选择合适的录像分辨率时,需要综合考虑以下几个因素:1. 应用场景根据摄像机的具体应用场景来选择合适的录像分辨率。
如果是用于普通家庭监控或者个人使用,1080p或720p分辨率已经足够满足需求;而如果是用于安全监控或其他专业领域,可能需要更高的分辨率。
2. 存储空间高分辨率的视频文件通常占用更多的存储空间,因此在存储资源有限的情况下,需要根据实际情况进行选择。
如果存储空间有限,可以考虑降低分辨率以节省空间。
OV7670 Camera Board (B)使 用 说 明 V1.2微雪电子w ww.w a v e s目录1.OV7670一般摄像头模块1.1简介1.2管脚定义1.3控制方式说明 1.4采集图像的基本方法2.OV7670带FIFO 摄像头模块2.1简介 2.2管脚定义2.3控制方式说明 2.4图像采集的基本方法3.问题解答3.1图像采集难吗3.2学习图像方面的知识需要哪些基础 3.3初学者遇到问题该怎么解决 3.4模块提供那些资料3.5单片机能够真正的采集图像吗3.6带FIFO 和不带FIFO 的模块到底哪个好,有什么区别 3.7模块上有晶振好,还是没晶振好 3.8摄像头寄存器该怎么设置3.9 微雪电子模块提供的Demo 输出的数据是什么格式的w ww.w a ve s3.10如果想真正实现图像的采集并且能够处理图像数据该如何做 3.11 微雪电子的那个模块能够适合飞思卡尔小车的比赛 3.12 微雪电子的模块输出到底是模拟的还是数字的3.13 微雪电子模块的质量如何3.14 微雪电子几种驱动板的功能,区别是什么 3.15如何检测微雪电子摄像头模块是否损坏 3.16 微雪电子摄像头模块和模组的区别是什么w ww.w a ve s1.OV7670一般摄像头模块1.简介:OV7670一般模块指微雪电子推出的低成本数字输出CMOS 摄像头,其摄像头包含30w 像素的CMOS 图像感光芯片,3.6mm 焦距的镜头和镜头座,板载CMOS 芯片所需要的各种不同电源(电源要求详见芯片的数据文件),板子同时引出控制管脚和数据管脚,方便操作和使用。
图1.OV7670一般模块2.管脚定义:如图,控制传感器所需的管脚定义如下:3V3-----输入电源电压(推荐使用3.3,5V 也可,但不推荐使用) GDN-----接地点SIO_C---SCCB 接口的控制时钟(注意:部分低级单片机需要上拉控制,和I2C 接口类似)w ww.w a ve sSIO_D---SCCB 接口的串行数据输入(出)端(注意:部分低级单片机需要上拉控制,和I2C 接口类似)VSYNC---帧同步信号(输出信号) HREF----行同步信号(输出信号)PCLK----像素时钟(输出信号) XCLCK---时钟信号(输入信号) D0-D7---数据端口(输出信号) RESTE---复位端口(正常使用拉高)PWDN----功耗选择模式(正常使用拉低)图2.微雪摄像头接口定义3.控制方式说明采集图像数据需要严格按照OV 公司的芯片时序进行,这些时序包括:(1) S CCB 通讯时序,其作用是设置芯片内部寄存器,以控制图像的各种所w ww.w a ve s需功能。
OV7670带FIFO的CMOS摄像头使用说明OV7670-CMOS摄像头使用说明2014.2.10 参赛平台1.OV7670带FIFO 模块1.简介:OV7670带FIFO 模块,是针对慢速的MCU 能够实现图像采集控制推出的带有缓冲存储空间的一种模块。
这种模块增加了一个FIFO (先进先出)存储芯片,同样包含30w 像素的CMOS 图像感光芯片,3.6mm 焦距的镜头和镜头座,板载CMOS 芯片所需要的各种不同电源(电源要求详见芯片的数据文件),板子同时引出控制管脚和数据管脚,方便操作和使用。
图1.OV7670带FIFO模块 2.管脚定义:参赛平台如图,控制传感器所需的管脚定义如下:3V3-----输入电源电压(推荐使用3.3,5V 也可,但不推荐)GDN-----接地点SIO_C---SCCB 接口的控制时钟(注意:部分低级单片机需要上拉控制,和I2C 接口类似)SIO_D---SCCB 接口的串行数据输入(出)端(注意:部分低级单片机需要上拉控制,和I2C 接口类似)VSYNC---帧同步信号(输出信号)HREF----行同步信号(输出信号)PCLK----像素时钟(输出信号)XCLCK---时钟信号(输入信号)D0-D7---数据端口(输出信号)RESTE---复位端口(正常使用拉高)PWDN----功耗选择模式(正常使用拉低)STROBE—拍照闪光控制端口(正常使用可以不需要)FIFO_RCK---FIFO 内存读取时钟控制端FIFO_WR_CTR----FIFO 写控制端(1为允许CMOS 写入到FIFO,0为禁止) FIFO_OE----FIFO 关断控制FIFO_WRST—FIFO 写指针服务端FIFO_RRST—FIFO 读指针复位端参赛平台图7.FIFO摄像头接口定义3.控制方式说明由于采用了FIFO 做为数据缓冲,数据采集大大简便,用户只需要关心是如何读取即可,不需要关心具体数据是如何采集到的,这样可减小甚至不用关心CMOS 的控制以及时序关系,就能够实现图像的采集。
颜色空间指不同波长的电磁波谱与不同物质相互作用所构成的色谱空间。
颜色空间也称色彩模型(又称彩色空间或彩色系统),它的用途是在某些标准下用通常可接受的方式对彩色加以说明。
色彩模型是描述使用一组值(通常使用三个、四个值或者颜色成分)表示颜色方法的抽象数学模型。
本质上,色彩模型是坐标系统和子空间的阐述。
通俗地说,自然界的多彩空间是复杂变换的,在不同的应用领域人们在这个复杂的色彩空间中采用的色彩范围或者说是选取的色彩范围有所不同或者是表述方法不同。
因此就出现了多种多样的空间色彩描述方法,即不同的颜色空间。
颜色空间有许多种,常用有RGB,CMY,YUV,HSV,HSI等。
RGB颜色空间根据三基色原理,用基色光单位来表示光的量,则在RGB颜色空间,任意色光F都可以用R、G、B三色不同分量的相加混合而成:F=r [ R ] + g [ G ] + b [ B ]RGB颜色空间还可以用一个三维的立方体来描述,如下图。
这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。
实际应用中RGB存在系列标准。
RAW RGBSensor的感光原理是通过一个一个的感光点对光进行采样和量化,但,在Sensor中,每一个感光点只能感光RGB中的一种颜色。
所以,通常所说的30万像素或130万像素等,指的是有30万或130万个感光点。
每一个感光点只能感光一种颜色。
但是,要还原一个真正图像,需要每一个点都有RGB三种颜色,所以,对于CCIR601或656的格式,在Sensor模组的内部会有一个ISP 模块,会将Sensor采集到的数据进行插值和特效处理,例如:如果一个感光点感应的颜色是R,那么,ISP模块就会根据这个感光点周围的G、B感光点的数值来计算出此点的G、B值,那么,这一点的RGB值就被还原了,然后在编码成601或656的格式传送给Host。
而RAW RGB格式的Sensor则是将没个感光点感应到的RGB数值直接传送给Host,由Host来进行插值和特效处理。
废话后面说,先直接上OV7670寄存器的配置部分const uint8_t OV7670_Reg[][2]={//Frame Rate Adjustment for 24Mhz input clock//30fps PCLK=24MHz{0x11, 0x80},//软件应用手册上设置的是0x80,例程设置的是0x00{0x6b, 0x0a},//PLL控制,软件应用手册上设置的是0x0a,例程设置的是0x40,将PLL调高的话就会产生花屏{0x2a, 0x00},{0x2b, 0x00},{0x92, 0x00},{0x93, 0x00},{0x3b, 0x0a},//Output format{0x12, 0x14},//QVGA(320*240)、RGB//RGB555/565 option(must set COM7[2] = 1 and COM7[0] = 0){0x40, 0x10},//RGB565,effective only when RGB444[1] is low{0x8c, 0x00},//Special effects - 特效//normal{0x3a, 0x04},{0x67, 0xc0},{0x68, 0x80},//Mirror/VFlip Enable - 水平镜像/竖直翻转使能{0x1e, 0x37},//修改配置值将产生图像显示上下或左右颠倒//Banding Filter Setting for 24Mhz Input Clock - 条纹滤波器//30fps for 60Hz light frequency//{0x13, 0xe7},//banding filer enable//{0x9d, 0x98},//50Hz banding filer//{0x9e, 0x7f},//60Hz banding filer//{0xa5, 0x02},//3 step for 50Hz//{0xab, 0x03},//4 step for 60Hz//{0x3b, 0x02},//select 60Hz banding filer//Simple White Balance - 白平衡//{0x13, 0xe7},//AWB、AGC、AGC Enable and ...//{0x6f, 0x9f},//simple AWB//AWBC - 自动白平衡控制(Automatic white balance control)//{0x43, 0x14},//用户手册里这些寄存器的值都是保留(Reserved),不用设置的呀?//{0x44, 0xf0},//{0x45, 0x34},//{0x46, 0x58},//{0x47, 0x28},//{0x48, 0x3a},//AWB Control//{0x59, 0x88},//用户手册连寄存器都是保留,初始值都没提供//{0x5a, 0x88},//{0x5b, 0x44},//{0x5c, 0x67},//{0x5d, 0x49},//{0x5e, 0x0e},//AWB Control//{0x6c, 0x0a},//{0x6d, 0x55},//{0x6e, 0x11},//{0x6f, 0x9f},//AGC/AEC - Automatic Gain Control自动增益补偿/Automatic exposure Control自动曝光控制//{0x00, 0x00},//{0x14, 0x20},//{0x24, 0x75},//{0x25, 0x63},//{0x26, 0xA5},//AEC algorithm selection - AEC公式选择//{0xaa, 0x94},//基于平均值的AEC算法Average-based AEC algorithm/基于直方图的AEC算法Histogram-based AEC algorithm//基于直方图的AGC/AEC的控制//{0x9f, 0x78},//{0xa0, 0x68},//{0xa6, 0xdf},//{0xa7, 0xdf},//{0xa8, 0xf0},//{0xa9, 0x90},//Fix Gain Control - 固定增益控制//{0x69, 0x5d},//Fix gain for Gr channel/for Gb channel/for R channel/for B channel//Color saturation 颜色饱和度+ 0//{0x4f, 0x80},//{0x50, 0x80},//{0x51, 0x00},//{0x52, 0x22},//{0x53, 0x5e},//{0x54, 0x80},//{0x58, 0x9e},//Brightness - 亮度+ 0//{0x55, 0x00},//Contrast - 对比度+ 0//{0x56, 0x40},//Gamma Curve - 伽马曲线//{0x7a, 0x20},//{0x7b, 0x1c},//{0x7c, 0x28},//{0x7d, 0x3c},//{0x7e, 0x55},//{0x7f, 0x68},//{0x80, 0x76},//{0x81, 0x80},//{0x82, 0x88},//{0x83, 0x8f},//{0x84, 0x96},//{0x85, 0xa3},//{0x86, 0xaf},//{0x87, 0xc4},//{0x88, 0xd7},//{0x89, 0xe8},//Matrix Coefficient - 色彩矩阵系数//{0x4f, 0x80},//{0x50, 0x80},//{0x51, 0x00},//{0x52, 0x22},//{0x53, 0x5e},//{0x54, 0x80},//Lens Correction Option - 镜头补偿选项 //{0x62, 0x00},//{0x63, 0x00},//{0x64, 0x04},//{0x65, 0x20},//{0x66, 0x05},//{0x94, 0x04},//effective only when LCC5[2] is high//{0x95, 0x08},//effective only when LCC5[2] is high//注释这些配置的话,就倾斜显示,并显示多块,这到底是控制什么的?跟时序图有关?{0x17, 0x16},//行频Horizontal Frame开始高八位(低三位在HREF[2:0]){0x18, 0x04},//行频Horizontal Frame结束高八位(低三位在HREF[5:3]){0x19, 0x02},//场频Vertical Frame开始高八位(低二位在VREF[1:0]){0x1a, 0x7b},//场频Vertical Frame结束高八位(低二位在VREF[3:2]){0x32, 0x80},//HREF{0x03, 0x06},//VREF//注释这个配置的话,就显示花屏了{0x15, 0x02},//配置PCLK、HREF、VSYNC相关//Automatic black Level Compensation - 自动黑电平校正{0xb0, 0x84},//调试时注释这项配置时,颜色显示不正常了,红色练绿色,绿色变红色,但用户手册对这寄存器是保留RSVD//{0xb1, 0x0c},//{0xb2, 0x0e},//{0xb3, 0x82},//{0xb8, 0x0a},//SCALING_xx寄存器//{0x70, 0x00},//{0x71, 0x00},//{0x72, 0x11},//{0x73, 0x08},//{0x3e, 0x00},//ADC//{0x37, 0x1d},//ADC控制ADC Control//{0x38, 0x71},//ADC和模拟共模控制ADC and Analog Common Mode Control//{0x39, 0x2a},//ADC偏移控制ADC Offset Control//零杂的寄存器//{0x92, 0x00},//空行低八位Dummy Line low 8 bits//{0xa2, 0x02},//像素时钟延时//{0x0c, 0x0c},//{0x10, 0x00},//{0x0d, 0x01},//{0x0f, 0x4b},//{0x3c, 0x78},//{0x74, 0x19},//用户手册里这几个寄存器都是保留RSVD//{0x0e, 0x61},//{0x16, 0x02},//{0x21, 0x02},//{0x22, 0x91},//{0x29, 0x07},//{0x33, 0x0b},//{0x35, 0x0b},//{0x4d, 0x40},//{0x4e, 0x20},//{0x8d, 0x4f},//{0x8e, 0x00},//{0x8f, 0x00},//{0x90, 0x00},//{0x91, 0x00},//{0x96, 0x00},//{0x9a, 0x80},};刚开始学OV7670摄像头,我想大家跟我一样心里很毛躁吧,一个模块需要你配置100多个寄存器,但用户手册对寄存器的介绍却草草的一笔带过,自己无从下手啊,只能看开发板给的例程和上网找一些大虾的帖子了。
废话后面说,先直接上OV7670寄放器的配置部份const uint8_t OV7670_Reg[][2]={//Frame Rate Adjustment for 24Mhz input clock//30fps PCLK=24MHz{0x11, 0x80},//软件应用手册上设置的是0x80,例程设置的是0x00{0x6b, 0x0a},//PLL操纵,软件应用手册上设置的是0x0a,例程设置的是0x40,将PLL调高的话就会产生花屏{0x2a, 0x00},{0x2b, 0x00},{0x92, 0x00},{0x93, 0x00},{0x3b, 0x0a},//Output format{0x12, 0x14},//QVGA(320*240)、RGB//RGB555/565 option(must set COM7[2] = 1 and COM7[0] = 0){0x40, 0x10},//RGB565,effective only when RGB444[1] is low{0x8c, 0x00},//Special effects - 特效//normal{0x3a, 0x04},{0x67, 0xc0},{0x68, 0x80},//Mirror/VFlip Enable - 水平镜像/竖直翻转使能{0x1e, 0x37},//修改配置值将产生图像显示上下或左右倒置//Banding Filter Setting for 24Mhz Input Clock - 条纹滤波器//30fps for 60Hz light frequency//{0x13, 0xe7},//banding filer enable//{0x9d, 0x98},//50Hz banding filer//{0x9e, 0x7f},//60Hz banding filer//{0xa5, 0x02},//3 step for 50Hz//{0xab, 0x03},//4 step for 60Hz//{0x3b, 0x02},//select 60Hz banding filer//Simple White Balance - 白平稳//{0x13, 0xe7},//AWB、AGC、AGC Enable and ...//{0x6f, 0x9f},//simple AWB//AWBC - 自动白平稳操纵(Automatic white balance control)//{0x43, 0x14},//用户手册里这些寄放器的值都是保留(Reserved),不用设置的呀? //{0x44, 0xf0},//{0x45, 0x34},//{0x46, 0x58},//{0x47, 0x28},//{0x48, 0x3a},//AWB Control//{0x59, 0x88},//用户手册连寄放器都是保留,初始值都没提供//{0x5a, 0x88},//{0x5b, 0x44},//{0x5c, 0x67},//{0x5d, 0x49},//{0x5e, 0x0e},//AWB Control//{0x6c, 0x0a},//{0x6d, 0x55},//{0x6e, 0x11},//{0x6f, 0x9f},//AGC/AEC - Automatic Gain Control自动增益补偿/Automatic exposure Control自动曝光操纵//{0x00, 0x00},//{0x14, 0x20},//{0x24, 0x75},//{0x25, 0x63},//{0x26, 0xA5},//AEC algorithm selection - AEC公式选择//{0xaa, 0x94},//基于平均值的AEC算法Average-based AEC algorithm/基于直方图的AEC算法Histogram-based AEC algorithm//基于直方图的AGC/AEC的操纵//{0x9f, 0x78},//{0xa0, 0x68},//{0xa6, 0xdf},//{0xa7, 0xdf},//{0xa8, 0xf0},//{0xa9, 0x90},//Fix Gain Control - 固定增益操纵//{0x69, 0x5d},//Fix gain for Gr channel/for Gb channel/for R channel/for B channel//Color saturation 颜色饱和度+ 0 //{0x4f, 0x80},//{0x50, 0x80},//{0x51, 0x00},//{0x52, 0x22},//{0x53, 0x5e},//{0x54, 0x80},//{0x58, 0x9e},//Brightness - 亮度+ 0//{0x55, 0x00},//Contrast - 对照度+ 0//{0x56, 0x40},//Gamma Curve - 伽马曲线//{0x7a, 0x20},//{0x7b, 0x1c},//{0x7c, 0x28},//{0x7d, 0x3c},//{0x7e, 0x55},//{0x7f, 0x68},//{0x80, 0x76},//{0x81, 0x80},//{0x82, 0x88},//{0x83, 0x8f},//{0x84, 0x96},//{0x85, 0xa3},//{0x86, 0xaf},//{0x87, 0xc4},//{0x88, 0xd7},//{0x89, 0xe8},//Matrix Coefficient - 色彩矩阵系数//{0x4f, 0x80},//{0x50, 0x80},//{0x51, 0x00},//{0x52, 0x22},//{0x53, 0x5e},//{0x54, 0x80},//Lens Correction Option - 镜头补偿选项//{0x62, 0x00},//{0x63, 0x00},//{0x64, 0x04},//{0x65, 0x20},//{0x66, 0x05},//{0x94, 0x04},//effective only when LCC5[2] is high//{0x95, 0x08},//effective only when LCC5[2] is high//注释这些配置的话,就倾斜显示,并显示多块,这究竟是操纵什么的?跟时序图有关? {0x17, 0x16},//行频Horizontal Frame开始高八位(低三位在HREF[2:0]){0x18, 0x04},//行频Horizontal Frame终止高八位(低三位在HREF[5:3]){0x19, 0x02},//场频Vertical Frame开始高八位(低二位在VREF[1:0]){0x1a, 0x7b},//场频Vertical Frame终止高八位(低二位在VREF[3:2]){0x32, 0x80},//HREF{0x03, 0x06},//VREF//注释那个配置的话,就显示花屏了{0x15, 0x02},//配置PCLK、HREF、VSYNC相关//Automatic black Level Compensation - 自动黑电平校正{0xb0, 0x84},//调试时注释这项配置时,颜色显示不正常了,红色练绿色,绿色变红色,但用户手册对这寄放器是保留RSVD//{0xb1, 0x0c},//{0xb2, 0x0e},//{0xb3, 0x82},//{0xb8, 0x0a},//SCALING_xx寄放器//{0x70, 0x00},//{0x71, 0x00},//{0x72, 0x11},//{0x73, 0x08},//{0x3e, 0x00},//ADC//{0x37, 0x1d},//ADC操纵ADC Control//{0x38, 0x71},//ADC和模拟共模操纵ADC and Analog Common Mode Control//{0x39, 0x2a},//ADC偏移操纵ADC Offset Control//零杂的寄放器//{0x92, 0x00},//空行低八位Dummy Line low 8 bits//{0xa2, 0x02},//像素时钟延时//{0x0c, 0x0c},//{0x10, 0x00},//{0x0d, 0x01},//{0x0f, 0x4b},//{0x3c, 0x78},//{0x74, 0x19},//用户手册里这几个寄放器都是保留RSVD//{0x0e, 0x61},//{0x16, 0x02},//{0x21, 0x02},//{0x22, 0x91},//{0x29, 0x07},//{0x33, 0x0b},//{0x35, 0x0b},//{0x4d, 0x40},//{0x4e, 0x20},//{0x8d, 0x4f},//{0x8e, 0x00},//{0x8f, 0x00},//{0x90, 0x00},//{0x91, 0x00},//{0x96, 0x00},//{0x9a, 0x80},};刚开始学OV7670摄像头,我想大伙儿跟我一样内心很毛躁吧,一个模块需要你配置100多个寄放器,但用户手册对寄放器的介绍却草草的一笔带过,自己无从下手啊,只能看开发板给的例程和上网找一些大虾的帖子了。
L平台VGA Sensor调试模板说明一.Sensor调试需要用到的信息。
1.sensor的预览以及拍照时候的MCLK建议都是12MHZ,而sensor的输出时钟PCLK为12MHZ。
MCLK是可以配置的,位置在例如结构体s_OV7670_resolution_Tab_YUV里的第一行以及第二行。
可获得的配置值有24MHZ, 12MHZ,26MHZ,13MHZ等。
2.Capture preview的帧率建议配置为10-15 fps,不能超出15 fps. Video preview的帧率建议是10 fps左右,不能超过12.5 Fps,Pc cam 帧率建议是10 fps左右。
帧率的设置在例如函数set_ov7670_video_mode()里。
3.sensor的HSYNC,VSYNC以及PCLK的极性必须要和平台的对应设置,在平台里设置的位置,在例如g_OV7670_yuv_info结构体里的第四行。
HS,VS,VCLK都有2个极性可以设置,极性为正的时候的设置:SENSOR_HW_SIGNAL_PCLK_P, SENSOR_HW_SIGNAL_VSYNC_P以及SENSOR_HW_SIGNAL_HSYNC_P;极性为负的时候的设置:SENSOR_HW_SIGNAL_PCLK_N, SENSOR_HW_SIGNAL_VSYNC_N以及SENSOR_HW_SIGNAL_HSYNC_N。
在实际应用中,根据实际情况进行选择正确的配置。
4.信号以及信号顺序的设置:sensor 输出信号的顺序必须和平台一致,平台里,信号以及信号顺序的设置位置在例如g_OV7670_yuv_info的结构体里,SENSOR_IMAGE_FORMA T_YUV422以及SENSOR_IMAGE_PATTERN_YUV422_YUYV,前面是信号,后面是信号顺序。
这个是可以配置的,平台默认的信号是YUV信号,顺序是:YUYV。
花了几天时间用stm32和ov7670搞了个图像采集,这比我预想的要难很多。
ov7670一百多个寄存器而且ov公司的datasheet简陋得常常让我想说一句:我去年买了个表。
后来还是借鉴了网络上的一些寄存器配置,在加上苦读ov推出的资料终于还是搞出了个简陋的摸样出来。
话不多说了,给大家分享一下心得体会,以便帮助后面学习的朋友少走些弯路。
一:摄像头不比其他的传感器,有一定的难度,而且资料太过简陋,后面学习的朋友尽量买些成熟产品做开发,比如说淘宝买的开发套件。
我就吃了这亏,stm32和摄像头完全从零做起,啥都没有,连上位机都准备自己写,这没必要时间成本太高了。
二:不要指望自己一个一个寄存器去配置,本来资料就简陋,有很多寄存器你看了资料未必能明白啥个意思,在网上找个配置方案(也可以借用我的配置方案)修改一些关键地方就行了。
三:注意焦距的调节,如果焦距调节不正确,可能画面模糊一片,慢慢调节一下焦距图像画面应该就出来了(前提是你已经采集到了图像)四:注意SCCB(也就是I2C)的时序,可以借鉴我的初始化,但配置完成后用串口读取一些寄存器的值打印出来,看是否配置成功,如果这个都没有配置成功,你先别浪费时间找图像了。
五:网上能下载到的上位机,一般都会显示255的灰度图像,而ov7670是不能够输出灰度图像的,所以只能将输出格式配置成为YUV,然后人为去掉UV,将Y传给上位机显示就是灰度图像了。
(注意网上下载的上位机软件可能会有一些协议,最好先弄清楚,要不然你显示肯定是显示不出来的)六:分辨率配置(具体配置参考代码)主要有一下几个寄存器0x 17 HSTART0x 18 HSTOP0x 19 VSTRT0x 1A VSTOP0x 03 VREFHREF 的高电平宽度等于我们所要显示的一行HREF = WEIGHT*2; 乘以二是因为每个像素点是有两个HSTOP=START + HREF;184 + 320*2 = 824; 然后在用824对784求余就是HSTOP的值(其原因,请仔细度ov7670的时序,如果懒得看,直接用就行)七:配置为YUV格式关键寄存器配置:(引用于网络论坛,感谢他的分享){0x12, 0x10},//QVGA YUV{0x3a, 0x14},//使用固定UV输出{0x3d, 0x80},//使用固定UV输出{0x67, 0x11},//固定U值,0x11,方便测试{0x68, 0xFF},//固定V值,0xFF,方便测试{0x40, 0xC0},//初始配置,YUV模式,这个寄存器必须设置,否则不好使为方便调试,都是用固定的U值和V值,向67中写入11,向68中写入FF,出来的是XX11XXFF,说明配置成功。
OV7690 照相模组软件应用指南修改日期:2008-9-2版本: 1.03OmniVision Technologies, Inc. 保留对文件的修改权,为提高产品的可靠性、功能、设计,对文档进行修改,可不给出过多注释.这个文件包含版权信息. 文件只能给那些获得OmniVision Technologies, Inc. 批准的员工、组织、团体使用。
Table of ContentsOV7690 照相模组 (1)1.1 有完整ISP的后端 (4)1.2 后端有YCbCr ISP (5)1.3 后端没有ISP (5)1.4 从一种输出格式到另一种输出格式的转换关系式 (5)2. 选择输出方案 (6)2.1 后端有ISP (6)2.2 后端没有ISP (6)3. 帧率调整 (6)3.1 24Mhz 输入时钟,帧率的调整 (6)30 fps, PCLK = 24Mhz (6)15 fps, PCLK = 12Mhz (7)25fps, PCLK = 24Mhz (7)12.5fps, PCLK = 12Mhz (7)3.2 26Mhz 输入时钟帧率的调整 (7)30 fps, PCLK = 26Mhz (7)15 fps, PCLK = 13Mhz (8)25fps, PCLK = 26Mhz (8)12.5fps, PCLK = 13Mhz (8)3.3 13Mhz 输入时钟,帧率的调整 (8)30 fps, PCLK = 26Mhz (8)15 fps, PCLK = 13Mhz (9)25fps, PCLK = 26Mhz (9)12.5fps, PCLK = 13Mhz (9)4. 夜间模式 (10)For 24Mhz/26Mhz Clock Input (10)For 13Mhz Clock Input (10)4.2 帧率自动调整夜间模式 (11)For 24Mhz/26Mhz Clock Input (11)For 13Mhz Clock Input (11)5. 消除Light Band(灯光条纹) (13)5.1 Light Band (13)5.2 消除 Light band(灯光条纹) (13)5.3 根据实际条件选择 Banding Filter (14)24Mhz时钟,Banding Filter 设置 (14)13Mhz/26Mhz时钟,Banding Filter 设置 (14)5.4 通过自动灯光频率检测,选择Banding Filter值 (15)13Mhz/26Mhz 输入时钟,Banding Filter设置 (16)5.5 Light Band 不能消除时 (16)6.白平衡 (16)6.1 简单白平衡 (16)6.2 高级白平衡 (17)7. 死伤点的校正 (17)8. BLC(暗电流补偿) (18)9. 录像模式 (18)10. 数字缩放 (18)11. OV7690 功能 (18)11.1 环境模式 (18)11.2 色饱和度 (19)11.3 曝光补偿 (21)11.4 对比度 (23)11.5 特效 (25)12. 镜头处理 (27)12.1 镜头失光 (27)12.2 暗角 (27)12.3 分辨率 (27)12.4 光学对比度 (27)12.5 保护玻璃 (28)12.6 镜头补偿 (28)13. 初始化参数 (29)13.1 YCbCr (29)13.2 RGB raw (32)13.3 RGB565 (32)13.4 输出分辨率 (32)1. 选择输出格式OV7690 支持的输出格式: YCbCr, RGB565, CCIR656 and RAW RGB. 在手机设计或其它应用中如何选择输出格式,首先看看以下backend (后端)芯片框图:常见后端芯片框图如下:LCD 接收的数据格式是RGB. 如, RGB444, RGB565, RGB555, RGB888 等数据格式,存儲器接口总是压缩格式. 压缩的数据是从 YCbCr 数据压缩而来. 因此RGB 和 YCbCr 数据都要放在芯片中. 不同的后端芯片“X” 块是不同的.1.1 有完整ISP的后端这是有完整ISP的后端.它可接收raw RGB 数据, 做插补得到RGB24数据,再做转换得到YCbCr数据. 这种后端芯片可接收Bayer raw RGB或 processed raw RGB数据.processed raw RGB是在Bayer raw RGB基础上经过处理的输出数据. Sensor的一些功能如:死伤点校正、镜头补偿、gamma校正、去噪点、锐度、暗电流补偿等都可做。