• <table id="4yyaw"><kbd id="4yyaw"></kbd></table>
  • <td id="4yyaw"></td>
  • 發布時間:2020-10-05 22:01 原文鏈接: 淺析紅外遙控解碼(一)

    紅外遙控是我們現實生活中必不可少的一員。遙控,顧名思義即在遙遠的地方進行控制,其實也就是說遠程通信。紅外遙控就是以紅外線為傳輸介質的遙控。

    紅外遙控器是怎么工作的?其實它內部就是有一個單片機,單片機的I/O口控制一個紅外LED燈(當然一般會加外部放大電路以增大傳輸距離),在內部編碼后發送出去,然后電視或者空調之類的可以用紅外遙控控制的電器在接收到紅外信號后就會進行解碼,并根據制定好的協議執行特定動作,比如電視可能換臺、調節音量等。現在有的手機就帶有紅外遙控功能,其實也是用單片機的功能實現的。

    紅外遙控解碼

    有的時候,我們希望模擬一些遙控器的功能,這時候就要對這些遙控器的數據進行解碼。

    在進行解碼前,我們先來了解一下紅外編碼。紅外編碼有很多種,最常用的編碼是NEC編碼。NEC格式的編碼如下:

    NEC格式的紅外編碼是連續的32位二進制碼組。32位二進制碼組之前的引導碼,用于區分每次的傳輸;在起始碼之后的才是32位二進制碼組,其中8位用戶識別碼和8位反碼(反碼主要用于)校驗,用戶識別碼的作用主要是區分不同品牌的遙控器;接著就是8位操作碼和反碼,用于表示哪個按鍵被按下。

    NEC格式的編碼除引導碼和起始碼外,用于交互數據的信息采用脈寬調制的串行碼,在38kHz的載波下,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進制的“1”,其波形如下所示:

    了解了紅外編碼,就可以進行紅外解碼了。

    實現方法

    一般,進行紅外解碼我們需要先將接受到的有效信號與外界環境的干擾信號分離開,這就是載波的作用。現在市面上有很多一體化紅外接收頭,內部是紅外接收二極管 +放大電路 +解調器。當接收到紅外信號后,先將其放大,然后把38kHz的信號保留下來。需要注意的是一般一體化紅外接收頭接收到信號時輸出是低電平,沒有接收信號時是高電平。

    上面是常用紅外接收頭的引腳,“OUT”腳接單片機的I/O口,“-”腳接電源負極,“+”腳接電源正極。

    接好電路,就要進行解碼工作了.其實解碼工作主要是識別引導碼,還有數據“0”“1”。我們看波形圖,只要識別紅外接收頭“OUT”引腳高低電平持續的時間就可以了。這個可以用定時器中斷完成,也可以用延時來判斷。由于只完成解碼工作,我們就用延時的方法更方便。

    首先,紅外接收頭沒有接到信號時是高電平,等待其變低。之后,每隔900us測量一次,若在10次內電平變高,說明這不是引導碼,退出重新開始;若10次內并沒有變高,說明這就是引導碼,繼續下一步。接著可以不判斷起始碼,就是直接等待引腳電平變高再變低,就可以接收數據了。

    接收數據,就是進行判斷“0”和“1”。從位的定義我們可以發現“0”、“1”均以0.56ms的低電平開始,不同的是高電平的寬度不同,“0”為0.56ms,“1”為1.68ms,所以必須根據高電平的寬度區別“0”和“1”。

    每一位“0”或者“1”在接收頭接收信號即低電平的時間都是一樣的,直接等待低電平過去,在高電平時延時600us,如果600us時還是高電平,說明是“1”;如果是低電平即高電平過去了,說明是“0”。將這些數據結合到一起,就是接收到的編碼了。

    將單片機的串口與電腦接好,就可以在串口顯示我們讀到的紅外遙控數據了。


  • <table id="4yyaw"><kbd id="4yyaw"></kbd></table>
  • <td id="4yyaw"></td>
  • 调性视频