Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-1-8 21:26:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; + A9 _/ b0 \0 R! V/ c+ K# Q. W
USE ieee.std_logic_1164.all;
# c8 C0 U$ i- sUSE ieee.std_logic_unsigned.all;
1 g) M2 _" K, g4 H2 m* fENTITY SWSTOP IS
3 T) l* B3 Q3 G0 l5 _: F. Q% E4 M        PORT(Hand        : IN  STD_LOGIC;                                 7 k, M4 ]. ^+ D$ |: S
                 CO                    : OUT STD_LOGIC) ;       
5 |  E, z- a  z8 I- _- jEND SWSTOP;; t& U1 ~/ b. Q/ Z
ARCHITECTURE arc OF SWSTOP IS& I3 _/ y1 {; v9 U- p) [& V
BEGIN* b. R5 [. _0 V" r# V
  PROCESS (Hand)5 W9 }0 C. X1 C; k! t5 n
    VARIABLE imper :STD_LOGIC_VECTOR(1 downto 0) :="00";5 q, s7 b- J: K, {) P; |  N2 C
    9 K/ D& J2 W6 D' ]3 t0 ?# V$ E
  BEGIN
% F1 M2 a4 P9 d" E" x1 c: V4 u7 f* K7 i, W: b. c
     IF (Hand'event AND Hand='1') THEN
. X' w, k1 Y* a8 S" r) X% |                  ' H& ?: P; E& f
     IF imper <"11" THEN imper := imper+1;
+ A# j' U3 \' B& c- S9 j     ELSE imper:="00";
1 V' w8 E9 ?; m5 Z     7 u( T; ]# M3 S' d7 g0 d( U
     END IF;         3 s4 Z( ]2 G; a& ?. ~; ?6 z5 O
     END IF;
7 Q/ i% y- [3 x4 p     0 H8 P: T4 _1 e- _) G
      CO <= imper(0) ; , e& X% i3 A* D" C
        END PROCESS ;
2 Z8 M# r' ~3 O# U/ q% r   6 |# f# r; @+ Z, w6 _$ y
END arc;
2 `3 l# M; s2 I4 j6 J

7 A# C% r! C# O' B以上是我設計的開關
- X5 T+ v7 V+ V" F$ U. I可是好像沒有彈跳功能?!# h- S" o2 U* v8 ^
我的問題是
; `5 l! q" N4 _8 N' ?7 E8 z按一下的時候,應該 -1
$ D3 z. c0 V$ h; P: y5 E! L但是有時候會忽然 -2 -3 .....
) Y) @/ {- s8 e& W/ }7 G是沒有同步咩?
分享到:  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範例
, o& ?+ E" A7 s( Z% m0 N% G6 j- C3 v1 G4 d& {
process(clk,button)- ~3 x' w: P: |' ^) i- v4 i
begin
  s/ k5 @7 v& ^4 w/ N if clk'event and clk = '1' then
) [2 J* H+ p+ M* h+ k  X button1 <= button;
% i% U: I5 z7 k& |0 z end if;
0 O7 C1 p7 z+ z$ Z end process Debounce_Process;7 s% Z2 O' h& V
mybutton <= button1;
4#
發表於 2009-3-17 00:41:25 | 只看該作者
應該是按鍵開關彈跳的問題,當在按下和放開的瞬間,會有些微小的震動現象.+ S3 p" E0 `3 v+ ~! E7 J; t9 ?
由於按鍵訊號的數位處理方式,可能將這些震動轉換成高頻率的雜訊依附在實際ON/OFF變化的兩側.
5 X/ ?6 J  h6 z+ o+ n可以使用一個較慢的頻率來做取樣控制.
5#
發表於 2009-3-24 09:26:10 | 只看該作者
網路上有些Debounce程式你可以參考9 z$ K3 w6 a' i2 x5 S9 C& y2 k

1 N/ x  ?% w# g1 |9 ~//////////////////////////////////////////////////////////////////////////////// @( ]! L2 f9 N7 W/ O- G
//
9 m+ b. ]6 Z9 \( W+ q- @// Pushbutton Debounce Module / z0 a( }* ?# f. D* z" g3 a
//! y0 E6 {$ y0 z" D
///////////////////////////////////////////////////////////////////////////////6 @0 I) t# u& o7 H% |0 J, @) Z
module debounce (reset, clk, noisy, clean);+ ]" z# D/ M6 v; a' c- ~/ @( c
   input reset, clk, noisy;
: E5 E& l) x) o" c5 b2 I   output clean;+ I. H2 d+ m8 B# @6 d

7 B# H( W/ a6 b( v0 T' m( X6 ~   parameter NDELAY = 650000;0 H8 b/ r2 M: P: ]
   parameter NBITS = 20;# B+ x* n8 t' v6 V5 I4 h- C/ n
* X8 B/ P6 w+ b5 b2 ~+ }
   reg [NBITS-1:0] count;9 J' z' ~; Y! c
   reg xnew, clean;* R- L, e/ F5 }- \2 E7 g( a
! P! u# V5 P% b( E8 m, L
   always @(posedge clk)
4 e: i8 q, r2 i7 k: a     if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end7 N" C$ u! f/ M4 @! `- \0 U9 \
     else if (noisy != xnew) begin xnew <= noisy; count <= 0; end4 v# u' o8 T% `/ v8 S; c  a
     else if (count == NDELAY) clean <= xnew;5 j/ G- l$ I1 `! d8 E4 ^1 q/ Q5 U
     else count <= count+1;% g% v+ @. Z, ~- Z7 A
" }) J0 h5 ~0 {
endmodule
6#
發表於 2009-6-19 22:51:39 | 只看該作者
感謝debounce的code介紹分享' ^0 p% S  C0 C- `7 U: r' ~3 E
機械開關的確需要考慮數ms的彈跳
* B0 v9 i$ X2 R6 E: k5 Z不然開關驅動會造成災難!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-24 01:34 AM , Processed in 0.166009 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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