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 是一个定制的数模转换器。这里没有什么花哨的。

这是一个实现错误,或者可能是一个错误的按钮,闪烁?

4

1 回答 1

4

欢迎来到嵌入式和电子的乐趣!

您所遇到的称为联系反弹: http ://www.elexp.com/t_bounc.htm

它在按钮的所有用途中都很典型,是由按钮的机电特性引起的。

有 2 种方法可以解决这个问题。添加去抖动电路或在软件中。通常,软件方式是忽略在第一个中断的几毫秒内发生的所有中断。这里有一篇关于去抖动策略的非常好的论文:http: //cseweb.ucsd.edu/classes/sp09/cse140L/slides/debouncing.pdf

于 2013-08-19T16:28:30.467 回答