| 
  |||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe  | 
  
問個硬件消抖的問題 | 
  
| 作者:civita 欄目:EDA技術(shù) | 
想用硬件描述語言作一個消抖電路 基本思想是在按下鍵時保持該電平并計時10ms消抖 時鐘輸入1MHZ 但是反復(fù)思考都不能成功描述該功能 希望高手們給點意見  | 
  
| 2樓: | >>參與討論 | 
| 作者: xhjiang 于 2005/12/7 22:14:00 發(fā)布:
         我前不久剛寫過這個程序 我用了兩個D觸發(fā)器進行采樣,采樣時鐘信號的頻率干好為10MS(經(jīng)分頻得到),把兩個D觸發(fā)器的輸出信號相與就得到去抖信號。但是你要進行按鍵譯碼的話要用到掃描信號,所以按鍵掃描信號要用采樣時鐘信號鎖存后,才可以得到正確的按鍵譯碼信號。具體的問題你還是要仔細的分析你的時序,我當時用了一天的時間才把它調(diào)試好的,就是它的去抖問題時序沒有匹配好譯碼不正確。  | 
  |
| 3樓: | >>參與討論 | 
| 作者: oaipoaip 于 2005/12/8 8:54:00 發(fā)布:
         參考一下,沒編譯過不一定沒錯誤 entity debounce is PORT( clk:in std_logic; enable:in std_logic; data:in std_logic; q:buffer std_logic ); end debounce; architecture behave of debounce is signal count:integer range 99 downto 0; begin PROCESS(clk) begin if rising_edge(clk) then if enable='1' and q/=data then if count=99 then q<=data; else count<=count+1; end if; else count<=0; end if; end if; end PROCESS; end behave;  | 
  |
| 4樓: | >>參與討論 | 
| 作者: civita 于 2005/12/8 23:55:00 發(fā)布:
         問題已解決,雖然描述長了點,不過將就了 昨天用了一晚得時間,同時感謝以上提示我的朋友,發(fā)上源程序以供交流 同時,樓上的vhd程序描述的功能我不明白。enable是什么信號,從哪里來? MODULE buton_delay(k,clk,k1); parameter size=17,m=17'h1b000,zero=17'h00000; reg[size:1] ctre; input k,clk; OUTPUT k1; reg stb,ks,clk1; reg[2:1] creg; always@(posedge clk) begin clk1=!(clk1); end always@(posedge clk1) begin if(k&(!creg[2])&(!creg[1])) begin creg=2'b01; ks=1'b1; end else if((!creg[2])&(creg[1])&(!stb)) begin creg=2'b11; ks=1'b1; end else if((creg[2])&(creg[1])&(!k)) begin creg=2'b10; ks=1'b0; end else if((creg[2])&(!creg[1])&(!stb)) begin creg=2'b00; ks=1'b0; end else if(stb) ks=ks; else ks=k; end always@(posedge clk) begin if(creg==2'b01) begin if(ctre==zero) begin ctre=ctre+1'b1; stb=1'b1; end else case(ctre) m:stb=1'b0; default:ctre=ctre+1'b1; endcase end else if(creg==2'b10) begin if(ctre==m) begin ctre=ctre-1'b1; stb=1'b1; end else case(ctre) zero:stb=1'b0; default:ctre=ctre-1'b1; endcase end else stb=1'b0; end assign k1=ks; endMODULE  * - 本貼最后修改時間:2005-12-9 0:08:11 修改者:civita  | 
  |
| 5樓: | >>參與討論 | 
| 作者: civita 于 2005/12/8 23:58:00 發(fā)布:
         還有,我的時鐘是11.0592M 還有,我的時鐘是11.0592M  | 
  |
| 6樓: | >>參與討論 | 
| 作者: oaipoaip 于 2005/12/9 9:00:00 發(fā)布:
         enable是使能信號 enable是外部輸入的,如果不需要enable直接去掉就可以了,模塊工作的時候是通過判斷100個時鐘周期(10ms)內(nèi)輸入和輸出的差異來消除抖動的,只有在輸入輸出信號的差異保持10ms才認為輸入信號發(fā)生變化,10ms以內(nèi)認為是抖動。  | 
  |
| 7樓: | >>參與討論 | 
| 作者: civita 于 2005/12/9 19:30:00 發(fā)布:
         了解了,果然如此 樓上的是強人哈  | 
  |
| 8樓: | >>參與討論 | 
| 作者: hnzsj 于 2005/12/19 22:26:00 發(fā)布:
         真牛 真牛  | 
  |
  | 
    
 
  | 
  
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 | 
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號  |