<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 無(wú)線(xiàn)圖像(視頻)傳輸系統ARM9+Atmega16+OV7620+nrf24l01(一)

無(wú)線(xiàn)圖像(視頻)傳輸系統ARM9+Atmega16+OV7620+nrf24l01(一)

作者: 時(shí)間:2012-09-10 來(lái)源:網(wǎng)絡(luò ) 收藏

很多人可能會(huì )這樣驚訝的問(wèn)道,況且,直到現在我也不能確定能不能傳輸,我本人覺(jué)得估計也有點(diǎn)吃力!!!不過(guò)現在已經(jīng)完成了圖片的傳輸,從傳輸時(shí)間來(lái)看還是漫長(cháng)的讓人接受不了,一張320*240圖片的傳輸大概需要10s(后面會(huì )詳述為什么會(huì )有這么長(cháng)時(shí)間和可以改進(jìn)的地方),但是,一張完整圖片經(jīng)過(guò)發(fā)射完只需1.2s(去除發(fā)送等待時(shí)間大概只需720ms)左右的時(shí)間,大部分時(shí)間還是消耗在采集端的發(fā)送延時(shí)等待(目前還沒(méi)有用中斷,下一步改成中斷處理)以及上位機()驅動(dòng)中的數據復制(copy to usr,用mmap方式應該會(huì )快一點(diǎn)(引用別人的結論——用mmap方法就不會(huì )造成CPU的CACHE頻繁失效,從而大大節約時(shí)間——Ethan的《copy_to_user與mmap的工作原理》),這也是下一步的計劃),并且這些數據都是沒(méi)有經(jīng)過(guò)任何處理的原始RGB BAYER PATTERN。為什么要做這個(gè)平臺呢??原因在于目前參加了一個(gè)省競賽,關(guān)于《都市開(kāi)心農場(chǎng)》(QQ農場(chǎng)的實(shí)例版),考慮到植物生長(cháng)的相對靜態(tài)性,不需要實(shí)時(shí)的采集,并且考慮到這個(gè)項目要和物聯(lián)網(wǎng)或是傳感網(wǎng)有關(guān)聯(lián),所以就采用了這個(gè)傳輸方案。先不說(shuō)可行性了,關(guān)鍵在于學(xué)習,這20天中,也學(xué)習了不少東西,ARM驅動(dòng)開(kāi)發(fā)、的格式,顯示以及液晶屏framebuffer的使用。下面就一步步敘述整個(gè)開(kāi)發(fā)過(guò)程吧。

本文引用地址:http://dyxdggzs.com/article/148442.htm

先來(lái)說(shuō)說(shuō)目前已經(jīng)達到的效果,通過(guò)++采集,圖像格式可以設為YUV422,RGB RAW16,RGB8bit,前兩種目前只能顯示為灰度圖像(的UV管腳沒(méi)有用,只能通過(guò)Y通道獲取數據)并且對圖像這塊也不了解,GB8bit支持彩色顯示,可以在4.3 16bpp LCD上顯示(圖像質(zhì)量還可以),并且可以通過(guò)網(wǎng)絡(luò )傳到上位機(電腦),不過(guò),這塊還沒(méi)有做好,只能接收到數據,還沒(méi)有顯示出來(lái)(這也是后面的工作了)。ARM+作為目前的終端(這個(gè)也只是作為我一個(gè)項目中的網(wǎng)關(guān),所以先熟悉了再說(shuō),不過(guò)到時(shí)候可不是nrf24了)?;旧弦呀?jīng)完成了圖像的采集、傳輸、處理(顯示)整個(gè)流程,最后要做的也是最困難的——優(yōu)化。

作為開(kāi)發(fā)記錄文檔, 我想分為4個(gè)部分分別描述整個(gè)過(guò)程的關(guān)鍵之處:

無(wú)線(xiàn)射頻模塊

圖像傳感器

nrf24l01 在A(yíng)RM上的驅動(dòng)

圖像在lcd中顯示

首先,nrf24l01無(wú)線(xiàn)收發(fā)模塊之前從未接觸過(guò),用過(guò)的也都是TI 早期的CC1000,CC1101模塊,為什么要選它呢??可能是因為它操作簡(jiǎn)單吧(競賽有時(shí)間限制啊),也可能是因為它有兩種傳輸速率1M、2M(目前用的是1M,期待2M有所改善),而那些用于ZIGBEE的速率也都在250kbps左右,即選之則安之。微控制器采用的是,時(shí)鐘采用外部晶振7.3728MHz(暈,為什么用這么一個(gè)頻率呢?!!)。nrf24l01通過(guò)通用IO模擬出的SPI連接(第一個(gè)瓶頸)。那么首先來(lái)說(shuō)說(shuō)IO模擬SPI問(wèn)題,Atmega16 SPI總線(xiàn)頻率最高可達到時(shí)鐘頻率的一半(主機方式),而nrf24l01 datasheet上標注了SPI 頻率可以支持到8MHz,所以當初應該選擇主頻更高的晶振。在本平臺中沒(méi)有使用SPI接口,而是用IO模擬的SPI時(shí)序(因為這樣的程序網(wǎng)上到處都是),后來(lái)才發(fā)現,IO模擬的SPI速率是很慢的(具體慢多少我也不清楚),所以下一步打算直接用SPI接口操作好了。下面貼出部分程序段;

/*SPI 寫(xiě),返回狀態(tài)值。模擬SPI 先MSB(DORD=0) 、SCK空閑時(shí)為低電平(CPOL=0)、起始沿采樣,下降沿設置(CPHA=0)*/

char SPI_RW(char data)

{

char i,temp=0;

for(i=0;i8;i++) // output 8-bit

{

if(data 0x80)

{

PORTB |= (1 PB5) ;

}

else

{

PORTB = ~(1 PB5);

}

data = (data 1);

temp=1;

PORTB |= (1 PB7);

if(PINB (1 PB5))temp++;

PORTB = ~(1 PB7);

}

return(temp);

}

//SPI READ

char SPI_Read(char reg)

{

char reg_val;

PORTB = ~(1 PB4); // CSN low, initialize SPI communication...

SPI_RW(reg); // Select register to read from..

reg_val = SPI_RW(0); // read registervalue

PORTB |= (1 PB4); // CSN high, terminate SPI communication

return(reg_val);

}

其他的函數都可以由這兩個(gè)函數演變。還有個(gè)問(wèn)題就是軟件延時(shí)的問(wèn)題,這也是今天才發(fā)現的問(wèn)題,比如在時(shí)鐘頻率為7.3728M時(shí),循環(huán)for(i=0;i254;i++)執行時(shí)間大概為138us,一個(gè)for循環(huán)的執行次數為4*N+4.下面這個(gè)毫秒級延時(shí)函數則比較經(jīng)典:

void delay_1ms(void)

{

unsigned int i;

for(i=1;i(unsigned int)(xtal*143-2_;i++)

;

}

在上式中,xtal為晶振頻率,單位為MHz.

OK,今天就寫(xiě)到這里。

此文僅作為開(kāi)發(fā)記錄文檔,錯誤在所難免!



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>