IR的解碼編碼

轉載至:http://jevoswang.myweb.hinet.net/51/ir.htm

主旨:24.紅外線研究[92/05/02]
作者:jevos wang
日期:92.05.02
內文:
註:本文已定稿,但作者會有空做文章修改的工作,作者Email:jevos_wang@hotmail.com。

一、 緣由:
(一)、本人有一台Palm,因為Palm有紅外線傳輸裝置,而本人的筆記形電腦並無該裝置,為了讓兩者能利用紅外線來傳輸資料,所以買了一支usb紅外線。測試的結果很不滿意,因為Palm必須離usb紅外線設備很近,5公分以內。這實在是很離譜,我花了1200元買回來的紅外線設備居然效果這麼差,一支萬用型紅外線遙控器市價也才200元,使用距離就算是3公尺也不成問題,1200元的東西卻無該性能,這問題出在那裡呢?所以,才起了研究紅外線傳輸的動機。

(二)、在我設計的幾個儀器,都沒有附加紅外線功能,這一點我一直想加以改善,試想加上一組紅外線接收電路,成本才多幾塊錢,買支萬用遙控器也才200元,就可以對該儀器進行數公尺的遙控,真是方便至極,小成本高功能大享受,真的有必要升級。

二、 紅外線發射器的外形:
半導體紅外線發射器外觀和一般LED相同,不同的地方是發射出來的光源波長不同而已,你就當它是一般led來設計電路就可以了。

三、 紅外線LED的工作原理:
波長940nm左右,半導體紅外線led順向偏壓1.2V,一般型順向電流最大值50mA,有的達150mA,順向電流愈大紅外線愈強。

注意:紅外線led逆向耐壓3 ~6V。

實驗:

led順向偏壓在1.1~1.41V間

四、 紅外線LED的驅動電路:
1. DC電壓驅動:和一般LED相同,要加限流電阻,Vcc是5V計算它的限流電阻值,當Vcc是2V時,你也可以計算並得到限流電阻的新值,用合適的限流電阻,不管Vcc是5V或2V紅外線的強度都可以是最強的。

2. 數位電路驅動:


限流電阻R2計算:
Vcc=5V, 暫忽略pnp之飽和電壓,若led工作電流50mA
R2=(5V-1.2V)/50mA=76Ω
電晶體可用npn,pnp或達靈頓電路,若要加強紅外光,可串並聯多顆紅外線led。
也可用達靈頓ic陣列如UN2003、UN2803,使用該類IC,可忽略R1。
達靈頓電路,可以不必用在此,因為一般小電晶體的飽合電流可以達到150mA,用一級電晶體就可以了。

3. 脈波調變驅動紅外線LED。脈波調變時,脈波的頻率愈高週期愈小,即工作週期愈小,電晶體和led都可流過更高的峰值電流,因此led的紅外光會更強,加強了傳送的距離,常用調變頻率有32.7KHz、38kHz。


五、 紅外線接收工作原理:
一、 紅外線接收二極體:和發射紅外線led外觀相同,也有3支腳的接收led。
二、 光電晶體:靈敏度及效果較差。
六、 紅外線接收程式:
ir_r.c
電路:

紅線直接拉到mpu的 io線即可。
包含AT89C51、MAX232、紅外線接收LED等,AT89C51經MAX232連到PC的COM1,可以把接收到的紅外線訊號傳到電腦。

電腦端的程式:1.可以使用Jevos Wang所寫的視窗圖控式軟體來接收分析資料。
 2.可以使用98/95〔附屬應程式〕〔通訊〕〔終端機〕〔Hypertrm〕 程式來接收,分析資料。

程式說明:

這個程式是一個紅外線接收程式,我們用紅外線遙控器對著電路發射,所發射出去的碼,經由紅外線接收電路接收,解碼並傳給pc。

