图像采集处理基础实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图像采集处理基础实验

班级:14060242 学号:1406024248 姓名:张新雨

一、实验目的

1、了解摄像头OV9655的功能及其接口的设计方法;

2、用硬件描述语言编程实现OV9655接口电路,能够实时采集图像数据;

3、能够识别特定的黑白图像块,并通过LED的亮、灭进行表示。

二、实验器材

1、台式计算机 1台;

2、可编程逻辑器件实验软件1套;

3、可编程逻辑器件开发套件1套;

4、OV9655转接板1套。

三、实验说明

1、台式计算机用于向可编程逻辑逻辑器件实验软件提供编程、仿真及下载

平台;

2、可编程逻辑器件实验软件硬件描述语言的编程、仿真及下载提供平台;

3、可编程逻辑器件开发套件为本实验提供硬件平台;

4、OV9655转接板用于OV9655与开发套件的连接。

四、实验原理

1、OV9655作为一种高分辨率摄像头,具有如下特性:

1)工作电压低,灵敏度高,轻便易携;

2)支持标准的SCCB接口;

3)支持输出RGB、YUV、YCbCr格式数据;

4)支持多种分辨率,包括SXGA(1280×1024)、VGA(640×480)等;

5)支持多种自动图像控制功能,包括自动曝光控制、自动增益控制,自动白平衡等;

6)支持视频缩放等。

2、 OV9655主要引脚说明:

1)PWDN:掉电模式选择引脚;

2)RESETB:复位引脚;

3)PCLK:像素时钟输出引脚;

4)XVCLK1:系统时钟引脚;

5)HREF:行同步信号;

6)VSYNC:场同步信号;

7)SIO_C:SCCB接口时钟信号;

8)SIO_D:SCCB接口数据信号;

9)D[7:0]:像素点数据信号。

3、OV9655操作说明:

在摄像头正常工作之前,必须配置好相应的寄存器才能使摄像头完成指定的功能,如配置摄像头的像素输出时钟、自动控制功能等。通过标准的SCCB时序就能配置,SCCB时序图如图1所示。

图1

此次实验中,将摄像头的输出信号配置成RGB565格式信号,其数据输出时序图如图2所示,图中为一行像素数据的时序,再配合场同步信号就能读取摄像头的输出信号,场同步信号在数据有效时地变低,在一帧数据结束后变高。

图2

由于RGB565格式数据有十六位,而当OV9655的输出信号配置成RGB565格式时的数据位为8为,所以每个像素点的数据需要两个时钟信号才能读取完成,

一个数据两个字节的数据格式如图3所示。

图3

由于此实验中图像的色彩比较单一,仅需要判断黑白色即可,具体的操作方法是判断每一帧数据的前部分像素值,为了进一步准确的判断黑白色,设定一个黑色像素点计数器和一个白色像素点的计数器,当判定一个像素点为黑色时,则黑色像素点计数器加一,反之则白色像素点计数器加一。判断像素点是黑色还是白色的操作方法是提取出一个像素点数据的R、G、B分量,分别与特定值比较,然后通过特定的关系式做出判断。最后,如果黑色像素点计数器的值大于白色像素点计数器的值,则判定为黑色,且用LED灯做出相应指示,反之亦然。

五、实验内容和步骤

1、新建工程:打开ISE软件,点击File菜单栏下的New Project菜单,弹出新建工程对话框,如图4所示。在此对话框中设定工程名、工程存储地址,在Top-level source type菜单栏下选择HDL。单击Next,弹出下一步对话框,在此对话框中设定好芯片、综合工具、仿真工具、编程语言,如图5所示。然后单击Next,再单击Finish。

2、建立I2C接口时序文件:右键点击文件管理框,如图6所示。单击New source,弹出New Source Wizard对话框,选择VHDL Module,设定好文件名,如图7所示。然后单击Next,Next,Finish。在文件管理窗口双击刚刚建立的

文件,编辑好程序然后保存。然后对文件进行语法查错操作,双击进程管理窗口

图4

图5

图6

图7

图8

中Synthesize-XST菜单栏下的Check Syntax,如图8所示。按照错误提示修改程序,直至没有错误。接口程序如下所示:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity I2C_interface is

port (

clock_i2c : in std_logic;

reset : in std_logic;

i2c_data : in std_logic_vector(23 downto 0);

start : in std_logic;

tr_end : out std_logic;

i2c_sclk : out std_logic;

i2c_sdat : inout std_logic

);

end I2C_interface;

architecture trans of I2C_interface is

signal cyc_count : integer range 0 to 63;

signal reg_sdat : std_logic;

signal sclk : std_logic;

BEGIN

i2c_sclk <= (sclk or (not clock_i2c)) when ((cyc_count >= 4) and (cyc_count <= 30)) else

sclk;

i2c_sdat <= 'Z' when (reg_sdat = '1') else

'0';

process (clock_i2c)

begin

if (clock_i2c'event and clock_i2c = '1') then

if (reset = '0') then

cyc_count <= 63;

else

if (start = '0') then

cyc_count <= 0;

elsif (cyc_count < 47) then

cyc_count <= cyc_count + 1;

end if;

end if;

end if;

end process;

相关文档
最新文档