找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 19011|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

ov7670攝像頭分辨率設(shè)置方法詳解

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
最近一直在糾結(jié)如何把 OV7670 輸出的 圖片分辨率縮小,以減少數(shù)據(jù)量來適應(yīng)數(shù)據(jù)的傳輸, 在網(wǎng)上看了好多也沒有關(guān)于寄存器的具體設(shè)置,最終又讀了幾遍數(shù)據(jù)手冊(cè),加上網(wǎng)友們寫的 帖子的啟發(fā),總結(jié)出如下結(jié)論,希望大家批評(píng)指正。
Ov7670 的寄存器中跟分辨率有關(guān)的寄存器主要是一下幾個(gè):
0x17 HSTART               輸出格式-行頻開始高八位(低三位在HREF[2:0])
0x18 HSTOP              輸出格式-行頻結(jié)束高八位(低三位在HREF[5:3])
0x19 VSTRT               輸出格式-場(chǎng)頻開始高八位(低二位在VREF[1:0])
0x1A VSTOP              輸出格式-場(chǎng)頻結(jié)束高八位(低二位在 VREF[3:2])
0x03 VREF               位[3:2]VREF 結(jié)束的低兩位(高八位見VSTOP[7:0] 位[1:0]VREF 開始的低兩位(高八位見 VSTOP[7:0]
0x32 HREF              讀寫HREF控制 位[5:3]:HREF結(jié)束的低3位(高8位在HSTOP) 位[2:0]:HREF 結(jié)束的低 3 位(高 8 位在HSTOP)
網(wǎng)上給的一般的設(shè)置方式是這樣的:QVGA RGB565 320*240
{0x32, 0x80},
{0x17, 0x17},
{0x18, 0x05},
{0x19, 0x02},
{0x1a, 0x7b},
{0x03, 0x0a}, 先把這幾個(gè)寄存器的值計(jì)算一下可以發(fā)現(xiàn)設(shè)置是這樣的 : HSTART               HSTOP              VSTART              VSTOP
184              40              10              490 先看一下 HREF 的意義:


可以看出 HREF 的高電平寬度等于我們所要顯示的一行像素的數(shù)據(jù)的個(gè)數(shù): HREF = WEIGHT*2;              乘以二是因?yàn)槊總(gè)像素點(diǎn)是有兩個(gè)數(shù)據(jù)
HSTOP=START +  HREF;
184 + 320*2 =  824;
可是 HSTOP 是 40;              這里的 40 是 824%784 得到的 為什么對(duì) 784 取余數(shù)可以看下數(shù)據(jù)手冊(cè)中的這個(gè)圖:



計(jì)算 PCLK 的參數(shù),如下:

VSYNC: 510* Line =  3*tLine +  15*tLine +480*tLine
HREF: 784*tP = 640*tP +  144*tP
HSYNC: 784*tP =  80*tP +  45*tP +  640*tP +  19*tP VGA RGB565, YUV 30fps:
PCLK = 784 * 510 * 30 * 2(byte) = 23990400  = 24MHz



再看 VGA 和 QVGA               的區(qū)別:
通過這幾幅圖可以看出來 VSTART               VSTOP 這兩個(gè)寄存器決定了采集的行數(shù)也就是高度 VSTART   = HEIGHT*2 +  VSTOP;
通過比較 QVGA 和 VGA 時(shí)序的區(qū)別可以看出 乘以二的 原因



這樣我們就可以寫一個(gè)簡(jiǎn)單的函數(shù)來設(shè)置 OV7670 的分辨率了
輸入圖像的行起始點(diǎn),場(chǎng)起始點(diǎn), 寬度 ,高度計(jì)算得到相應(yīng)寄存器的值 編譯環(huán)境:keil mdk
void OV7670_config_window(u16 startx,u16 starty,u16 width, u16 height)
{
u16 endx=(startx+width*2)%784;
u16 endy=(starty+height*2);
u8 x_reg, y_reg;
u8 state,temp;

state = rdOV7670Reg(0x32, &x_reg );
x_reg &=  0xC0;
state = rdOV7670Reg(0x03, &y_reg );
y_reg &=  0xF0;

//設(shè)置 HREF
temp = x_reg|((endx&0x7)<<3)|(startx&0x7);
state = wrOV7670Reg(0x32, temp );
temp = (startx&0x7F8)>>3;
state = wrOV7670Reg(0x17, temp );
temp = (endx&0x7F8)>>3;
state = wrOV7670Reg(0x18, temp );


//設(shè)置 VREF
temp = y_reg|((endy&0x3)<<2)|(starty&0x3);
state = wrOV7670Reg(0x03, temp );
temp = (starty&0x3FC)>>2;
state = wrOV7670Reg(0x19, temp );
temp = (endy&0x3FC)>>2;
state = wrOV7670Reg(0x1A, temp );
}




我們?cè)O(shè)置 OV7670_config_window(184,10,320,240)的圖片如下:



我們?cè)O(shè)置 OV7670_config_window(184,10,160,120)的圖片為:



同理設(shè)置 OV7670_config_window(184+160*2,10+120*2,160,120)的圖片為:


微笑 smile


完整的pdf格式文檔51黑下載地址(共4頁):
ov7670分辨率設(shè)置.pdf (250.63 KB, 下載次數(shù): 173)



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:138247 發(fā)表于 2019-4-4 12:53 | 只看該作者

謝謝分享。。。
回復(fù)

使用道具 舉報(bào)

板凳
ID:514567 發(fā)表于 2019-7-28 15:25 | 只看該作者
謝謝樓主,我用你的方法設(shè)置好了
回復(fù)

使用道具 舉報(bào)

地板
ID:543829 發(fā)表于 2020-1-22 14:14 | 只看該作者
正好需要
回復(fù)

使用道具 舉報(bào)

5#
ID:1118818 發(fā)表于 2024-4-29 11:57 | 只看該作者
wrOV7670和rdOV7670函數(shù)定義代碼是什么呀
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表