新聞中心

EEPW首頁 > 消費電子 > 設計應用 > 基于AT90S2313-4PC的MP3無線遙控自動點播機

基于AT90S2313-4PC的MP3無線遙控自動點播機

作者: 時間:2007-08-10 來源:網(wǎng)絡 收藏

我們已經(jīng)從唱片及八軌錄音時代跨入了CD和時代。把音樂轉換成已經(jīng)變得很流行,時下如何儲存文件是一個有趣的話題。本設計將教你MP3的存儲方法,?使你能在室內(nèi)較寬范圍內(nèi)欣賞到MP3音樂。

小型MP3播放機正在和CD、磁帶隨身聽爭奪移動應用方面的霸主地位。隨著計算機用戶對網(wǎng)絡訪問的不斷推動和上網(wǎng)人數(shù)的增多,要是我的計算機能成?MP3無?機的服務器那該多好啊。

下面讓我慢慢給你介紹我的實現(xiàn)方案吧。該方案可以讓你在家中任何有FM收音機(例如一個WALKMAN隨身聽)的地方欣賞MP3音樂。具體就是通過在計算機的音頻輸出口接上一個小功率FM發(fā)射機來實現(xiàn),另外用一個移動單元用來顯示服務器上MP3文件夾的內(nèi)容,以便你可以從頭至尾瀏覽你收藏的音樂。

為使用方便起見,你可以向上滾動瀏覽最多4個包含不同歌曲列表的文件夾。選曲、開始、停止和跳曲用一般的紅外線器控制。紅外指令通過433MHz無?連接送到作?MP3服務器的計算機。照片1所示是該系統(tǒng)的全部設備。

照片1、MP3遙控機系統(tǒng)的各個設備

服務器端我設計了兩個模塊, 433MHz接收機和FM發(fā)射機。接收機接收遙控器發(fā)過來的指令?通過串行端口輸入到計算機,後臺運行的專用應用程序接收指令?把它們分送到 Windows Media Player, Windows Media Player收到指令後播放的曲目,第二個模塊FM發(fā)射機從計算機聲卡輸出取得音頻信號?把它發(fā)射出去。

為了降低成本簡化設計,433MHz連接僅以單工方式工作。也就是說,在你選定一個功能後相應指令通過連接發(fā)送到MP3計算機服務器上,如果發(fā)射機沒有把它發(fā)送到服務器,你將什么也聽不到?可再次發(fā)命令。為了避免假指令中斷操作,設計中使用了專用的編解碼芯片,該芯片實現(xiàn)所有必需的功能,確保只有合法的數(shù)據(jù)包才能傳輸?shù)組P3服務器。

為了使遙控單元能?顯示服務器上的MP3文件夾的內(nèi)容,使用前必須先把文件夾的內(nèi)容下載到遙控單元。這可以通過MP3服務器上的串行端口用同樣的應用軟件把無?輸入的指令送到Windows Media Player實現(xiàn)。遙控單元內(nèi)的固件可控制多達4個不同的音樂文件夾。

為了避免頻繁地更新遙控單元的閃存,建議選定4個穩(wěn)定的文件夾來進行遙控播放,其它文件夾用來存放新下載的音樂或者經(jīng)常變動的收藏。遙控單元有32K8 閃存,每個文件夾可以保存200個歌名(總共800個歌名)。因為閃存是非易失性存儲器,所以即使遙控單元電源關掉,歌名數(shù)據(jù)也會保存下來,對于用電池供電的遙控單元來說這點很重要。

遙控單元
系統(tǒng)的核心是遙控單元,如圖1所示。遙控單元主要由Atmel 組成,Atmel 提供15條I/O(使用了其中12條)內(nèi)置一個硬件UART。因為該單元耗電很小,所以我用4節(jié)AA電池經(jīng)過 LM2936CZ5低壓差整流器?其供電。



圖1 MP3遙控器單元

很明顯,如果不能顯示整個歌名和演唱者的名字,歌名顯示就沒有什么用處了。由于可能會有很多歌曲讓你瀏覽,因此?定同時顯示4個歌名,選用440 LCD面板作為顯示屏。與大多數(shù)常見LCD相比,該LCD的控制方式不大一樣,用2片HD44780 LSI控制器進行控制,其中一片控制LCD上面兩行字符,另一片控制下面兩行。

