2011年3月31日 星期四

1.4 自製 LCD 介面的紅外線解碼器(IR Decoder)

實驗目的

練習製作一個 LCD 介面的紅外線解碼器(Infrared Decoder)。

在這個實驗裏,你將練習用 IRRemote 函式庫接收紅外線訊號,然後搭配一個文字型 LCD(Liquid Crystal Display)當作紅外線解碼器的顯示介面。預計製作的紅外線解碼器,其外觀如下:

DSC00161
▲ LCD 上會顯示解碼得到的紅外線協定(如 NEC)、編碼(如 4FB48B7)以及資料長度(如 32 位元)

前提

在做這個實驗前,我假設:

  1. 你已經看過「IRRemote 紅外線遙控教學」的教學,而且
  2. 也已經把 IRRemote 函式庫安裝起來了
材料
  • 麵包板 x 1
  • Arduino 主板 x 1
  • 38 kHz 紅外線接收器(如 TSOP2438,TSOP4438, PNA4602, FM-8038TM2-5DN) x 1
  • HD44780 相容 LCD x 1  (本文所用的為 14 pin 無背光 LCD) x 1
  • 旋轉式可變電阻 x 1
  • 單心線 x N
2x16 LCD 簡介與腳位圖

image
▲ 圖片來源: arduino.cc

HD44780 相容的 2x16 LCD 可以顯示兩行訊息,每行 16 個字元,它可以顯示英文字母、希臘字母、標點符號以及數學符號,除了顯示訊息外,它還有其它功能,包括訊息捲動(往左和往右捲動)、顯示游標和 LED背光等。

image
▲ 圖片來源: LCD 101

LCD 總共有 14 支接腳,如果內建背光的話是 16 支,腳位功能說明如下:

腳位編號 腳位名稱 說明
1 Vss 接地 (0V)
2 Vdd 電源 (+5V)
3 Vo 或稱 Vee 對比(0-5V), 可接一顆 1k 電阻,或利可變電阻調整適當的對比
4 RS

Register Select:
  1: D0 – D7 當作資料解釋
  0: D0 – D7 當作指令解釋

5 R/W

Read/Write mode:
  1: 從 LCD 讀取資料
  0: 寫資料到 LCD
因為很少從 LCD 這端讀取資料,所以6可將此腳位接地以節省 I/O 腳位。

6 E Enable
7 D0 Bit 0 (LSB)
8 D1 Bit 1
9 D2 Bit 2
10 D3 Bit 3
11 D4 Bit 4
12 D5 Bit 5
13 D6 Bit 6
14 D7 Bit 7 (MSB)
15 A+ 背光(串接 330R 電阻到電源)
16 K- 背光(GND)

▲ LCD 腳位功能說明表

日立 HD44780 相容的 LCD 有 4-bit 和 8-bit 兩種使用模式,使用 4-bit 模式主要的好處是節省 I/O 腳位,通訊的時候只會用到 4 個高位元 (D4-D7),D0-D3 這四支腳位可以不用接。每個送到 LCD 的資料會被分成兩次傳送 – 先送 4 個高位元,然後才送 4 個低位元。

接線
  • 把 LCD 的 RS, Enable, D4, D5, D6, D7 依序接到 12, 11, 7, 6, 5, 4 等腳位上
  • 將 LCD 的 Vss 及 R/W 接到 GND,Vdd 接到 +5V
  • 變電阻中間腳位接到 LCD 的 Vo,剩下的兩支腳位,一支接到 5V,另外一支接到 GND。也可以不使用可變電阻,只要在 LCD 的 Vo 上串接一顆 1k ohm 電阻連到 GND 即可。

image
▲ 連接 Arduino 與 LCD

  • 接著,照下表把紅外線接收器跟 Arduino 連接起來:
紅外線接收器接腳 Arduino 接腳
GND(-) 接到 GND
Vcc(+ 或 V+) 接到 +5V 電源
Vout(或 OUT) 接到 pin 2。你可以接到其它 Digital pin,但程式要配合修改

image
▲ 有些紅外線接收器 GND 和 Vcc 是相反的,接線時請查閱你的 datasheet

程式

底下就是這個紅外線解碼器的程式(IRDecoder_LCD.pde):

注意! 程式執行時,如果訊息沒有顯示在  LCD 上,或者訊息模糊朦朧的,首先應該做的事是檢查可變電阻以調整對比。

示範影片

拿個電視遙控器隨便按幾個鈕測試:

延伸閱讀

4 則留言:

注意:只有此網誌的成員可以留言。