2013-08-18 46 views
2

我已經開始在netduino 2上進行愛好開發了。我在板載按鈕的中斷上掙扎。我的問題是,每次按下按鈕時都會多次調用中斷。netduino 2上的按鈕事件

public static void Main() 
    { 
     dac = new Dac(); 
     InterruptPort button = new InterruptPort(Pins.ONBOARD_SW1, true, Port.ResistorMode.Disabled, Port.InterruptMode.InterruptEdgeHigh); 
     button.OnInterrupt += new NativeEventHandler(button_OnInterrupt); 

     Thread.Sleep(Timeout.Infinite); 
    } 

    static void button_OnInterrupt(uint data1, uint data2, DateTime time) 
    { 
     if(data2 == 1) 
     { 
      dac.nextDACState(); 
     } 
    } 

* Dac是一種定製的數模轉換器。這裏沒什麼特別的。

這是一個執行故障,og可能是一個錯誤的按鈕,閃爍?

回答

4

歡迎來到嵌入式和電子的樂趣!

你所經歷被稱爲觸點抖動: http://www.elexp.com/t_bounc.htm

正是在按鈕的所有用途的典型,並通過按鈕的機電特性造成的。

有兩種處理方法。可以添加去抖動電路或軟件。典型的軟件方法是忽略第一個幾毫秒發生的所有中斷。 這裏有一篇關於防脫策略的很好的論文: http://cseweb.ucsd.edu/classes/sp09/cse140L/slides/debouncing.pdf

+0

謝謝。我昨晚執行了一項無視檢查。奇蹟般有效。 如果我做錯了什麼,或者如果這是正常行爲,我不確定。 – hogni89

+1

你能分享你是如何做到的嗎? – mark1234

+0

我也很想看到一個例子 –