LCD通過B端口的7根?以普通4位數(shù)據(jù)接口方式與微控制器連接??刂?由一根RS?和兩根ENABLE?組成,其中兩根ENABLE?每個LSI控制器一根。因?LCD只接收指令不需要讀出狀態(tài),所以R/*W?接低電平。

在用戶接口方面,我?沒有采取在面板上安置按鍵和開關來控制的方法,而是用一個紅外解碼模塊和一個通用的紅外遙控器代替。紅外遙控器采用普通而且容易買到的RCA CRCU410型號,它的遙控編碼跟Quasar牌電視機(編碼054)一樣。我之所以選擇這個編碼是因?它簡單,用軟件解碼比較容易。各個鍵和相應功能如表1所示。



表1、遙控器各個鍵和相應功能

歌名列表的非易失性存儲使用連續(xù)的閃存EEPROM。我選用Mcrochip的24LC256I/P8EA,因?它比較常見容易買到。該芯片?I2C器件,因此與微控制器AT90S2313連接僅需雙?接口。不過AT90S2313?沒有內(nèi)置I2C端口的硬件電路,因此必須用軟件實現(xiàn)I2C功能。然而幸運的是,Atmel公司提供了一個AT90S2313作?主控芯片時的I2C讀/寫時序應用筆記。

必須注意的地方是,I2C規(guī)格中SDA和SCL?均需要用2.2KΩ上拉電阻。根據(jù)A0~A2?設定的不同,24LC256I可以被設定成8種不同的 I2C地址,因而閃存可以擴展到256KB。本設計中因?僅用了一個芯片,所以3根地址?都設定?低電平。

由24LC256I的使用手?知道該器件需要5ms閃存寫入時間,數(shù)據(jù)從AT90S2313 UART接收部分寫入閃存。我設計的下載協(xié)議只有從服務器PC到遙控單元一個方向,因此不用“握手”方式工作,所以我選用1200bps數(shù)據(jù)傳輸率,每隔 8.3ms處理一次輸入的數(shù)據(jù)字符。這個間隔可以提供足?的時間把數(shù)據(jù)發(fā)送到I2C閃存,即使使用軟件實現(xiàn)I2C功能,仍然有5ms的空馀時間來寫 EEPROM。

我沒有采用諸如MAX232之類成熟的RS-232接口,而是用一個2N3904 NPN三極管和一些無源器件將主機的RS-232電平轉換成TTL電平。

選用Abacom公司AM-RT5-433作?無?發(fā)射機模塊,其小型SIP封裝很容易裝配。Abacom公司慷慨地寄給我一對發(fā)射機和接收機的樣品。這些廉價的模塊是針對100碼左右距離應用的,采用簡單的載波開關調(diào)制來實現(xiàn)數(shù)據(jù)的發(fā)射。

我使用小型無?傳輸模塊的其它經(jīng)驗來自價格較貴的Linx HP-II系列(900 MHz)。Linx HP-II系列采用FSK調(diào)制,發(fā)射機可直接由UATR驅(qū)動。

Abacom公司的技術人員說我選用的廉價模塊不能直接與UART端口接口,然而Abacom公司設計了一個復合芯片NKM2401-N,該芯片根據(jù)mode?的連接不同可以充當編碼器或者解碼器來用。本設計中我在每個無?數(shù)據(jù)連接末端均用了這個器件。

遙控單元中NKM2401從AT90S2313 UART端口接收8字節(jié)的數(shù)據(jù)包(以2400 bps數(shù)據(jù)率),加上同步、預緩沖/後緩沖字節(jié)和CRC後再對最終數(shù)據(jù)進行Manchester編碼。因?NKM2401的數(shù)據(jù)包格式?8個字節(jié),但我的指令僅有2字節(jié)長,因此我自己加上同步字節(jié)和補充字節(jié)?成了一個8字節(jié)的數(shù)據(jù)包。NKM2401的數(shù)據(jù)輸出直接連接到AM-RT5-433發(fā)射機上。至于天?,我使用了1/4波長的鞭狀天?。

我想在遙控單元中取消NKM2401而改用AT90S2313固件程序?qū)崿F(xiàn)相應的功能。遙控單元的固件是用匯編語言寫的,僅用了AT90S2313 2KB閃存中大約1/3大小的空間,因此可留下很多的空間供其它有需要的程序用。然而在接收端我不打算使用微控制器,因此必須用NKM2401來解碼。我未能從Abacom公司取得詳細的通信協(xié)議(他們的協(xié)議比較容易看懂)因此我無法編寫程序?qū)崿F(xiàn)數(shù)據(jù)包的編碼。給我點時間的話我可能會用示波器或者計算機上的程序捕捉到數(shù)據(jù)流?對它進行反向工程最後實現(xiàn)這個編碼過程,遺憾的是沒時間了。

在繼續(xù)進行之前我補充幾點。AT90S2313使用陶瓷振蕩器工作在4MHz,這對于比較低的串行數(shù)據(jù)通信速率來說是足?了的。我必須把UART的速率設定在1200bps(數(shù)據(jù)下載期間)來接收數(shù)據(jù),但發(fā)射時?把速率設定在2400bps(通過NKM2401和發(fā)射機發(fā)送命令)。我不得不這?做,因? NKM2401僅工作在2400bps速率,1200bps是可用于下載的最高速率(考慮串行閃存的寫入時間)。

最後遙控單元上有一個標著J1 Link Test的跳?。如果裝上跳?NMK2401-N將會不斷地發(fā)送“ABACOM”信息,該信息可以用來檢測無?連接。

無?接收機模塊
無?接收機的作用是接收MP3遙控單元發(fā)射的433MHz信號?把信號轉換成RS-232電平送到服務器PC。

Abacom公司的AM-HRR3-433接收機如圖2所示。接收機模塊跟發(fā)射機一樣使用同樣的1/4波長鞭狀天?。



圖2 Abacom公司的AM-HRR3-433接收機

在沒有接收信號的時候,接收機模塊的輸出滿是毛刺和噪音。我用示波器觀察發(fā)現(xiàn)一點信號都沒有,因?我住在鄉(xiāng)村地區(qū)。正因?這個原因必須使用Abacom公司的NKM2401-N芯片。接收機中NKM2401-N的模式?(第4?)接地,使其工作于解碼模式。用一個普通PNP三極管反相器向服務器PC提供虛擬 RS232電平信號。

LM2936CZ5低壓差整流器?接收機提供5V直流電。大多數(shù)時間接收機模塊都連在MP3服務器計算機的串行端口上,然而出于工作需要,有時遙控單元必須連接到PC(例如下載歌名列表的時候),因此我制作一根短電纜把PC上的DB9插座接到一個5pin DIN插頭上,接收機和遙控單元均用配對的5pin DIN插座,這樣你就可以按需要把設備連起來了。

Abacom公司的接收機/發(fā)射機模塊與NKM2401-N配合使用非??煽俊o?發(fā)送指令是本設計的一個亮點。唯一覺得不足的是不能把433MHz接收機和FM發(fā)射機模塊裝在同一個機箱內(nèi)。當把FM發(fā)射機放在接收機旁邊時,發(fā)射機的RF輸出會對接收機靈敏度有輕微影響,造成無?連接僅能在20碼范圍內(nèi)工作,跟我的預期目標相比發(fā)射距離太近了。然而當我把FM發(fā)射機裝進機箱里?把它放到離433MHz接收機幾碼遠的地方時,發(fā)射距離近的問題解?了,這時發(fā)射距離增加到約50碼(注意這仍然在室內(nèi))。

FM發(fā)射機
我構想這個設計的時候就預料到一定會有一些設計中的難點或者編程上的問題。開始我總認?制作一個小型FM發(fā)射機是很容易的事,所以我把這項工作留到最後完成。然而正如墨菲定律所說的一樣,當初我認?最簡單的事情到最後?成?整個設計中最棘手和最耗費時間的部分。

曾經(jīng)謠傳Rohm BA1404 IC的FM立體聲發(fā)射機套件經(jīng)常會因?工作不穩(wěn)定而導致無法使用,不過我還是鬼使神差地買了這個套件。唉,謠傳是真的──它的頻率穩(wěn)定性實在是太差了,以致不能和現(xiàn)代數(shù)字調(diào)諧FM接收機配合工作。即使我用高質(zhì)量的RF調(diào)諧元件替換了原來的便宜貨,問題依然存在。?了取得心理平衡我只能這?想∶這個IC是在數(shù)字FM接收機發(fā)明前設計的,其不能與數(shù)字調(diào)諧FM接收機配合工作情有可原。老式模擬FM接收機具備頻率控制電路,有可能會克服這個發(fā)射機套件的頻飄吧。

我找到了一個PLL穩(wěn)頻的FM發(fā)射機套件,但其高達200美元的價格對本設計來說太不合算了。幾年前我曾經(jīng)做過幾個10-400MHz范圍的PLL頻率發(fā)生器,因此我想嘗試自己制作FM發(fā)射機。

不過那是惡夢的開始。我過去所用的PLL芯片現(xiàn)在買不到了。目前大多數(shù)的PLL IC是專門用于移動電話之類的,它們在低于100MHz下不能穩(wěn)定工作。雖然我也找到了一些針對FM發(fā)射用的IC,但它們的封裝形式太小以致不能焊接。

在這種情?下我?定另辟蹊蹺。因?我必須用微控制器來控制PLL芯片,?什?我不完全丟掉PLL芯片而用微控制器測量和控制振蕩頻率?我所想的可以認?是一個自動穩(wěn)頻器。

我的想法可以用圖3描述。振蕩頻率主要由電感和可變電容?定。本設計中我把調(diào)諧范圍大概定在88~92MHz,這兩方面的原因∶第一,F(xiàn)M波段低端商業(yè)電臺較少;更重要的是96MHz是該電路能測量的最高頻率。



圖3 FM發(fā)射機框圖

? 了穩(wěn)定性和FM調(diào)制兩個目的,振蕩器由一個變?nèi)荻O管控制頻率微調(diào)。變?nèi)荻O管的電容量由加在它上面的偏置電壓?定。這個偏置電壓由兩個分量控制。12位 DAC提供的直流電平和一個交流信號雙重作用在變?nèi)荻O管上以實現(xiàn)頻率調(diào)制。DAC的輸出電壓初始值設置在中間值(2V),通過手動調(diào)整可變電容(微調(diào))把振蕩器調(diào)到指定的頻率,其後微控制器會稍微上下調(diào)整DAC的輸出電壓來穩(wěn)定這個頻率。

要用微控制器測量振蕩器的頻率必須先把它進行16預分頻。這可由普通的74F161 4位分頻器完成。預分頻輸出大概在5~6MHz頻率范圍,這個頻率可以用微控制器的16位計數(shù)器/定時器進行計數(shù)。

?了確定振蕩頻率,先把16位計數(shù)器清零,經(jīng)過設定的時間間隔之後再把它的值讀出來。設定時間間隔由微控制器中另一個計數(shù)器/定時器編程控制,每5.461ms周期中斷一次。這樣16位計數(shù)器中的值可以這樣計算∶

Counter/timer Value=(fosc/16)(5.46110-3)

實際操作時微控制器讀出16位定時器的值?把它與用你選擇的頻率代人上述方程計算出來的一個常數(shù)進行比較。如果振蕩頻率太低了DAC的值就會向上加1再試;相反地如果振蕩頻率太高了,DAC值就?1。如此反復直到振蕩器的頻率落在你所選頻點附近的很窄的帶寬內(nèi)。

這個電路一般來說可能會一直處于搜索狀態(tài),有兩個原因∶第一,因?在采樣時間內(nèi)振蕩器信號的變化會使計數(shù)器/定時器總會出現(xiàn)1次計數(shù)誤差;第二,由于振蕩器被音頻信號進行頻率調(diào)制,其頻率會隨著這個調(diào)制電壓而變化。

我們是不希望出現(xiàn)一直搜索的情?的,因?這會導致接收機收到的音樂中夾著調(diào)制聲。?了避免這種情?發(fā)生,微控制器一旦把頻率調(diào)定,就進入?期10分鐘的 “休眠”狀態(tài),10分鐘過後再檢測一次頻率。除非室內(nèi)溫度出現(xiàn)較大變化,否則振蕩器就幾乎不用修正,本電路就可保證正常工作。

AVR AFC

在我詳細?述怎樣實現(xiàn)自動頻率控制FM發(fā)射機前,請先看一下圖4以有一個感性認識。首先我需要一個可以對6MHz頻率進行計數(shù)的微控制器?且該微控制器還必須具備另外一個定時器,用來發(fā)出讀計數(shù)器和清零計數(shù)器的中斷?沖。我選用Atmel AT90S2313-10PC,因?它內(nèi)部含有我所需要的功能。然而我必須讓它在超出它額定頻率10MHz的12MHz頻率下工作以獲得6MHz頻率的計數(shù)能力。順便說一下,這樣適當對Atmel AT90S2313“超頻”到目前?止還沒有出現(xiàn)過什?問題。



圖4 自動微調(diào)的發(fā)射機單元

當發(fā)射機制作完成?設定在某個信道之後FM振蕩器頻率就可確定。因此,?了簡化操作,在程序開頭我輸入了所需的發(fā)射頻率作?常數(shù),程序經(jīng)編譯以後下載到AT90S2313做成一個固定頻率的FM發(fā)射機。

10年前可以很容易取得頻率高達1GHz的256分頻預分頻器芯片,但這些芯片現(xiàn)在都聽?了,因此我用74F161計數(shù)器來實現(xiàn)16分頻。該器件工作頻率大于100MHz,成本低于1美元?且容易買到。

我用2N5485制作了一個VCO。VCO的振蕩頻率主要取?于L1和C12的值。C12?微調(diào)電容,發(fā)射機第一次通電時,用其對頻率進行微調(diào)使發(fā)射機工作在指定頻率上。只有裝上J1使微控制器把DAC輸出設置在中間值時,才可以進行微調(diào),之後把跳?去掉。當發(fā)射機再次通電後,自動頻率穩(wěn)定器電路開始工作,振蕩器被變?nèi)荻O管D1微調(diào)到指定頻率。74F161需要幾伏的信號作?時鐘,這可以用FET振蕩器實現(xiàn)(其它大多數(shù)形式的振蕩器沒有這樣的能力)。

振蕩器的RF輸出從L1的抽頭取出以?小負載的影響。RF輸出用電容耦合到74F161預分頻器第一級的時鐘輸入。調(diào)整分壓器R7?時鐘輸入端提供適當?shù)钠?,使振蕩信號觸發(fā)輸入分頻級。把它設定在2~2.5V之間較好,最好用示波器調(diào)整設定,使74F161的11?輸出得到乾凈的5~6MHz的波形。

控制VCO微調(diào)的12位DAC U14采用TI公司帶SPI接口的DAC7611。雖然AT90S2313不具備用戶SPI端口(它的SPI端口只嚴格地配合閃存編程工作),但用PB1~PB4 I/O?可以簡單地實現(xiàn)發(fā)送SPI數(shù)據(jù)到DAC的功能。

圖4中AT90S2313下面的跳?J1與PD6端口?連接,復位時微控制器檢測該端口?的狀態(tài)。如果J1處于連接狀態(tài),它只不過會把DAC設置在中間值,接著進入等待。這時你可以調(diào)節(jié)微調(diào)電容把振蕩器的頻率設定在最接近指定頻率的地方使誤差最小。北美地區(qū)所有FM廣播均把頻率設定?100KHz的奇數(shù)倍,隨便選一個就行了。

做完這個後,接著去掉跳?再給發(fā)射機通電。這時發(fā)射機應在幾秒時間內(nèi)反復調(diào)整DAC電壓,?經(jīng)過預分頻器反復測量振蕩器輸出頻率使其返回指定頻率。這就是隨後用作FM發(fā)射機模塊的正常工作模式。

從主機聲卡輸出的立體聲音頻信號先經(jīng)過一個預加重網(wǎng)絡(每個聲道都要)混合成一個單聲道信號,該信號?加在DAC的直流控制電壓上對振蕩器的輸出進行調(diào)頻。

預加重網(wǎng)絡中的RC值視立體聲接收機的輸出以取得較平坦的頻響?目標而確定,圖4中的設定值還是比較合理的。別指望選定的元件值會達到北美FM廣播的去加重常數(shù)標準值75us,要考慮到還有很多存在于VCO中的因素會影響調(diào)制特性,我設定的參數(shù)值可使發(fā)射機獲得比較平坦的頻響。注意,圖4中沒有提到天?,如果設備放在塑料殼內(nèi)其發(fā)射距離能達到50碼,那就很好,因?政府相關法規(guī)規(guī)定禁止使用發(fā)射半徑大于50碼的發(fā)射機。

我用一片1.5x1平方英寸的小型單面PCB板制作了電路的VCO部分(如圖4虛?部分所示)。電路剩下部分在一塊Simm-Stick面包板上手工連?。VCO PCB板設計成SIP封裝的樣子垂直安裝在Simm-Stick面包板上。

軟件和固件

應用軟件包括計算機上運行的應用程序和運行在遙控器上的客戶固件。PC端服務軟件用Visual Basic 6語言編寫。

遙控器固件用AVR匯編語言編寫。FM發(fā)射機另外用一片AT90S2313穩(wěn)頻?,F(xiàn)在所用軟件是試用版,因此我暫時用BASCOM-AVR編譯器代替AT90S2313。

客戶端應用軟件

運行在PC上的客戶端應用軟件主要有兩個主要功能∶大多數(shù)時間它一直在檢測COM1端口搜尋遙控器發(fā)給它的指令∶另一個功能是用它來瀏覽文件目錄?指定4個文件夾作?自動點播文件夾。這些文件夾中的文件名接著就被轉換成數(shù)據(jù)記錄,用COM1端口的發(fā)射部分發(fā)送到遙控器上。除非文件夾的內(nèi)容更改,否則只下載一次,因?這些數(shù)據(jù)存儲在遙控器中的歌名列表閃存中,見照片2。



照片2 用以控制媒體播放器上的MP3文件的播放的PC應用程序

我詳細地介紹一下第一個功能。正如前面提到的,計算機和遙控器之間通過433MHz無?連接,在PC端433MHz接收機以2400bps速率接收RF信號?把它轉換成串行數(shù)據(jù),接著把它送到COM1端口。所有數(shù)據(jù)格式和數(shù)據(jù)糾錯均由NKM2401編/解碼器芯片組成的硬件電路完成。這樣做可以確??蛻舳藨密浖邮盏降牡闹噶疃际呛戏ǖ?。

NKM2401采用8字節(jié)數(shù)據(jù)包格式。遙控器發(fā)送的所有指令由2字節(jié)同步數(shù)據(jù)(0xAA, 0x55)後跟16位指令字和4個補充字節(jié)組成。2字節(jié)指令字用來區(qū)別4種指令∶播放(停止),播放下一曲,播放前一曲,播放全部和暫停。其它14位數(shù)據(jù)用來選擇當前文件夾和該文件夾內(nèi)歌名的一些附加信息。

當你選出要用的文件夾時,文件夾就會打開,接著分析該文件夾然後顯示出唱片長度信息。在應用中我效仿了這個功能,把它應用到了發(fā)射機和遙控器上。這樣做使你可以在遙控器的LCD上看到所有歌名。另外它意味著你僅需發(fā)送數(shù)據(jù)庫文件中歌曲位置的相應編號就可以點播歌曲。

客戶端程序確定播放哪一首歌曲後怎樣使計算機播放這首歌曲呢?如果歌曲是WAV格式,那就很簡單,因?Visual Basic內(nèi)置的多媒體支持功能包括WAV文件的播放,然而它不支持MP3文件的播放,起碼我所用的版本是這樣。我到處尋找能播放MP3文件的控件但沒能找到免費的或者價格合理的。

在這方面我又碰釘子了。我剛下載了Microsoft免費發(fā)布的Windows Media Player V.7。這個多用途程序能?很好地播放MP3文件?且有很多你所需要的附加功能。像很多Windows程序一樣它有支持快捷鍵的優(yōu)點。我的想法是同時運行我的MP3自動點播機客戶端程序和Windows Media Player,然後用我的客戶端軟件控制Windows Media Player。這可以用一系列的Visual Bsic命令實現(xiàn)。

第二個功能,選擇想要的音樂文件夾(多達4個)?把內(nèi)容下載到遙控器的閃存上,這個功能僅偶爾用到。你只需選定文件夾接著點擊表格左邊的4個數(shù)字按鈕中的一個就可以了。有一個窗口記錄著歌名列表閃存剩馀的空間。如果閃存沒有用完的話每個文件夾能裝將近200首歌曲。

?了簡化遙控器的固件,我假設4個文件夾都會用到,因此全部下載。如果你沒有那?多文件夾,那?不足的文件夾將用你選定的文件夾的復件代替。

按下載鍵之前遙控器必須先插入PC的COM1端口暫時代替433MHz接收機。我用前面提到的自己做的電纜讓它一直插在PC上,電纜另一端?5pin DIN插頭,該插頭與接收機和遙控器都是匹配的,這樣連接就非常方便。下載時間由遙控器中的閃存的寫入時間?定。在所有4個目錄均含大約200首歌的極限情?下,下載時間大約?4分鐘。下載進程用檢測盒顯示,檢測盒顯示在客戶程序文件夾列表旁邊,在遙控器LCD顯示屏上也有相關信息顯示。

AVR固件

我已大概介紹了FM發(fā)射機的自動頻率控制原理。實現(xiàn)這個功能的程序非常簡單,因此用Basic語言編寫?用BASCOM-AVR編譯器編譯。

遙控器的固件比較棘手。最初我試著用BASCOM-AVR編譯器編Basic程序但生成的程序代碼太長,AT90S2313中的閃存空間裝不下。隨後,我用匯編語言編程實現(xiàn)了遙控器的功能,使用的程序空間不到AT90S2313閃存空間的一半。

與PC客戶軟件一樣遙控器單元有兩個功能,其中一個功能不常用。打開時它顯示文件夾1中的前4首歌,接著循環(huán)檢測由RCA通用遙控器發(fā)出的紅外?指令和紅外?接收機模塊接收到的指令。紅外信號進入AT90S2313的INPUT CAPTURE?D6端口,接著由定時器1(16位定時器/計數(shù)器)的輸入捕捉特性譯碼。我選用比較簡單的紅外?指令結構(Quasar牌電視機編碼054)以?少工作量。這種指令結構的起始部分是固定長度的起始?沖,後面緊跟8位數(shù)據(jù),數(shù)據(jù)位用?沖與?沖之間的2個不同的時間間隔表示。在確認固定長度的起始?沖後,你要做的只有兩件事∶捕捉接下來的8個?沖的時序;根據(jù)時間間隔將它們區(qū)分開來?分配適當?shù)闹怠>拖袂懊嬲f的遙控單元不停地檢測傳來地指令然後執(zhí)行相應的功能,導航功能僅局限瀏覽歌曲列表和從一個文件夾跳到另一個文件夾。這通過調(diào)整指向閃存,讀取歌名?把這些ASCII字符發(fā)送到 LCD顯示屏實現(xiàn)。

通過AT90S2313的UART發(fā)送端口發(fā)送相應的命令來實現(xiàn)播放,播放下一首,播放最後一首和暫停功能。同樣,此時NKM2401使用8字節(jié)數(shù)據(jù)包格式,同步字節(jié)和補充字節(jié)也必須按照需要加到16位指令字中。

設計有專用的下載功能按鍵。按下它時程序功能變成接收從AT90S2313的UART端口送過來的字符,PC?生的數(shù)據(jù)就用該功能傳送到歌曲閃存中。

Atmel 24C256閃存芯片?I2C接口的32K8存儲器,其5ms的寫入時間有點慢但對本設計?無大礙,因?從服務器計算機送來的數(shù)據(jù)的速率是 1200bps,相當于每8.3ms傳輸一個字符。AT90S2313沒有專門的I2C端口,因此這個功能必須用固件實現(xiàn)。主程序直接套用Atmel公司應用筆記中的程序,效果很好。

LCD?一個440點陣的器件,使用常見的Hitachi公司的HD44780控制器,實際上該控制器內(nèi)部包含兩個LSI控制器和一個公用的數(shù)據(jù)/控制接口,外加兩根ENABLE?。我必須改寫我原來的4位LCD驅(qū)動程序來應付LCD1、2行字符由控制器1控制,3、4行字符由控制器2控制的情?。

結語

我覺得這個設計很有意思,也許是因?它用了無?傳輸?shù)木壒拾?。Abacom公司的接收/發(fā)射模塊配合該公司的編碼和解碼器件應用,性能很好。此外,貼近用戶的AVR器件閃存編程能力使匯編程序的寫入變得非常輕松。

對本設計我基本滿意,但仍然覺得有些不足的地方。我原來?不打算花那?多時間來做一個令人滿意的FM發(fā)射機模塊。現(xiàn)在來說可能是遲了一點,近來我看見市場上有Rohm公司的BH1416F無?音頻連接IC,它采用SOP22封裝,內(nèi)部包含完整的PLL穩(wěn)頻FM發(fā)射機和FM立體聲調(diào)制器。我買了這個芯片,打算以後試試。如果你不是一個超級音樂迷希望你可以將這里提到的一些想法用到其它方面去設計出更好的東西。

紅外遙控器相關文章:紅外遙控器原理


評論


相關推薦

技術專區(qū)

關閉