www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 嵌入式IoT

1. 紅外接收1.1 說明1.2 NEC協(xié)議1.3 關(guān)于紅外接收的波形1.4 解碼1.4 紅外對射思考2. 紅外發(fā)射2.1 紅外發(fā)射管參數(shù)2.2 紅外發(fā)射電路搭建2.3 程序設(shè)計2.5 實驗結(jié)果2.4 紅外發(fā)射電路目前遇到的問題3. 總結(jié)

1. 紅外接收

1.1 說明

我們采用的是 HS0038B 這個紅外一體化接收頭 ,所以在使用時需要按照具體協(xié)議來進(jìn)行解析。

當(dāng)連接好設(shè)備后就可以進(jìn)行數(shù)據(jù)分析了,首先看一段數(shù)據(jù)

HS0038B 這個紅外一體化接收頭,當(dāng)收到有載波的信號的時候,會輸出一個低電平,空閑的時候會輸出高電平,我們用邏輯分析儀抓出來一個紅外按鍵通過HS0038B 解碼后的圖形來了解一下。

1.2 NEC協(xié)議

NEC 協(xié)議的數(shù)據(jù)格式包括了引導(dǎo)碼、用戶碼、用戶碼(或者用戶碼反碼)、按鍵鍵碼鍵碼反碼,最后一個停止位。停止位主要起隔離作用,一般不進(jìn)行判斷,編程時我們也不予理會。其中數(shù)據(jù)編碼總共是 4 個字節(jié) 32 位。

第一個字節(jié)是用戶碼,第二個字節(jié)可能也是用戶碼,或者是用戶碼的反碼,具體由生產(chǎn)商決定,第三個字節(jié)就是當(dāng)前按鍵的鍵數(shù)據(jù)碼,而第四個字節(jié)是鍵數(shù)據(jù)碼的反碼,可用于對數(shù)據(jù)的糾錯。

這個 NEC 協(xié)議,表示數(shù)據(jù)的方式不像我們之前學(xué)過的比如 UART 那樣直觀,而是每一位數(shù)據(jù)本身也需要進(jìn)行編碼,編碼后再進(jìn)行載波調(diào)制。

  • 引導(dǎo)碼:9ms 的載波+4.5ms 的空閑。

  • 比特值“0”:560us 的載波+560us 的空閑。

  • 比特值“1”:560us 的載波+1.68ms 的空閑。

1.3 關(guān)于紅外接收的波形

通過邏輯分析儀對紅外接收管上的數(shù)據(jù)采集,基本上可以對數(shù)據(jù)的采集進(jìn)行一個比較準(zhǔn)確的時序圖。

關(guān)于紅外接收管的電路連接其實很簡單,就是接電源和數(shù)據(jù)引腳即可

以下就是我們通過邏輯分析儀采集到的波形

通過對數(shù)據(jù)的采集,我們可以對其進(jìn)行解碼。

1.4 解碼

一般來說,解碼放在中斷中,這里的中斷一般是GPIO的上升沿或者下降沿中斷。對于一般的程序而言,這樣的設(shè)計是沒有問題的。其原理可以描述如下:

(1)當(dāng)來一個一個下降沿中斷時,進(jìn)入中斷處理函數(shù),處理事件

(2)當(dāng)延時6ms后檢測到該電平依然為低電平,該事件有效

(3)收集四組數(shù)據(jù):用戶碼,用戶反碼,按鍵碼,按鍵反碼,存到數(shù)組中

(4)校驗數(shù)據(jù),一般而言,都是可以先校驗按鍵碼與按鍵反碼是否正確,若正確表示解碼正確

(5)處理按鍵碼

以上是處理該問題的基本辦法,編碼如下:

//NEC 紅外0數(shù)據(jù)格式 解析 int IR0_IN(void) { unsigned char j,k,N=0; // EX0 = 0;  //第一步:判斷紅外是否有效 if (IR0IN == 1)
 { //信號無效 return -1;
 } //第二步:信號有效,延時檢測,確認(rèn)IR信號出現(xiàn) ET0 = 0;
 IRdelay(5); if (IR0IN == 1) 
 { //不是有效的電平 ET0 = 1; return -2;
 } //第三步:等IR變?yōu)楦唠娖?,跳過9ms的前導(dǎo)低電平信號。 while (!IR0IN) 
 {
 IRdelay(1);
 } //收集四組數(shù)據(jù):用戶碼,用戶反碼,按鍵碼,按鍵反碼 for (j=0;j<4;j++) 
 { for (k=0;k<8;k++) //每組數(shù)據(jù)有8位 { //等 IR 變?yōu)榈碗娖剑^4.5ms的前導(dǎo)高電平信號。 while (IR0IN) 
 {
 IRdelay(1);
 } //等 IR 變?yōu)楦唠娖?/span> while (!IR0IN) 
 {
 IRdelay(1);
 } //計算IR高電平時長 while (IR0IN) 
 { //0.14ms計數(shù)過長自動離開。 IRdelay(1);
 N++; if (N>=30)
 { 
 ET0=1; return -3;
 }
 } 
 IR0COM[j]=IR0COM[j] >> 1; //數(shù)據(jù)最高位補“0” if (N>=8) {IR0COM[j] = IR0COM[j] | 0x80;} //數(shù)據(jù)最高位補“1” N=0;
 }//end for k  }//end for j //按鍵碼是否正確 if (IR0COM[2]!=~IR0COM[3])
 { 
 ET0 = 1; return -4; 
 }

 ET0 = 1; return 1; 
} 

