邱永華
摘要:介紹一種基于紅外遙控器的控制方案,其通過特殊的編碼方式,可以避免由于紅外信號在傳輸過程中產(chǎn)生的誤碼,造成遙控器控制異常、失效等情況,進而大大提升了紅外遙控器的控制性能,免除人們在使用紅外遙控器控制過程中遇到的各種失效煩惱。
關(guān)鍵詞:紅外遙控器;協(xié)議;編碼
中圖分類號:TP202 文獻標(biāo)識碼:A 文章編號:1009-3044(2015)11-0221-03
One Design for Infrared Remote Control Solution
QIU Yong-hua
(Guangdong Womens Polytechnic College, Guangzhou 510450, China)
Abstract: Introduces a control solution design for infrared remote, which through special coding methods,Can avoid the error caused by the infrared signal during transmission,abnormal failure caused by remote controller, and so on and so forth,Improve the reliability of the infrared signal transmission,F(xiàn)rom people in the use of various failure problems encountered in the process of infrared remote control.
Key words: IR remote control; protocol; coding methods
紅外遙控器使用方便,價格便宜,目前廣泛應(yīng)用于電視、DVD、空調(diào)、投影機等各種家用電器,在每個家庭日常生活中已經(jīng)成為不可或缺的部分。一個優(yōu)秀的紅外遙控器必須具有精準(zhǔn)的控制方案,如果人們在使用遙控器的過程中不時出現(xiàn)控制不靈敏,失效異常等情況,將會極大的影響人們使用電器的娛樂心情,給人們的正常生活造成困擾。本文提出一種基于紅外遙控器的控制方案,該控制方案通過特殊的編碼方式,提高了紅外遙控器的控制性能。
1 總體描述
紅外遙控器的控制方案分為如下幾部分:微控制單元MCU初始化、鍵盤掃描和處理、通信協(xié)議和數(shù)據(jù)發(fā)送流程等。MCU初始化根據(jù)實際選型的芯片進行配置,鍵盤處理函數(shù)根據(jù)遙控器的需求來編寫,為了便于控制數(shù)據(jù)發(fā)送的時間和提高效率,通信協(xié)議和數(shù)據(jù)發(fā)送函數(shù)這部分采用匯編來編寫,其他部分采用C言語編寫。
2 MCU初始化
MCU的初始化是初始化MCU的寄存器,并將MCU的寄存器配置成為一個已知的工作狀態(tài)。MCU的初始化由幾個主要的部分組成:時鐘配置、中斷配置、端口配置。下面以P89LPC931單片機為例進行介紹。P89LPC931是一款單片封裝的微控制器,適用于要求高度集成、低成本的應(yīng)用場合,可以滿足多種多樣的性能要求。P89LPC931基于高性能的處理架構(gòu),執(zhí)行指令僅需2到4個時鐘周期,速度是標(biāo)準(zhǔn)80C51器件的6倍。P89LPC931集成了多種系統(tǒng)級功能,以便減少元件數(shù)目和減小電路板面積,從而降低系統(tǒng)成本。P89LPC931內(nèi)部框圖如圖1所示。
圖1 P89LPC931內(nèi)部框圖
2.1 時鐘配置
MCU 用455 KHz的陶瓷晶體振蕩器作為時鐘輸入源,所以要設(shè)置FOSC[2:0](UCFG寄存器,地址0x63)= 001,選擇一個中等頻率的時鐘源,即圖中的OSC CLK時鐘頻率為455KHz。設(shè)定分頻寄存器DIVM#(地址0x95)=0,則CCLK = OSC CLK = 455 KHz。同時由于FOSC[2:0] = 001所以RTC的時鐘源被設(shè)置為CCLK。通過WDCON[WDCLK]=1,選擇PCLK作為看門狗電路的時鐘源,其中PCLK = CCLK/2。
2.2 中斷配置
在紅外遙控的設(shè)計中將用到4個中斷:鍵盤中斷、實時時鐘中斷和看門狗中斷。
鍵盤中斷:鍵盤中斷相應(yīng)用戶按鍵事件。在省電的模式下鍵盤掃描的輸出管腳被鎖存在一個電平上,當(dāng)用戶按下鍵盤上的任意鍵,都會導(dǎo)致P0端口的P2~P7中的某一管腳的電平產(chǎn)生變化,使得P0端口鎖存器的數(shù)值同
KBPATN寄存器(鍵盤模式寄存器)的數(shù)值不相同,從而導(dǎo)致了鍵盤中斷的產(chǎn)生。
實時時鐘中斷:在設(shè)計中運用實時時鐘來產(chǎn)生一個10s的中斷,完成10s無按鍵進入掉電模式的功能。由于紅外遙控器采用的時鐘頻率為455KHz,考慮功耗問題設(shè)定FOSC[2:0]= 001。無論RTCS1和RTCS2為什么數(shù)值,實時時鐘的輸入時鐘源都是CCLK時鐘(CCLK = OSC CLK = 455 KHz)。
看門狗中斷:在軟件的設(shè)計過程中,為了避免程序陷入一個死循環(huán)或者用戶不可預(yù)料的錯誤,用硬件看門狗來作為避免出現(xiàn)錯誤的手段。在一段時間內(nèi)程序沒有去“喂狗”且看門狗遞減計數(shù)器的數(shù)值為零時,MCU將會產(chǎn)生一個硬件的復(fù)位信號導(dǎo)致硬件的重啟??梢酝ㄟ^配置監(jiān)視計時器控制WDCON和戶配置字UCFG1寄存器來控制看門狗的停止/運行,時鐘源的選擇,預(yù)掃描的數(shù)值和是否看門狗產(chǎn)生復(fù)位的信號。
2.3 端口配置
端口配置過程配置了P0端口、P1端口和P2端口的屬性。P0端口主要用來作為鍵盤掃描的輸入端口,應(yīng)該配置成為Input Only 配置模式,P2端口部分作為鍵盤掃描的輸出端口;P1部分作為串口提供測試端口,部分用來作為紅外發(fā)送二級管的控制端口。鍵盤掃描的輸出端口應(yīng)配置為Open Drain 配置模式。其他的部分配置成為準(zhǔn)雙向的IO端口。
3 鍵盤掃描和處理
鍵盤掃描首先檢測是否有鍵盤按下,這時觸發(fā)鍵盤中斷,接著通過逐行掃描來判斷那個鍵被按下。當(dāng)判斷出那個按鍵被按下之后,進行相應(yīng)的按鍵處理:如按鍵編碼、數(shù)據(jù)發(fā)送。假如掃描完成或按鍵處理完后,按鍵還沒有松開,就判斷是否是左右鍵曾被按下,若是就重新掃描鍵盤和進行按鍵處理。若不是,就等待鍵盤松開。按鍵處理在通常情況下選取按鍵后就按通信協(xié)議向外發(fā)送數(shù)據(jù)。
4 遙控器控制通信協(xié)議
遙控器控制通信協(xié)議的數(shù)據(jù)包由7部分組成:開始和結(jié)束波形、系列號、ID號、廣播位、鍵碼。具體見下圖2:
如圖2所示,通信內(nèi)容總共為40bit = 5 字節(jié)。全部采用壓縮BCD編碼的8421碼。每8bit為一個正碼,一個反碼。也就是說一個數(shù)據(jù)包里面包括10個字節(jié)的編碼,里面 “0”和“1”bit的數(shù)目是相同的。在發(fā)送字節(jié)的過程中,將先發(fā)送位置高的bit,再發(fā)送位置低的bit。
那么具體來說就相當(dāng)于數(shù)據(jù)包里的第1bit到第8bit為序列號,第9bit到第16bit為序列號的反碼;第17bit到第24bit為系統(tǒng)號(第17bit到第20bit保留不用,數(shù)據(jù)恒為0,第21bit到第24bit用來記錄系統(tǒng)號);第25bit到32bit為系統(tǒng)號的反碼;第33bit到第40bit為ID號的高8位;第41bit到第48bit為ID號高8位的反碼;第49bit到第56bit為ID號的低8位;第57bit到64bit為ID號低8位的反碼;第65bit為廣播位,第66bit到第72bit為鍵碼;第73bit為廣播位的反碼,第74bit到第80bit為鍵碼的反碼。
通信協(xié)議開始和結(jié)束位有1M寬度的調(diào)試波形和7M寬度的無調(diào)試波形構(gòu)成。1M的帶寬由18個頻率為37.917KHZ的方波組成,總時間為:474.7uS。那么7M的時間為:474.7*7=3322.9us。數(shù)據(jù)中的“1”和“0”用以下波形表示:數(shù)據(jù)“0”的波形高低電平的時間相等,都是M(474.7us)。協(xié)議開始和結(jié)束波形如圖3所示、
圖3 開始和結(jié)束的波形
數(shù)據(jù)“1”的波形的高電平時間為M(474.7us),低電平的時間是3M(474.7us×3=1424.1us)每個字節(jié)的數(shù)據(jù)都由這些“1”和“0”組成。數(shù)據(jù)“0”和“1”波形如圖4所示。
圖4 數(shù)據(jù)“0”和“1”波形
按協(xié)議發(fā)送一個數(shù)據(jù)包所耗的時間:8M+(2*M+4*M)×8×5+8M =256M = 121523.2us=121.5232ms。
5 協(xié)議數(shù)據(jù)發(fā)送流程
因為數(shù)據(jù)發(fā)送函數(shù)對時序要求很高,而且為了便于時間控制和效率的提高,所以這部分采用匯編編寫,然后在C語言里調(diào)用。它們之間留有5個參數(shù)作接口,共40bit。協(xié)議發(fā)送流程如下:首先保護現(xiàn)場,接著產(chǎn)生表示數(shù)據(jù)包開始的波形,然后發(fā)送完畢10個字節(jié)的數(shù)據(jù),發(fā)送完畢后產(chǎn)生數(shù)據(jù)包結(jié)束波形,最后恢復(fù)一個字節(jié)的數(shù)據(jù),接著發(fā)送它的反碼。最后產(chǎn)生數(shù)據(jù)包結(jié)束波形,完成后恢復(fù)現(xiàn)場。
在發(fā)送一個字節(jié)數(shù)據(jù)的時候,先產(chǎn)生1M帶寬的載波,接著將相應(yīng)端口拉高,緊接著累加器左移一位,然后判斷累加器的進位位。若這一位為1則延時3M的時間,若為0則延時1M的時間。
圖5 發(fā)送一個字節(jié)函數(shù)流程
6 結(jié)束語
本紅外遙控器控制方案在數(shù)據(jù)傳輸時采用的編寫方式,可以避免由于紅外信號在傳輸過程中產(chǎn)生的誤碼造成遙控器控制異常、失效等情況,提升了紅外信號傳輸?shù)目煽啃?,進而大大提升了紅外遙控器的控制性能,免除人們在使用紅外遙控器控制過程中遇到的各種失效煩惱。
參考文獻:
[1] 方紅萍, 王陽. 具有學(xué)習(xí)功能的通用紅外遙控系統(tǒng)關(guān)鍵技術(shù)的研究[J]. 計算機時代, 2009 (3): 20-21.
[2] 王紅美. 基于單片機的紅外線遙控器設(shè)計[J]. 自動化應(yīng)用, 2013 (9): 31-32.
[3] 施偉. 基于單片機的學(xué)習(xí)型紅外遙控器設(shè)計[J]. 硅谷, 2011 (9): 43, 68.
[4] 陳祖爵, 王建毅. 智能型紅外遙控器的設(shè)計[J]. 微計算機信息, 2008 (2).
[5] 李寶營, 趙永生, 祁建廣. 基于單片機的紅外遙控系統(tǒng)設(shè)計[J]. 機電工程技術(shù), 2008 (12): 77-79.
[6] 李志超, 周華. 基于單片機的紅外遙控器的設(shè)計與應(yīng)用[J]. 中州大學(xué)學(xué)報, 2008 (2) : 111-112.