Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-1-8 21:26:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;
$ U' a: i. ?* f6 D% zUSE ieee.std_logic_1164.all;
0 Y/ I& v) @6 j7 q6 H1 R2 h( N8 aUSE ieee.std_logic_unsigned.all;
, h5 z( b+ |& |5 G: mENTITY SWSTOP IS
$ y4 T8 J( l" W  \        PORT(Hand        : IN  STD_LOGIC;                                 
) c  H+ y. c* I" I                 CO                    : OUT STD_LOGIC) ;        / @- U4 x4 b0 A1 P+ E! B
END SWSTOP;4 c( `4 Z# Y9 p% Z
ARCHITECTURE arc OF SWSTOP IS
) ?4 X3 U1 m& r; Q* p% R4 S3 D BEGIN# s! g0 R* X- N7 i5 a6 J
  PROCESS (Hand)+ ~: r$ S% P+ A% X
    VARIABLE imper :STD_LOGIC_VECTOR(1 downto 0) :="00";5 z. X: F% `$ C
   
- w3 \6 o7 u9 O/ W  BEGIN* A& G5 V4 J9 r3 Q8 [

( ~2 Y# M: Q; K     IF (Hand'event AND Hand='1') THEN ( t. _. s: G8 Z/ J
                  1 C! v: r' k- A; R/ }" N
     IF imper <"11" THEN imper := imper+1;5 k  g* e  I$ I! f$ [, v4 T
     ELSE imper:="00";
# K+ k, o% i4 M3 W# u; E     6 N; D, l5 i6 H1 ]& o0 U+ ]  V
     END IF;         
7 Z& {9 ~3 \! G, T     END IF;
3 r3 ^  |& Y$ n: ^* ]     
- i# N; F& m4 z2 {% U& E6 x      CO <= imper(0) ;
2 t* t7 ~# C9 f$ S& X3 N" o        END PROCESS ;
' L& d7 h+ z& Y2 b! C$ V% h   
# W4 ]# l+ Q* D' L0 I4 ?' IEND arc;
& ^: U; U  t2 q9 ~+ s

. `$ h) s* {+ c. i  k5 }/ z以上是我設計的開關; |  y. H- N4 `9 v7 e
可是好像沒有彈跳功能?!
+ ]/ J% u& Q" z7 u; G4 O我的問題是4 ]1 \$ E. S* s+ B5 K1 N3 C
按一下的時候,應該 -1, ?- L; n/ G  V
但是有時候會忽然 -2 -3 ....." a7 e, `0 u" F" o" M
是沒有同步咩?
分享到:  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範例
8 ]8 F" e$ E( m( r1 ]3 v+ c" L! V% P
process(clk,button)
6 i' k! w4 z: q1 q$ c- t begin8 W1 ]% w8 Y$ h7 a, k' B
if clk'event and clk = '1' then% Z- m9 S4 r3 ]4 e! ]& V' n0 J
button1 <= button;
7 e2 C; \0 @9 k0 v end if;
8 {1 J: }, g7 L/ I1 S3 r1 \ end process Debounce_Process;
/ }+ O7 `& J3 i+ d; h0 c9 i: E" h mybutton <= button1;
4#
發表於 2009-3-17 00:41:25 | 只看該作者
應該是按鍵開關彈跳的問題,當在按下和放開的瞬間,會有些微小的震動現象.+ O. S8 h, D& O
由於按鍵訊號的數位處理方式,可能將這些震動轉換成高頻率的雜訊依附在實際ON/OFF變化的兩側.
% p; [0 D- E$ ~可以使用一個較慢的頻率來做取樣控制.
5#
發表於 2009-3-24 09:26:10 | 只看該作者
網路上有些Debounce程式你可以參考
/ f% P1 m& r" I# n8 l9 L
! m' Z: x8 _% I# d+ T///////////////////////////////////////////////////////////////////////////////% m; }; u9 {3 i+ f& r& G
//
3 E* R: C$ ]+ ]: j: K// Pushbutton Debounce Module
1 f/ x& ^4 j3 C+ m7 K, m//+ j6 i9 B" ^, d; c+ c: w: R
///////////////////////////////////////////////////////////////////////////////
: j9 {3 n: n/ l! c2 W- K, I" dmodule debounce (reset, clk, noisy, clean);' C. u& K' u! l. o6 g3 a
   input reset, clk, noisy;  ]' _" D) S. B  z
   output clean;$ l+ P. E; g- g0 v$ G, K1 D+ ]& y

0 k% }4 {+ {% M1 n   parameter NDELAY = 650000;: m4 K: n8 e/ H4 `( _% m' j
   parameter NBITS = 20;
" w7 }- K  \8 I( [% L  A: _% h( L5 S" S  l' R) ]6 j4 z7 O
   reg [NBITS-1:0] count;" j7 S4 B, n; U
   reg xnew, clean;( D) i! y8 s* \/ O# P/ o
! z2 u" h  M- d+ Y$ s/ o0 t; q
   always @(posedge clk)( t+ O1 h) u! k: F9 q$ a- w
     if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end
4 Q0 R. Z1 Z& x7 I, n$ F8 ^- m     else if (noisy != xnew) begin xnew <= noisy; count <= 0; end
7 s% |1 {( u% _$ o' L. [     else if (count == NDELAY) clean <= xnew;
$ b3 T6 s) p  Z% z2 ~$ G# \) k; B     else count <= count+1;  O: m; E+ q: G1 ^

' y- |* V) t& k! _endmodule
6#
發表於 2009-6-19 22:51:39 | 只看該作者
感謝debounce的code介紹分享
4 e) j1 C+ q2 A" a2 i6 c) C* R機械開關的確需要考慮數ms的彈跳
" p5 R# M* Y! l8 o' X2 `不然開關驅動會造成災難!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-15 11:47 PM , Processed in 0.108514 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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