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