Bei allen Software-Debouncing-Routinen, die ich gesehen habe, muss gewartet werden, bis einige aufeinanderfolgende Lesevorgänge eines Signals 0 oder 1 zurückgeben. Das ist natürlich sinnvoll. Dies bedeutet jedoch, dass ein unvermeidlicher Kompromiss zwischen Robustheit und Latenz besteht. Je mehr Messwerte Sie benötigen, um eine Änderung des Pegels zu akzeptieren, desto länger ist die Antwortzeit.
Es scheint eine einfache Alternative zu sein, die Eingabewerte für eine bestimmte Zeit nach einer Flanke einfach zu ignorieren. Wenn der Switch 0 gelesen hat und dann eine einzelne Abfrage eine 1 zurückgibt, interpretieren Sie dies als logische 1 für die Dauer der erwarteten Absprungperiode. Ebenso beim Übergang von 1 nach 0.
Offensichtlich würde dies immer noch die maximale Eingaberate begrenzen. Aber es würde auch die Latenz für einen einzelnen Tastendruck auf nahezu Null senken, selbst für extrem lange Entprellzeiten.
Gibt es Probleme mit diesem Ansatz? Es scheint ein offensichtlicher Ansatz für das Entprellen von Software zu sein, daher bin ich überrascht, dass es nicht verwendet zu werden scheint.
Ja, es wird funktionieren.
Der herkömmliche Ansatz hat den Vorteil, dass er auch Rauschen zurückweist.
Normalerweise ist die mechanische Sprungkraft auf begrenzt≤ 5 ms, also glaube ich nicht, dass Sie den Unterschied in der scheinbaren Reaktionszeit sehen würden.
quelle
Das würde natürlich funktionieren. Aber es kann noch einfacher sein: Ich entprelle immer, indem ich die Pins im Abstand von mindestens 50 ms lese. Einfach und effektiv.
Dies führt in der Tat zu einer Latenz von bis zu 50 ms. Ich glaube nicht, dass ein Mensch den Unterschied bemerken wird. (Wie weit fährt ein Druckknopf in 50 ms?)
quelle