基于AT90S2313-4PC的MP3無線遙控自動點播機(下)
我用2N5485制作了一個VCO。VCO的振蕩頻率主要取于L1和C12的值。C12微調(diào)電容,發(fā)射機第一次通電時,用其對頻率進行微調(diào)使發(fā)射機工作在指定頻率上。只有裝上J1使微控制器把DAC輸出設(shè)置在中間值時,才可以進行微調(diào),之後把跳去掉。當發(fā)射機再次通電後,自動頻率穩(wěn)定器電路開始工作,振蕩器被變?nèi)荻O管D1微調(diào)到指定頻率。74F161需要幾伏的信號作時鐘,這可以用FET振蕩器實現(xiàn)(其它大多數(shù)形式的振蕩器沒有這樣的能力)。
本文引用地址:http://www.ex-cimer.com/article/201706/351935.htm振蕩器的RF輸出從L1的抽頭取出以小負載的影響。RF輸出用電容耦合到74F161預分頻器第一級的時鐘輸入。調(diào)整分壓器R7時鐘輸入端提供適當?shù)钠茫拐袷幮盘栍|發(fā)輸入分頻級。把它設(shè)定在2~2.5V之間較好,最好用示波器調(diào)整設(shè)定,使74F1 61的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設(shè)置在中間值,接著進入等待。這時你可以調(diào)節(jié)微調(diào)電容把振蕩器的頻率設(shè)定在最接近指定頻率的地方使誤差最小。北美地區(qū)所有FM廣播均把頻率設(shè)定 100KHz的奇數(shù)倍,隨便選一個就行了。
做完這個後,接著去掉跳 再給發(fā)射機通電。這時發(fā)射機應在幾秒時間內(nèi)反復調(diào)整DAC電壓, 經(jīng)過預分頻器反復測量振蕩器輸出頻率使其返回指定頻率。這就是隨後用作FM發(fā)射機模塊的正常工作模式。
從主機聲卡輸出的立體聲音頻信號先經(jīng)過一個預加重網(wǎng)絡(每個聲道都要)混合成一個單聲道信號,該信號 加在DAC的直流控制電壓上對振蕩器的輸出進行調(diào)頻。
預加重網(wǎng)絡中的RC值視立體聲接收機的輸出以取得較平坦的頻響 目標而確定,圖4中的設(shè)定值還是比較合理的。別指望選定的元件值會達到北美FM廣播的去加重常數(shù)標準值75us,要考慮到還有很多存在于VCO中的因素會影響調(diào)制特性,我設(shè)定的參數(shù)值可使發(fā)射機獲得比較平坦的頻響。注意,圖4中沒有提到天 ,如果設(shè)備放在塑料殼內(nèi)其發(fā)射距離能達到50碼,那就很好,因 政府相關(guān)法規(guī)規(guī)定禁止使用發(fā)射半徑大于50碼的發(fā)射機。
我用一片1.5x1平方英寸的小型單面PCB板制作了電路的VCO部分(如圖4虛 部分所示)。電路剩下部分在一塊Simm-Stick面包板上手工連 。VCO PCB板設(shè)計成SIP封裝的樣子垂直安裝在Simm-Stick面包板上。
軟件和固件
應用軟件包括計算機上運行的應用程序和運行在遙控器上的客戶固件。PC端服務軟件用Visual Basic 6語言編寫。
遙控器固件用AVR匯編語言編寫。FM發(fā)射機另外用一片AT90S2313穩(wěn)頻。現(xiàn)在所用軟件是試用版,因此我暫時用BASCOM-AVR編譯器代替AT90S2313。
客戶端應用軟件
運行在PC上的客戶端應用軟件主要有兩個主要功能∶大多數(shù)時間它一直在檢測COM1端口搜尋遙控器發(fā)給它的指令∶另一個功能是用它來瀏覽文件目錄 指定4個文件夾作 自動點播文件夾。這些文件夾中的文件名接著就被轉(zhuǎn)換成數(shù)據(jù)記錄,用COM1端口的發(fā)射部分發(fā)送到遙控器上。除非文件夾的內(nèi)容更改,否則只下載一次,因 這些數(shù)據(jù)存儲在遙控器中的歌名列表閃存中,見照片2。
照片2 用以控制媒體播放器上的MP3文件的播放的PC應用程序
我詳細地介紹一下第一個功能。正如前面提到的,計算機和遙控器之間通過433MHz無 連接,在PC端433MHz接收機以2400bps速率接收RF信號 把它轉(zhuǎn)換成串行數(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首歌曲。
了簡化遙控器的固件,我假設(shè)4個文件夾都會用到,因此全部下載。如果你沒有那 多文件夾,那 不足的文件夾將用你選定的文件夾的復件代替。
按下載鍵之前遙控器必須先插入PC的COM1端口暫時代替433MHz接收機。我用前面提到的自己做的電纜讓它一直插在PC上,電纜另一端 5pin DIN插頭,該插頭與接收機和遙控器都是匹配的,這樣連接就非常方便。下載時間由遙控器中的閃存的寫入時間 定。在所有4個目錄均含大約200首歌的極限情 下,下載時間大約 4分鐘。下載進程用檢測盒顯示,檢測盒顯示在客戶程序文件夾列表旁邊,在遙控器LCD顯示屏上也有相關(guān)信息顯示。
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ù)器)的輸入捕捉特性譯碼。我選用比較簡單的紅外 指令結(jié)構(gòu)(Quasar牌電視機編碼054)以 少工作量。這種指令結(jié)構(gòu)的起始部分是固定長度的起始 沖,後面緊跟8位數(shù)據(jù),數(shù)據(jù)位用 沖與 沖之間的2個不同的時間間隔表示。在確認固定長度的起始 沖後,你要做的只有兩件事∶捕捉接下來的8個 沖的時序;根據(jù)時間間隔將它們區(qū)分開來 分配適當?shù)闹?。就像前面說的遙控單元不停地檢測傳來地指令然後執(zhí)行相應的功能,導航功能僅局限瀏覽歌曲列表和從一個文件夾跳到另一個文件夾。這通過調(diào)整指向閃存,讀取歌名 把這些ASCII字符發(fā)送到 LCD顯示屏實現(xiàn)。
通過AT90S2313的UART發(fā)送端口發(fā)送相應的命令來實現(xiàn)播放,播放下一首,播放最後一首和暫停功能。同樣,此時NKM2401使用8字節(jié)數(shù)據(jù)包格式,同步字節(jié)和補充字節(jié)也必須按照需要加到16位指令字中。
設(shè)計有專用的下載功能按鍵。按下它時程序功能變成接收從AT90S2313的UART端口送過來的字符,PC 生的數(shù)據(jù)就用該功能傳送到歌曲閃存中。
Atmel 24C256閃存芯片 I2C接口的32K×8存儲器,其5ms的寫入時間有點慢但對本設(shè)計 無大礙,因 從服務器計算機送來的數(shù)據(jù)的速率是 1200bps,相當于每8.3ms傳輸一個字符。AT90S2313沒有專門的I2C端口,因此這個功能必須用固件實現(xiàn)。主程序直接套用Atmel公司應用筆記中的程序,效果很好。
LCD 一個4×40點陣的器件,使用常見的Hitachi公司的HD44780控制器,實際上該控制器內(nèi)部包含兩個LSI控制器和一個公用的數(shù)據(jù)/控制接口,外加兩根ENABLE 。我必須改寫我原來的4位LCD驅(qū)動程序來應付LCD1、2行字符由控制器1控制,3、4行字符由控制器2控制的情 。
結(jié)語
我覺得這個設(shè)計很有意思,也許是因為它用了無線傳輸?shù)木壒拾?。Abacom公司的接收/發(fā)射模塊配合該公司的編碼和解碼器件應用,性能很好。此外,貼近用戶的AVR器件閃存編程能力使匯編程序的寫入變得非常輕松。
對本設(shè)計我基本滿意,但仍然覺得有些不足的地方。我原來 不打算花那 多時間來做一個令人滿意的FM發(fā)射機模塊。現(xiàn)在來說可能是遲了一點,近來我看見市場上有Rohm公司的BH1416F無線音頻連接IC,它采用SOP22封裝,內(nèi)部包含完整的PLL穩(wěn)頻FM發(fā)射機和FM立體聲調(diào)制器。我買了這個芯片,打算以後試試。如果你不是一個超級音樂迷希望你可以將這里提到的一些想法用到其它方面去設(shè)計出更好的東西。
評論