一、編碼格式
1、0和1的編碼
遙控器發(fā)射的信號由一串o和1的二進(jìn)制代碼組成。不同的芯片對0和1的編碼有所不同。通常有曼徹斯特編碼和脈沖寬度編碼。tc9012-p.htm" target="_blank" title="tc9012貨源和pdf資料">tc9012的o和1采用pwm方法編碼,即脈沖寬度調(diào)制,其o碼和1碼如圖1所示(以遙控接收輸出的波形為例)。o碼由o.56ms低電平和0.56ms高電平組合而成。脈沖寬度為1.12ms.1碼由0.56ms低電平和1.69ms高電平組合而成。脈沖寬度為2.25ms.在編寫解碼程序時。通過判斷脈沖的寬度,即可得到0或1.
2、按鍵的編碼
當(dāng)我們按下遙控器的按鍵時,遙控器將發(fā)出如圖2的一串二進(jìn)制代碼,我們稱它為一幀數(shù)據(jù)。根據(jù)各部分的功能??蓪⑺鼈兎譃?部分,分別為引導(dǎo)碼、地址碼、地址碼、數(shù)據(jù)碼、數(shù)據(jù)反碼。遙控器發(fā)射代碼時。均是低位在前。高位在后。由圖2分析可以得到。引導(dǎo)碼高電平為4.5ms,低電平為4.5ms。當(dāng)接收到此碼時。表示一幀數(shù)據(jù)的開始。單片機(jī)可以準(zhǔn)備接收下面的數(shù)據(jù)。地址碼由8位二進(jìn)制組成,共256種。圖中地址碼重發(fā)了一次。主要是加強(qiáng)遙控器的可靠性。如果兩次地址碼不相同。則說明本幀數(shù)據(jù)有錯。應(yīng)丟棄。不同的設(shè)備可以擁有不同的地址碼。因此。同種編碼的遙控器只要設(shè)置地址碼不同,也不會相互干擾。圖中的地址碼為十六進(jìn)制的0eh(注意低位在前)。在同一個遙控器中。所有按鍵發(fā)出的地址碼都是相同的。數(shù)據(jù)碼為8位,可編碼256種狀態(tài),代表實(shí)際所按下的鍵。數(shù)據(jù)反碼是數(shù)據(jù)碼的各位求反,通過比較數(shù)據(jù)碼與數(shù)據(jù)反碼??膳袛嘟邮盏降臄?shù)據(jù)是否正確。如果數(shù)據(jù)碼與數(shù)據(jù)反碼之間的關(guān)系不滿足相反的關(guān)系。則本次遙控接收有誤。數(shù)據(jù)應(yīng)丟棄。在同一個遙控器上。所有按鍵的數(shù)據(jù)碼均不相同。在圖2中,數(shù)據(jù)碼為十六進(jìn)制的0ch,數(shù)據(jù)反碼為十六進(jìn)制的0f3h(注意低位在前)。兩者之和應(yīng)為0ffh。
二、單片機(jī)遙控接收電路
紅外遙控接收可采用較早的紅外接收二極管加專用的紅外處理電路的方法。如cxa20106,此種方法電路復(fù)雜,現(xiàn)在一般不采用。較好的接收方法是用一體化紅外接收頭,它將紅外接收二極管、放大、解調(diào)、整形等電路做在一起,只有三個引腳。分別是 5v電源、地、信號輸出。常用的一體化接收頭的外形及引腳見圖3和圖4.紅外接收頭的信號輸
出接單片機(jī)的into或intl腳。典型電路如圖5所示。圖中增加了一只pnp型三極管對輸出信號進(jìn)行放大。
三、遙控信號的解碼算法及程序編制
平時。遙控器無鍵按下。紅外發(fā)射二極管不發(fā)出信號,遙控接收頭輸出信號1.有鍵按下時。o和1編碼的高電平經(jīng)遙控頭倒相后會輸出信號o.由于與單片機(jī)的中斷腳相連,將會引起單片機(jī)中斷(單片機(jī)預(yù)先設(shè)定為下降沿產(chǎn)生中斷)。單片機(jī)在中斷時使用定時器0或定時器1開始計時。到下一個脈沖到來時,即再次產(chǎn)生中斷時,先將計時值取出。清零計時值后再開始計時。通過判斷每次中斷與上一次中斷之間的時間間隔。便可知接收到的是引導(dǎo)碼還是 o和1.如果計時值為9ms.接收到的是引導(dǎo)碼,如果計時值等于1.12ms,接收到的是編碼o.如果計時值等于2 25ms.接收到的是編碼1.在判斷時間時,應(yīng)考慮一定的誤差值。因?yàn)椴煌倪b控器由于晶振參數(shù)等原因,發(fā)射及接收到的時間也會有很小的誤差。
以接收tc9012-p.htm" target="_blank" title="tc9012貨源和pdf資料">tc9012遙控器編碼為例,解碼方法如下:
(1)設(shè)外部中斷0(或者1)為下降沿中斷,定時器0(或者1)為16位計時器。初始值均為o。
(2)第一次進(jìn)入遙控中斷后,開始計時。
(3)從第二次進(jìn)入遙控中斷起,先停止計時。并將計時值保存后,再重新計時。如果計時值等于前導(dǎo)碼的時間,設(shè)立前導(dǎo)碼標(biāo)志。準(zhǔn)備接收下面的一幀遙控數(shù)據(jù),如果計時值不等于前導(dǎo)碼的時間,但前面已接收到前導(dǎo)碼,則判斷是遙控數(shù)據(jù)的o還是1。
(4)繼續(xù)接收下面的地址碼、數(shù)據(jù)碼、數(shù)據(jù)反碼。
(5)當(dāng)接收到32位數(shù)據(jù)時,說明一幀數(shù)據(jù)接收完畢。此時可停止定時器的計時,并判斷本次接收是否有效。如果兩次地址碼相同且等于本系統(tǒng)的地址,數(shù)據(jù)碼與數(shù)據(jù)反碼之和等于0ffh,則接收的本幀數(shù)據(jù)碼有效。否則丟棄本次接收到的數(shù)據(jù)。 來源:陰雨