文本主要包含兩個內(nèi)容:一、紅外遙控協(xié)議的的講解;二、解碼程序解析(參考正點原子的代碼) 紅外的介紹、優(yōu)點、缺點就不給大家說了,網(wǎng)上書上都有,下面進入正題 一、紅外遙控協(xié)議的的講解 紅外遙控的編碼目前廣泛使用的是:NEC Protocol的PWM(脈沖寬度調(diào)制)和Philips RC-5 Protocol的PPM(脈沖位置調(diào)制) 本文將以NEC協(xié)議實現(xiàn)紅外遙控。 NEC協(xié)議的特征: 1、8位地址和8位指令長度; 2、地址和命令兩次傳輸(確?煽啃); 3、PWM脈沖寬度調(diào)制,以發(fā)射紅外載波的占空比代表“0”和“1”; 4、載波頻率為38KHz; 5、位時間為1.125ms和2.25ms; NEC 碼位的定義:一個脈沖對應(yīng)560us的連續(xù)載波,一個邏輯1傳輸需要2.25ms(560us脈沖+1680us低電平),一個邏輯0的傳輸需要 1.125ms(560us脈沖+560us低電平)。而遙控接收頭在收到脈沖時為低電平,在沒有收到脈沖時為高電平,因此,我們在接收頭端收到的信號 為:邏輯1應(yīng)該是560us低+1680us高,邏輯0應(yīng)該是560us低+560us高。如下圖: NEC 遙控指令的數(shù)據(jù)格式為:同步碼頭(引導(dǎo)碼)+地址碼+地址反碼+控制碼+控制反碼。同步碼是由一個9ms的低電平和一個4.5ms的高電平組成,地址碼、 地址反碼、控制碼、控制反碼均為8位數(shù)據(jù)格式。按照高位在前低位在后的順序發(fā)送。采用反碼是為了增加傳輸?shù)目煽啃?可用于校驗)。下圖是我們按下按鍵2 時,從紅外接收頭端測到的波形: 在 圖中可以看到,在100ms之后,我們還收到了幾個脈沖,這是NEC碼規(guī)定的連發(fā)碼(由9ms低電平+2.5ms高電平+0.56ms低電平和 97.94ms高電平組成),如果在一幀數(shù)據(jù)發(fā)送完后,按鍵仍沒有松開,則發(fā)送重復(fù)碼(連發(fā)碼),可以通過統(tǒng)計連發(fā)碼的次數(shù)來標記按鍵按下的長短/次數(shù)。 二、解碼程序解析(參考正點原子的代碼) 在正點原子的代碼中是利用定時器的輸入捕獲功能來實現(xiàn)遙控解碼的,下面解析一下關(guān)鍵代碼: 在該實驗remote.h文件中,定義了3個函數(shù):Remote_Init();、TIM4_IRQHandler();、Remote_Scan();。 1、Remote_Init(); 這里要注意中斷優(yōu)先級,定時器4的兩個中斷,溢出(更新)中斷,捕獲事件中斷的優(yōu)先級是一樣的。意思就是,他兩誰也不能打斷誰,例如A在執(zhí)行時,B就不會產(chǎn)生中斷。這里很重要,很重要,很重要! 2、TIM4_IRQHandler(); 注意上圖中畫紅框的狀態(tài)標識,下面解析一下此中斷服務(wù)函數(shù)(該終端服務(wù)函數(shù)中有兩個中斷,溢出中斷和捕獲中斷): 1、先看捕獲中斷,Rmtsta剛開始時為0,當發(fā)生一次上升沿捕獲時(RDATA對應(yīng)的引腳得到一個高電平),先把捕獲事件配置為下降沿捕獲,然后Rmtsta=0x10,標記了上升沿已經(jīng)被捕獲; 2、當有下降沿到來時,將CCR1寄存器的值賦給Dval變量,并再將捕獲事件配置為上升沿捕獲;補充:像這樣上升沿捕獲和下降沿捕獲交替使用,是為了捕獲到高電平持續(xù)時間。 3、注意:只有當接收頭收到了引導(dǎo)碼后,才進行解碼。故先判斷Dval的值是不是在4200us~4700us之間,如果在,就將Rmtsta|=1 注意:遙控器發(fā)過來的碼都是編好的,比如想破解遙控器編碼,可以拿示波器去測接收端的碼。 整個程序思路不難,就是對遙控器發(fā)過來的碼進行解碼,這里主要是兩個中斷的理解。 |