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注意:宜使用上拉電阻或下拉電阻,避免某些元件腳位因空接 (或高阻抗) 狀態而引起不穩定的誤動作現象。
沒有留言:
張貼留言