|
一直以來(lái)OV6620的采集電路困擾了很多網(wǎng)友,還有就是如何保證采集的不失真性,與圖像的真實(shí)性等問(wèn)題,都有很多講究。
下面給出下在認(rèn)為比較好的一種采集電路,就此電路而言展開(kāi)討論:

一定要保證行中斷的優(yōu)先性。
電路圖中CD40106的作用:將行信號(hào)反向,原因是單片要販IRQ中斷只能捕捉下跳變,而對(duì)行信號(hào)而已,其下跳變是行掃描的結(jié)束,上跳變以行掃描的開(kāi)始,用CD40106后,將信號(hào)反向,使得單片機(jī)捕捉到下跳變后,正好是行掃描的開(kāi)始,這樣就可以一進(jìn)入中斷就進(jìn)行采集了。
對(duì)于場(chǎng)信號(hào)接PJ0,主要是用于圖像的刷新,一副圖像的開(kāi)始。
下面給出運(yùn)用些電路圖的一種采集程序結(jié)構(gòu)圖與程序思想:
#define VIDEO_SAMPLE INTCR_IRQEN=1
#define NO_SAMPLE INTCR_IRQEN=0
void PLL_Init(void);
void Video_Init(void);
void main()
{
DisableInterrupts;
PLL_Init(); //PLL
Video_Init(); //采集的初使化
EnableInterrupts; //開(kāi)中斷
VIDEO_SAMPLE; //開(kāi)始采集圖像
for(;;);
}
void PLL_Init(void)
{
///PLL
}
void Video_Init(void)
{
//開(kāi)行中斷,開(kāi)場(chǎng)中斷
}
#pragma CODE_SEG NON_BANKED
void interrupt 6 IRQ_ISR()
{
//判斷是否是采集的行,不是就跳出,
//采集
}
#pragma CODE_SEG DEFAULT_ROM
#pragma CODE_SEG NON_BANKED
void interrupt x PORTJ_ISR()
{
//一融圖像采集完
//圖像矩陣清零
}
#pragma CODE_SEG DEFAULT_ROM
當(dāng)然上述只是很多種采集程序中的一種架構(gòu),但是萬(wàn)變不離其中,其目的是一樣的,就是圖像采集。
首先一點(diǎn),必須保證行中斷為本系統(tǒng)中的最高優(yōu)先級(jí)中斷,當(dāng)然這是在系統(tǒng)沒(méi)有問(wèn)題的前提下進(jìn)行的,系統(tǒng)都有問(wèn)題了,還保證中斷也沒(méi)有用,呵呵。
保證行中斷優(yōu)先級(jí)有兩點(diǎn)問(wèn)題可以解決:一,保證執(zhí)行行中斷的時(shí)候不被其它的高優(yōu)先級(jí)的中斷打斷,從而保證了采集時(shí)序的嚴(yán)密性與正確性;二,當(dāng)行信號(hào)來(lái)時(shí),如果其它的中斷正在執(zhí)行,可以打斷其它的中斷,而跳轉(zhuǎn)執(zhí)行行中斷,保證采集的及時(shí)性,原因是:COMS攝像頭的行描掃描不等人,如果你正在執(zhí)行其它的中斷,而此時(shí)行中斷來(lái)了,但是卻不能及時(shí)進(jìn)行行中斷,行中斷處于等待狀態(tài),說(shuō)極限一點(diǎn),當(dāng)你執(zhí)行完其它中斷后進(jìn)行行中斷可能已經(jīng)過(guò)去了幾十微秒,早已經(jīng)沒(méi)有有效的圖像信息,再去采集,如果圖像信息是對(duì)的,那么肯定是你的系統(tǒng)出了問(wèn)題,即使只錯(cuò)過(guò)了幾微秒,采集到的圖像也是錯(cuò)位的,因?yàn)樵趲孜⒚胫幸呀?jīng)錯(cuò)過(guò)了一些圖像,這一點(diǎn)也是有些人常說(shuō)的圖像變形的情況,用上位機(jī)軟件看,總有圖像移位的情況。有人會(huì)問(wèn),在執(zhí)行行中斷的時(shí)候可以關(guān)用DisableInterrupts關(guān)閉所有的中斷,當(dāng)采集完后用EnableInterrupts開(kāi)啟所有中斷,這樣確實(shí)可以保證在行中斷的時(shí)候不被其它高優(yōu)先級(jí)的中斷所打斷,但是對(duì)于第于種情況呢,行中斷到來(lái)的時(shí)候必須即時(shí)進(jìn)入行中斷程序,保證采集的即時(shí)性,如果行中斷的優(yōu)先級(jí)不高,就做不到這一點(diǎn)了。
對(duì)于我的BLOG給出的原理圖,行信號(hào)接的是IRQ中斷,IRQ中斷在S12單片機(jī)中是中斷優(yōu)先級(jí)比較高的中斷,如果此時(shí)你的行中斷優(yōu)先級(jí)不是你的系統(tǒng)中最高的優(yōu)先級(jí),建議你設(shè)置HPRIO寄存器,將行中斷設(shè)置為最高優(yōu)先級(jí)中斷。
對(duì)于場(chǎng)信號(hào),對(duì)于這一個(gè)信號(hào),還是用中斷處理,當(dāng)然也可以用等待,但是等待,會(huì)消耗很多時(shí)間,不是好的選擇,建議用中斷處理場(chǎng)信號(hào)。
至于場(chǎng)信號(hào)的中斷優(yōu)先級(jí)的問(wèn)題,我認(rèn)為高一點(diǎn)會(huì)好一點(diǎn),但是對(duì)場(chǎng)中斷的優(yōu)先級(jí)要求不是很高,因?yàn)橐粠瑘D像完后,有一個(gè)場(chǎng)恢復(fù)時(shí)間,這個(gè)時(shí)間比較長(zhǎng),足夠處理其它中斷了,場(chǎng)信號(hào)中斷可以等待。
對(duì)于中斷程序,中斷程序應(yīng)該越簡(jiǎn)潔越好,在中斷里面執(zhí)行的時(shí)間不應(yīng)該過(guò)長(zhǎng)。
上篇日志寫(xiě)了關(guān)于行中斷優(yōu)先級(jí)的問(wèn)題,首先一點(diǎn),行中斷優(yōu)先級(jí)最高是保證采集正確的前提,但是這并不表示其采集的時(shí)序是嚴(yán)格的,因?yàn)檫M(jìn)入行中斷后,還需要有判斷,判斷是否為采集的那一行,OV6620輸出292行圖像,我們不可能全部采集,也沒(méi)有必要全部采集。
首先一點(diǎn)值得注意的是:程序的預(yù)判斷功能,即進(jìn)入行中斷后如何去做的問(wèn)題。我們必須保證,每一次有用的行信號(hào)跳變(采集的那一行)到采集開(kāi)始的時(shí)間是一樣的,否則容易引進(jìn)圖像的變形,也就是錯(cuò)位。這種說(shuō)法如何去理解:假如你采集第十行,此行的行信號(hào)跳變到采集的時(shí)間這2uS,然而你第十一行,其時(shí)間卻是4us,這其間相差了2us,基本相當(dāng)于圖像錯(cuò)們了1/20,對(duì)于采集的點(diǎn)數(shù)低于50點(diǎn)的系統(tǒng)而言也許無(wú)關(guān)緊要,但是如果你采集100點(diǎn)以上,那么這個(gè)時(shí)候圖像的錯(cuò)位可能就嚴(yán)重了,通過(guò)上位機(jī)是很容易看出來(lái),這也是圖像發(fā)生錯(cuò)位的原因之一。
到此時(shí)為止,對(duì)于圖像采集的需要注意的細(xì)節(jié)問(wèn)題,基本已經(jīng)說(shuō)完,總結(jié)為一點(diǎn),就是時(shí)序的問(wèn)題,保證其采集的嚴(yán)密性。
|
|