Taster

Taster als Eingabeelemente für den Mikrocontroller

Um einem Mikrocontroller "etwas mitzuteilen" bietet sich ein Taster als einfaches Eingabeelement an. Ein Taster schließt (oder öffnet) beim Tastendruck einen Kontakt, was der Mikrocontroller registriert.

Schaltplan

Pulldown-Widerstand

Eine Möglichkeit ist es, den Eingang des Mikrocontrollers beim Tastendruck mit HIGH-Pegel zu verbinden. Ein solcher Eingang am Mikrocontroller wird als high-active bezeichnet. Die Aktion wird durch den HIGH-Pegel ausgelöst.

Zunächst ergibt sich jedoch ein Problem, wenn der Taster nicht betätigt ist: Der Pegel am Eingang ist in diesem Fall undefiniert.

Diese Problematik umgeht man, indem man den Eingang des Mikrocontrollers durch einen zusätzlichen Pulldown-Widerstand gegen Masse zieht. Das Potential des Eingangs ist nun auch bei unbetätigtem Taster definiert.

Schaltplan

Pullup-Widerstand

Eine andere Möglichkeit ist es, den Eingang des Mikrocontrollers beim Tastendruck mit LOW-Pegel zu verbinden. Ein solcher Eingang am Mikrocontroller wird als low-active bezeichnet. Die Aktion wird durch den LOW-Pegel ausgelöst.

Auch hier hat man wiederum das Problem des undefinierten Eingangspegels bei unbetätigtem Taster.

Diese Problematik umgeht man, indem man den Eingang des Mikrocontrollers durch einen zusätzlichen Pullup-Widerstand auf HIGH-Pegel zieht. Das Potential des Eingangs ist nun auch bei unbetätigtem Taster definiert.

Interne Pullup-Widerstände

Einige Mikrocontroller bieten die Möglichkeiten, Eingangspins so zu programmieren, dass ein interner Pullup-Widerstand zugeschaltet wird. Der Pin ist dann low-active, man kann aber den Taster direkt mit dem Pin verbinden und spart externe Bauteile.

Moderne Mikrocontroller bieten oft eine ganze Palette an Möglichkeiten. Beispielsweise die Wahl zwischen internen Pullup- oder Pulldown-Widerständen oder eine einstellbare Ansprechgeschwindigkeit der Inputs bzw. Schmitt-Trigger-Eingänge (zum hardwareseitigen Entprellen).

Tastenprellen

Oszillogramm: Tastenprellen (bouncing switch)

By The original uploader was Arctanx at German Wikipedia. - Own work (Original text: Selbst erstellt), Public Domain, Link

Tastenprellen

Bei allen mechanischen Schaltern oder Tastern tritt beim Schaltvorgang das sogenannte Tastenprellen (bouncing) auf. Aufgrund der mechanischen Eigenschaften schließen und öffnen die Kontakte mehrmals beim Ein- und Ausschalten. Dies kann bei digitalen Schaltungen zu fehlerhaftem Verhalten führen. Deshalb sollten Taster und Schalter, die als Eingabe für digitale Schaltungen dienen, entprellt werden.
Dies kann hardwareseitig oder softwareseitig erfolgen.

Softwareseitiges Entprellen von Tasten

Beim softwareseitigen Entprellen von Tasten fügt man eine kurze Wartezeit hinzu, sobald ein Tastendruck registriert wurde. Eine Wartezeit von einigen Millisekunden ist normalerweise ausreichend. Dies hängt jedoch stark vom verwendeten Taster ab.
Dabei ist jedoch auch zu bedenken, dass die Wartezeit die Ausführung des Programms verlangsamt. Zu lange Wartezeiten sind daher in den meisten Fällen nicht sinnvoll.

Programmierung einer Taster-Abfrage

Zunächst scheint die Programmierung einer Taster-Abfrage einfach zu sein. Ein als Input definierter Pin, an den der Taster angeschlossen ist wird per Software abgefragt. Das Ergebnis der Abfrage steuert den weiteren Programmablauf.

Doch ganz so einfach ist es nicht!

Um externe Bauteile zu sparen, versucht man Pullup oder Pulldown-Widerstände zu vermeiden. Man muss also zuerst im Handbuch des Mikrocontrollers recherchieren ob und wie interne Pullup oder Pulldown-Widerstände aktiviert werden können. Entsprechend der Möglichkeiten des Mikrocontrollers ist der Eingang dann high-active oder low-active.

Funktionsweise Taster

Festlegen der Funktionsweise eines Tasters

Warten auf einen Tastendruck

Das Warten auf einen Tastendruck ist eine Aufgabe, die häufig vorkommt. Das klassische Beispiel ist die Start-Taste.

Sie ist auch relativ einfach mit einer while-Schleife zu lösen. Dabei wird die Schleife so lange ausgeführt, bis die Taste betätigt wurde.
Darüber hinaus ist es möglich in der Schleife weitere Aufgaben zu erledigen, solange sie nicht zu lange dauern (max. 10 ms).

Eine andere Möglichkeit, einen Tastendruck abzufragen, ist eine interruptgesteuerte Abfrage.

Funktionsweise Taster

PAP: Warten auf einen Tastendruck

Häufig ist es angebracht, ein Delay nach der Aktion, die durch den Tastendruck ausgelöst werden soll, einzuführen. Dies dient nicht nur dem Entprellen der Taste. Vielmehr wird dadurch ein unbeabsichtigtes, wiederholtes Ausführen der Aktion verhindert. Denn wenn der gesamte Programmcode kurz ist, kann es durchaus sein, dass dieser mehrere hundert oder tausend Mal pro Sekunde durchlaufen wird. Ein Delay von 100 bis 200 ms Länge verhindert ungewünschte Aktionen des Mikrocontrollers.
Abfrage eines Tasters mit anschließendem Delay

PAP: Warten auf einen Tastendruck mit anschließendem Delay.

Mehrere Tasten auswerten

Prinzipiell kann man beim Auswerten mehrerer Tasten ähnlich wie bei nur einer Taste vorgehen:
Man wartet auf einen Tastendruck und wertet dann aus, welche Taste gedrückt wurde. Dies ist verhältnismäßig einfach, wenn nur eine der Tasten gedrückt werden darf.

Allerdings wird das Auswerten mehrerer Tasten schnell zu einem komplexen Problem, wenn man beispielsweise zulässt, dass mehrere Tasten gleichzeitig gedrückt werden dürfen. Hier muss man genau berücksichtigen welche Aktionen erlaubt sein dürfen und mit welchen Delays gearbeitet werden muss.
In diesem Fall lohnt sich die Erstellung eines detaillierten Programmablaufplans.

Abfrage eines Tasters mit anschließendem Delay

PAP: Auswerten mehrerer Taster mit anschließendem Delay.