侵权投诉

【紫光同创国产FPGA教程】【第十五章】OV5640摄像头显示例程

FPGA技术专栏 ? 2021-02-22 13:45 ? 次阅读

本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处(alinx.com)。

1.实验简介

本实验将采用500万像素的OV5640摄像头模组(??樾秃牛篈N5640)为大家显示更高分辨率的视频画面。OV5640摄像头模组最大支持QSXGA(2592x1944)的拍照功能,支持1080P、720P、VGA、QVGA视频图像输出。本实验将OV5640配置为RGB565输出,先将视频数据写入外部存储器,再从外部存储器读取送到VGA、LCD等显示???。

2.实验原理

2.1OV5640传感器简介

OV5640摄像头模组采用美国OmniVision(豪威)CMOS芯片图像传感器OV5640,支持自动对焦的功能。OV5640芯片支持DVP和MIPI接口,本实验所用OV5640摄像头模组通过DVP接口和FPGA连接实现图像的传输。

2.2OV5640的参数说明

像素:硬件像素500W;

感光芯片:OV5640;

感光尺寸:1/4;

功能支持:自动对焦,自动曝光控制(AEC),自动白平衡(AWB);

图像格式:RAWRGB,RGB565/555/444,YUV422/420和JPEG压缩;

捕获画面:QSXGA(2592x1944),1080p,1280x960,VGA(640x480),QVGA(320x240);

工作温度:-30~70℃,稳定工作温度为0~50℃

2.3OV5640的寄存器配置

OV5640的寄存器配置是通过FPGA的I2C(也称为SCCB接口)接口来配置。用户需要配置正确的寄存器值让OV5640输出我们需要的图像格式,实验中我们把摄像头输出分辨率和显示设备分辨率配置成一样的,OV5640的摄像头输出的数据格式在以下的0x4300的寄存器里配置,在我们的例程中OV5640配置成RGB565的输出格式。

pIYBAGAvUHqAdeZMAACF743-LVA360.jpg

关于OV5640的寄存器还有很多很多,但很多寄存器用户无需去了解,寄存器的配置用户可以按照OV5640的应用指南来配置就可以了。如果您想了解更多的寄存器的信息,可以参考OV5640的datasheet中的寄存器说明。

2.4OV5640的RGB565输出格式

OV5640在HREF信号为高时输出一行的图像数据,输出数据在PCLK的上升沿的时候有效。因为RGB565显示每个像数为16bit,但OV5640每个PCLK输出的是8bit,所以每个图像的像数分两次输出,第一个Byte输出为R4~R0和G5~G3,第二个Byte输出为G2~G0和B4~B0,将前后2个字节拼接起来就是16BitRGB565数据。

o4YBAGAvUHuAHmDsAACJY1IfDsA711.jpg

3.程序设计

前面的实验已经为本实验做了大量的铺垫,包括I2C寄存器的配置、外部存储器的读写,本程序一个比较关键的地方在于视频同时读写,如何做到读写不冲突?在设计帧读写??槭本鸵丫悸堑秸獾?,所以有帧基地址选择,最大4帧选择,每次读视频帧地址和正在写的帧地址是不同的,而是上次写入一帧数据的地址,这样就可以避免读写冲突,避免视频画面裂开错位。

pIYBAGAvUHuAGpdaAAAuwNhQAQI350.jpg

cmos_8_16bit??橥瓿缮阆裢肥淙氲?个8bit数据转换到一个16bit数据(一个像素),数据位宽变成2倍,时钟频率不变,所以16bit数据是隔一个时钟周期有效,并不是每个时钟一直有效。

信号名称方向说明
rstin异步复位输入,高复位
pclkin传感器像素时钟输入
pdata_iin传感器8bit数据输入
de_iin数据有效(HREF)
pdata_oout16bit数据输出
hblankoutde_i延时一个时钟周期
de_oout数据输出有效

cmos_8_16bit??槎丝?/p>

cmos_write_req_gen??橥ü卸仙阆裢返牧型叫藕與mos_vsync的上升沿,生成ov5640数据写入的请求信号,表示一帧图像开始写入请求。另外生成write_addr_index写地址选择和read_addr_index读地址选择,这里read_addr_index的值会比write_addr_index的值延迟一帧,使得读和写的地址不冲突。

信号名称方向说明
rstin异步复位输入,高复位
pclkin传感器像素时钟输入
cmos_vsyncin场同步输入,每一帧视频都会变化一次,可以用于一帧的开始或结束
write_reqout写数据请求
write_addr_indexout写帧地址选择
read_addr_indexout读帧地址选择
write_req_ackin写请求应答

cmos_write_req_gen??槎丝?/p>

frame_read_write??槲颐且丫谇懊娴睦讨惺褂霉?,在这里就是把摄像头采集的数据存入写FIFO里,然后产生DDR3的Burst写请求,写入到DDR3中,另外读也是一样,当读FIFO里的数据小于一定值时,产生DDR3的Burst读请求。在这里我们实例化了2个frame_read_write???,分别对应2路视频的数据存储和读取。这里每路视频的DDR3的存储地址是不一样的。

第一路视频的存储地址如下:

o4YBAGAvUHuATrUmAAAJDzY4OT8862.jpg

第二路视频的存储地址如下:

pIYBAGAvUHuADACcAAAJf7u3oSI351.jpg

video_rect_read_data??楣δ芨?a target='_blank' class='arckwlink_hide'>HDMI字符显示osd_display??榈墓δ芾嗨?,本例程中是把从DDR3里读取的视频图像跟彩条图像叠加,因为ax7035使用的是双目摄像头,所以需要调用2个video_rect_read_data???。

信号名称方向说明
video_clkin视频的像素时钟
rstin复位信号
video_left_offsetin视频显示的水平偏移地址
video_top_offsetin视频显示的垂直偏移地址
video_widthin视频的宽度
video_heightin视频的高度
read_reqout读一帧图像数据请求
read_req_ackin读请求应答
read_enout读数据使能
read_datain读到的数据
timing_hsin输入的行同步信号
timing_vsin输入的列同步信号
timing_dein输入的数据有效信号
timing_datain输入的数据信号
hsout输出的行同步信号
vsout输出的列同步信号
deout输出的数据有效信号
vout_dataout输出的数据信号

4.实验现象

1)将摄像头??椴迦肟?,保证1脚对齐,1脚在焊盘形状和其他引脚是有明显区别的,是方形的。

o4YBAGAvUHyANe-RAAD0FNrHD2U388.jpg

AN5640摄像头??榱涌辶油?/p>

pIYBAGAvUH2ANdGUAAIJThpIY74681.jpg

AN5642摄像头??榱涌辶油?/p>

2)如果使用HDMI来显示,连接好HDMI显示器,如果使用液晶屏显示,插入液晶屏???,连接方法在《HDMI测试实验教程》中已讲述。

3)下载实验程序,可以看到摄像头??槭涑龅氖悠?。注意:ov5640??榻咕嗍强傻鞯?,如果焦距不合适,图像会模糊,旋转镜头,可以调节焦距。摄像头??橐崮们岱?,不要用手触摸元器件。

o4YBAGAvUH2AOdVGAACGwrrKyFo910.jpg

实验效果图

收藏 人收藏
分享:

评论

恒丰体育线路,恒丰电子游艺,恒丰彩票下载APP <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>