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