Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-1-8 21:26:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;
) ~  H$ F+ l+ yUSE ieee.std_logic_1164.all;
+ z$ O; a) N' LUSE ieee.std_logic_unsigned.all;
! D1 V: d, V  M, j( P7 lENTITY SWSTOP IS- A# ?7 \( Z3 W7 O8 n' [5 {  {
        PORT(Hand        : IN  STD_LOGIC;                                 0 T; ^$ Y# T: L
                 CO                    : OUT STD_LOGIC) ;        1 z% X$ F- x- i" q
END SWSTOP;! j7 p$ X( J1 W8 p% D  T
ARCHITECTURE arc OF SWSTOP IS2 L2 z1 y2 P% `" P
BEGIN
5 t, I. q6 J, }% R4 |  PROCESS (Hand)9 x, y' {  i2 R
    VARIABLE imper :STD_LOGIC_VECTOR(1 downto 0) :="00";
. w6 o) `3 b9 t4 k   
/ ]+ s* k9 B0 \5 D  BEGIN' i. s. w+ U. S# P/ U; |3 o
$ L4 a( W, |& A
     IF (Hand'event AND Hand='1') THEN
; [; B9 {" i# }) n5 V3 t                  ; a+ ~/ h/ {3 c7 |+ J, R+ j. m
     IF imper <"11" THEN imper := imper+1;+ \6 S. c, ~# A* c
     ELSE imper:="00";
* f$ M& e. m+ V5 u     
/ H8 [0 i4 g: H0 [4 [- N: `     END IF;         * p# Z! z; t% [# C/ i% Z
     END IF;
) K, ?% Y3 A2 C0 v! L     ; Z6 t$ Q+ J# d" m
      CO <= imper(0) ;
" V5 @0 |6 g+ {5 z: ~% q+ B        END PROCESS ;# N, N. v5 A- N
   0 z1 i+ P0 ?1 T
END arc;
' y7 a8 E  m/ H) s* d$ d) M3 m

3 I% m0 Y4 ]/ n% W0 C以上是我設計的開關
- Q. O& w; h; J8 A5 |- L1 R0 `; W可是好像沒有彈跳功能?!, r( C7 ~0 d3 U3 [2 X  ?
我的問題是
) T+ F0 p; s9 Q8 G) p. c8 E+ A" G按一下的時候,應該 -1
# \1 S5 k" ?" Y4 W  {4 G6 K但是有時候會忽然 -2 -3 .....
1 n- W/ S" B! F1 _0 z6 c是沒有同步咩?
分享到:  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範例
  Y2 p1 S( w6 E! s& ~) p
- n# m1 A  p& X7 l* i* Bprocess(clk,button)
* b1 U: r. ~3 p/ {7 C6 }1 h begin
) a, [. f) ~- I/ y if clk'event and clk = '1' then
7 D7 b3 ?* g, ^- S- C6 R button1 <= button;
- O. E& O2 o( J* |& R  n/ O end if;% c" a5 L! O3 g: r" W" t" o4 U6 M
end process Debounce_Process;5 R: u; L/ S) X; M0 d! @% W% P
mybutton <= button1;
4#
發表於 2009-3-17 00:41:25 | 只看該作者
應該是按鍵開關彈跳的問題,當在按下和放開的瞬間,會有些微小的震動現象.1 i5 X1 W/ o" V& n* R
由於按鍵訊號的數位處理方式,可能將這些震動轉換成高頻率的雜訊依附在實際ON/OFF變化的兩側.7 Y! {: n* y6 `2 b$ U( b2 c2 P
可以使用一個較慢的頻率來做取樣控制.
5#
發表於 2009-3-24 09:26:10 | 只看該作者
網路上有些Debounce程式你可以參考) b9 M8 G- ]- I" L. R8 ^

1 I; r3 v6 k: S7 ?) l///////////////////////////////////////////////////////////////////////////////
0 {& c/ O7 `6 ^7 P1 t) f# r  i$ k! f//
3 {2 d3 g! ?5 N6 t& Y; Y, r// Pushbutton Debounce Module
) u' B0 U8 C7 Y8 J/ J1 \//# n) X. q3 U# c5 j0 d  z
///////////////////////////////////////////////////////////////////////////////0 }1 |0 i$ D1 Z% U6 B+ Q
module debounce (reset, clk, noisy, clean);2 l, Y, X/ S5 ~) w
   input reset, clk, noisy;
6 w+ @/ s/ J3 |% T" L+ n$ m) t   output clean;
, R* S9 E# Z1 ?1 g1 ^2 {" s$ o
1 ?# \( }5 Y/ V  V) D6 y4 K4 _   parameter NDELAY = 650000;
# c! D" h, L; m& P0 O( B   parameter NBITS = 20;# I5 S8 l% O! d/ t2 h& R

: T& l, B6 U! i+ {& I6 n& p   reg [NBITS-1:0] count;9 m+ b" C" `4 H7 f9 o
   reg xnew, clean;
7 C  H4 C( V% ^; E% Q2 D) m) Q# a! z* E" F
   always @(posedge clk)! o4 Y1 c7 _" N3 ]
     if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end4 _& F+ c- w7 N  r
     else if (noisy != xnew) begin xnew <= noisy; count <= 0; end3 L6 V3 L# T' Q6 ?1 P% c% f
     else if (count == NDELAY) clean <= xnew;
7 y3 @( x3 O0 ?) t0 T     else count <= count+1;1 K3 Q5 Q# \  {& h6 y; Q: W+ q
' b- q! G( D2 k2 ?; c
endmodule
6#
發表於 2009-6-19 22:51:39 | 只看該作者
感謝debounce的code介紹分享
: o. ]8 P5 a/ u機械開關的確需要考慮數ms的彈跳' N; v. y8 ?0 s5 A2 o% R
不然開關驅動會造成災難!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-28 02:12 AM , Processed in 0.166010 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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