雖然程式是由8051C所寫,但程式編譯後僅 230Bytes,你可以用AT89C1051 AT89C2051 AT89C51等都可以,測試完全正常,是了解紅外線接收不錯的教材。 

改寫應用:
雖然軟體版權屬於Jevos wang,但你可以改寫它,讓你的電路可以用紅外線遙控器來遙控,你可以用你原有的遙控器如電視、音響或自己做一支。以往,你要接個4*4的按鍵,才能控制8051,但是你現在只要加一顆8元的紅外線接收led,再拿萬用遙控器便可要8051做很多你指定好的工作,真是方便至極。

一、 紅外線訊號編碼、解碼方法:
紅外線的編碼、解碼萬萬種,雖然有幾種方法較為多人使用,但未必設計紅外線功能需要照其方法來做,只要設計儀器或電器的公司,能同時設計出編碼和對應的解碼方法,使遙控與接收彼此相容即可。

我用AT89C51來做一個分析紅外線訊號的小設備,雖然初期無法分析出每種紅外線遙控器,但大多部都能解碼成功。

這個原理,是每 0.1ms讀1個bit,把連續讀到的紅外線訊號經MAX197送到pc,由pc來分析紅外線訊號的波形。

假設1個bit需要1ms,大都數編碼成4bytes,則一組訊號傳送時間為32ms。
有種常用的規格是4個bytes的訊號,無訊時維持high,第一個bit必為low,每個bit時間長度為0.9ms,每組訊號間隔92ms,連續發射三次訊號。

如果用0.1ms為讀碼單位,但拆解成4*8*9=288bit=36bytes。

AT89C51程式的寫法,可以組一個bytes就送出去,也可以組成36個字再送出去。

由pc的軟體示波器(自行設計),看出訊號每個Pulse到底是幾個0.1ms,而了解它是否一般的編碼方法。

模擬紅外線訊號,如果它是一般編碼法,就用一般編碼法則送出紅外線訊號。如果不是,就每0.1ms送出一個bit,看看電器會不會正常被遙控。

如果0.1ms的解析度不能正確拆解紅外線訊號,那就提高解析度一倍,即0.05ms讀一個bit,假設還失敗,就再提高其解析度。

AT89C51 E2PROM只有4KB, ram只有128Bytes因此程式仍小就小,不用刻意寫的很複雜,免的到時要擴充有的沒有的,想要進行高層次的資料分析,就交給pc來做,pc來做是大才小用。

方案:利用外部中斷來監測訊號的變化。
思考:
1. 利用外部中斷來引發中斷程式的執行,把16bits的計時器加上1byte,合計3bytes代表1bit, 一組紅外線訊號假設有4Bytes=32 Bits, 則紀錄成96bytes,捉到訊號後直接送到pc。

範例:
Toshiba電視搖控器
紅外線信號規則:前導碼+客戶固定編碼+按鍵編碼+結束碼
前導信號:即前導碼 9ms Low , 4.5ms High
客戶固定編碼: 0: 0.8ms Low+0.4ms High, 1: 0.8ms Low+0.4ms High
長度是2個 Bytes即8個Bit
按鍵編碼:一樣是2個Bytes,0 1 認定方式同上
結束碼:可以不理會

範例:(上個範例的另種分析)
某搖控器
紅外線信號規則:前導碼+客戶固定編碼 2 Bytes+按鍵編碼2 Bytes +結束碼
前導信號:即前導碼 9ms Low + 4.5ms High
客戶固定編碼: 0: 0.7ms Low+0.7ms High, 1: 0.7ms Low+1.7ms High
長度是2個 Bytes即8個Bit
按鍵編碼:一樣是2個Bytes,0 1 認定方式同上
結束碼:可以不理會
1 Frame 長度 : 9ms+4.5ms+96.7ms=110.2ms

