Ich habe kürzlich einen Artikel über das Entprellen von Schaltflächen gelesen und mich gefragt, ob ich dies berücksichtigen sollte, wenn ich zum Beispiel mit einem Arduino (ATMega mC) arbeite. Ich gehe davon aus, dass dies ein Problem ist, insbesondere bei der Arbeit mit Interrupts.
Ist es also besser, einen Sprung im Code zu erkennen, oder sollte dies mit Hardware behoben werden? Bitte erläutern Sie.
Antworten:
Ich würde wärmstens empfehlen, ein Oszilloskop (hoffentlich haben Sie eines oder können eines in die Hände bekommen) an Ihren Schalter anzuschließen. Ich habe ein Studentenprojekt gesehen, dessen Schalter einen Sprung von 5 V auf -5 V auf 4 V auf -3 V und dann auf 2 V und dann wieder auf 0 V aufwies. Als wir uns die aktuelle Auslosung eines Zielfernrohrs anschauten, gab es einige sehr, sehr große Spitzen.
In seinem speziellen Fall war es sehr, sehr wichtig, dass er seinen Schalter in Hardware entlarvte.
Auf der anderen Seite habe ich jedoch Schalter gesehen, die einen viel geringeren Effekt haben, der einfach in der Software entfernt werden könnte.
Sie müssen jedoch Ihre Optionen abwägen. Wenn Sie eine sehr komplexe Menge an Firmware haben, lohnt es sich möglicherweise nicht, den Overhead sowohl für Sie als Programmierer als auch für die CPU-Auslastung zu erhöhen, und Sie sollten nur ein wenig Hardware hinzufügen. Wenn Sie jedoch versuchen, Kosten und Größe zu senken, sollten Sie so viel Hardware wie möglich entfernen und alles in der Firmware tun, wenn Sie können.
quelle
Wenn Sie ein professioneller Elektronikdesigner sind, besteht die Möglichkeit, dass Ihr Chef Sie nicht einmal in Hardware arbeiten lässt. Der Grund ist einfach: Wenn Ihre Produktionscharge groß genug ist , ist die Software praktisch kostenlos , während die Hardware für jede produzierte Einheit bezahlt werden muss. Und während Widerstände und Kondensatoren spottbillig sind, kann die Montage auf einer Leiterplatte das 20-fache ihres Kaufpreises kosten.
Unabhängig davon, ob Sie in Software oder in Hardware debounten, müssen Sie dennoch hochwertige Drucktasten auswählen. Der berüchtigte 157ms-Knopf aus dem Artikel ist einfach nicht für irgendeine Anwendung geeignet.
Normalerweise probiere ich die Taste in Intervallen von 32 ms aus , was ausreicht, um die Entprellzeit einer guten Taste zu überbrücken. Ich bin ein ziemlicher Fan der Alps SKQG TACT Switches.
Bei den wenigen Geräten, die ich getestet habe, betrug die anfängliche Bounce-Zeit weniger als 10 ns. Während es eine Lebensdauer von 100 000 Zyklen hat testeten wir es für 200 000 Zyklen und selbst dann war die 32ms debounce ausreichend. (Ich denke, ich hätte den tatsächlichen Grad der Entprellung messen sollen, aber unser Hauptinteresse war zu diesem Zeitpunkt das Verhalten des Endprodukts. Wir haben es jedenfalls außerhalb der Spezifikation verwendet.)
Wenn Sie wirklich eine Hardwarelösung wünschen, empfehle ich die im Artikel erwähnte SR-Flip-Flop-Lösung als technisch beste Lösung:
Das Flip-Flop kann mit einem Doppel-NAND-Gatter aufgebaut sein , das beispielsweise in einem kleinen VSSOP8-Paket erhältlich ist. Der Hauptnachteil dieser Lösung besteht darin, dass Sie einen SPDT-Druckknopf benötigen, bei dem SPST viel häufiger verfügbar ist.
quelle
Es gibt viele (und viele) verschiedene Möglichkeiten, Schaltflächen zu entprellen. Ob Sie dies in Software oder Hardware tun, hängt von Ihren Projektanforderungen und dem Switch-Typ ab.
Hier einige Links zu verschiedenen Methoden:
http://www.ganssle.com/debouncing.htm
http://hackaday.com/2010/11/09/debounce-code-one-post-to-rule-them-all/
quelle
Dieser Artikel ist die "Bibel" beim Entprellen. Kontaktsprung kann bei jeder Anwendung ein Problem sein.
Im Allgemeinen ist es am besten, Schalter in der Software zu entprellen, da sich die Verzögerungen für bestimmte Schalter leichter anpassen lassen, da sie sich in der Größe der Kontaktprellen unterscheiden. Auch das Entprellen der Schlüsselfreigabe ist häufig erforderlich. Die Hersteller von Switches geben häufig den Bounce-Wert für ihre Produkte an. Dieser liegt in der Regel bei 10 ms bis 20 ms.
quelle
Switch Bounce kann einige zehn Millisekunden dauern. Wenn Sie einen Switch von einer Interruptroutine abfragen, die auf einem Timer ausgeführt wird, ist das Bounce kein Problem, denn selbst wenn Sie den Switch mitten in einem Bounce-Sturm abfragen, erhalten Sie entweder sofort den neuen Status , oder im schlimmsten Fall erhalten Sie den alten Zustand und sehen Sie den neuen Zustand erst bei der nächsten timergestützten Abfrage. Das Abrufen von einem solchen zeitgesteuerten ISR stellt eine Form der Software-Entprellung dar.
Wenn Sie diesen Schalter jedoch verwenden, um den Interrupt auszulösen, und Sie erwarten, dass die Interrupt-Serviceroutine in weniger als 10 Millisekunden schnell ausgeführt wird, müssen Sie die Hardware entprellen. Andernfalls kann ein Switch-Ereignis zu einer zufälligen Anzahl von führen unterbricht, und sicherlich oft mehr als man erwartet. Wenn die Interruptroutine jedoch lange genug ausgeführt wird, hat sich der Switch Bounce eingestellt, bevor die ISR beendet ist, und es würde Ihnen nichts ausmachen, aber die meisten gut konstruierten ISRs dauern nicht allzu lange.
quelle
Der beste Weg, etwas zu tun, ist der Weg, der am besten zu Ihnen passt. Wenn Sie jedoch bereits über einen Mikrocontroller verfügen, können Sie die Software nur mit einem gewissen Codeaufwand entpacken.
Der einfachste Weg, in der Software zu debounten, besteht darin, die Schaltflächen zu Zeitpunkten zu überprüfen, die weiter voneinander entfernt sind als die längste Bounce-Zeit. 50 ms scheinen eine Obergrenze für die Bounce-Zeit von "normalen" Switches zu sein. Wenn Sie also Ihre Software wie folgt anordnen können, sind Sie im klaren:
quelle
Ein Ansatz zum Entprellen, der noch nicht erwähnt wurde, ist die Verwendung eines Umschalters mit zwei Schaltern, von denen einer mit VDD und der andere mit Masse verbunden ist. Führen Sie das in einen Stift ein, der (entweder über Software oder Hardware) schwach in seinen gegenwärtigen Zustand gezogen wird. Ein solcher Ansatz bietet die Vorteile eines Double-Throw-Schalters, erfordert jedoch nur einen E / A-Pin anstelle von zwei.
quelle