Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-1-8 21:26:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; 2 Z, u- P; E, b4 J4 a; O
USE ieee.std_logic_1164.all;
3 k9 ^7 l: j8 p1 T9 |USE ieee.std_logic_unsigned.all;
8 ]) M' L, P. r' b  ?ENTITY SWSTOP IS
' Y4 D, w( C0 O; B- I        PORT(Hand        : IN  STD_LOGIC;                                 
! c% K5 o1 O2 e! ]9 ?                 CO                    : OUT STD_LOGIC) ;       
8 h5 t9 E2 x) `8 _" q* w- K- ^END SWSTOP;
4 \2 J) [$ E" o. d* f0 LARCHITECTURE arc OF SWSTOP IS
! I% n# L# H- ^% N BEGIN" r% i4 H+ d4 l; ~  n
  PROCESS (Hand)
) T( l( G, P3 F( S$ C" r8 w; Z0 |    VARIABLE imper :STD_LOGIC_VECTOR(1 downto 0) :="00";8 F+ D* u& D! e" K9 E0 \6 t
    9 e2 T! _$ T1 Z, S$ ?0 p( \
  BEGIN+ |0 _5 S6 V/ `/ M; B) v( G# Q
4 Q8 E' {0 C+ r7 f1 D( w
     IF (Hand'event AND Hand='1') THEN
( i, V' L  h. s% I# o7 m                  : }. ~. U* u' x1 F) q; i* {+ a
     IF imper <"11" THEN imper := imper+1;
& M& }2 {& t# p     ELSE imper:="00";3 }4 h7 |. @, Z0 O2 ?2 \- I0 {
     ) h, g; X  [5 R' b' r4 q' q/ y5 \) }
     END IF;         
1 m5 n) F6 S1 F4 ]  Y+ z+ ^     END IF;2 v# P; ~/ g0 y& d' D) u% }. ^" c/ P
     
& h: y+ W! H9 I/ @      CO <= imper(0) ; 3 R/ u6 V$ ]" G! }1 p8 L
        END PROCESS ;
* R; Z; j  p5 U' a3 [7 t   1 R- q$ V! N( r" n& O9 h
END arc;

2 C! w* ]6 I3 O1 H
- ~- B$ d7 |( a2 G以上是我設計的開關
% x  R! v, ?( [/ H' S可是好像沒有彈跳功能?!- E6 J# T% x  b# o# U7 ~% s7 l) R
我的問題是
1 r  z3 f8 |2 [6 p* c7 h按一下的時候,應該 -1; L3 T" p9 M( c* i
但是有時候會忽然 -2 -3 .....4 p' }% Y; D1 `  I. A
是沒有同步咩?
分享到:  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範例
( H2 P/ P  @$ ?# K$ P; g
; H; x- A9 F. F5 Q5 d( ]process(clk,button)
/ [' E8 Z, x  X3 H# K" W begin5 j" d3 p$ T3 S2 T: W# j! ^, x5 a  I5 Z
if clk'event and clk = '1' then6 I% i3 y' T. c5 Q5 c. e- N/ b
button1 <= button;
4 H- {5 e/ n5 s" U* @$ A6 P end if;/ B2 N8 D. `% x5 h3 G& w% w& l
end process Debounce_Process;
3 W9 v: X0 N( z! f, [, m2 H mybutton <= button1;
4#
發表於 2009-3-17 00:41:25 | 只看該作者
應該是按鍵開關彈跳的問題,當在按下和放開的瞬間,會有些微小的震動現象.; Y: Y6 @; ?3 P; j
由於按鍵訊號的數位處理方式,可能將這些震動轉換成高頻率的雜訊依附在實際ON/OFF變化的兩側.& Z' _& l' o9 T3 c, C4 m  G
可以使用一個較慢的頻率來做取樣控制.
5#
發表於 2009-3-24 09:26:10 | 只看該作者
網路上有些Debounce程式你可以參考5 i5 Z' s. ^8 ^% j: w( M( H- g" G

/ Q" R( A  H4 ?& [///////////////////////////////////////////////////////////////////////////////% E- {0 L! O1 b. g9 `7 e# F% _; |* ]
//# a1 u/ c! I! R) V
// Pushbutton Debounce Module
% X2 I6 S. K3 {//
2 ]# [% G6 m4 O4 M9 U3 [( v0 n///////////////////////////////////////////////////////////////////////////////" @" u0 Z9 D  I6 i( a4 N. \
module debounce (reset, clk, noisy, clean);
( x2 s: L' a- X5 d   input reset, clk, noisy;
/ t- e3 _% i4 K# o  T) _) `   output clean;
5 ^% b: M; X8 Z$ Z# @$ y0 i! J1 [8 T. G$ ^9 K5 |% A& v6 x
   parameter NDELAY = 650000;
4 V  S8 j* @0 u/ x, ^   parameter NBITS = 20;
& Z4 V* v; m3 l/ |/ I: E3 m8 w% J- |
& ^0 b; z+ U6 P5 f1 G   reg [NBITS-1:0] count;
* e  F! F* w7 `( K   reg xnew, clean;* F0 o+ N9 f! Q

4 r$ p7 j# Q9 w   always @(posedge clk)$ O  w9 X) S. W; q: T
     if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end
/ I5 K/ ^: ^. x/ o3 l( ?     else if (noisy != xnew) begin xnew <= noisy; count <= 0; end: V- Q0 e9 H9 d& i$ N- k1 O0 J# B9 D
     else if (count == NDELAY) clean <= xnew;+ F4 a9 U& z* B5 t: u* S4 S- v
     else count <= count+1;6 s7 v; S! k1 s7 l* x( H
" ^3 s8 g3 t, S) d" Z4 f
endmodule
6#
發表於 2009-6-19 22:51:39 | 只看該作者
感謝debounce的code介紹分享
) ^# N" j. w0 [7 V# p  w# S8 G機械開關的確需要考慮數ms的彈跳2 H. p+ C. ]8 d# [* D
不然開關驅動會造成災難!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-24 12:51 AM , Processed in 0.169010 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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