Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 9787|回復: 6
打印 上一主題 下一主題

[問題求助] Vhdl 彈跳開關 問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-1-8 21:26:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; # X9 d8 x4 c8 C7 k
USE ieee.std_logic_1164.all;2 i4 n3 R" L9 G$ Q
USE ieee.std_logic_unsigned.all;2 c1 `% Z: v# f, U
ENTITY SWSTOP IS( @& m+ s. y, F8 q" L% w( p
        PORT(Hand        : IN  STD_LOGIC;                                 1 ]' }, y: Z( c( b* ^. _" b7 d
                 CO                    : OUT STD_LOGIC) ;        9 v/ \6 l" d6 \
END SWSTOP;& o3 m7 C. t2 @: v9 V
ARCHITECTURE arc OF SWSTOP IS' N2 j/ ]( V* k- C. N' k- N+ e/ y
BEGIN
3 I, `# G8 r% f, O) w5 D$ D" @  PROCESS (Hand)
: }' o/ h$ Y8 T+ ]5 V    VARIABLE imper :STD_LOGIC_VECTOR(1 downto 0) :="00";/ f' |( w  M2 b2 I+ v
   
0 S) l* Y/ |" `( G- V6 M  BEGIN7 }# a' I! r% d% N# i: s8 Q, K

+ {  y& Z5 [9 }, [: y' w& m+ x+ q     IF (Hand'event AND Hand='1') THEN , ]* j* Q' @! J, c! V4 d( U+ W
                    u5 I" D6 D8 u5 O( b
     IF imper <"11" THEN imper := imper+1;
# S7 y2 U+ l8 S! O4 z     ELSE imper:="00";
! W: G8 [4 N$ f/ I. v: I) }$ [     
; e3 l: A  N: R# r5 h8 u- ^# l     END IF;         
2 t& D/ h/ e2 }! E6 y! z5 ~; A     END IF;+ H; |6 Q* B2 _0 s
     / E! {' i: g; _. n' y2 W% y
      CO <= imper(0) ;
0 q  N% G1 Y5 E" Z8 {        END PROCESS ;% n# J, O; u4 p- L
   
) y! J2 |& A, o* aEND arc;
% X& e! B% F; d% G+ A2 o

- h" v6 r! O' f7 o. W0 A. H以上是我設計的開關
1 z, F  Y8 k0 v% ?$ T0 }可是好像沒有彈跳功能?!4 v8 X9 G- |0 x  J3 m6 |/ H; A/ m- V: @$ a
我的問題是
) P+ Q  g5 k/ W, m  F7 N: T; H* _# M( d按一下的時候,應該 -1
& q+ F( ?0 V2 l. I0 i# ?5 L8 K但是有時候會忽然 -2 -3 ...../ j4 j" y4 n* W
是沒有同步咩?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-1-12 21:01:02 | 只看該作者
如果您的 hand 是由 push button 按而產生者建議要加入 debounce 功能,否則在彈跳暫態會觸發.......?次
3#
發表於 2009-1-13 12:10:32 | 只看該作者
VHDL Debounce_Process 寫法,你也可參考ISE VHDL範例 ' Z1 }9 p6 e( Y2 ~
5 i- W- d1 D5 S3 t1 K: r; b
process(clk,button)- Q# A* b* [# Y5 n/ u  B! f
begin! b2 A3 J* y0 J/ _' k  C; e9 }% v
if clk'event and clk = '1' then
+ q9 B. c0 G( v9 N, P button1 <= button;4 ]5 h8 U* n# E# \) |' I1 Y
end if;9 U1 {$ C+ l! Z$ x
end process Debounce_Process;/ p* A, S0 c9 K! u. Q6 n7 G
mybutton <= button1;
4#
發表於 2009-3-17 00:41:25 | 只看該作者
應該是按鍵開關彈跳的問題,當在按下和放開的瞬間,會有些微小的震動現象.7 |6 Y6 M% x9 P4 v2 ~
由於按鍵訊號的數位處理方式,可能將這些震動轉換成高頻率的雜訊依附在實際ON/OFF變化的兩側.7 x" @, n: x5 F6 r
可以使用一個較慢的頻率來做取樣控制.
5#
發表於 2009-3-24 09:26:10 | 只看該作者
網路上有些Debounce程式你可以參考9 m7 t+ q. D; h* B! `) j+ t
" o& U5 r3 I7 @" D$ S
///////////////////////////////////////////////////////////////////////////////
- T+ d/ Y8 q7 ]3 U( S! k9 J9 z//
$ X$ m2 d0 j- K// Pushbutton Debounce Module 2 t( j' r4 G! X) _$ N
//
# \  b: Z  y" g' T3 N+ c///////////////////////////////////////////////////////////////////////////////$ p; k9 n- Q: L2 R; x/ P: H
module debounce (reset, clk, noisy, clean);, q2 Z: j: ]7 W5 r. B
   input reset, clk, noisy;
2 L* e  m$ y1 Y   output clean;* R2 w0 h% J% W) _; t- s
& P: z( q# |3 o, o4 K
   parameter NDELAY = 650000;
. f# _7 L$ ~9 X8 ^   parameter NBITS = 20;
1 I3 q% Q/ @# g% }  S8 G4 r4 u3 G# X# B( O! I% S: x
   reg [NBITS-1:0] count;
& T' I9 J% O+ d$ o* Z  |) ~   reg xnew, clean;) f' B4 b' m2 t, p. b

+ v- E8 i# n5 _3 ]+ V   always @(posedge clk)
$ A: J2 h' m3 @2 C6 g* k( o" z     if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end( R0 U4 j2 R% w# T. i, D
     else if (noisy != xnew) begin xnew <= noisy; count <= 0; end
+ P5 O1 v; D) O, T     else if (count == NDELAY) clean <= xnew;
$ N( Z  p3 O; v7 t' l$ I! a8 f$ [     else count <= count+1;
4 v/ q* f' X/ n( B, j, Y$ p  z9 {8 Z! G) {9 @$ b: z$ l4 y0 b* u: q
endmodule
6#
發表於 2009-6-19 22:51:39 | 只看該作者
感謝debounce的code介紹分享
) X, T/ t8 W- j- R機械開關的確需要考慮數ms的彈跳% m6 T, M7 Z3 n; V. ^" B
不然開關驅動會造成災難!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2025-2-23 09:06 PM , Processed in 0.164009 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表