星期日, 5月 08, 2016

I²C 介面自製之簡易型操作面板模組 (LCD + keypad)

延續前兩次 I²C 介面自製系列的結果,這回想要將 3x4 數字按鍵16x2 字元型液晶模組 (LCD1602) 整合在同一個 I²C 介面位址下,自製成一個通用的簡易型操作面板模組。
DIY simple I2C operation panel



構思
與前兩次相同使用 MCP23008 做 I²C 介面擴展 8 線數位 I/O 信號,而 3x4 按鍵盤與 16x2 液晶模組會共用 7 線,剩餘的 1 線用做兩者之間共用信號的切換控制。
共用信號的切換控制需利用一些可做三態輸出控制的緩衝驅動器之類的邏輯電路元件,經查閱了數位邏輯 IC 的資料,採用一顆 74241 及一顆 74245 應足可應付。74241 共有 8 個緩衝驅動器可分成兩組 (各四個) 做三態輸出控制,第一組低電位動作,第二組相反,採用第二組接 3x4 按鍵盤的輸入信號 (R1..4)。74245 同樣有 8 個緩衝驅動器,但是雙向傳輸的,共成一組受控制,利用其中 4 個接 16x2 液晶板的資料線 (DB4..7)。
手邊尚存有幾片萬用電路板,挑一片適當尺寸的來用,再補一些其他如電阻、開關、腳座、接頭等等的零件。

線路設計草圖
實作
在紙上草擬線路圖後查閱 IC 腳位,簡略細化一下就施工焊接,中途邊做邊修正線路設計。電路焊接完成,將 3x4 按鍵盤及 16x2 液晶板組裝好,接上 Raspberry Pi 後改寫程式測試。摘錄程式測試部份如下:
# My I2C OperationPanel
class OperationPanel:
    def __init__(self, address):
        self.mcp= MCP23008(address)
        self.mcp.writeByte('GPPU', 0b11111111)
        self.lcd= LCD1602(self.mcp)
        self.keypad= KeyPad(self.mcp)
        
    def input(self):
        return self.keypad.read()

    def position(self, row, col):
     self.lcd.enable()
        self.lcd.setCursor(row, col)
        
    def display(self, str):
     self.lcd.enable()
        self.lcd.display(str)        
        
# test my i2c operation panel
op= OperationPanel(0x20)
op.display("Hi, pls input:")
op.position(1,0)
try:
    while True:
        ch= op.input()
        if ch != 0:
            print ch
            op.display(ch)
        
except KeyboardInterrupt:
    pass

測試

接線摘要與注意事項
主要元件之間的接線:
MCP23008  74241  74245  3x4KeyPad  16x2LCD
========  =====  =====  =========  =======
 GP0 ---- 2Y1 --- B5
 GP1 ---- 2Y2 --- B6
 GP2 ---- 2Y3 --- B7
 GP3 ---- 2Y4 --- B8
 GP4 ------------ DIR -- C1 ------- R/~W
 GP5 ------------------- C2 ------- RS
 GP6 ---- 1A1 ---------- C3
 GP7 ---- 1G,2G - ~E
          2A1 ---------- R1
          2A2 ---------- R2
          2A3 ---------- R3
          2A4 ---------- R4
          1Y1 --------------------- E
                  A5 -------------- DB4
                  A6 -------------- DB5
                  A7 -------------- DB6
                  A8 -------------- DB7
注意:宜使用上拉電阻或下拉電阻,避免某些元件腳位因空接 (或高阻抗) 狀態而引起不穩定的誤動作現象。

沒有留言:

張貼留言