1. 何謂 Bounce (彈跳):
所謂的 Bounce 是指我們在按下電源開關時,電壓不會從 0 伏直接升到 VDD 伏。而是在 0 及 VDD 間震盪好幾次,最後才在 VDD 端穩定下來。
一個電子產品若有彈跳現象的話,最常見到的「症狀」是按下一個開關,結果數字跳好幾下。
2. 何謂 Debounce 電路 ??
為了解決彈跳問題,我們設計了 Debounce (反彈跳)電路,Debounce 電路的原理是:我們設定一個 Time Window,當波形能穿過這個 Time Window 時,才切換波形。
假設我們希望開關穩定的時間為 0.001 秒 = 1*10^-3 秒 = 1 ms
3. 如何設計 Debounce 電路 ??
a. 第一種作法:使用 AND 閘
利用 AND 閘來作 Debounce 電路可以在很短的時間之內設計完成,它的優點是簡單易懂。
缺點:
* 單一 AND 閘之 Delay 相當短,要湊 1ms 可能需要很多的 AND 閘串接
* 由於我們使用固定數量之 AND 閘,因此其 time window 不可改變,其彈性比較差
b. 第二種作法:使用 NOT 閘加一個超大 AND 閘
利用 NOT 閘來作 Debounce 電路可以在很短的時間之內設計完成,它的優點是簡單易懂。
上述兩種作法最大的缺點有二:
1. 佔空間:如果我們要設計的 debounce 電路之 time window 為 1ms,我們可能要串 1000 個 NOT 閘才能成功,這是相當佔空間的。
2. 沒彈性:如果我們有兩個專案,其中 A 專案的 debounce 時間為 1ms,而 B 專案的 debounce 時間為 1.5 ms,則我們必須針對兩個不同的專案設計出不同的 debounce 電路。
因此這兩種作法是比較差的 debounce 電路。
c. 第三種作法:兼具彈性及省空間的作法 ??
利用 Counter 電路來設計 debounce 電路可以解決上述兩個問題,因此我們可以看實體
電路設計。
low-active -> 低態動作:輸入為 0 時動作。
high-active -> 高態動作:輸入為 1 時動作。
{a[7:3],b[2:0]}