Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-1-8 21:26:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; / }0 m' ?0 f, K- Z4 |5 }5 W
USE ieee.std_logic_1164.all;* x% W, \$ p  s! c
USE ieee.std_logic_unsigned.all;
- ?9 U. @  S  M4 K! V# g% ~* pENTITY SWSTOP IS, [( ?) X4 {3 n" r* u$ @3 P6 y
        PORT(Hand        : IN  STD_LOGIC;                                 ( l# H* b' H6 {8 a3 B- y  ]/ x
                 CO                    : OUT STD_LOGIC) ;        4 n" h3 v- ]9 l
END SWSTOP;, W/ r  b" P( i8 F$ a% r1 |0 n
ARCHITECTURE arc OF SWSTOP IS
1 d  z- U# B* x9 N BEGIN
4 y6 v) i2 r. v& @, O( d6 y  PROCESS (Hand)/ t/ C% j, g8 h
    VARIABLE imper :STD_LOGIC_VECTOR(1 downto 0) :="00";8 d6 g, I; |" ~
    4 M4 l# _( J# J% v: n$ p) v. g* i
  BEGIN
' n  B! Z6 x2 B/ j, @+ t5 V+ X9 b* g6 U0 W5 g: J$ I
     IF (Hand'event AND Hand='1') THEN
' O" q$ S; J+ w! \9 N. w2 f( u                  + B) A2 E4 o+ w6 ?
     IF imper <"11" THEN imper := imper+1;+ P2 W7 W7 T! `; l* c8 _$ n) Z
     ELSE imper:="00";7 ]7 ~" f9 e" Q! {) M  i$ Y
     4 |. V% _- B  C8 H2 A; E6 @& b
     END IF;         7 e; F( h' {/ ^1 o& V, u# z" y
     END IF;
" k( O* ^9 j9 Q) [- h# Z9 Z4 R4 R     # S$ p* [- d* u7 ?1 Q
      CO <= imper(0) ; % p. O. {  t' D$ o- [( l
        END PROCESS ;' O+ k' u' {5 ^) E8 r' B
   
. Q" Z* z2 d1 g/ V8 ~END arc;
, m& U! g) W7 x7 P
: t& S. u8 {$ [! y
以上是我設計的開關
% {7 T# C% j% N( L7 N: C* H可是好像沒有彈跳功能?!! C" N; i3 D: s
我的問題是
. ^7 V1 U9 m+ a' x3 E按一下的時候,應該 -1* Q: z$ d- f/ B) L1 L4 X
但是有時候會忽然 -2 -3 ....., [, J1 [) z+ s3 @+ 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範例
" J" v$ _4 ~% `2 G
5 |( ^' `/ ^' e, ]process(clk,button)% D% F; C1 `" z* i- F
begin0 H* i6 ?% r9 n1 N; P! J
if clk'event and clk = '1' then# }' R8 g( }: \4 c9 e& l
button1 <= button;
5 U! Y; Z8 \2 {" [7 m  J  F# ] end if;4 o: N( x& v. Q: ?1 s
end process Debounce_Process;& G2 a0 s" V% I
mybutton <= button1;
4#
發表於 2009-3-17 00:41:25 | 只看該作者
應該是按鍵開關彈跳的問題,當在按下和放開的瞬間,會有些微小的震動現象.
- O5 o* r7 p  [6 |: H% b由於按鍵訊號的數位處理方式,可能將這些震動轉換成高頻率的雜訊依附在實際ON/OFF變化的兩側.4 C2 v. D6 `# T0 ]4 O
可以使用一個較慢的頻率來做取樣控制.
5#
發表於 2009-3-24 09:26:10 | 只看該作者
網路上有些Debounce程式你可以參考; o  H- _% e6 r. N# q" S3 l  q

% Z2 o* o& [4 I% P///////////////////////////////////////////////////////////////////////////////) _. J  ~1 v4 C1 L" x' d
//& z: k1 l! R" r: t0 B
// Pushbutton Debounce Module
# v4 w2 M* L- ^9 C- t7 T//: v9 S; h) E/ t; X
///////////////////////////////////////////////////////////////////////////////9 E8 Z; U- u( X( e4 B
module debounce (reset, clk, noisy, clean);  ^: w/ W# j4 d, Y$ }4 M/ ?
   input reset, clk, noisy;( ]" H( ^, w  e' Q# m
   output clean;
1 W0 g' o# W$ u0 G: k2 r4 @7 r
1 _" c9 B5 t: h& {, h% a  g6 t   parameter NDELAY = 650000;$ |( ~" L& {$ o3 Z0 i3 Q- l
   parameter NBITS = 20;0 W" }( }$ B' m

3 V, s" [9 {; N9 A7 P; t( V& k   reg [NBITS-1:0] count;- F. c6 L4 {" _& P, ]. V% G
   reg xnew, clean;$ X* Z5 f" a' A; q* W4 S. g$ o: M

5 V6 `+ d: [) E6 E0 k' z* F- ]+ @   always @(posedge clk)
, A% p( U6 U) C; h     if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end; G( L5 P9 n4 Z% q* [# i3 Q; s
     else if (noisy != xnew) begin xnew <= noisy; count <= 0; end
' D7 e8 \# A# R0 U' W4 K) \9 n( w     else if (count == NDELAY) clean <= xnew;  `6 `2 g2 O7 {' ~; c6 f
     else count <= count+1;
3 e2 d6 |* o5 u/ Z4 _: S% ~, W1 h* o9 |/ v$ }3 \. `
endmodule
6#
發表於 2009-6-19 22:51:39 | 只看該作者
感謝debounce的code介紹分享
- M: y* H9 g; v+ g機械開關的確需要考慮數ms的彈跳5 K4 `/ g4 h7 p# `# p, q& Y
不然開關驅動會造成災難!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-7 12:37 PM , Processed in 0.144518 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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