Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-1-8 21:26:05 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
LIBRARY ieee;
' H! k( s; H1 b' v+ A9 cUSE ieee.std_logic_1164.all;  |! L' r' \# r, }$ q
USE ieee.std_logic_unsigned.all;4 ]) `- R) k" x! m9 a! A1 E
ENTITY SWSTOP IS
4 a, s" ]/ U' d& |  d7 R        PORT(Hand        : IN  STD_LOGIC;                                 
0 G4 W% S9 C! t' Q) V                 CO                    : OUT STD_LOGIC) ;        0 t1 \5 V/ f- B( p! x% k
END SWSTOP;
7 n! a9 I% |: E* kARCHITECTURE arc OF SWSTOP IS: y3 a" Z/ Q* y
BEGIN0 r) }5 c% a. W' j
  PROCESS (Hand)& ~. A- C! j; @& S  y1 g
    VARIABLE imper :STD_LOGIC_VECTOR(1 downto 0) :="00";
% M# {& e# @: k/ }$ S/ e" T   
: h. d6 k6 w# Q$ D) Q  BEGIN% c; V* e& D, I* b, G' T
% a( p3 ~6 ~  Q/ u* p1 ?
     IF (Hand'event AND Hand='1') THEN 8 r1 k! r4 u+ j6 Z. w/ \
                  8 U8 K! M3 T- x3 c4 W
     IF imper <"11" THEN imper := imper+1;
# I' c. N3 ~5 R* I4 L, a     ELSE imper:="00";
, q1 g5 P0 e+ b/ m9 U1 X     
) a1 e% W! A3 N$ s5 Q  S/ {7 \2 O     END IF;         
3 b- u+ v. ?7 p  E     END IF;
9 l) x2 v+ J$ m& K1 d, j     , a4 t; B8 }+ [; T
      CO <= imper(0) ; & ]/ v1 _( K9 j) N/ k
        END PROCESS ;3 X* ^& R6 {% N' `3 m" O7 U" Q
   . u; P! B- f7 G5 m1 W$ A" A
END arc;
% V4 {( p: `# p9 C

/ F4 |7 u  x" _) g以上是我設計的開關* f; \, f+ d# E1 ]
可是好像沒有彈跳功能?!+ }; _9 Q& |; E/ h; e: y
我的問題是
3 I  ~3 k# H! D$ o按一下的時候,應該 -1. F6 d( ?* M7 _0 d  M$ j# ~; j
但是有時候會忽然 -2 -3 .....2 Z: w! v; \) c
是沒有同步咩?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
6#
發表於 2009-6-19 22:51:39 | 只看該作者
感謝debounce的code介紹分享* \! y# I; l( p0 ?2 ^
機械開關的確需要考慮數ms的彈跳
" U% B) d0 k* M. N0 F4 F  y3 n5 |, Y不然開關驅動會造成災難!
5#
發表於 2009-3-24 09:26:10 | 只看該作者
網路上有些Debounce程式你可以參考
: }9 \3 D8 H7 v0 k$ O$ N! X$ Y4 p' |2 [7 v% h
///////////////////////////////////////////////////////////////////////////////' K, L5 ?; G+ p( D4 d
//
# u, X$ \- a/ E  B0 E// Pushbutton Debounce Module 2 p2 Z# z! \- i9 A3 q3 t6 E0 s! K
//: d- Q/ R. l7 H, _6 n, G) S$ f0 f
///////////////////////////////////////////////////////////////////////////////
  T9 M3 B/ u9 dmodule debounce (reset, clk, noisy, clean);, L0 O* B* r! n
   input reset, clk, noisy;
* c' z/ ~2 B* \! f: W2 Z( m4 H   output clean;
9 n3 k/ S- n0 @  n- a8 ^# [; t- B* x
   parameter NDELAY = 650000;7 L, D( a7 Q& \
   parameter NBITS = 20;
3 {0 A$ V7 T$ o% v5 K4 T
& P3 t( b7 N4 [  |- z& m   reg [NBITS-1:0] count;
, i$ e5 F1 L" v   reg xnew, clean;+ b3 P: t5 b0 o& x

! s& S* U7 B  C3 e, z6 R/ S   always @(posedge clk)
2 j. J9 {, C4 J. E) T9 K, g     if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end
: t, }! u! \, O- m     else if (noisy != xnew) begin xnew <= noisy; count <= 0; end
2 Y' `$ s; F0 n" t* b5 Y0 N     else if (count == NDELAY) clean <= xnew;
/ {+ \( D$ F% {8 p! z2 b     else count <= count+1;
. q6 o/ p9 w9 A. h6 m0 B; I- m: _+ I0 Y8 _' L4 \* k
endmodule
4#
發表於 2009-3-17 00:41:25 | 只看該作者
應該是按鍵開關彈跳的問題,當在按下和放開的瞬間,會有些微小的震動現象.
3 r  }  B' h- y( E" l9 E% s由於按鍵訊號的數位處理方式,可能將這些震動轉換成高頻率的雜訊依附在實際ON/OFF變化的兩側.
; S" T6 h  {& j' O- P可以使用一個較慢的頻率來做取樣控制.
3#
發表於 2009-1-13 12:10:32 | 只看該作者
VHDL Debounce_Process 寫法,你也可參考ISE VHDL範例 / b% d" P. S1 D8 C3 o4 F) Y3 Y

6 ]4 T4 I. T! J: [process(clk,button)
! U& G4 T% L( _1 ] begin. S) a: ^: ~% P
if clk'event and clk = '1' then
2 f* u. H# t1 E1 ^: U button1 <= button;6 {+ ^! A1 Q  i( V+ }$ r: X
end if;9 q/ Z( u% n; \" M: n
end process Debounce_Process;) q" B" C4 d' K# I2 }
mybutton <= button1;
2#
發表於 2009-1-12 21:01:02 | 只看該作者
如果您的 hand 是由 push button 按而產生者建議要加入 debounce 功能,否則在彈跳暫態會觸發.......?次
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-23 09:13 PM , Processed in 0.168010 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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