Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-1-8 21:26:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; 6 U4 b2 c$ j' M  D
USE ieee.std_logic_1164.all;7 h" v3 |$ _) ~8 a3 N& _
USE ieee.std_logic_unsigned.all;: I3 [7 N' M, H2 _- [' S1 K% k
ENTITY SWSTOP IS" H' n: p' n2 c; V0 O
        PORT(Hand        : IN  STD_LOGIC;                                 & x4 l# }8 k& W# ~8 H- O  e9 T
                 CO                    : OUT STD_LOGIC) ;       
; D& j# s/ d7 ^$ H  h) V% XEND SWSTOP;. V2 d6 f, O4 ], i* |- F( ?% q
ARCHITECTURE arc OF SWSTOP IS
; u  J, B/ P8 {5 v) j! X BEGIN
- ]2 z( t6 Q# F5 U, d3 ]' }, e  PROCESS (Hand)/ l9 z3 [3 j* v8 C
    VARIABLE imper :STD_LOGIC_VECTOR(1 downto 0) :="00";
, w, p8 s) X" m    % n) T" }, l1 d, b4 w' q
  BEGIN* L  e3 C& s9 o* o! w$ v
) e! ~# Z1 G3 T; F
     IF (Hand'event AND Hand='1') THEN
9 @  |. i# U8 \3 c2 ^' E  n+ |                  5 Q* U4 f5 C7 i, Q5 [  \
     IF imper <"11" THEN imper := imper+1;6 Q4 ~% }7 g. ?- S% a- T
     ELSE imper:="00";
$ F& r3 L' H% S# z     - I1 l, l/ Q# h0 J
     END IF;         
. ~) y: e/ }! ~* w  v* F6 z     END IF;" m, x2 i1 J0 o4 @5 A
     
' ~% P: i8 b0 l      CO <= imper(0) ; % n6 o4 l/ ^! @1 X3 {" T
        END PROCESS ;
; `- e  e, B' S' `3 ^& C   
8 M$ O4 ?6 ^3 w3 G4 WEND arc;
$ B9 n5 [' a* g, g
. _; p; ~/ X' @' ~3 P2 q7 \* n
以上是我設計的開關
! Z$ D2 x% \; b可是好像沒有彈跳功能?!4 s  ^1 r& T- j2 X
我的問題是
4 I" w9 x* Y/ `7 ?按一下的時候,應該 -1
4 r+ x, i" g: T- X5 J但是有時候會忽然 -2 -3 .....
4 Z* H7 x$ X1 {- [6 _是沒有同步咩?
分享到:  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範例
- c+ E0 j  W3 P1 r" s  Q2 i3 |0 G& y8 O! [0 H  K- t4 z
process(clk,button). \' i! z$ O$ V. M4 z5 B3 J. ~9 C
begin% b6 Q% m0 p& j( \) C% V
if clk'event and clk = '1' then
, _+ ]4 M2 X8 _, P. @ button1 <= button;! m- J) m- j9 Q& Z' n
end if;( S+ `5 C0 v6 g
end process Debounce_Process;
* y, G, }3 ~( [" ] mybutton <= button1;
4#
發表於 2009-3-17 00:41:25 | 只看該作者
應該是按鍵開關彈跳的問題,當在按下和放開的瞬間,會有些微小的震動現象.' t8 O, k5 w& Q2 X
由於按鍵訊號的數位處理方式,可能將這些震動轉換成高頻率的雜訊依附在實際ON/OFF變化的兩側.2 b" n) }( n1 B) {& l+ v
可以使用一個較慢的頻率來做取樣控制.
5#
發表於 2009-3-24 09:26:10 | 只看該作者
網路上有些Debounce程式你可以參考
( c% ]8 j$ p4 a% F, C5 u/ V& d% ]- i8 S9 B
///////////////////////////////////////////////////////////////////////////////
3 U7 p- R5 T- X& ?4 @- A1 f) j/ }//
) Y; b) N% y& H; m, P6 V- M+ x// Pushbutton Debounce Module
/ T" n. Q" F  m& l% {& d) {//% l9 `; m1 \" @3 [( V6 I
///////////////////////////////////////////////////////////////////////////////; m: N: _( Y1 o  O2 C
module debounce (reset, clk, noisy, clean);$ R$ i- U; J% r% J: J- c$ y, n
   input reset, clk, noisy;, o" c0 D! e( W* S0 F) e* |
   output clean;
% c" x. h) Y9 H/ l) r
" g% V4 q2 ~6 R9 o/ g6 E" b   parameter NDELAY = 650000;
/ _+ C3 j1 Q. ], [( O; E   parameter NBITS = 20;
9 [, a6 T4 F6 Z& X2 u6 z/ R3 m* ~2 }6 u1 ^4 T" Q; t
   reg [NBITS-1:0] count;# g5 M, e& j  c, O. n5 ]3 @
   reg xnew, clean;
  p5 a, u5 t! B; h2 n3 u, {* m
, L' n, W; C  }$ n+ V   always @(posedge clk)- q! Y  K1 u" O1 A& w
     if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end1 U& e/ O" [& `* x, ~  N7 U
     else if (noisy != xnew) begin xnew <= noisy; count <= 0; end2 u- E& p, M% ?" n
     else if (count == NDELAY) clean <= xnew;
4 h0 H! M! ^' w9 N& _     else count <= count+1;7 Y9 F7 a2 @1 d- |5 [

1 }, {7 j! [7 R2 Z( o: T% |* j  \endmodule
6#
發表於 2009-6-19 22:51:39 | 只看該作者
感謝debounce的code介紹分享3 V% P3 i5 y+ L, G
機械開關的確需要考慮數ms的彈跳2 ^0 ^; Q: `3 V( k1 k
不然開關驅動會造成災難!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-29 04:28 PM , Processed in 0.116015 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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