Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-1-8 21:26:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; 4 ?! S5 w% g! J0 a& f
USE ieee.std_logic_1164.all;
2 l: ^  y3 D( j8 g  RUSE ieee.std_logic_unsigned.all;
  a& O' e0 j/ s7 XENTITY SWSTOP IS" l5 e. W5 v  a( k
        PORT(Hand        : IN  STD_LOGIC;                                 
& B( G2 w  v1 T1 t, N# q8 E: q# J; ]                 CO                    : OUT STD_LOGIC) ;       
5 w2 `( @6 D. m' z  bEND SWSTOP;
) |" Q) g# A  T, w  ZARCHITECTURE arc OF SWSTOP IS
; X2 j7 H' e  `  F. U. K BEGIN
6 h& l6 C, t; ~7 P  PROCESS (Hand)
5 d- x$ F8 b9 k2 O- d7 ^    VARIABLE imper :STD_LOGIC_VECTOR(1 downto 0) :="00";
$ W& t( y8 n1 b! q0 O7 C" Z: |    9 @) H6 e5 E$ p) L
  BEGIN3 S# s' x  k9 z$ W

, g& ?$ f# f$ q; F0 r  [( v% ]! |     IF (Hand'event AND Hand='1') THEN # W, g. O5 v9 c% ^3 a1 ?
                  - C! k5 w- Q/ M! G0 L# k! |1 w/ @
     IF imper <"11" THEN imper := imper+1;
; F- q, @- A# Y9 W% \! F8 s     ELSE imper:="00";$ K" U- E3 P7 l$ o/ i
     & X- `: t9 ^" c: t
     END IF;         ) V$ }% f, d0 e" z
     END IF;* }" ]0 F4 T% P2 h$ W) H
     ) b. J( I' q2 G- g# ^7 s
      CO <= imper(0) ; ( `! h  [0 e6 w) A+ D+ }5 T
        END PROCESS ;
3 H* g+ }$ X* f+ i4 d   
/ }+ G5 g: X, B$ d" R5 O- AEND arc;
6 H" B! O# l" k; V* |, Z
) F$ @6 s" a. D8 v. p: r
以上是我設計的開關
& {+ L; B' x# n+ G# g. d可是好像沒有彈跳功能?!) d! q1 O" ?3 _& m
我的問題是
/ k2 E6 o: ^$ i按一下的時候,應該 -1: r( t3 ^/ N. O8 E$ A, U
但是有時候會忽然 -2 -3 ....." z2 H, L1 m- F7 B# ]/ }
是沒有同步咩?
分享到:  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範例 # w3 v1 O! W5 s/ I7 o) g
1 B$ x2 E- t$ V! D6 l, a7 ?
process(clk,button)! `: ^8 _0 ?# b0 R
begin/ t4 f8 U# q& m+ V8 J( @
if clk'event and clk = '1' then) i$ V  e1 C# M1 R7 {
button1 <= button;
' F, f: \8 t% X3 p# L end if;
6 ]1 z5 q6 p4 N9 \, ?9 Z" b3 k end process Debounce_Process;8 h/ Z& i1 L5 f: R
mybutton <= button1;
4#
發表於 2009-3-17 00:41:25 | 只看該作者
應該是按鍵開關彈跳的問題,當在按下和放開的瞬間,會有些微小的震動現象.
  j+ S, ]1 t7 p% y  T. D% M/ Y由於按鍵訊號的數位處理方式,可能將這些震動轉換成高頻率的雜訊依附在實際ON/OFF變化的兩側., Y1 N; S, i7 d/ I$ y
可以使用一個較慢的頻率來做取樣控制.
5#
發表於 2009-3-24 09:26:10 | 只看該作者
網路上有些Debounce程式你可以參考
9 d, }# _9 W% H1 j3 z  N3 d# L6 ~. ?0 }' ~4 T* C5 f
///////////////////////////////////////////////////////////////////////////////2 ~$ U2 I8 m( R$ ~$ g5 F
//
; g9 C; w+ I% f1 Z// Pushbutton Debounce Module
$ Z" t& R% T/ T. r( |( g; ]6 q//8 f& b1 N- d* k# }. q2 ?8 C+ R8 J
///////////////////////////////////////////////////////////////////////////////
$ y# F% `; I2 F1 Wmodule debounce (reset, clk, noisy, clean);7 i5 W. x( o, o: f" |8 _3 r
   input reset, clk, noisy;0 K5 e+ K1 l9 _- f9 U
   output clean;
2 G6 J6 @  G2 i1 X" I6 ^
  o5 M$ X& N& y( o/ p   parameter NDELAY = 650000;
: Q  j" V) o% Z   parameter NBITS = 20;
7 }" t! @  \: z' D' o, l0 \4 R
& G0 B3 q3 L1 _) z6 ]; w: F   reg [NBITS-1:0] count;. P2 z  I: L' j/ a* p+ W
   reg xnew, clean;! F) A; t$ n2 V& A1 z6 j

- e9 B3 j) s& y: v   always @(posedge clk)
9 K+ v+ `1 |6 \     if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end
( a7 B) V: v. o9 G# [     else if (noisy != xnew) begin xnew <= noisy; count <= 0; end
4 D+ A! _0 y" Q) s0 y$ J7 h; U     else if (count == NDELAY) clean <= xnew;, \6 Q3 q' H/ M. X: t. v
     else count <= count+1;& D% l7 v8 z& N; ]1 h( i5 p7 K
- _5 v7 a7 C4 r5 g2 P
endmodule
6#
發表於 2009-6-19 22:51:39 | 只看該作者
感謝debounce的code介紹分享
( B% b( e3 G% }  Q; u$ e1 r9 Z機械開關的確需要考慮數ms的彈跳+ h4 y  t% t: `% k/ e: C- i
不然開關驅動會造成災難!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-23 02:54 PM , Processed in 0.162009 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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