,
(蘇州工業(yè)園區(qū)職業(yè)技術(shù)學(xué)院,蘇州 215123)
圖1 NEC標準
電視遙控器使用專用集成發(fā)射芯片來實現(xiàn)遙控碼的發(fā)射,如東芝TC9012、飛利浦SAA3010T等。通常彩電遙控信號的發(fā)射,就是將某個按鍵所對應(yīng)的控制指令和系統(tǒng)碼(由0和1組成的序列)調(diào)制在38 kHz的載波上,然后經(jīng)放大、驅(qū)動紅外發(fā)射管將信號發(fā)射出去。本文使用的是一體化接收頭,當(dāng)一體化接收頭收到38 kHz 紅外信號時,輸出端輸出低電平,否則為高電平。不同公司的遙控芯片,采用的遙控碼格式也不一樣。較普遍的有兩種:一種是NEC標準,另一種是PHILIPS 標準。
NEC標準:遙控載波的頻率為38 kHz(占空比為1:3),當(dāng)某個按鍵按下時,系統(tǒng)首先發(fā)射一個完整的全碼,如果鍵按下超過108 ms仍未松開,接下來發(fā)射的代碼(連發(fā)代碼)將僅由起始碼(9 ms)和結(jié)束碼(2.5 ms)組成。
一個完整的全碼=引導(dǎo)碼+客戶碼+客戶碼+數(shù)據(jù)碼+數(shù)據(jù)反碼。其中,引導(dǎo)碼是由高電平4.5 ms和低電平4.5 ms組成;接著是客戶碼的低8位、客戶碼的高8位、數(shù)據(jù)碼8位、數(shù)據(jù)碼的反碼8位,共32位數(shù)據(jù);其中前16位為客戶碼,能區(qū)別不同的紅外遙控設(shè)備,防止不同機種遙控器互相干擾;后16位為8位的數(shù)據(jù)碼和8位的數(shù)據(jù)反碼,數(shù)據(jù)反碼用于核對數(shù)據(jù)是否接收準確。
NEC、TOSHIBA、SAMSONG公司的編碼格式有其共通之處:全碼都由“引導(dǎo)碼+客戶碼+客戶碼+數(shù)據(jù)碼+數(shù)據(jù)碼反碼”組成;接收端根據(jù)數(shù)據(jù)碼作出應(yīng)該執(zhí)行什么動作的判斷。連發(fā)代碼是在持續(xù)按鍵時發(fā)送的碼,它告知接收端,某鍵是在被連續(xù)地按著。NEC標準如圖1所示。
發(fā)射數(shù)據(jù)0時用“0.56 ms高電平+0.565 ms低電平=1.125 ms”表示,數(shù)據(jù)1用“高電平0.56 ms+低電平1.69 ms=2.25 ms”表示。即發(fā)射碼“0”表示發(fā)射38 kHz的紅外線0.56 ms,停止發(fā)射0.565 ms。發(fā)射碼“1”表示發(fā)射38 kHz的紅外線0.56 ms,停止發(fā)射1.69 ms。需要注意的是:當(dāng)一體化接收頭收到38 kHz紅外信號時,輸出端輸出低電平,否則為高電平。所以一體化接收頭輸出的波形是與發(fā)射波形是反向的,如圖2所示。
圖2 遙控發(fā)射碼與一體化接收頭信號比較
NEC、TOSHIBA、SAMSONG公司的編碼格式有其共通之處:全碼都由“引導(dǎo)碼+客戶碼+客戶碼+數(shù)據(jù)碼+數(shù)據(jù)碼反碼”組成;數(shù)據(jù)“0”和“1”的定義相同,不同的只是引導(dǎo)碼高低電平的持續(xù)時間不同,客戶碼位數(shù)有長有短,第一個簡碼和全碼最后一位之間的延時不同,簡碼的引導(dǎo)脈沖不同等。所以,可以把相同的部分做成通用子程序,包括產(chǎn)生數(shù)據(jù)“0”和“1”的子程序“ONE”和“ZERO”,9 ms、4.5 ms、2.25 ms、22 ms、45 ms等時間控制子程序。
當(dāng)使用MSP430G2553時,紅外遙控器的學(xué)習(xí)需要和通信功能相結(jié)合,單片機不能存儲學(xué)習(xí)到的紅外鍵值,需要傳給存儲器保存,也需要由存儲器來傳輸要還原的鍵值。同時由于MSP430G2553的RAM比較小,只有512字節(jié),如果要實現(xiàn)紅外鍵值的學(xué)習(xí),需要謹慎使用RAM空間。
有些公司的攝像機的遙控器是不遵循任何標準的紅外編碼格式的,所以要進行紅外學(xué)習(xí)只能采集到紅外接收頭端收到的碼值波形,在還原的時候,也就是在低電平時間內(nèi)紅外輸出端發(fā)送38 kHz的載波,在高電平時間內(nèi)紅外輸出端保持低電平。記錄接收到的波形的過程就是紅外學(xué)習(xí)的過程,可以采用定時器捕獲的方法,定時器設(shè)置為上升沿、下降沿都捕獲。MSP430G2553有兩個定時器,其中一個用來記錄系統(tǒng)TICKS(精度為10 μs),另外一個用作定時器捕獲。使用這兩個定時器就可以記錄下紅外接收頭接收到的波形,中斷處理流程圖如圖3所示。
圖3 處理流程
圖4 業(yè)務(wù)程序處理流程
我們記錄波形中高、低電平的時間,由于開始學(xué)習(xí)的第一個狀態(tài)一定是低電平狀態(tài),所以不需要記錄高低電平位置,那么接下來需要把記錄下來的高低電平的值傳給業(yè)務(wù),此時要區(qū)別下是不是干擾,如果記錄的值太少就不是鍵值,而是干擾源發(fā)出的,然后在業(yè)務(wù)程序需要進行發(fā)送的時候再把這組值發(fā)給我們,業(yè)務(wù)程序處理流程如圖4所示。
那么如果業(yè)務(wù)將包含一個鍵值信息的高低電平值發(fā)給我們,該怎么處理呢?在紅外鍵值還原過程中只需要用到一個用于計時功能的定時器,結(jié)合接收到的鍵值延時信息進行還原就可以了。其中的長延時是公司的攝像機遙控器在按鍵按下后發(fā)送的若干組值,這些代表一個鍵值,每組之間會有20 ms左右的延時,這個延時也需要記錄下來,并且需要記錄下這個長延時出現(xiàn)在第幾個高低電平位置,以便能正確還原出鍵值。還原流程如圖5所示。
圖5 還原處理流程
在調(diào)試過程中,首先需要弄明白紅外編碼和解碼的原理,然后針對具體情況學(xué)習(xí)不止一種遙控器。由于不能針對某種紅外協(xié)議標準進行學(xué)習(xí),所以直接將接收到的紅外波形的高低電平時間記錄下來,還原時也是依據(jù)這個時間值進行還原。調(diào)試中總是遇到學(xué)習(xí)到的數(shù)據(jù)錯誤的問題,
[1] TI. RS-422 and RS-485 Standards Overview and System Configurations,2010.
[2] TI. GPIO User's Guide,2011.
[3] Jonahan Corbe, Alessandro Rubini, Greg Kroah-Hartman. LINUX 設(shè)備驅(qū)動程序[M]. 魏永明,等譯.北京:中國電力出版社,2010.
[4] 劉剛,趙建川. LINUX系統(tǒng)移植[M]. 北京:清華大學(xué)出版社,2011.
吳麗萍(講師),主要研究方向為自動控制系統(tǒng);戈志明(工程師),主要研究方向為嵌入式系統(tǒng),軟件測試。