Taster am Mikroconroller, das musst du wissen!
von Edi · 15/05/2023
Das ist zu beachten bei der Verwendung von Taster
Es klingt sehr einfach einen Taster an einem Mikrocontroller anzuschliessen, aber es gibt hierbei einiges zu beachten, wenn man es richtig machen möchte. Diese Verbesserungen können auf alle mechanische Schalter und Taster angewendet werden, wie ein Tür oder Fensterkontakt.
Pull-up oder Pull-down Widerstände verwenden, um sicherzustellen, dass der Eingang auf einem bekannten Zustand gesetzt wird, wenn der Taster nicht gedrückt ist.
Taster Entprellen oder auch Debouncing genannt, dass Sicherstellt, dass nur eine einzige stabile Impulsflanke erzeugt wird.
Zu guter Letzt möchten wir noch feststellen, ob der Taster kurz oder lang gedrückt wird und darauf entsprechen reagieren. Gehen wir jetzt die einzelnen Punkte der Reihe nach durch.
Wenn ihr mehr über Pull-up und Pull-down Widerstände erfahren wollt, dann schaut hier vorbei.
Aufbau von mechanischen Taster
Die grundlegende Funktionsweise eines mechanischen Tasters beruht darauf, dass eine Feder eine bewegliche Kontaktkappe gegen einen feststehenden Kontakt drückt, um den Stromkreis zu schließen. Mechanische Taster gibt es in vielen verschiedenen Ausführungen und Größen, von winzigen Mikrotastern bis zu großen Industrieschaltern. Der grundlegende Aufbau bleibt jedoch in der Regel ähnlich, unabhängig von der Größe oder Form des Tasters.
Für unsere Mikrocontroller Projekte werden meist die tactile Buttons verwendet, die vier Anschlüsse haben. Damit haben wir vier Möglichkeiten den Taster anzuschliessen, zwei davon sind gespiegelt.
Das Taster rauschen
Das Rauschen an einem Taster entsteht aufgrund von elektromagnetischen Interferenzen (EMI), die durch benachbarte elektronische Komponenten oder Umgebungsbedingungen verursacht werden können.
Lasst uns jetzt ein praktisches Beispiel machen, in dem wir den Taster direkt an einem Eingang von unseren Arduino UNO hängen. Dadurch können wir den unerwünschten Effekt vom Taster rauschen sehen. Im Serial Monitor werden jetzt 0 aber auch 1 ausgegeben und jede 1 ist ein falscher Eingang der eine Funktion auslösen würde die nicht gewünscht ist.
const byte buttonPin = 5;
void setup() {
Serial.begin(115200);
pinMode(buttonPin, INPUT);
}
void loop() {
Serial.println(digitalRead(buttonPin));
}
Hardware Lösung
Abhilfe für dieses Problem schafft hier ein Pull-up oder Pull-down Widerstand, der den Eingang bei einem Pull-up Widerstand auf HIGH setzt und bei einem Pull-down Widerstand auf LOW.
Software Lösung
const byte buttonPin = 5; //D1
void setup() {
Serial.begin(115200);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
Serial.println(digitalRead(buttonPin));
}
Den Taster entprellen
Taster haben die Eigenschaft, nicht direkt in den nächsten Zustand zu schalten, sondern neigen dazu, ein paar mal hin- und her zu schalten, was auch bouncing genannt wird. Dieses Prellen dauert in der Regel nur sehr kurz, ca. 2–5 Millisekunden, das ist jedoch von vielen Faktoren abhängig und kann stark variieren. Ist die Umgebung staubig oder die Taster älter und verschmutzt, ist man mit 30 Millisekunden dennoch in einem praxisnahen Wert gut abgedeckt. Jeder Prellvorgang kann vom Mikrocontroller durch seine hohe Geschwindigkeit als Tastendruck interpretiert werden.
#include //Bounce2 von Thomas O Fredericks V2.71
const byte buttonPin = 5; //D1
Bounce2::Button button = Bounce2::Button();
void setup() {
Serial.begin(115200);
button.attach(buttonPin, INPUT_PULLUP);
button.interval(30); // 30 ms zum Entprellen
button.setPressedState(LOW); // Input = LOW bei gedrückten Taster
}
void loop() {
button.update(); // Bounce Instance update
if ( button.pressed() ) {
Serial.println("Taster ist gedrückt");
}
}