基于單片機的表具數字圖像采集系統(tǒng)設計
圖像采集系統(tǒng)存儲器接口
本文引用地址:http://www.ex-cimer.com/article/113798.htmCMOS圖像傳感器OV7670支持整幀圖像讀取模式,VGA圖像速率最高達30幀/s,為了實現OV7670與單片機之間傳輸速率匹配,首先將內部時鐘與單片機時鐘同步,然后通過設置OV7670內部寄存器對系統(tǒng)內部時鐘速率分頻來降低圖像數據速率,使OV7670采集圖像數據的速度滿足單片機的要求。由于表具數字圖像數據量比較大,而AT89LV51 單片機,其內部只有128byte隨機存儲器,要完成對表具數字圖像的采集、存儲和處理是遠遠不夠的,所以在硬件電路上擴展了外部數據存儲器,通過數據存儲器的存儲空間和存儲速度,在OV7670和單片機之間建立起數據傳送中樞,實現表具數字圖像的采集、存儲和處理,其硬件連接電路如圖3所示,BS62LV256存儲器地址低8位通過鎖存器與單片機P0口連接,同時P0口也是圖像數據輸出口,存儲器地址高7位以及存儲器片選端與單片機P2口連接,單片機通過控制片外數據存儲器讀寫控制端完成數據的存儲[3]。
系統(tǒng)軟件設計
在本系統(tǒng)設計中,通過圖像傳感器OV7670攝像頭的SCCB總線接口配置攝像頭,通過控制攝像頭的場同步信號(VSYNC),行同步信號(HREF)以及像素時鐘信號(PCLK)開中斷,開始表具圖像數據采集,將這些數據傳送到外部數據存儲器中,當一幀圖像采集完成后,關閉所有中斷,等待采集下一幀圖像。
本系統(tǒng)采用查詢VSYNC的下降沿表示一幀圖像的開始,水平同步信號HREF高時開始有效數據采集。在水平同步信號HREF高電平期間,PCLK上升沿的到來表示像素數據的產生,PCLK每來一個上升沿系統(tǒng)就傳輸一位像素數據[4~5]。OV7670同步信號時序如圖4所示。
單片機通過控制圖像傳感器OV7670攝像頭的SCCB總線接口配置攝像頭,本系統(tǒng)設置OV7670為黑白工作模式,分辨率為80×60,控制OV7670以一幀圖像讀取模式,采用此模式傳輸時,以像素時鐘信號(PCLK)為頻率自動傳輸完一幀圖像后停止。在圖像采集軟件設計開始,將圖像存儲設置成外部數據存儲方式,此時OV7670數據總線為三態(tài),準備發(fā)送數據。
當圖像采集開始按鍵按下時,開中斷準備進入數據采集,單片機監(jiān)測場同步信號(VSYNC)的變化,其為高時OV7670 數據準備完畢,變低時開始發(fā)送。HREF為水平同步信號,以其上升沿開始,輸出有效數據。PCLK為像素同步信號,下降沿更新數據,上升沿為數據穩(wěn)定期。用來存儲圖像的外部數據存儲器的使能信號CE和寫信號WE及讀信號RE以及地址信號ADDRESS都是由單片機來產生。
由于在數據輸出時,PCLK上升沿信號穩(wěn)定,而數據存儲器是在WR上升沿將數據寫入,因此可以在場同步信號(VSYNC)有效后(VSYNC=0) 采用像素時鐘信號(PCLK)作為寫信號WE。同時設計一個計數器中斷,在場同步信號(VSYNC)有效后,以行同步信號(HREF)的下降沿為觸發(fā)沿對一幀圖像每一行計數,并取其輸出作為數據存儲器的地址信號ADDRESS。這樣在HREF的下降沿更新地址信號,接著在行同步信號(HREF)和像素時鐘信號(PCLK)上升沿存儲數據。
系統(tǒng)圖像傳感器OV7670的初始化主要包括配置各種寄存器,利用單片機I/O口產生I2C總線信號,實現對OV7670各種寄存器的設置以及對圖像傳感器的行場同步信號,開窗及掃描格式的確定[6]??梢苑謩e設置輸出格式,縮放/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);
//系統(tǒng)時鐘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語言教程
存儲器相關文章:存儲器原理
攝像頭相關文章:攝像頭原理 數字濾波器相關文章:數字濾波器原理
評論