Re: [問題]彈跳開關
※ 引述《mosquito520 ( )》之銘言:
: ※ 引述《kb76628 (小伊)》之銘言:
: : 小弟我這學期修了一門verilog的實驗課,最近須要用到一個
: : 彈跳開關,功能如下:
: : 按下去它可以產生一個正脈衝(即0到1再到0)
: : ____
: : ___| |_____ (畫得不好請見諒)
: : 這種開關去電子材料行買要怎麼講呢?
: : 它還有分四支腳和二支腳的(有什麼差呢?)
: : 和正脈衝及負脈衝彈跳開關
: : 另外開關所產生的脈衝維持1的時間大概有多長呢?
: : 這個可以查嗎?
: 基本上應該是沒有你要的開關...
: 如你所言,
: : 按下去它可以產生一個正脈衝(即0到1再到0)
: 換言之,這個開關按住之後隔一段固定時間會自動跳開
: ﹝即使你還保持在按住的狀態﹞
: 上面回覆的跟推文提到的應該都不是你要的,
: 而且就我所知也沒有這種東西...
: ﹝如果有就還請指正﹞
: 簡單說開關就分有段無段兩種...
: 無段按下去就是一個狀態,放開則是另外一個狀態。
: 有段按下去會轉態﹝從某個狀態變成另外一個狀態﹞,放開不動作。
: 你要的東西應該要用開關、電阻、電容、樞密特IC或是簡單的邏輯電路來實現...
: 至於怎麼實現...
: 這就要靠你自己去想了:)
反正你己經在寫verilog了...這東東你就順便寫進去code裡就好啦
這樣你就只需要一個普通的關關
反正一樣會用要一隻腳..
假設你的開關按下去會從high 變 low
把輸入訊號接到這個module的Din, 再把Dout接到你要的地方
module abc ( Din, Dout, CLK, RESETn);
input CLK, RESETn;
input Din;
output Dout;
reg Din_d1, Din_d2;
always @ ( negedge RESETn or posedge CLK )
if ( ~RESETn ) Din_d1 <= 1'b1;
else Din_d1 <= Din;
always @ ( negedge RESETn or posedge CLK)
if ( ~RESETn ) Din_d2 <= 1'b1;
else Din_d2 <= Din_d1;
wire Dout = ~Din_d1 & Din_d2;
endmoudle
這樣就會產生一個你要的東東了...
每按一下會產生一個一個clock的正脈衝...
不過你要記得在要加debounce的線路...
要不然你會發現按一下有時會很多個脈衝跑出來
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.66.222.12
※ 編輯: bakerly 來自: 218.168.130.251 (06/07 09:13)
討論串 (同標題文章)