Entprellen durch Ignorieren von Daten?

7

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.

Sneftel
quelle

Antworten:

4

Ich würde ein bedingtes Ja anbieten .

Ihr vorgeschlagener Ansatz setzt nette, saubere Signale voraus. Wenn Sie Rauschen auf der Spur wahrnehmen, laufen Sie Gefahr, auf fehlerhafte Informationen zu reagieren.
Beispiel: Wenn das Signal beim Abfragen des Eingangs eine Spannungsspitze aufweist, lesen Sie eine 1in Ihrem Programm. In Ihrem Vorschlag würden Sie davon ausgehen, dass der Schalter gedrückt wurde (wenn dies wirklich nicht der Fall war), bis Sie die Eingabe nach Ihrem "Entprellungsintervall" erneut abgefragt haben. An diesem Punkt stellen Sie fest, dass der Schalter wirklich nicht gedrückt wurde.
Für die Dauer des "Entprellungsintervalls" setzen Sie Ihr Programm fort, wobei Sie vermutlich auf die fehlerhafte Information reagieren, dass der Schalter gedrückt wurde.

Grundsätzlich kommt es darauf an:
Wovor wollen Sie sich schützen?
Was ist das Schlimmste, was passieren kann, wenn Sie sich irren?

Wenn Sie ein batteriebetriebenes Kinderspiel in einer Plastikbox bauen, gibt es wahrscheinlich nicht viel elektrisches Rauschen, um Ihre Eingaben zu vermasseln. Ihr vereinfachtes Entprellen wäre also in Ordnung.
Wenn sich dieser Teil des lebenserhaltenden Geräts jedoch in einem Krankenhaus befindet, möchten Sie möglicherweise eine etwas robustere Logik zum Entprellen von Eingaben verwenden.

Adam Head
quelle
Macht Sinn. Der beste Ansatz könnte also ein hybrider sein - eine kurze "Muss alle zustimmen" -Periode, gefolgt von einer längeren "Sperr" -Periode.
Sneftel
@Sneftel Sicher; Es ist nur eine Frage von "Was versuchst du herauszufiltern?"
Adam Head
2

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.

Spehro Pefhany
quelle
Haben Sie eine Referenz für die Aussage, dass der Sprung auf weniger als 5 ms begrenzt ist? Ich erinnere mich, dass es viel länger dauern kann.
Joe Hass
Ich habe die Erfahrung gemacht, dass bei kleinen Schaltern (z. B. Taktschaltern) von generischen asiatischen Lieferanten dies ausreicht. Ich habe drei mit maximalen Spezifikationen nachgeschlagen, zwei sagten <1 ms, einer sagte <3 ms ein / 8 ms aus. 5 ms ist die Garantie für die von uns verwendeten mechanischen Encoder. Ich bin sicher, wenn Sie es versuchen würden, könnten Sie ein Gegenbeispiel finden, zum Beispiel einen großen Schnappschalter, aber bei einem Schalter ist eine Verzögerung von 20 ms noch weniger auffällig als bei einem Schalter vom Typ "Tastatur". "One Size Fits All" Maxim-Debouncer verwenden 20 ms. Wenn die Entprellverzögerung bis zu 50 ms ansteigt, wird dies auf einer Tastatur deutlich.
Spehro Pefhany
2

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?)

Wouter van Ooijen
quelle