Ich brauche Hilfe beim Entprellen eines Druckknopfes

Ich versuche, einen Knopf zu entprellen. Hier ist mein bisheriges Ergebnis nach dem Platzieren eines 1uF-Keramikkondensators parallel zum Taster:Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Dies sollte als Eingang zu meinem Arduino 5V funktionieren, da es High hat: U > = Vht = 3,0 V und Low: U <= Vlt = 1,5 V.

Ich denke, das bedeutet, dass mein Arduino einen Schmitt-Trigger an seinen Eingangspins hat?

Ich möchte mein Triggersignal an einen anderen digitalen Eingang senden (einen Framegrabber, der mit der Aufnahme von Bildern bei steigender Flanke beginnt und bei fallender Flanke stoppt) und ich weiß nicht, ob er einen Schmitt-Trigger an seinem Eingang hat.

Ich suche daher nach einem Schmitt-Trigger-IC, der mein Signal TTL 5V digital aufräumen und machen kann.

Können Sie einen solchen IC empfehlen, der DIP (nicht oberflächenmontiert) ist und in kleinen Mengen gekauft werden kann?

Ich glaube, ich verstehe, wie ich mit dem Arduino entprellen könnte, indem ich die Zeit von der steigenden Flanke messe und dafür sorge, dass eine fallende Flanke nicht zu früh danach geliefert wird.

Ich würde es jedoch vorziehen, dies in Hardware für die Lernerfahrung zu tun. Es sei denn, das Software-Entprellen ist irgendwie besser als das Hardware-Entprellen.

Sie können in der Firmware entprellen.
Ihr Eingang hat keinen Schmitt-Trigger, er hat nur ein Band, in dem der Eingangszustand nicht als stabil gilt. Wie von Eugene erwähnt, ist es immer eine gute Idee, das Entprellen in Software durchzuführen.
Um in den Refrain "Debounce in Software" einzustimmen, ist die einfachste Methode, wenn der Druckknopf zuerst als aktiviert erkannt wird (normalerweise ist er aktiv niedrig), dann eine Zeitschleife starten und 2 oder 3 ms warten. Wenn der Schalter nach Ablauf der Zeitschleife immer noch als aktiviert erkannt wird, zählen Sie dies als einzelnes Schalter-Aktiv-Ereignis. Überwachen Sie dann den Schalter auf Freigabe. Und entprellen Sie auch die Schalterfreigabe.
Schlagen Sie vor, dass ich mein Triggersignal in mein Arduino sende und hier das Entprellen in Software implementiere? Ich habe dies berücksichtigt. Dies bindet jedoch mein Arduino, das ich für andere Dinge verwenden möchte.
Nun, es gibt wiedereintretende Codierung. was bedeutet, dass Sie Ereignisse mit einem Zeitstempel versehen müssen. Was macht Ihre Hauptereignisschleife, dass sie sich nicht die Mühe machen kann, die Schaltflächen und Steuerelemente zu beobachten?
Ich habe gerade schnell gegoogelt und in diesem Artikel steht, dass die längste Bounce-Dauer 6,2 ms beträgt. das kommt mir schrecklich lang vor. Die durchschnittliche Sprungdauer betrug 1,6 ms, was meiner Erinnerung entspricht.
Es ist keine gute Idee, einen mit 1 uF geladenen Kondensator kurzzuschließen - verwenden Sie einen 100-Ohm-Kondensator in Reihe.
Ich denke wirklich, Sie sollten einen 10K-Pullup-Widerstand an eine 0,01-uF-Kappe anschließen, die an Masse geht, und Ihren Tastschalter über die Kappe anschließen. Die Spannung ist also normalerweise hoch und das Drücken des Knopfes bringt sie auf Masse. das ist "aktiv niedrig" und die normale Vorgehensweise. manchmal lassen sie die Kappe weg, was das Entprellen noch wichtiger macht.
@ Andy aka: Ich habe einen 150-Ohm-Widerstand und eine LED in Reihe mit dem Kondensator / Schalter.
150 Ohm ist viel zu kleiner Widerstand. Das ist Elektronik , kein Netzschalter.
@ Andy der HC126 hat keinen Schmitt-Trigger-Eingang. Suchen Sie stattdessen nach Schmitt-Trigger-Chips. Ich muss zustimmen, dass das Kurzschließen eines 1uF-Kondensators mit einem Druckknopf keine sehr gute Idee ist, da er sich schließlich durch die Multi-Ampere-Stöße abnutzen könnte.
Ich würde denken, dass der Strom durch den Kondensator auf 33 mA begrenzt wäre. Ich denke, meine Erklärung war nicht klar, also habe ich ein Diagramm hinzugefügt.
@justme: Ich scheine nur invertierende oder Nand-Schmitt-Trigger-ICs zu finden. Könnte ich zB SN74HC14N verwenden und mein Signal "zweimal" durchlaufen lassen, um die Invertierung zu negieren?
Ich empfehle immer das Entprellen in der Firmware statt in der Hardware. Eine sehr einfache Möglichkeit besteht darin, den io-Pin nur alle 100 oder 200 ms zu lesen.
@mkeith: Warum ist das Entprellen in Software besser als in Hardware?
@Andy Das richtige Entprellen in HW kann eine Herausforderung sein. Außerdem erhöht das Hinzufügen von Komponenten zur PCB die Kosten und nimmt Platz auf der Platine ein. Wenn die FW entwickelt werden soll, um Bounces zu tolerieren (was sie sollte), dann ist es einfacher, alles einfach in FW zu erledigen.
@Andy Wenn 5 V über dem Kondensator liegen und Sie den Knopf drücken, gibt es nichts anderes als Knopf, Drähte und Kondensator selbst, um den Strom zu begrenzen. Es ist ein Kurzschluss. Wenn Sie HC14 verwenden, invertieren Sie zweimal oder kehren Sie die Taste um, sodass ein Wechselrichter benötigt wird. Und wenn Hardware-Entprellung nicht erforderlich ist, muss sie nicht durchgeführt werden, aber wenn einige Hardware empfindlich auf Prellen reagiert, muss sie entprellt werden. Das Lesen eines IO-Pins mit muss nicht entprellt werden. Das Generieren von Interrupts von der Drucktaste ist eine andere Sache.
Der Momentanstrom beim Kurzschließen eines 1-uF-Kondensators, der auf etwa 3 bis 5 Volt aufgeladen ist, beträgt 20 bis 50 Ampere. Das erzeugt EMI und kann bei einem schlechten Layout (und sogar einigen vermeintlich guten Layouts) einen Reset verursachen.
@ Andy aka: ok, ich glaube endlich, ich habe es verstanden. Wenn ich die Taste drücke, fließt Strom von einer Seite des Kondensators zur anderen durch die Taste. Die Lösung besteht also darin, wie Sie bereits erwähnt haben, 100 Ohm direkt nach dem Kondensator zu platzieren?
Eindeutig in Reihe mit dem Taster.
@Andy das ist kein guter Platz für den Widerstand. Wenn es eine kratzige Schalterverbindung gibt, hat die Kappe nicht viel Zeit, sich zu entladen, und die Oszilloskopsonde würde 5 V sehen, wenn der Knopf den Kontakt herstellt, und 0 V, wenn der Kontakt getrennt wird, und selbst ein Schmitt-Trigger gibt ein hüpfendes Signal aus.
74xx14, CD40106, xx4584, .... (xx = verschiedene) || Siehe Auswahlanleitung hier, ABER, tun Sie es in der Software :-)

