【问题标题】:Pushbutton Debounce按钮去抖
【发布时间】:2013-12-13 19:02:02
【问题描述】:

正如标题所暗示的那样,由于我不知道它的更正式名称,我的问题是当我按下 4X4 薄膜键盘中的按钮时,当它被按下时,它会向系统添加太多输入.这似乎是一个愚蠢的问题,但我不希望任何硬件组件摆脱这个问题。我的意思是,如果我有机会只使用 VHDL 编码来解决它,我会非常高兴。为了澄清我自己,我不想要任何类型的代码来完成这项工作。我要问的是我只想要一个方法名称开头。 (比如去抖动按钮)顺便说一句,我不想​​弄乱时钟,因为我已经划分了时钟以确定在键盘上按下了哪个按钮。但如果这是唯一的解决方案,那么我可以接受。

我想要的只是当用户不断按下键盘上的 4 等按钮时,它应该被视为一个输入,但如果用户再次按下它不是连续按下而是一次按下一个,那么它应该是添加另外4个系统。最后,我知道这个问题非常微妙,因为我没有提供任何代码。正如你很容易注意到的那样,我对所有这些东西都很陌生。所以,很抱歉给您带来不便。任何帮助将不胜感激,在此先感谢!

【问题讨论】:

  • 忘记提及我使用的是哪个 fpga。它是斯巴达式的 3E-100 Cp132。

标签: button synchronization push vhdl keypad


【解决方案1】:

您遇到的情况是由于所谓的按键弹跳,这基本上是按下和释放按键时信号电平的非常快速的变化。由于这些更改都被记录下来,因此会在您的案例中添加输入。

您将需要包含一种密钥去抖方法,例如在此link 中解释的方法。可以通过增加采样间隔来消除抖动,但更优雅的方法是拥有一个状态机,一旦注册,它就可以避免重新注册输入。这将达到预期的效果,即按住键并且仍然只注册一个输入。

【讨论】:

  • 感谢您的快速回复!这似乎是我正在寻找的答案。我得到了去抖动的基本想法,但代码似乎很复杂。例如,如果 DBx 为“1”,那么是否意味着按钮已消除抖动,或者换句话说,如果它为“1”,我可以安全使用它吗?
  • @user3100463 DBx 是信号x 的去抖动版本。因此,如果您使用链接中的Debounce 实体,只需将信号从键输入到Debounce 的输入,然后在之前使用x 的任何地方使用输出DBx。如果它帮助/解决了问题,请不要忘记投票/接受答案。
猜你喜欢
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 2014-10-09
  • 1970-01-01
相关资源
最近更新 更多