亚搏电子

软件消除抖动

R

线程启动

rt694157

加入2019年12月15日
58
我一直在看视频,阅读开关弹跳的教程但我脑子里全是这个。我知道如果我们按下按钮会发生什么。我们按下那个按钮,它就不响了立即接触,它会稍微移动一下!喜欢按钮被按了多次。按钮可以使接触在几毫秒之前,安顿到我们想要的状态。

当使用微控制器时,
我在很多地方看到程序员并不关心跳跃开关,只是在第一次跳跃后添加了50ms的延迟。增加一个延时,强制控制器停止一段特定的时间,


1619635861940. png


我不明白教程中给出的图片计划//www.slpmachine.com/technical-articles/switch-bounce-how-to-deal-with-it/


在while循环中,如果按钮被按下,首先检查按钮,增加BTN_press

我不明白其余代码的逻辑,
AlbertHall

AlbertHall

2014年6月4日加入
11181年
所有我所做的就是每50毫秒读取按钮,并将读数读为按钮状态。如果此时,它正在弹出,则可以读取以前的状态或下一个状态。在任何一种情况下,在下次读取50ms后,全部都是正确的。只需每1ms或类似的内容或您可以阅读多个状态更改即可。

这就是你所需要的。没有额外的硬件。没有复杂的软件。只有50毫秒的定时器。
KeithWalker

KeithWalker

2017年7月10日加入
1,639
我通常只是读取每个按钮,在软件中适当的位置,每次围绕循环和相应的分支。我不担心恢复效果。通常完成循环所花费的时间决定了这一点。
nsaspook

nsaspook

2009年8月27日加入
8216年
http://www.ganssle.com/debouncing-pt2.htm
指南去Debounce - Part 2,或,如何Debounce一个接触在两页容易,由杰克甘塞尔

https://www.eejournal.com/article/ultimate-guide-to-switch-debounce-part-6/

我知道这是关于软件脱扣,但对于用于工业任务的控制器电路,我建议在关键I/O上使用硬件脱扣芯片,以从控制器输入中消除触点反弹。像MAX6818八进制开关脱扣器这样的芯片被设计为使用单个IOC中断接口8个脱扣输入,这有助于简化基于事件的处理并消除基于计时器的轮询延迟。
https://www.mouser.com/datasheet/2/256/max6816-1514440.pdf.

一个我需要检查输入输出功能的芯片。
https://www.ti.com/lit/ds/symlink/tic12400-q1.pdf
最后的编辑: