Chip123 科技應用創新平台

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

作者: hope1014    時間: 2009-1-8 09:26 PM
標題: Vhdl 彈跳開關 問題
LIBRARY ieee;
; y6 X9 t' p! h. V5 d$ b1 G$ iUSE ieee.std_logic_1164.all;
  A6 X4 r  h! j0 q- P9 m$ N9 q! DUSE ieee.std_logic_unsigned.all;7 T9 ?  n% s& s' u
ENTITY SWSTOP IS% r- O" D- b+ W4 O- Z2 l' S- x
        PORT(Hand        : IN  STD_LOGIC;                                 . M9 C. Q  Z* k* P; H; \; B+ D
                 CO                    : OUT STD_LOGIC) ;        & [+ D1 b' g# A) w& c5 d
END SWSTOP;
' E; h! D$ ]4 S6 u* RARCHITECTURE arc OF SWSTOP IS4 a& f8 x' V2 [. ^, g
BEGIN# j$ X, z/ i2 ]$ A" D. J: |
  PROCESS (Hand)( s4 E  s( V+ Z, B: u; V( K: O
    VARIABLE imper :STD_LOGIC_VECTOR(1 downto 0) :="00";3 ?  s! @7 M6 P! q0 ^
    7 _/ d% [9 C; Z6 U, L5 q/ v
  BEGIN7 `# s6 A' W3 {5 D+ x* k' a% ~( B

* V6 e# a5 J7 W5 W: s* N     IF (Hand'event AND Hand='1') THEN - _, g  }$ f2 L+ r5 Y& K3 u# u: Z# w
                  ; V, F; d5 T. c( _+ j
     IF imper <"11" THEN imper := imper+1;$ o) S  Z* d3 \5 m) m9 N7 I5 f
     ELSE imper:="00";
( K5 X  K. z' L5 K! d$ [7 O  F     % y6 A% ]$ ?2 _/ M! n. o9 d
     END IF;         2 m( T- L9 x+ [# |
     END IF;! A4 k& f6 F5 V  b
     
* ?; B- \3 `. h, S9 o& l      CO <= imper(0) ; ( ]2 c  q8 J$ Y/ s6 Y1 E; S( X
        END PROCESS ;
* W1 i" c* z7 c$ L+ z# {5 k! R   
% t  v  l% J  A' n8 sEND arc;

4 n! D! M) j; t  b4 C) J" f' n- A8 o6 E, z1 L
以上是我設計的開關( F( |  C6 X" q# L
可是好像沒有彈跳功能?!
+ k" ~- ?& @3 o" v4 t- o2 k我的問題是; |3 F( o) C$ u8 ~7 N- _
按一下的時候,應該 -16 D" Q# x; l7 N4 s7 I& H/ P
但是有時候會忽然 -2 -3 .....
/ x" i4 A& ], T是沒有同步咩?
作者: ssejack1    時間: 2009-1-12 09:01 PM
如果您的 hand 是由 push button 按而產生者建議要加入 debounce 功能,否則在彈跳暫態會觸發.......?次
作者: ICKELL    時間: 2009-1-13 12:10 PM
VHDL Debounce_Process 寫法,你也可參考ISE VHDL範例 5 f# _5 P5 J; d- I3 z$ w
, ?. r  ^/ m, n* x6 ]9 c7 k
process(clk,button)
0 D. J: z1 _9 [8 o( P begin
! ]/ f. k- ~6 _# m& `  v if clk'event and clk = '1' then: |! C5 v% t6 [8 K& e! x
button1 <= button;2 y% ?' ~" }( O6 L- R& _
end if;
# t4 s1 g1 ~4 l" m; r: j end process Debounce_Process;( P( Y+ L' ]) Z9 ?
mybutton <= button1;
作者: slam    時間: 2009-3-17 12:41 AM
應該是按鍵開關彈跳的問題,當在按下和放開的瞬間,會有些微小的震動現象.& g. k; _* a/ H4 |$ _
由於按鍵訊號的數位處理方式,可能將這些震動轉換成高頻率的雜訊依附在實際ON/OFF變化的兩側.
  F& j7 `5 Y; ^4 F$ H* H可以使用一個較慢的頻率來做取樣控制.
作者: osabado    時間: 2009-3-24 09:26 AM
網路上有些Debounce程式你可以參考% z# L$ L1 j3 L1 W2 [& c. G0 Z

; _$ [; g# y! i/ P4 N% X+ J///////////////////////////////////////////////////////////////////////////////
4 N3 Q# b/ U/ u  Y9 a, x" O//
7 w  b" K. ?0 b& m/ W/ W  e3 w2 c// Pushbutton Debounce Module 4 w2 c- s" Q/ W+ P5 o* [: b& Z
//- P5 z  e$ i" ?" \  |, b, m
///////////////////////////////////////////////////////////////////////////////" A  [( j! C2 Z7 X
module debounce (reset, clk, noisy, clean);8 G: ]7 o- [9 ?1 |% D. \
   input reset, clk, noisy;
$ |8 t: L0 ?" P) ^/ {" {   output clean;6 _3 N" M0 T1 I

% R* i+ |! e' Y8 T2 i/ k   parameter NDELAY = 650000;
( O1 p# p4 A0 D% f  ?   parameter NBITS = 20;- p6 y  W% t4 c% r3 q# c: N
+ b$ l7 j3 [8 |6 w2 X0 [* a3 j
   reg [NBITS-1:0] count;% W3 l2 P; R: X5 J. ^9 [% u+ b- }
   reg xnew, clean;/ C& l" l  {/ H. e

8 H. o  s7 Y- a6 x" E; J. S   always @(posedge clk)+ z5 c$ s1 C! q, j
     if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end
0 p' ]: d- m) n! [/ Z     else if (noisy != xnew) begin xnew <= noisy; count <= 0; end
/ E0 \' v! Z; W     else if (count == NDELAY) clean <= xnew;
7 v1 L+ G  g8 p     else count <= count+1;/ @% M- w1 X1 g" n! `

# k( O4 t$ }- l; X3 Z/ ]8 t# ?6 r, Kendmodule
作者: abore2009    時間: 2009-6-19 10:51 PM
感謝debounce的code介紹分享$ s/ H- S  y% V6 \% B( ^/ s5 K# e
機械開關的確需要考慮數ms的彈跳1 e; \/ C  {; k$ @; c
不然開關驅動會造成災難!




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