1、概述:
對多種紅外遙控器的訊號進行分析,其發出的紅外指令中,引導碼各不相同,而且後面的控制指令也有較大差別,甚至指令碼的位數也不相同,原因是這些紅外設計沒有遵守相同的紅外標準。但是其基本思想是相同的,即採用不同週期和不同占空比的脈衝分別表示邏輯0及1,只要根據期占空比及脈衝週期進行解析即可得到具體的按鍵碼值。
2、協議種類:
市面上基本上有如下幾大類協議:
nec with ****** repeat code
nec with full repeat code
tc9012
松下7051碼
sony碼
rc5/rc6a
3、協議datasheet表(引用hisi整理的統計表)
nec with ****** repeat code 碼
nec with full repeat code 碼
tc9012和sony碼:
4、資料格式
基本上紅外都是以38mhz作為載波頻率,即每一位時間為1.12ms或2.25ms
nec with ****** repeat code資料格式由start(引導碼)+資料碼+burst突發幀三部分組成
傳送單個幀格式:
傳送重複幀格式,收到第乙個完整幀資料後,接下來收到的資料幀由簡化的引導碼和burst訊號組成
其它的編碼本質上都差不多,例如松下7051編碼:
遙控器紅外發射訊號的編碼格式:引導碼+裝置碼+鍵碼+迴圈延時
引導碼 = 3640us (高電平)+ 1800us(低電平)
"高電平"為紅外線載波調製,"低電平"為無紅外線載波調製。
裝置碼 = 32位:
格式 = 碼0(s)8位 + 碼1(z)8位 + 碼2(y)8位 + 碼3(x)8位;
鍵值碼 = 16位:
格式 = 資料碼0(8位)+資料碼1(8位);
邏輯'0':= 380us (高電平)+ 380us(低電平);
邏輯'1'= 380us (高電平)+ 1350us(低電平);
迴圈延時=50ms,其誤差≤5%;
表示先檢測到引導碼,然後進入開始統計裝置碼及鍵值碼共48位,最後按下不入進入repeat模式進行延時50ms。
5、基本程式設計方法
1、註冊isr中斷
request_irq(ir_irq_no, (irq_handler_t)ir_isr, irqf_disabled, null, hi_null);
2、處理ir_isr函式,根據暫存器ir_rcv狀態將獲得的鍵值(高低電平值)寫入佇列(data_l,data_h)
3、在定時器中處理佇列資料,如每隔10ms或者50ms時間檢測並將佇列值送入到ir decode器中
4、ir decode處理,本質就是比較高低電平持續時間確定出具體的鍵值
/* d1 暫存器中讀取的值,d2為協議定義的標準值,margin為誤差碼值 */
#define factor 15/100
static inline int pulse_eq_margin(unsigned int d1, unsigned int d2, unsigned int margin)
首先判定引導碼:
3640us (高電平)+ 1800us(低電平)引導碼
pulse_eq_margin(data_l,header_pulse,header_pulse*factor)
pulse_eq_margin(data_l,header_space,header_space*factor)
然後再根據其狀態進行取值
比如松下7051碼可定義如下狀態:
ir_state_inactive, // 空閒狀態
ir_state_header_space,
ir_state_bit_pulse,
ir_state_bit_space,
ir_state_frame_pulse,
ir_state_frame_space,
ir_state_repeat_pulse,
ir_state_repeat_space,
定義的重要資料結構如下:
unsigned int wanted_bits; /* 需要等待接收的位數,比如7051就需要接收48位*/
unsigned int header_pulse; /* unit:μs 3640*/
unsigned int header_space; /* unit:μs 1800*/
unsigned int bit0_pulse; /* unit:μs 380*/
unsigned int bit0_space;
/* unit:μs 380*/
unsigned int bit1_pulse;
/* unit:μs 380*/
unsigned int bit1_space;
/* unit:μs 1350*/
unsigned int frame_units;
/* unit:μs 380*/
unsigned int frame_end_space; /* more than frame_end_space 50ms即 50000μs*/
unsigned int repeat_pulse;
/* no repeat 0 ex>nec:9000*/
unsigned int repeat_space;
/* no repeat 0 ex>nec:2250*/
然後就是求值:
if(pulse_eq_margin(data_time,bit1_space,frame_units>>1))
其中bits用於儲存鍵值,只有出現邏輯'1'時才須對其賦值,count用於計算位於state_bit_space累加值
其中會涉及到一些較細節的知識就不在此複述了,提供一種思路給大家,都有規律可偱。
紅外編碼格式
as1250 紅外遙控器晶元說明 最近在研究的在s3c6410的上的irm3638 紅外置收器件。發現其中紅外編碼採用pt2222編碼,進一步研究發現,紅外編碼是有好幾種編碼.特的將編碼格式取出來放在這裡.一.tc9028 tc9012 tc9243 編碼方式 tc9028 tc9012和tc924...
資料鏈路層幀格式
首先簡單的介紹一下資料鏈路層 資料鏈路層在物理層的上面一層,它主要分兩種通道點對點通道和廣播通道。區分他們就看是一對一的點對點的通訊方式,還是一對多的廣播模式。先來談點對點通道。點對點的主要協議為ppp,以前還有一種可靠傳輸的協議hdlc,現在用的已經比較少了。ppp的主要作用是使用者pc連線到is...
MODBUS RTU資料幀格式 報文例項
裝置位址 功能 資料格式 crc校驗l crc校驗h 8bit 8bit n 8bit 8bit 8bit 乙個報文就是一幀資料,乙個資料幀就乙個報文 指的是一串完整的指令資料,就像上面的一串資料。如果微控制器接收到乙個報文那麼就對報文進行解析執行相應的處理 0x01 0600 01 00 17 9...