Chip123 科技應用創新平台

標題: Vhdl 彈跳開關 問題 [打印本頁]

作者: hope1014    時間: 2009-1-8 09:26 PM
標題: Vhdl 彈跳開關 問題
LIBRARY ieee; : v; Z, G1 S; R0 G$ I  h* h3 P. M
USE ieee.std_logic_1164.all;
. B* E" O+ o( d: G/ O1 BUSE ieee.std_logic_unsigned.all;
0 n9 w6 N2 J3 z  XENTITY SWSTOP IS
. |  x  T' k! Q/ F9 A7 Z        PORT(Hand        : IN  STD_LOGIC;                                 
. Q/ T& z7 G4 ?9 F. S$ g. x                 CO                    : OUT STD_LOGIC) ;        7 w9 L, U; @! P! H. j
END SWSTOP;
, C3 ?5 _6 O" z2 J; L$ HARCHITECTURE arc OF SWSTOP IS
1 x/ j. Z4 R9 `  A0 a; W2 R BEGIN
* x" t' A: u9 F4 f' P9 V; A  PROCESS (Hand)
, ]3 k# {! @8 H7 E) W9 I/ C% u    VARIABLE imper :STD_LOGIC_VECTOR(1 downto 0) :="00";
- E1 R" t" E+ I1 a: D& K3 m   
* j# t6 r3 p% F  g  BEGIN- K) U# `2 m( m" A
( ~9 ~  O) @# \) s# ]* y$ o2 w
     IF (Hand'event AND Hand='1') THEN 1 q1 G+ k4 I- g; ^4 F
                  
  t9 V. X) C6 V; w/ h     IF imper <"11" THEN imper := imper+1;
7 u% G. D7 I! z# m/ R: F4 @7 i     ELSE imper:="00";
1 ^6 M- T+ ?; t+ ]2 `7 e% D     4 X4 y4 m1 W1 g8 k! {4 F- M+ s
     END IF;         
# Y/ C" y$ [; S% S) s     END IF;# s. b* d1 c6 [2 U. T
     
6 ?6 z% T! d" W      CO <= imper(0) ;
7 X/ [/ r" W6 \# m' \6 H! ]) a        END PROCESS ;
: A1 S) Q3 m+ o( ?5 ?+ g$ K7 |   / B+ m/ ]  U! ]5 f
END arc;
: G" O0 g/ H+ }4 f- p' J: I

: J$ a4 q: _8 a( y! s- |以上是我設計的開關
' v$ ?9 z# h9 [可是好像沒有彈跳功能?!
( p, j0 K7 G1 K0 Z1 {& Z我的問題是
8 o' i# I2 L* K$ R5 e按一下的時候,應該 -1
1 b2 e/ B3 H( {# v( ?但是有時候會忽然 -2 -3 .....
9 [6 Z) t$ z& J! \' @& k是沒有同步咩?
作者: ssejack1    時間: 2009-1-12 09:01 PM
如果您的 hand 是由 push button 按而產生者建議要加入 debounce 功能,否則在彈跳暫態會觸發.......?次
作者: ICKELL    時間: 2009-1-13 12:10 PM
VHDL Debounce_Process 寫法,你也可參考ISE VHDL範例 " |6 l, K' b8 i3 T# D' G+ E, |
4 q- [" g$ P5 h/ f! Y1 X2 h5 j
process(clk,button)
" I, t! n) p) J. ` begin
3 F3 R' `+ i  n/ I& |/ t if clk'event and clk = '1' then7 D* E3 @" g* [  \% Q3 _* g3 I! l
button1 <= button;
4 P- K& K, t# C: _( o% { end if;
2 a# X. w( R) s4 N5 t* T- l end process Debounce_Process;
: W+ L/ y/ P( G: w+ N mybutton <= button1;
作者: slam    時間: 2009-3-17 12:41 AM
應該是按鍵開關彈跳的問題,當在按下和放開的瞬間,會有些微小的震動現象.5 R" i/ X4 _' `7 ^6 \9 m! T
由於按鍵訊號的數位處理方式,可能將這些震動轉換成高頻率的雜訊依附在實際ON/OFF變化的兩側.
) D1 O; K0 t: p7 l可以使用一個較慢的頻率來做取樣控制.
作者: osabado    時間: 2009-3-24 09:26 AM
網路上有些Debounce程式你可以參考- g2 s2 u' y. z

7 e! a. {2 y+ w: ^///////////////////////////////////////////////////////////////////////////////
$ b( j8 A. L& p7 p  \# }. D//
' H, G1 ?' ]4 u/ ~- T' \// Pushbutton Debounce Module : s6 E: p  [9 N+ v* G; [
//
, l8 O* V3 J+ e" h, O  V( g" p: {5 u' Y///////////////////////////////////////////////////////////////////////////////
' M" Y) [: z3 I: Umodule debounce (reset, clk, noisy, clean);
* u2 e9 K4 l" j  X) {: F* K   input reset, clk, noisy;
1 z0 l1 p$ x, y: T   output clean;
0 ?- x  Q+ O. V
- l; D" p, `% x3 {9 G- X   parameter NDELAY = 650000;# i. u* ^$ N5 y3 U
   parameter NBITS = 20;
* n  S$ a0 _6 v1 Y# D# }. o6 Z  J2 M2 d1 u7 Z$ [% D$ I4 K
   reg [NBITS-1:0] count;& d9 Q8 Q* y, E: y) @/ ]
   reg xnew, clean;
7 a: a$ a2 Z* @% m* u: W6 B! \; X# {& E1 R! @$ K& q
   always @(posedge clk)3 V+ [  d3 n9 M! F6 ?5 I2 E
     if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end9 s+ T, h/ p6 v% E' @* E- }
     else if (noisy != xnew) begin xnew <= noisy; count <= 0; end
2 h: {/ |& z" I- Y     else if (count == NDELAY) clean <= xnew;( z3 R  s( C; w, }6 [: e8 R7 p
     else count <= count+1;
) [) O, M% h* f& m& g8 S" @" L! F  n
endmodule
作者: abore2009    時間: 2009-6-19 10:51 PM
感謝debounce的code介紹分享$ V& u# u  L* y4 K
機械開關的確需要考慮數ms的彈跳6 O7 w' z7 d3 J( u7 z$ T( X
不然開關驅動會造成災難!




歡迎光臨 Chip123 科技應用創新平台 (http://chip123.com/) Powered by Discuz! X3.2