但是如果需要檢測兩個紅外光,該方法就有缺陷,因為要用到兩個中斷引腳,這對于單片機(jī)來說,是比較困難的。

為了解決這個問題,我們可以采用定時器定時去查詢引腳狀態(tài)的方式進(jìn)行。

比如我們可以采用定時器0去定時讀取電平狀態(tài)。如果信號有效則保存下來。

所以我們可以采用100us的定時器Timer0進(jìn)行

void Timer0Init(void) //100微秒@22.1184MHz {
 AUXR |= 0x80; //定時器時鐘1T模式 TMOD &= 0xF0; //設(shè)置定時器模式 TL0 = 0x9A; //設(shè)置定時初值 TH0 = 0xA9; //設(shè)置定時初值 TF0 = 0; //清除TF0標(biāo)志 TR0 = 1; //定時器0開始計時 ET0 = 1; //允許T0中斷 EA = 1;
 TR0 = 1;
}

定時器開啟后,不斷的查詢兩個引腳的狀態(tài)即可實現(xiàn)該過程。

1.4 紅外對射思考

如果要實現(xiàn)紅外對射的功能

2. 紅外發(fā)射

2.1 紅外發(fā)射管參數(shù)

目前采用的紅外發(fā)射管為TSAL6200

2.2 紅外發(fā)射電路搭建

2.3 程序設(shè)計

通過對紅外發(fā)射管的研究發(fā)現(xiàn),當(dāng)紅外發(fā)射管發(fā)出38Khz的波形時,接收管上輸出的是低電平,其他情況下,紅外接收管上接收的電平為高電平,所以要讓紅外接收管上的電平為特定的波形,需要采用26us的定時器。

目前由于我手上只有S8550三極管,所以當(dāng)引腳輸出高電平時,三極管不導(dǎo)通,低電平時三極管導(dǎo)通。

根據(jù)定時器計算26us的定時器中斷

void Timer_Routine(void) interrupt 1 {
 TL0 = 0xE8; //設(shè)置定時初值 TH0 = 0xFD; //設(shè)置定時初值 count++; if(flag == 1)
 {
 OP = ~OP;
 } else {
 OP = 0;
 } if(send_ir_flag == 1)
 {
 IR1_SEND = OP;
 }else {
 IR2_SEND = OP;
 } 
}

然后主要是按照協(xié)議發(fā)送數(shù)據(jù)即可

//紅外發(fā)射函數(shù) void SendIRdata(char user_data,char key_data) { //1.發(fā)送開始碼 9ms send_code(1,9000); //2.發(fā)送4.5ms結(jié)果碼 send_code(0,4500); //3.發(fā)送用戶碼 send_data(user_data); //send_code(0,4279); //4.發(fā)送用戶反碼 send_data(~user_data); //send_code(0,4279); //5.發(fā)送按鍵碼 send_data(key_data); //send_code(0,4279); //6.發(fā)送按鍵反碼 send_data(~key_data); //7.發(fā)送結(jié)束碼 send_code(1,560);
}

以上就是紅外發(fā)射的基本情況。

2.5 實驗結(jié)果

通過邏輯分析儀對數(shù)據(jù)的采集,我們得到如下的數(shù)據(jù)

通過放大,可以看到波形的基本情況

該信號基本上是我們發(fā)射出來的信號。

調(diào)試手段:由于紅外發(fā)射管發(fā)射出來的光線人眼是看不到的,所以可以打開手機(jī)攝像頭拍紅外攝像頭,可以看到當(dāng)紅外發(fā)射管發(fā)射數(shù)據(jù)時,是有顏色的。

2.4 紅外發(fā)射電路目前遇到的問題

紅外發(fā)射管發(fā)射的距離達(dá)不到要求,只能在1m的范圍之內(nèi)數(shù)據(jù)有效,其他的情況下數(shù)據(jù)無效。對于該問題,有兩點猜測

(1)紅外發(fā)射與紅外接收頭不匹配,造成數(shù)據(jù)沒辦法很好接收到

(2)紅外發(fā)射管功率不夠

3. 總結(jié)

對于以上的測試及調(diào)節(jié)手段,遇到了一些問題,主要是對硬件部分的不熟悉帶來了一些麻煩。其實對于紅外接收部分的調(diào)試還是很順利的,只是到了紅外接收部分,卻遇到了一些問題,其中有一個問題就是由于沒有發(fā)送結(jié)束碼,導(dǎo)致數(shù)據(jù)始終接收不到,后來通過對紅外遙控的數(shù)據(jù)采集,才發(fā)現(xiàn)了問題的原因。后來又遇到紅外發(fā)射管發(fā)射距離太短的問題,目前嘗試各種辦法,無果,所以該問題目前先放一放。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