2011年2月5日 星期六

MCU Key Scan Type


為了要完成PPG(Programming Pulse Generator), 必須要有個按鍵矩陣, 用來偵測channel 1 ~ 4 , 點亮相對應的LED, 並且通知系統, 目前User要用到幾個channel, Google了一下, 鍵盤掃瞄的方式大約分成下列幾種

1. I/O對應式
2. 矩陣掃瞄方式
3. ADC 轉換方式

接下來說一下優缺點

 I/O 對應式
優點 : 線路簡單, 程式偵測也簡單
缺點 : 必需消耗I/O pin, 如果要掃瞄很多按鍵的話, 耗費的I/O pin就很可觀, 一般不太建議

矩陣掃瞄方式
優點 : 用到不多不少的I/O pin, 4顆按鍵需用到4個I/O pin, 16個按鍵則是8個I/O pin, 這是最典型的應用, 如果配合 PortB中斷來偵測的話, 則按鍵偵測不會有delay的感覺, 靈敏度適中, 適合大部份的應用, 解碼方式還有硬體解碼和軟體解碼, 各有各的好處
缺點 : 程式偵測複雜, 須先送測偵碼, 再去掃瞄接收碼是否如預期, 去判斷是哪一個按鍵被按下, 而且還要克服switch bounce的問題, 有點難

ADC轉換方式
優點 : 用到最少的I/O pin, 16顆按鍵, 只要一個ADC pin, 讀到一個電壓的Range, 再去判斷這個電壓值是哪個按鍵被按下, 線路和程式都不難, 是很值得學習的一種鍵盤掃瞄方式, 我目前也朝著這個方向去做缺點 : 電阻會有老化的問題, 而且電源不穩時, 轉換出來的電壓值, 可能會讓系統誤判, 但是這應該是有方法可以克服

講了一大堆鍵盤掃瞄方式, 再來說一下掃瞄方式, 一般分為
1. 用副程式去判斷那個按鍵被按下, 這種方法, 程式效率差, 因為MCU一直都在等user按下某個key, 好執行相對應的功能, 而且user可能會有不太靈敏的感覺
2. 中斷式的按鍵偵測, 這種方法, 程式效率好, 因為MCU不需等待user按下按鍵, 當user按下時, 則產生中斷, MCU會馬上執行相對應的功能, 完成後再去做原本在做的事, 優點是動作靈敏, 缺點則是程式有點小複雜, 一般是推薦這種方法

最後就是debunce的方法, 因為按鍵是屬於機械式的彈簧, 在按下和放開會有彈跳現象, 如何克服這個, 也是很重要的課題, 目前我知道的有三種方法

1. 用硬體方式去避免
2. 用軟體方式去克服, 當偵測到時, 再delay 20mS(一般20mS之內彈跳現象會結束), 但是如果使用者不放, 或是按久一點, 或是亂按, 可能彈跳現象會持續超過20mS
3. 固是時間去掃瞄按鍵, 累積一定次數, 才確認是按下, 個人覺得這個方式最好, 等實驗做完後再和大家分享

按鍵掃瞄是MCU系統非常重要的功能, 做得好不好, 會讓user不同的感覺



沒有留言:

張貼留言

歡迎大家來討論交流一下~~~