新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于单片机的表具数字图像采集系统设计

基于单片机的表具数字图像采集系统设计

—— 推动实现智能建筑
作者:时间:2010-10-23来源:电子产品世界收藏

  系统存储器接口

本文引用地址:http://www.eepw.com.cn/article/113798.htm

  CMOS图像传感器OV7670支持整帧图像读取模式,VGA图像速率最高达30帧/s,为了实现OV7670与之间传输速率匹配,首先将内部时钟与时钟同步,然后通过设置OV7670内部寄存器对系统内部时钟速率分频来降低图像数据速率,使OV7670采集图像数据的速度满足的要求。由于表具数字图像数据量比较大,而AT89LV51 单片机,其内部只有128byte随机存储器,要完成对表具数字图像的采集、存储和处理是远远不够的,所以在硬件电路上扩展了外部数据存储器,通过数据存储器的存储空间和存储速度,在OV7670和单片机之间建立起数据传送中枢,实现表具数字图像的采集、存储和处理,其硬件连接电路如图3所示,BS62LV256存储器地址低8位通过锁存器与单片机P0口连接,同时P0口也是图像数据输出口,存储器地址高7位以及存储器片选端与单片机P2口连接,单片机通过控制片外数据存储器读写控制端完成数据的存储[3]。

  系统软件设计

  在本系统设计中,通过图像传感器OV7670摄像头的SCCB总线接口配置摄像头,通过控制摄像头的场同步信号(VSYNC),行同步信号(HREF)以及像素时钟信号(PCLK)开中断,开始表具图像数据采集,将这些数据传送到外部数据存储器中,当一帧完成后,关闭所有中断,等待采集下一帧图像。

  本系统采用查询VSYNC的下降沿表示一帧图像的开始,水平同步信号HREF高时开始有效数据采集。在水平同步信号HREF高电平期间,PCLK上升沿的到来表示像素数据的产生,PCLK每来一个上升沿系统就传输一位像素数据[4~5]。OV7670同步信号时序如图4所示。

  单片机通过控制图像传感器OV7670摄像头的SCCB总线接口配置摄像头,本系统设置OV7670为黑白工作模式,分辨率为80×60,控制OV7670以一帧图像读取模式,采用此模式传输时,以像素时钟信号(PCLK)为频率自动传输完一帧图像后停止。在软件设计开始,将图像存储设置成外部数据存储方式,此时OV7670数据总线为三态,准备发送数据。

  当图像采集开始按键按下时,开中断准备进入数据采集,单片机监测场同步信号(VSYNC)的变化,其为高时OV7670 数据准备完毕,变低时开始发送。HREF为水平同步信号,以其上升沿开始,输出有效数据。PCLK为像素同步信号,下降沿更新数据,上升沿为数据稳定期。用来存储图像的外部数据存储器的使能信号CE和写信号WE及读信号RE以及地址信号ADDRESS都是由单片机来产生。

  由于在数据输出时,PCLK上升沿信号稳定,而数据存储器是在WR上升沿将数据写入,因此可以在场同步信号(VSYNC)有效后(VSYNC=0) 采用像素时钟信号(PCLK)作为写信号WE。同时设计一个计数器中断,在场同步信号(VSYNC)有效后,以行同步信号(HREF)的下降沿为触发沿对一帧图像每一行计数,并取其输出作为数据存储器的地址信号ADDRESS。这样在HREF的下降沿更新地址信号,接着在行同步信号(HREF)和像素时钟信号(PCLK)上升沿存储数据。

  系统图像传感器OV7670的初始化主要包括配置各种寄存器,利用单片机I/O口产生I2C总线信号,实现对OV7670各种寄存器的设置以及对图像传感器的行场同步信号,开窗及扫描格式的确定[6]。可以分别设置输出格式,缩放/DCW使能,像素时钟分频,水平、垂直采样,输出顺序等。

  由于AT89LV51工作在11.0592MHz,而OV7670的工作时钟频率为10~24MHz,所以需要对0V7670的输入时钟进行分频来降低OV7670的工作频率,进而降低像素时钟,这通过设置0V7670时钟速率控制寄存器(CLKRC)为0xBF,设置通用寄存器7为0x12,用以控制采集图像输出格式为QVGA图像大小为320×240;设置SCALING_DCWCTR寄存器为0x33,用以控制输出图像数据水平、垂直4抽样;设置通用寄存器3为0x0c,用以控制缩放/DCW使能,设置通用寄存器14为0x13,用以控制像素时钟4分频,设置TSLB寄存器为 0x01,用以控制当分辨率改变时,传感器自动设置窗口。设置具体的程序如下:

  #include “sccb.h”

  void initial_OV7670(void)

  {

  write_addSCCB(0x11,0xbf);

  //系统时钟64分频

  write_addSCCB(0x3e,0x13);

  //PCLK 4分频

  write_addSCCB(0x12,0x10);

  //输出格式QVGA

  write_addSCCB(0x72,0x33);

  //水平,垂直4抽样

  write_addSCCB(0x0c,0x0c);

  //缩放/DCW使能

  write_addSCCB(0x3a,0x01);

  //当分辨率改变时,

  传感器立即自动设置窗口

  }

c语言相关文章:c语言教程


存储器相关文章:存储器原理


摄像头相关文章:摄像头原理
数字滤波器相关文章:数字滤波器原理


评论


相关推荐

技术专区

关闭