linux 内核按键抖动,Tiny4412 Linux驱动之按键(定时器防抖动) | 技术部落
按鍵抖動示意圖
我們平常所用的按鍵為機械彈性開關(guān),由于觸點的彈性作用,按鍵在閉合時不會馬上穩(wěn)定的接通,而是有一段時間的抖動,在斷開時也不會立即斷開。抖動時間由按鍵的機械特性所決定,一般為5ms~10ms。所以我們在做按鍵檢測時都要加一個消抖的過程。
按鍵消抖主要有兩種方案:
一是延時重采樣;
二是持續(xù)采樣。
從理論上來說,延時(如10ms)重采樣的準(zhǔn)確率肯定低于持續(xù)采樣。
按鍵消抖的方法
(1)延時重采樣
延時重采樣的意思是,當(dāng)?shù)谝淮螜z測到鍵值由'1'變?yōu)?#39;0'時,再延時一段時間(如10ms),再次采樣,確認(rèn)是否仍是'0';若是'0'則認(rèn)為此時鍵值為'0',否則,重新執(zhí)行檢測過程。
該方案的缺陷:a.如果延時太短,有可能兩次采樣時都處于抖動時間,因此可能引起誤判;
b.如果延時太長,可能檢測不出按鍵變換
(2)持續(xù)采樣
持續(xù)采樣的原理是,當(dāng)檢測到按鍵處于某電平(如'0')時,在之后的N個時鐘周期內(nèi)連續(xù)檢測此按鍵的電平,如果一直不變,則讀出此按鍵的電平值(如'0')。
持續(xù)采樣的優(yōu)點:a.樣本足夠多,減少誤判的可能性。
b.對于按鍵按下('1'->'0'),按鍵釋放('0'->'1')都可以檢測。
持續(xù)采樣的缺點:持續(xù)檢測的時間太長(大于按鍵按下和釋放的時間差),則可能無法檢測按鍵的變換。
在這里我們使用的延時采樣的方式,即:當(dāng)某個鍵被按下后會觸發(fā)中斷,上一個試驗中我們進(jìn)了按鍵中斷之后就喚醒讀取函數(shù),這樣由于按鍵抖動可能會短時間內(nèi)進(jìn)好幾次按鍵中斷;現(xiàn)在我們加入內(nèi)個定時器,當(dāng)按鍵按下出發(fā)了按鍵中斷之后,在按鍵中斷里修改定時器觸發(fā)時間(比如定時10ms)。
原理說完了,下面開始做測試:
還是一共三個文件,1驅(qū)動相關(guān):. keyIrq_drv_timer.c ?Makefile
2.測試程序 : key_test_irq.c
實驗步驟:
驅(qū)動和應(yīng)用程序都編譯出來之后,首先加載驅(qū)動:
insmod keyIrq_drv_timer.ko
加載按鍵驅(qū)動
如上圖所示,加載完驅(qū)動之后,按鍵節(jié)點已經(jīng)自動創(chuàng)建出來了,
下面開始測試;
輸入 ./key_test_irq
按鍵測試
總結(jié)
以上是生活随笔為你收集整理的linux 内核按键抖动,Tiny4412 Linux驱动之按键(定时器防抖动) | 技术部落的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《看恽家牡丹花戏赠李二十》第三句是什么
- 下一篇: 英语翻译价格