赞
踩
1)实验平台:正点原子开拓者FPGA 开发板
2)摘自《开拓者FPGA开发指南》关注官方微信号公众号,获取更多资料:正点原子
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-13912-1-1.html
第三十六章 OV7725摄像头RGB TFT-LCD显示实验
在OV7725摄像头VGA显示实验中,我们成功地在VGA显示器上实时显示出了摄像头采集的图
像。本章我们将使用FPGA开发板实现对OV7725的数字图像采集并通过7寸液晶屏模块实时显示。
本章包括以下几个部分:
36.1 OV7725简介
36.2 实验任务
36.3 硬件设计
36.4 程序设计
36.5 下载验证
OV7725简介
我们在“OV7725摄像头VGA显示实验”中对OV7725的视频传输时序、SCCB协议以及寄存器
的配置信息等内容作了详细的介绍,如果大家对这部分内容不是很熟悉的话,请参考“OV7725
摄像头VGA显示实验”中的OV7725简介部分。
实验任务
本节实验任务是使用开拓者开发板及OV7725摄像头实现图像采集,并通过正点原子推出的
ATK-7’RGBLCD液晶屏模块实时显示。
硬件设计
摄像头扩展接口原理图及OV7725模块说明与“OV7725摄像头VGA显示实验”完全相同,请
参考“OV7725摄像头VGA显示实验”硬件设计部分。RGB TFT-LCD接口部分的硬件设计请参考
“RGB TFT-LCD彩条显示实验”中的硬件设计部分。
由于OV7725、LCD接口和SDRAM引脚数目较多且在前面相应的章节中已经给出它们的管脚列
表,这里不再列出管脚分配。
程序设计
图 36.4.1是根据本章实验任务画出的系统框图。对比“OV7725摄像头VGA显示实验”的系
统框图可以发现,我们只是把VGA驱动模块替换成了LCD顶层模块,其余模块(除PLL时钟模块
外)完全相同。PLL时钟模块用于为I2C驱动模块、LCD顶层模块以及SDRAM读写控制模块提供驱
动时钟;I2C驱动模块和I2C配置模块用于初始化OV7725图像传感器;摄像头采集模块负责采集
摄像头图像数据,并且把图像数据写入SDRAM读写控制模块中;SDRAM读写控制模块负责将用户
数据写入和读出片外SDRAM存储器;LCD驱动模块负责驱动RGB TFT-LCD显示屏。本章使用的LCD
显示屏为ALIENTEK推出的一款7寸RGB接口TFT液晶显示屏,其分辨率为800*480。而OV7725传感
器的最大分辨率为640*480,所以LCD显示屏水平方向上会有160(800-640)个像素点无法显示
图像,为了使图像可以在显示屏的中间位置显示,我们使用LCD显示模块在液晶屏两侧填充黑
色背景。
OV7725摄像头RGB TFT-LCD显示系统框图如下图所示:
图 36.4.1 OV7725摄像头RGB TFT-LCD显示系统框图
顶层模块的原理图如下图所示:
图 36.4.2 顶层模块原理图
由上图可知,PLL时钟模块用于为I2C驱动模块、LCD顶层模块以及SDRAM读写控制模块提供
驱动时钟,I2C配置模块和I2C驱动模块控制着传感器初始化的开始与结束,传感器初始化完成
后图像采集模块将采集到的数据写入SDRAM读写控制模块,LCD顶层模块从SDRAM控制模块中读
出数据,完成了数据的采集、缓存与显示。其中图像数据采集模块是在SDRAM和传感器都初始
化完成之后才开始输出数据的,避免了在SDRAM初始化过程中向里面写入数据。
FPGA顶层模块(ov7725_rgb565_640x480_lcd)例化了以下六个模块:PLL时钟模块
(pll_clk)、I2C驱动模块(i2c_dri)、I2C配置模块(i2c_ov7725_rgb565_cfg)、摄像头图
像采集模块(cmos_capture_data)、SDRAM读写控制模块(sdram_top)和LCD顶层模块
(lcd_rgb_top)。
PLL时钟模块(pll_clk):PLL时钟模块通过调用锁相环(PLL)IP核实现,总共输出3个
时钟,频率分别为100Mhz、100Mhz(SDRAM相位偏移时钟)和33.3Mhz时钟。100Mhz时钟和100Mhz
相位偏移时钟作为SDRAM读写控制模块的驱动时钟,33.3Mhz时钟作为I2驱动模块和LCD顶层模
块的驱动时钟。
I2C驱动模块(i2c_dri):I2C驱动模块负责驱动OV7725 SCCB接口总线,用户可根据该模
块提供的用户接口可以很方便的对OV7725的寄存器进行配置,该模块和“EEPROM读写实验”章
节中用到的I2C驱动模块为同一个模块,有关该模块的详细介绍请大家参考“EEPROM读写实验”
章节。
I2C配置模块(i2c_ov7725_rgb565_cfg):I2C配置模块的驱动时钟是由I2C驱动模块输出
的时钟提供的,这样方便了I2C驱动模块和I2C配置模块之间的数据交互。该模块寄存需要配置
的寄存器地址、数据以及控制初始化的开始与结束,同时该模块输出OV7725的寄存器地址和数
据以及控制I2C驱动模块开始执行的控制信号,直接连接到I2C驱动模块的用户接口,从而完成
对OV7725传感器的初始化。有关该模块的详细介绍请大家参考“OV7725摄像头VGA显示实验”
章节。
摄像头图像采集模块(cmos_capture_data):摄像头图像采集模块在像素时钟的驱动下
将传感器输出的场同步信号、行同步信号以及8位数据转换成SDRAM读写控制模块的写使能信号
和16位写数据信号,完成对OV7725传感器图像的采集。有关该模块的详细介绍请大家参考
“OV7725摄像头VGA显示实验”章节。
SDRAM读写控制模块(sdram_top):SDRAM读写控制器模块负责驱动SDRAM片外存储器,缓
存图像传感器输出的图像数据。该模块将SDRAM复杂的读写操作封装成类似FIFO的用户接口,
非常方便用户的使用。在“SDRAM读写测试实验”的程序中,读写操作地址都是SDRAM的同一存
储空间,如果只使用一个存储空间缓存图像数据,那么同一存储空间中会出现两帧图像叠加的
情况,为了避免这一情况,我们在SDRAM的其它BANK中开辟一个相同大小的存储空间,使用乒
乓操作的方式来写入和读取数据,所以本次实验在“SDRAM读写测试实验”的程序里做了一个
小小的改动,有关该模块的详细介绍请大家参考“SDRAM读写测试实验”章节,修改部分请大
家参考“OV7725摄像头VGA显示实验”章节。
LCD顶层模块(lcd_rgb_top):LCD顶层模块例化了LCD驱动模块(lcd_driver)和LCD显示模块(lcd_display)。LCD驱动模块负责驱动RGB TFT-LCD显示屏,通过读取SDRAM读写控制
模块来输出像素数据,本次实验将LCD驱动模块的内部信号data_req(数据请求信号)输出至
端口,方便从SDRAM控制器中读取数据,有关LCD驱动模块的详细介绍请大家参考“RGB TFT-LCD
彩条显示实验”章节。LCD显示模块完成液晶屏两侧填充黑色背景,中间区域显示图像数据的
功能。
ATK-7’RGBLCD模块液晶屏的分辨率为800*480,而OV7725传感器的分辨率为640*480,所
以LCD显示屏水平方向上会有160(800-640)个像素点无法显示图像。LCD显示模块实现的功能
是将摄像头采集的图像在LCD屏幕的中间区域显示。
LCD显示模块的代码如下:
1 module lcd_display(
2 input lcd_clk, //lcd驱动时钟
3 input sys_rst_n, //复位信号
4
5 input [10:0] pixel_xpos, //像素点横坐标
6 input [10:0] pixel_ypos, //像素点纵坐标
7 input [15:0] cmos_data, //CMOS传感器像素点数据
8 output [15:0] lcd_data, //LCD像素点数据
9 output data_req //请求像素点颜色数据输入
10 );
11
12 //parameter define
13 parameter H_LCD_DISP = 11'd800; //LCD分辨率——行
14 parameter H_CMOS_DISP = 11'd640; //CMOS分辨率——行
15
16 localparam BLACK = 16'b00000_000000_00000; //RGB565 黑色
17
18 //reg define
19 reg data_val ; //数据有效信号
20
21 //wire define
22 wire [10:0] display_border_pos_l; //左侧边界的横坐标
23 wire [10:0] display_border_pos_r; //右侧边界的横坐标
24
25 //*****************************************************
26 //** main code
27 //*****************************************************
28
29 //左侧边界的横坐标计算 (800-640)/2-1 = 79
30 assign display_border_pos_l = (H_LCD_DISP - H_CMOS_DISP)/2-1;
31
32 //右侧边界的横坐标计算 640 + (800-640)/2-1 = 719
33 assign display_border_pos_r = H_CMOS_DISP + (H_LCD_DISP - H_CMOS_DISP)/2-1;
34
35 //请求像素点颜色数据输入 范围:79~718,共640个时钟周期
36 assign data_req = ((pixel_xpos >= display_border_pos_l) &&
37 (pixel_xpos < display_border_pos_r)) ? 1'b1 : 1'b0;
38
39 //在数据有效范围内,将摄像头采集的数据赋值给LCD像素点数据
40 assign lcd_data = data_val ? cmos_data : BLACK;
41
42 //有效数据滞后于请求信号一个时钟周期,所以数据有效信号在此延时一拍
43 always @(posedge lcd_clk or negedge sys_rst_n) begin
44 if(!sys_rst_n)
45 data_val <= 1'b0;
46 else
47 data_val <= data_req;
48 end
49
50 endmodule
在代码的第 22 至 第 23 行定义 了 LCD 显 示 屏 中 间 显 示 区 域 的 左 侧 边界的 横坐标
(display_border_pos_l)和右侧边界的横坐标(display_border_pos_r),我们不难计算出
左侧边界为79,右侧边界为719。pixel_xpos为LCD当前像素点的横坐标,当该坐标位于液晶屏
中间显示区域内时,输出一个数据请求信号,用来读取SDRAM读写控制模块缓存的图像数据,
如代码中第35至37行所示。SDRAM读写控制模块内部使用FIFO输出图像数据,因此有效数据滞
后于请求信号一个时钟周期,我们将数据有效信号(data_val)延时一拍,如代码中的第42至
第48行所示。
图 36.4.3、图 36.4.4为采集到的SignalTap波形图。
图 36.4.3 LCD左侧边界横坐标信号SignalTap波形图
图 36.4.4 LCD右侧边界横坐标信号SignalTap波形图
由图 36.4.3、图 36.4.4可知,数据请求信号(data_req)在pixel_xpos(LCD像素点横
坐标)的值为79~718范围内为高电平,高电平持续时间共640个像素时钟周期;从上图可以看
到,有效数据滞后于请求信号一个时钟周期,所以我们在程序中将数据有效信号(data_val)
延时了一拍。
我们在前面说过,本章实验程序设计和“OV7725摄像头VGA显示实验”相比,只是把VGA驱
动模块替换成了LCD顶层模块,其余模块(除PLL时钟模块外)完全相同。本章节主要介绍下LCD
显示模块,而其它相同模块的程序设计详情请大家参考“OV7725摄像头VGA显示实验”章节。
下载验证
首先我们打开OV7725摄像头RGB TFT-LCD显示实验工程,在工程所在的路径下打开
ov7725_rgb565_640x480_lcd/par文件夹,在里面找到“ov7725_rgb565_640x480_lcd.qpf”并
双击打开。注意工程所在的路径名只能由字母、数字以及下划线组成,不能出现中文、空格以
及特殊字符等。工程打开后如图 36.5.1所示:
图 36.5.1 OV7725摄像头RGB TFT-LCD显示实验工程
然后将OV7725摄像头插入开发板上的摄像头扩展接口(注意摄像头镜头朝外);将FPC 排
线一端与ALIENTEK的7寸RGB接口模块上的J1接口连接,另一端与开拓者开发板上的J1接口连接;
如图 36.5.2、图 36.5.3所示。连接时,先掀开FPC连接器上的黑色翻盖,将FPC排线蓝色面朝
上插入连接器,最后将黑色翻盖压下以固定FPC排线。
连接实物图如下图所示:
图 36.5.2 ATK-7’ RGBLCD 模块 FPC 连接器
图 36.5.3 开拓者开发板 FPC 连接器
最后将下载器一端连电脑,另一端与开发板上的JTAG端口连接,连接电源线并打开电源开
关。
接下来我们下载程序,验证OV7725摄像头RGB TFT-LCD实时显示功能。
工程打开后通过点击工具栏中的“Programmer”图标打开下载界面,通过“Add File”按
钮选择
ov7725_rgb565_640x480_lcd/par/output_files
目录下的
“ov7725_rgb565_640x480_lcd.sof”文件。开发板电源打开后,在程序下载界面点击
“Hardware Setup”,在弹出的对话框中选择当前的硬件连接为“USB-Blaster[USB-0]”。然
后点击“Start”将工程编译完成后得到的sof文件下载到开发板中,如图 36.5.4所示:
图 36.5.4 程序下载完成界面
下载完成后观察显示器的显示图像如图 36.5.5所示,说明OV7725摄像头LCD显示程序下载
验证成功。
图 36.5.5 RGB TFT-LCD实时显示图像
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。