某搖控器
紅外線信號規則:前導碼+客戶固定編碼 2 Bytes+按鍵編碼2 Bytes +結束碼
前導信號:即前導碼 9ms Low + 4.5ms High + 0.7 ms Low
客戶固定編碼: 0: 0.7ms High+0.7ms Low, 1: 1.7ms High+0.7ms Low
長度是2個 Bytes即8個Bit
按鍵編碼:一樣是2個Bytes,0 1 認定方式同上
結束碼:可以不理會
1 Frame 長度 : 9ms+4.5ms+0.7ms+96ms=110.2ms
若5個 Bytes都是1,長度=(0.7+1.7)*5*8=96ms,是否多一個0.7ms要實際測才明白,不過有沒有多那個0.7ms不影響解碼

某搖控器
紅外線信號規則:客戶固定編碼 2 Bytes+按鍵編碼2 Bytes +92ms
客戶固定編碼: 0: 0.9ms Low, 1: 0.9ms High, 長度是2個 Bytes即8個Bit
按鍵編碼:一樣是2個Bytes,0 1 認定方式同上
重覆送出4Bytes+92ms, 4Bytes+92ms
1 Frame 長度 : 0.9ms*4*8+92ms=120.8ms

平均4Byte/121ms=33Bytes/sec=330bps(約略計算)

題目:萬用紅外線解碼器
說明:

方法1: 1個紅外線Frame以121ms計算,用0.1ms切割訊號,High Low都要用1個Bytes,則可編碼為121ms/0.1ms=1210Bits=152Bytes,8051把讀到的ir訊號,152Bytes送給電腦,交給電腦分析.
方法2: Bit7 表示信號的 High Low狀態, Bit6-Bit0表示幾個0.1ms,當有前導碼時,最大長度=3+5*8*2+1=84Bytes(Low或High都要用1Bytes)
方法3:8051判斷是否有前導碼,
(1) 有前導碼時
Byes1: A表示有前導碼
Byes2: 前導碼 Low長度
Byes3: 前導碼 High長度
Byte4: 0 1 共同的 Low長度
Byte5-9:5Bytes 資料長度(客戶編碼+按鍵編碼+結束編碼)
(2)無前導碼時,若為固定前度Bit的編碼法
Byes1: B表示無前導碼
Byes2: High長度
Byes3: Low長度
Byte4-8:5Bytes 資料長度(客戶編碼+按鍵編碼+結束編碼)
(3)無法判別編碼法
Byes1: C表示無前導碼
Byes2: 總Bytes數
Byes3-Bytes 155: 用0.1ms切割(約155Bytes)

筆者認為用0.1ms切割法蠻不錯的,因為程式很簡單,BaudRate設成19200bps,可以捉每一個1Bits的狀態長度即時送給pc,若9600bps會來不及則可以用8052(內含256Bytes)先把分析資料放在ram處理完畢再送回pc, 8051無需處理複雜分析工作,複雜工作由pc處理。

實作:做完這個實作,你就是萬用紅外線搖控器的玩家了
要求標準:把你家的電視搖控器拿來,按1個按鍵,由8051接收,傳回電腦(0.1ms切割法),再叫8051送出相同訊號,看電視是否動作。

實作:長距離紅外線搖控裝備。
電路:ir接收電路8051+max232 +15公尺內的線+max232+8051+ir發射電路。
要求標準:把你家的電視搖控器拿來,按1個按鍵,由8051接收,傳給另一個8051,由它發射給電視,看電視是否動作。
說明:完成實作且功能做到,你就是紅外線發射接收的玩家了。

實作:紅外線搖控裝備中斷站。
電路:8051含ir發射及接收電路。
要求標準:把你家的電視搖控器拿來,按1個按鍵,由8051接收即時發射,本來搖控器無法射很遠,但經此中斷台,距離就變長一倍。
說明:這個電路夠簡單了,程式也簡單,同步接收發射,當然你不想用8051做同步而改用and or 等74系列ic做也能達到相同功效。

留言

這個網誌中的熱門文章

檔案權限設定