Microcontroller – Ein Leitfaden für Anfänger – Tasterentprellung verstehen

Mikrocontroller - Ein Leitfaden für Anfänger - Entprellen von Tasten verstehen

Lassen Sie uns das Entprellen von Tasten etwas genauer untersuchen. Die Bedeutung des Tastenentprellens sollte nicht unterschätzt werden. Tastenschalter sind eine der vielen Möglichkeiten, wie Menschen dem Mikrocontroller Eingaben geben können. Wenn eine Taste gedrückt wird, erwartet der Mensch eine Reaktion in irgendeiner Form, z. B. das Umschalten einer LED, ein Menü auf einem LCD (Bewegen von einem Menüpunkt zum nächsten), ein bewegungsgesteuertes Gerät (Bewegen und Anhalten) usw. Wenn eine Taste nicht auf irgendeine Weise entprellt wird, kann der Mensch ziemlich frustriert sein.

Das Entprellen von Tasten kann zu mehreren falschen Tastendrücken führen. Stellen Sie sich vor, Sie verwenden eine Taste zur Auswahl eines Menüpunkts. Da die Taste nicht entprellt ist, kann ein Klick dazu führen, dass das Menü einen oder mehrere Menüpunkte überspringt. Noch schlimmer ist es, wenn man versucht, einen bestimmten Punkt auszuwählen, und dieser ständig überspringt, wenn eine der Tasten betätigt wird, wodurch eine bestimmte Auswahl getroffen werden muss.

Um dieses Phänomen zu demonstrieren, enthält dieses Projekt zwei LEDs. Wenn eine Taste gedrückt wird, wechseln die LEDs zwischen einander. Ein Tastendruck schaltet die eine aus und die andere ein. Wenn die Taste losgelassen wird, kann dieser Vorgang erneut beginnen und dazu führen, dass die LEDs erneut wechseln, sobald die Taste gedrückt wird. Sie werden feststellen, dass die LEDs bei nur einem Tastendruck zweimal oder sogar öfter wechseln.

Ich werde zwei Wege zur Eliminierung des Entprellens zeigen. Die In-Circuit-Methode (Hardware) mit einem Kondensator und das Software-Entprellen. Die Hardware verwendet einfach einen Kondensator, um das Entprellen zu eliminieren, und die Software führt eine Variable ein, die das Vertrauensniveau des Tastenstroms von Einsen oder Nullen misst. Haftungsausschluss: Die Methode, die ich für das Hardware-Entprellen verwende, ist eine sehr einfache und "Arme-Leute"-Methode. Das Hauptproblem dieser Methode ist, dass die Spannung von 0 auf 5 V steigt, anstatt einer sofortigen oder instantanen Änderung. Dies kann das Signal in einen Bereich bringen, mit dem der Mikrocontroller nicht umgehen kann. Dieser Bereich ist der Bereich zwischen den Schwellenwerten von hohen und niedrigen Signalen, der zwischen 2 und 3 Volt liegt. Ich habe persönlich bei meinem Tastenentprellen kein Problem damit festgestellt. Wenn Sie dieses Ansteigen eliminieren möchten, verwenden Sie einen Schmitt-Trigger.

Im Video wird die Schaltung ohne Hardware-Entprellen auf dem Steckbrett zusammengeschlossen, damit das Problem erlebt werden kann. Zwei LEDs sind mit dem Mikrocontroller verbunden, beide an Port B, eine an Pin 0 und die andere an Pin 2. Beide Pins werden als Ausgang eingestellt, und da die LEDs grün sind, wird ein 330-Ohm-Widerstand für jede LED verwendet. Der Tastenschalter ist an Pin 1, an Port B, angeschlossen. Dieser Pin wird auf Eingabe und auf "High" (Pin auf "1") eingestellt. Für den ersten "Bounce"-Test werden wir keinen Kondensator über die beiden Leitungen der Taste legen.

Das Programm, das zwei LEDs umschalten lässt, wenn der Taster gedrückt wird, ist sehr einfach. Zuerst werden die Pins initialisiert: Pins, die zu den LEDs führen, werden im DDR (Data Direction Register) als Ausgang eingestellt. Eine der LEDs wird auf High geschaltet, so dass zu Beginn eine an und eine aus ist. Dann wird die Endlosschleife gestartet und der Code innerhalb dieses Blocks wird ausgeführt, bis der Mikrocontroller den Strom verliert. Innerhalb dieser Schleife wird der Pin, der mit dem Taster verbunden ist, ständig überprüft, um festzustellen, ob er gedrückt ist. Wenn er gedrückt wird und eine 1 anzeigt, prüft er, ob der Taster zuerst losgelassen wurde. Das ist wichtig, denn wenn wir diese Prüfung nicht haben, wird die Taste kontinuierlich umschalten, während sie gedrückt wird. Wir möchten, dass die Taste nur dann umschaltet, wenn sie gedrückt und dann losgelassen wird.

#include
int main(void)
{
DDRB |= 1 << PINB0; //Setzt die Richtung für den Ausgang an PINB0
PORTB ^= 1 << PINB0; //Schaltet nur Pin 0 an Port b um
DDRB |= 1 << PINB2; //Setzt die Richtung für den Ausgang an PINB2
DDRB &= ~(1 << PINB1); //Datendirektionsregister-Eingang PINB1
PORTB |= 1 << PINB1; //Setzt PINB1 auf eine High-Lesung
int Pressed = 0; //Initialisiert/Deklariert die Variable Pressed

while (1)
{
if (bit_is_clear(PINB, 1)) //Prüft, ob die Taste gedrückt ist
{
//Stellt sicher, dass die Taste zuerst losgelassen wurde
if (Pressed == 0)
{
PORTB ^= 1 << PINB0; //Schaltet LED in Pin 0 um
PORTB ^= 1 << PINB2; //Schaltet LED in Pin 2 um
Pressed = 1;
}
}
else
{
//Dieser Code wird ausgeführt, wenn die Taste nicht gedrückt ist.
Pressed = 0;
}
}
}

Wenn der Mikrocontroller programmiert ist und die Taste mehrmals gedrückt wird, ist es offensichtlich, dass die LEDs manchmal richtig und manchmal mehrmals bei nur einem Tastendruck umschalten. Fügen Sie den Kondensator hinzu und überprüfen Sie das Drücken der Taste und das Umschalten der LED erneut. Auf dem Oszilloskop, mit dem installierten Kondensator, entsteht ein allmählicher Spannungsanstieg, wenn die Taste gedrückt wird, im Gegensatz zu einer Reihe von auf- und absteigenden Spannungen, die durch ein Prellen der mechanischen Teile der Taste entstehen. Aber wenn die Taste losgelassen wird, zeigt sich, dass die Spannung eine direkte Änderung ist. Dies liegt daran, dass kein weiterer Kondensator zwischen der Taste und dem Mikrocontroller installiert ist.

Als Nächstes wird die Software-Entprellmethode untersucht.

Zurück zum Blog

Hinterlasse einen Kommentar

Bitte beachte, dass Kommentare vor der Veröffentlichung freigegeben werden müssen.