紅外遙控芯片BA5104的軟件解碼方法探討
摘要:根據(jù)紅外遙控芯片BA5104的編碼格式,探討使用AVR單片機(jī)ATmega16進(jìn)行軟件解碼的兩種方法:外部中斷解碼法和輸入捕獲功能解碼法。詳細(xì)闡述這兩種解碼方法的思路,并給出相應(yīng)的解碼中斷服務(wù)子程序。分析這兩種解碼方法的優(yōu)缺點(diǎn),得出輸入捕獲功能解碼法比外部中斷解碼法效率更高、解出的遙控碼更穩(wěn)定、可靠的結(jié)論。
關(guān)鍵詞:AVR單片機(jī);捕獲模式;解碼;紅外遙控芯片
用BA5104芯片構(gòu)成的紅外遙控發(fā)射器電路具有外接元件少、成本低廉、器件本身功耗低、電源電壓適應(yīng)范圍寬、工作穩(wěn)定可靠等特點(diǎn),因此廣泛應(yīng)用于遙控風(fēng)扇、燈器、電熱水器等各類家用電器中。BA5104芯片解碼常用BA5204、BA820X系列、SM5032C等芯片進(jìn)行硬件解碼,這種解碼方法缺乏靈活性。目前許多電子產(chǎn)品和電氣設(shè)備以單片機(jī)作為核心控制器且逐漸采用紅外遙控器進(jìn)行操作,采用軟件解碼代替硬件解碼,對(duì)于設(shè)備的升級(jí)和改造提供極大的靈活性,降低開發(fā)成本。
1 BA5104芯片構(gòu)成的紅外遙控發(fā)射器電路
由紅外遙控芯片BA5104構(gòu)成的紅外遙控發(fā)射器電路如圖1所示。K1~K8為遙控器的輸入按鍵,由于BA5104的按鍵輸入端內(nèi)接有上拉電阻無鍵按下時(shí),電路沒有電流流通,無編碼信號(hào)輸出。當(dāng)電路中有任一鍵按下時(shí),振蕩電路起振,產(chǎn)生455 kHz的振蕩信號(hào),經(jīng)BA5104內(nèi)部電路進(jìn)行12分頻,得到38 kHz的載波信號(hào)。按鍵的綰碼信息和C1、C2的狀態(tài)信息經(jīng)內(nèi)部電路進(jìn)行編碼調(diào)制,由15腳串行輸出,經(jīng)三極管Q1,Q2構(gòu)成的達(dá)靈頓電路放大,驅(qū)動(dòng)經(jīng)外發(fā)射管發(fā)射38 kHz的已調(diào)制紅外載波信號(hào)。14腳輸出高電平,點(diǎn)亮發(fā)射狀態(tài)指示燈LED1。
2 BA5104芯片的編碼格式
BA5104的編碼格式瑚為:每一幀遙控碼的長度為12位,包括3位起始碼位、2位用戶碼位、7位指令碼位。每一幀遙控碼的時(shí)間間隔為4T,其中T=1.687 9 ms為每一位遙控碼的周期。一幀遙控碼如圖2所示。遙控碼“0”用1/4T的高電平、3/4T的低電平表示,遙控碼“1”用3/4T的高電平、1/4T的低電平表示,一位遙控碼的波形如圖3所示。
3 BA5104芯片的軟件解碼方法
3.1 測(cè)出接收脈沖下降沿剄上升沿的時(shí)間間隔并保存
解碼的關(guān)鍵是要測(cè)出接收脈沖下降沿到上升沿的時(shí)間間隔,行之有效的方法有兩種:外部中斷法輸入捕獲功能法,下面分別進(jìn)行介紹。
3.1.1 外部中斷法
用AVR單片機(jī)ATmega16的外部中斷INT0接收解碼BA5104芯片的電路如圖4所示。PC838為一體化紅外接收頭,YM12864為中文液晶顯示器,用于顯示下降沿中斷至上升沿中斷之間的時(shí)間間隔及解碼成功后的遙控碼。
外部中斷法的解碼思路:PCF838的輸出端未接收到紅外遙控信號(hào)時(shí)保持高電平,接收到紅外遙控信號(hào)時(shí),輸出端從高電平變成低電平,形成下降沿,低電平持續(xù)一段時(shí)間后,紅外遙控信號(hào)消失,輸出端又從低電平變成高電平,形成上升沿。單片機(jī)ATmega16的外部中斷可以由編程者自由設(shè)置為上升沿中斷或下降沿中斷,初始化時(shí)先將ATmega16的外部中斷INT0設(shè)置為下降沿中斷,當(dāng)INT0發(fā)生下降沿中斷時(shí)用定時(shí)器/計(jì)數(shù)器T/C1記錄發(fā)生的時(shí)間并保存在t1中,然后設(shè)置外部中斷INT0為上升沿中斷,當(dāng)外部中斷INT0又一次觸發(fā)中斷時(shí)將發(fā)生的時(shí)間保存在t2中,再次將外部中斷INT0為下降沿中斷。最后計(jì)算從下降沿中斷至上升沿中斷之間的時(shí)間間隔并保存在事先開辟的數(shù)據(jù)存儲(chǔ)區(qū)中,直到接收完一幀遙控碼,外部中斷INT0發(fā)生的過程如圖5所示。外部中斷INT0的中斷服務(wù)子程序如下:
3.1.2 輸入捕獲功能法
用AVR單片機(jī)ATmega16的輸入捕獲功能ICP1接收解碼BA5104芯片的電路如圖6所示。
輸入捕獲功能法的思路:初始化時(shí)先將ATmega16的T/C1設(shè)置為輸入捕獲模式,下降沿捕獲中斷。當(dāng)ICP1引腳檢測(cè)到下降沿時(shí)產(chǎn)生捕獲中斷,將計(jì)數(shù)寄存器TCNT1中的計(jì)數(shù)值自動(dòng)寫入捕捉寄存器ICR1,在捕獲中斷程序中將ICR1的值保存到變量t1中,之后將T/C1設(shè)置為上升沿捕獲中斷;當(dāng)ICP1引腳檢測(cè)到上升沿時(shí)再一次產(chǎn)生捕獲中斷,此時(shí)將ICR1的值保存在變量t2中,然后將TENT1的計(jì)數(shù)值清0,并將T/C1設(shè)置為上升沿捕獲。最后進(jìn)行計(jì)算便可得到下降沿捕獲中斷至上升沿捕獲中斷之間的時(shí)間間隔并保存在數(shù)據(jù)緩沖區(qū)中,直到接收完12位遙控碼。輸入捕獲中斷發(fā)生的過程如圖7所示。ICP1捕獲中斷服務(wù)子程序如下:
3.2 遙控碼“0”和遙控碼“1”的提取
根據(jù)BA5104芯片的編碼格式,當(dāng)保存在數(shù)據(jù)緩沖區(qū)中的數(shù)值為1/4T=1/4×1.687 9ms≈422μs時(shí),判定為接收到遙控碼“0”;當(dāng)數(shù)據(jù)緩沖區(qū)中的數(shù)值為3/4T=3/4x1.687 9 ms≈126 6μ時(shí),判定為接收到遙控碼“1”。在實(shí)際應(yīng)用中,由于單片機(jī)和紅外遙控發(fā)射器所使用的晶振頻率與標(biāo)稱值有一定的偏差,所以在編寫程序時(shí)要留有一定的容限誤差。提取12位遙控碼的子程序如下:
4 測(cè)試結(jié)果與分析
測(cè)試條件:AVR單片機(jī)ATmega16外接晶振為8 MHz,系統(tǒng)內(nèi)部進(jìn)行8分頻。經(jīng)過實(shí)驗(yàn),用外部中斷法和輸入捕獲功能法均能測(cè)出接收脈沖下降沿到上升沿的時(shí)間間隔。表1為測(cè)試所得的結(jié)果。在實(shí)驗(yàn)中發(fā)現(xiàn),用外部中斷法測(cè)得的第一幀遙控碼的第1位(即S2)比較容易受到外界的干擾,造成解碼偶爾會(huì)出現(xiàn)錯(cuò)誤。而用輸入捕獲功能法進(jìn)行解碼極少出現(xiàn)錯(cuò)誤,主要是因?yàn)锳Tmega16工作在輸入捕獲模式并打開噪音消除功能時(shí),單片機(jī)以時(shí)鐘頻率連續(xù)4次采樣ICP1引腳,當(dāng)4次采樣數(shù)據(jù)相同時(shí),才認(rèn)為輸入捕獲信號(hào)有效,具有較強(qiáng)的抗干擾能力。外部中斷法要占用單片機(jī)的一個(gè)外部中斷源和內(nèi)部的一個(gè)定時(shí)器,而輸入捕獲功能法僅占用單片機(jī)內(nèi)部的一個(gè)定時(shí)器。由此可見輸入捕獲功能解碼法明顯優(yōu)于外部中斷解碼法。
5 結(jié)束語
用AVR單片機(jī)進(jìn)行軟件解碼紅外遙控芯片BA5104的2種方法均已在實(shí)際電路中得到驗(yàn)證。經(jīng)過分析和比較,得出輸入捕獲功能解碼法優(yōu)于外部中斷解碼法的結(jié)論。文中介紹的2種解碼方法只是針對(duì)以BA5104芯片組成的遙控器,對(duì)于其它不同編碼格式的遙控器,解碼的思路是相同的,只須根據(jù)實(shí)際遙控器的編碼格式將程序中的一些參數(shù)修改即可,不用更換接收電路,非常方便。





