遙控器使用方便,功能多.目前已廣泛應用在電視機、VCD、DVD、空調等各種家用電器中,且價格便宜,市場上非常容易買到。如果能將遙控器上許多的按鍵解碼出來.用作單片機系統的輸入.則解決了常規矩陣鍵盤線路板過大、布線復雜、占用I/O口過多的弊病。而且通過使用遙控器,操作時可實現人與設備的分離,從而更加方便使用。下面以TC9012編碼芯片的遙控器為例。談談如何用常用的51系統單片機進行遙控的解碼。
通用紅外遙控系統由發射和接收兩大部分組成,應用編/解碼專用集成電路芯片來進行控制操作,如圖所示。發射部分包括鍵盤矩陣、編碼調制、LED紅外發送器;接收部分包括光、電轉換放大器、解調、解碼電路。
一、編碼格式
1、0和1的編碼
當發射器按鍵按下后,即有遙控碼發出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特征:采用脈寬調制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進制的“1”,其波形如圖所示。
遙控器發射的信號由一串0和1的二進制代碼組成.不同的芯片對0和1的編碼有所不同。通常有曼徹斯特編碼和脈沖寬度編碼。TC9012的0和1采用PWM方法編碼,即脈沖寬度調制,其0碼和1碼如圖所示(以遙控接收輸出的波形為例)。0碼由0.56ms低電平和0。56ms高電平組合而成,脈沖寬度為1.12ms.1碼由0.56ms低電平和1.69ms高電平組合而成,脈沖寬度為2.25ms。在編寫解碼程序時.通過判斷脈沖的寬度,即可得到0或1。
UPD6121G產生的遙控編碼是連續的32位二進制碼組,其中前16位為用戶識別碼,能區別不同的電器設備,防止不同機種遙控碼互相干擾,如我們可以同時使用電視機、機頂盒、功放等遙控器,但它們不會產生誤觸發。該芯片的用戶識別碼固定為十六進制01H;后16位為8位操作碼(功能碼)及其反碼。UPD6121G最多額128種不同組合的編碼。遙控器在按鍵按下后,周期性地發出同一種32位二進制碼,周期約為108ms。一組碼本身的持續時間隨它包含的二進制“0”和“1”的個數不同而不同,大約在45~63ms之間。
2、按鍵的編碼
當我們按下遙控器的按鍵時,遙控器將發出如圖2的一串二進制代碼,我們稱它為一幀數據。根據各部分的功能。可將它們分為5部分,分別為引導碼、用戶識別碼、用戶識別碼反碼、數據碼、數據反碼。遙控器發射代碼時.均是低位在前,高位在后。由圖3分析可以得到.引導碼高電平為4.5ms,低電平為4.5ms,當接收到此碼時,表示一幀數據的開始。單片機可以準備接收下面的數據。用戶識別碼由8位二進制組成,共256種.圖中地址碼重發了一次,主要是加強遙控器的可靠性.如果兩次地址碼不相同,則說明本幀數據有錯,應丟棄。不同的設備可以擁有不同的用戶識別碼.因此。同種編碼的遙控器只要設置地址碼不同,也不會相互干擾。圖中的地址碼為十六進制的0EH(注意低位在前)。在同一個遙控器中,所有按鍵發出的地址碼都是相同的,數據碼為8位,可編碼256種狀態,代表實際所按下的鍵。數據反碼是數據碼的各位求反,通過比較數據碼與數據反碼,可判斷接收到的數據是否正確。如果數據碼與數據反碼之間的關系不滿足相反的關系.則本次遙控接收有誤,數據應丟棄。在同一個遙控器上.所有按鍵的數據碼均不相同。在圖3中,數據碼為十六進制的0CH,數據反碼為十六進制的0F3H(注意低位在前),兩者之和應為0FFH。
二、單片機遙控接收電路
紅外遙控接收可采用較早的紅外接收二極管加專用的紅外處理電路的方法。如CXA20106,此種方法電路復雜,現在一般不采用。較好的接收方法是用一體化紅外接收頭,它將紅外接收二極管、放大、解調、整形等電路做在一起,只有三個引腳。分別是+5V電源、地、信號輸出。常用的一體化接收頭的外形及引腳見紅外接收頭的信號輸出接單片機的INTO或INTl腳。典型電路如圖5所示。圖中增加了一只PNP型三極管對輸出信號進行放大。
三、遙控信號的解碼算法及程序編制
平時,遙控器無鍵按下。紅外發射二極管不發出信號,遙控接收頭輸出信號1,有鍵按下時,0和1編碼的高電平經遙控頭倒相后會輸出信號0.由于與單片機的中斷腳相連,將會引起單片機中斷(單片機預先設定為下降沿產生中斷)。單片機在中斷時使用定時器0或定時器1開始計時.到下一個脈沖到來時,即再次產生中斷時,先將計時值取出。清零計時值后再開始計時.通過判斷每次中斷與上一次中斷之間的時間間隔。便可知接收到的是引導碼還是0和1。如果計時值為9ms。接收到的是引導碼,如果計時值等于1.12ms,接收到的是編碼0。如果計時值等于2.25ms.接收到的是編碼1。在判斷時間時,應考慮一定的誤差值。因為不同的遙控器由于晶振參數等原因,發射及接收到的時間也會有很小的誤差。
即我們通常所說的解碼,單片機得知發過來的是什么信號,然后再做出相應的判斷與控制,如我們按電視機遙控器的頻道按鈕,則單片機會控制更換電視頻道,如按的是遙控器音量鍵,則單片機會控制增減音量。而解碼的關鍵是如何識別“0”和“1”,從位的定義我們可以發現“0”、“1”均以0.56ms的低電平開始,不同的是高電平的寬度不同,“0”為0.56ms,“1”為1.68ms,所以必須根據高電平的寬度區別“0”和“1”。如果從0.56ms低電平過后,開始延時,0.56ms以后,若讀到的電平為低,說明該位為“0”,反之則為“1”,為了可靠起見,延時必須比0.56ms長些,但又不能超過1.12ms,否則如果該位為“0”,讀到的已是下一位的高電平,因此取(1.12ms+0.56ms)/2=0.84ms最為可靠,一般取0.84ms左右均可。根據碼的格式,應該等待9ms的起始碼和4.5ms的結果碼完成后才能讀碼。
以接收TC9012遙控器編碼為例,解碼方法如下:
(1)設外部中斷0(或者1)為下降沿中斷,定時器0(或者1)為16位計時器,初始值均為O。
(2)第一次進入遙控中斷后,開始計時。
(3)從第二次進入遙控中斷起,先停止計時,并將計時值保存后,再重新計時。如果計時值等于前導碼的時間,設立前導碼標志。準備接收下面的一幀遙控數據,如果計時值不等于前導碼的時間,但前面已接收到前導碼,則判斷是遙控數據的0還是1。
(4)繼續接收下面的地址碼、數據碼、數據反碼。
(5)當接收到32位數據時,說明一幀數據接收完畢。此時可停止定時器的計時,并判斷本次接收是否有效.如果兩次地址碼相同且等于本系統的地址,數據碼與數據反碼之和等于0FFH,則接收的本幀數據碼有效。否則丟棄本次接收到的數據。
(6)接收完畢,初始化本次接收的數據,準備下一次遙控接收。
-
鍵盤
+關注
關注
4文章
859瀏覽量
39647 -
遙控器
+關注
關注
18文章
836瀏覽量
66058 -
紅外遙控
+關注
關注
22文章
347瀏覽量
45588
原文標題:用單片機解碼紅外遙控器
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論