Antworten (2)

Die alte Maxime „Garbage in, Garbage out“ klingt wahr. Selbst wenn es sich um einen "perfekten" Schalter handelt, möchten Sie immer noch überprüfen, ob die Eingabe Ihren Erwartungen entspricht. Das einmalige Lesen des Zustands bedeutet, dass Transienten wie ESD oder Blitzschlag als gültiger Tastendruck interpretiert werden können. Was wir wirklich tun möchten, ist, die Eingabe über einen bestimmten Zeitraum mehrmals zu lesen, um sicherzustellen, dass die Eingabe das ist, was wir denken. Je öfter wir es lesen, desto sicherer können wir uns sein. Wenn wir die Eingabe alle 10 ms lesen und zählen, wenn wir jedes Mal 5 gleiche Eingaben erhalten, ist die Wahrscheinlichkeit, dass sich der Schalter tatsächlich in einem bestimmten Zustand befindet, viel höher als wenn wir ihn ein- oder zweimal lesen. Dadurch wird auch ein mechanischer Schalter entprellt. Sie können diese Methode erweitern, um sicherzustellen, dass der Schalter für eine bestimmte Zeit aktiv ist, um die Auswirkungen von Vibrationen oder falschem Drücken herauszufiltern.

Im Allgemeinen sollten Sie alle Eingaben von der Außenwelt filtern – Transienten sind an der Tagesordnung. Ein Lesen eines GPIO ist eine Momentaufnahme von wenigen Nanosekunden - ein Transient kann den gelesenen Wert leicht "fotobomben". Dies ist auch ein Grund, warum Sie die Verwendung von Schaltern und externen Signalen bei externen Interrupts vermeiden sollten.

