作者bakerly (bakerly)
站内Electronics
标题Re: [问题]弹跳开关
时间Fri Jun 6 07:37:36 2008
※ 引述《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)