一種基于ATmega8L的調(diào)頻立體聲收音機(jī)設(shè)計(jì)
3.1 搜臺(tái)程序設(shè)計(jì)
本文引用地址:http://butianyuan.cn/article/249573.htm搜臺(tái)程序可用硬件模式進(jìn)行搜臺(tái),也可以采用軟件模式進(jìn)行搜臺(tái)。本文著重介紹硬件模式搜臺(tái),軟件模式搜臺(tái)可參照硬件搜臺(tái)模式進(jìn)行編程。
I2C總線接口是由START、命令字節(jié)、數(shù)據(jù)字節(jié)及每個(gè)字節(jié)后的ACK及NACK比特、STOP組成。RDA58027P芯片寫器件地址為0x20,讀器件地址為0x21。RDA5807P芯片內(nèi)部的I2C總線接口有4個(gè)寫數(shù)據(jù)寄存器,其地址分別是0x02、0x03、0x04、0x05。2個(gè)讀數(shù)據(jù)寄存器,其地址分別為0x0A、0x0B,每個(gè)數(shù)據(jù)寄存器又分為高字節(jié)和低字節(jié)。這些數(shù)據(jù)寄存器的地址是不可見的,不能通過單片機(jī)直接對(duì)指定地址的數(shù)據(jù)寄存器進(jìn)行讀/寫操作。因此,單片機(jī)在發(fā)出讀/寫命令字節(jié)后,接下來(lái)必須對(duì)數(shù)據(jù)寄存器進(jìn)行連續(xù)地讀/寫操作。其子程序如下:
硬件模式搜臺(tái)程序設(shè)計(jì)主要是通過調(diào)用連續(xù)寫和連續(xù)讀操作子程序來(lái)對(duì)收音模塊寄存器進(jìn)行讀/寫,其程序流程圖如圖7所示。
根據(jù)該流程圖編寫的子程序如下:
3.2 紅外遙控解碼程序設(shè)計(jì)
由BA5104的編碼格式可知;遙控碼的一幀長(zhǎng)度為12位,其中包括3位起始碼、2位用戶碼、7位指令碼。遙控碼的每一幀時(shí)間間隔為4T,T=1.6879 ms為一位遙控碼的周期。一幀完整的遙控碼如圖8所示。
遙控碼中“1”用3T/4的高電平與T/4的低電平表示,“0”用T/4的高電平與3T/4的低電平表示,一位遙控碼的波形如圖9所示。
由圖9可見,要用單片機(jī)來(lái)判斷遙控發(fā)射器發(fā)出的是“0”還是“1”,關(guān)鍵是要判斷接收脈沖下降沿至上升沿之間的時(shí)間。可以采用外部中斷法,也可以采用輸入捕獲功能法,本文采用后一種方法。解碼的思路是:初始化時(shí),將ATmcga8L的ICP1引腳設(shè)置為輸入狀態(tài),下降沿觸發(fā),當(dāng)紅外接收頭接收到紅外遙控信號(hào)時(shí),產(chǎn)生下降沿,單片機(jī)自動(dòng)將TCNT1寄存器中的值保存至ICR1寄存器中,在捕獲中斷服務(wù)程序中將ICR1中的值保存至T1中;然后將ICP1設(shè)置為上升沿觸發(fā),當(dāng)再次產(chǎn)生捕獲中斷時(shí),將ICR1中的值保存至T2中,將ICP1設(shè)置為下降沿觸發(fā),并將TCNT1置0。之后計(jì)算出T2-T1的時(shí)間并保存至事先開辟的數(shù)組中,要注意的是,T2-T1有可能出現(xiàn)負(fù)值,此時(shí)要將(T2-T1+0xffff)再保存,直到接收完12位數(shù)據(jù)。
保存在數(shù)組中的數(shù)據(jù),當(dāng)其值為3/4×1.687 9ms≈1266μs時(shí),被認(rèn)為接收到“1”,當(dāng)其值為1/4×1.687 9 ms≈422 μs時(shí),被認(rèn)為接收到“0”。由于遙控發(fā)射器和單片機(jī)所使用的晶振頻率與標(biāo)稱值會(huì)有一定的偏差,所以在程序中要留有一定的余量。
結(jié)語(yǔ)
經(jīng)過多次比對(duì)測(cè)試,該收音機(jī)可以清晰、穩(wěn)定地收聽省府及本地所發(fā)射的調(diào)頻電臺(tái)信號(hào)。
紅外遙控器相關(guān)文章:紅外遙控器原理萬(wàn)能遙控器相關(guān)文章:萬(wàn)能遙控器代碼
手機(jī)電池相關(guān)文章:手機(jī)電池修復(fù)
pa相關(guān)文章:pa是什么
波段開關(guān)相關(guān)文章:波段開關(guān)原理
上拉電阻相關(guān)文章:上拉電阻原理 溫濕度控制器相關(guān)文章:溫濕度控制器原理
評(píng)論