Was einen Vorschlag für ein Schmitt-Trigger-IC betrifft, so etwas wie ein 74HC14 ist ziemlich verbreitet.

Transienten sollten normalerweise nicht dazu führen, dass der Zustand des Eingangs vollständig von niedrig nach hoch oder umgekehrt übergeht. Ich habe es gesehen, aber nur, wenn eine lange Spur an einen Eingang ohne externen Pullup oder Pulldown angeschlossen war. Selbst dann hat das Hinzufügen eines kleinen Kondensators (wie 22pF) das Problem behoben.
Hängt von der Transiente ab und wie Sie darauf testen. Schon mal CE-Prüfung gemacht?
Ja. Während der ESD-Prüfung kann ein Eingang manchmal wechseln. Aber im Allgemeinen nicht, wenn es einen starken Pullup oder starken Pulldown hat oder wenn es einen Kondensator hat. Normalerweise ist es etwas schwach Angetriebenes, das übergeht. Oder etwas mit einem langen Draht. Ich denke immer noch, dass Sie den Fall etwas überbewertet haben, wenn Sie sagen: "Ein Transient kann den von Ihnen gelesenen Wert leicht "fotobomben". Aber ich habe keinen großen Streit mit dir. Ich stimme weitgehend dem zu, was du geschrieben hast.

Jede Hardwarelösung zum Entprellen beinhaltet eine bestimmte Zeitlatenz, welche Zeit T zwischen Tastendrücken wird als Prellen oder als zweites Drücken angesehen?

Sobald Sie diese Zeit T haben, besteht die einfachste Methode zum Entprellen darin, die Schaltfläche einmal alle T in der Software abzufragen.

Es gibt viele kompliziertere Schemata, die Sie im Internet finden können, die häufiger abtasten und Aufwärts- und Abwärtszähler implementieren, aber sie bieten Ihnen nicht wirklich viele Vorteile gegenüber der einfachsten Umfrage bei jedem T.

Tatsächlich ist es keine gute Idee, jedes Mal T abzufragen, da dies dazu führen kann, dass Ereignisse vollständig fehlen. Normalerweise möchten Sie das führende Ereignis sofort erkennen und dann alle nachfolgenden Eingaben für die Zeit T ignorieren . Eine Variation besteht darin, das Schließen zu erkennen, aber mit dem Handeln zu warten, bis die Taste für eine ganze Zeit T losgelassen wurde.
Wenn Sie alle 10 ms abfragen, machen Sie sich Sorgen, dass Sie ein Drucktastenereignis unter 10 ms verpassen? Wenn es weniger als 10 ms beträgt, ist es unwahrscheinlich, dass es sich um einen gültigen Tastendruck handelt.
@Kartman Wenn Sie alle 10 ms abfragen, besteht die Möglichkeit, dass dasselbe Ereignis mehrmals falsch gelesen wird. Sich vorzustellen, dass der Schalter schlecht entprellt und einen Interrupt im Code auslöst. Wenn Sie die Abfragezeit verlängern, erhöht sich die Wahrscheinlichkeit, dass ein Ereignis verpasst wird. Ich muss einen Kompromiss zwischen zwei finden. Aber immer noch ist dies eine grobe Methode.
@mituraj. Wenn Umfragen grob sind, was würden Sie vorschlagen, ist eine geeignetere Technik? Es wäre schlimmer, einen Interrupt vorzuschlagen - Sie möchten eine Reaktion unter einer Mikrosekunde für eine Eingabe, die von einer langsamen menschlichen Eingabe abgeleitet wird? Was ist mit EMV-Effekten?
Dies ist nicht der Ort, um darauf zu antworten. Chris hat in seinem Kommentar bereits eine zuverlässigere Methode erwähnt. Sie können darüber recherchieren, da es in der eingebetteten Codierung beliebt ist, mithilfe von Zählern/Schieberegistern zu entprellen.
@mituraj. Ich bin verwirrt. Die Sampling-Technik basiert auf DSP-Techniken, und Sie sagen, sie ist grob und unzuverlässig? Haben Sie Ganssles Arbeit gelesen?
Bei Tastern funktioniert das Polling alle 10 oder 50 ms in der Praxis gut. Fehlende Tastendrücke, die weniger als 50 ms dauern, sind kein Problem, da es sich um sehr flüchtige Tastendrücke handelt, die wahrscheinlich versehentlich erfolgt sind. Möglicherweise ist es für einen Gamecontroller wichtig, die Latenz zu reduzieren. Aber für viele normale Tasten ist es in Ordnung.