Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-1-8 21:26:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; # t  K2 [2 d7 P' y, B. ^
USE ieee.std_logic_1164.all;
$ d0 n5 `' k, q% B" A) J+ TUSE ieee.std_logic_unsigned.all;- |$ O0 ~9 {5 T7 D  N
ENTITY SWSTOP IS) W$ z/ P& e* m+ ^1 Q
        PORT(Hand        : IN  STD_LOGIC;                                 
. A1 M8 E( {3 \0 f. \0 {/ C) ]                 CO                    : OUT STD_LOGIC) ;       
% p7 n) b0 R! p4 }4 L% |3 oEND SWSTOP;& T' ?& a( k& k# m% C
ARCHITECTURE arc OF SWSTOP IS& l* }/ p' W, f6 g0 A+ |& J9 k
BEGIN. d4 J+ I7 F# L& s* S5 [$ A
  PROCESS (Hand)
5 a8 @' K6 I! i7 ~2 X( X' f    VARIABLE imper :STD_LOGIC_VECTOR(1 downto 0) :="00";
& w  _( W- Q7 \/ k" H7 w+ u% d    2 b3 Z- F5 u* k. d  T9 c/ f
  BEGIN
8 s/ N; J. L0 `5 l% [$ z
% L2 X7 L  ?7 ^0 ?     IF (Hand'event AND Hand='1') THEN # D" o0 h/ N& C2 X- o
                  
* O# J2 {; W* O- {     IF imper <"11" THEN imper := imper+1;6 o- D; o+ z$ d
     ELSE imper:="00";. r/ R( p$ W3 n  T1 o3 ~) S
     
& V- Y$ Z4 _3 O     END IF;         
; V( Q) u% O  J4 Y, t# _1 k" L     END IF;
# f: ]9 U6 X/ `1 S0 l- {     
* o; E& I% y: \/ m$ X6 |+ A. H      CO <= imper(0) ;   F* \9 ?( ~" P
        END PROCESS ;& s0 _/ L8 H5 K# ^0 G! k2 |
   * ^% o  {6 k, ~4 Q
END arc;

' b- |3 H) Y9 H/ J8 y. f' v1 K( a1 H1 u2 I! ?$ u- T( W
以上是我設計的開關
& D) v9 L4 o5 b9 S4 u7 z8 s可是好像沒有彈跳功能?!
, G$ G" U! c4 ^  l- N7 {; K我的問題是& {1 Z/ F  H: r6 q1 l. G% @' F1 ~
按一下的時候,應該 -1- V# k$ ]5 d5 V, ]7 m
但是有時候會忽然 -2 -3 .....
# T; m, c! {5 o, |0 w; ]- J) [3 V是沒有同步咩?
分享到:  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範例
1 u+ L" V+ i5 v
# Y/ h9 Q3 t7 K2 zprocess(clk,button)) c/ i+ R& d, q+ @
begin. L/ U3 [/ q7 w6 c
if clk'event and clk = '1' then* H2 v* ~/ O8 Z  G
button1 <= button;
8 I4 Q' x* k( g2 m9 W& y2 y, Z# t end if;
4 A# O% K4 X! ^/ K! Q end process Debounce_Process;+ D! Z; c7 m3 e% z0 t
mybutton <= button1;
4#
發表於 2009-3-17 00:41:25 | 只看該作者
應該是按鍵開關彈跳的問題,當在按下和放開的瞬間,會有些微小的震動現象.5 G/ d% t: `- }8 u  Q3 Z
由於按鍵訊號的數位處理方式,可能將這些震動轉換成高頻率的雜訊依附在實際ON/OFF變化的兩側.
# e, [) C- t  G8 J: [4 R' t. l  ?可以使用一個較慢的頻率來做取樣控制.
5#
發表於 2009-3-24 09:26:10 | 只看該作者
網路上有些Debounce程式你可以參考& g: N2 \, p% u, |5 m) J
5 z7 n' h2 i! `* w* _- ~5 Y
///////////////////////////////////////////////////////////////////////////////& q, V6 C9 j1 F! V; S; x% F
//8 H7 z" }( z2 {) Z* u4 A
// Pushbutton Debounce Module
  d1 z+ w1 m% i  u//
  y- C% B' @9 w6 R///////////////////////////////////////////////////////////////////////////////
1 W& P: O9 b* E& E! ]/ j7 a6 Gmodule debounce (reset, clk, noisy, clean);
$ D) k2 q) m8 [& k   input reset, clk, noisy;- {4 Y4 m4 ~& t' U) @- h: M+ x
   output clean;1 b. H0 ^: r1 S

; }/ Z; q5 S9 z2 A' w/ Y   parameter NDELAY = 650000;/ z; {6 F1 ?) x8 H8 i& [4 z
   parameter NBITS = 20;
. I$ U5 h" F; J/ t3 L* h5 }" Y( W# N3 _( Q) K+ e
   reg [NBITS-1:0] count;
. U$ ]: f5 A, N: w   reg xnew, clean;
1 s  h  U5 d5 R* T$ D
) ^0 `! H. C: J; @   always @(posedge clk)
3 }, ?9 s- N& Z6 A: g3 f  p1 \6 V     if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end7 l/ O. M# v! Z! t  t4 ?2 |1 w
     else if (noisy != xnew) begin xnew <= noisy; count <= 0; end
3 ]" {( f6 V3 y" b2 S" I     else if (count == NDELAY) clean <= xnew;# W$ X  p) W0 a* T; n4 S) e
     else count <= count+1;- [6 S0 n# V, T& t( u, v. {

% \9 b8 A6 @; E. f# J4 c. ~- Nendmodule
6#
發表於 2009-6-19 22:51:39 | 只看該作者
感謝debounce的code介紹分享
% ?: ]2 ^" d6 `# U  E機械開關的確需要考慮數ms的彈跳) a) r. X+ X8 V; a0 h6 i. Z
不然開關驅動會造成災難!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-6 08:27 AM , Processed in 0.105006 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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