Input-Buttons

Veröffentlicht von

Inhalte

In diesem Beitrag wird die Anwendung von Tastern (engl. push buttons) als simpleste Form einer Benutzereingabe vorgestellt.

Vorraussetzungen

  • Alle bisherigen Übungen
  • Taster (Buttons)
  • Widerstände
  • LEDs

Einführung Taster

Taster werden benutzt um den Stromfluss in einem Leiter zu schließen bzw. zu unterbrechen. Sehr viele elektronische Geräte verwenden Taster um Benutzereingaben zu ermöglichen, etwa um eine bestimmte Funktion zu aktivieren. Im Gegensatz zu einem Schalter wird bei einem Taster der Stromkreis nur solange geschlossen (bzw. unterbrochen), solange der Taster betätigt wird. Im Gegensatz dazu behält ein Schalter seinen Zustand, auch wenn er losgelassen wird.

Schalter und Taster

schalter_taster_Schaltplan
Schaltplansymbole für Schalter und Taster

Taster als Eingabegeräte

Taster haben nur die Eigenschaft, dass sie einen Stromkreis unterbrechen. Will man sie als Eingabegerät verwenden, so muss diese Unterbrechung des Stromkreises mit einem Sensor erkannt werden.

Am Arduino können die digitalen Pins als Sensor konfiguriert werden, indem man den Pin als INPUT definiert.

pinMode(PINNUMMER, INPUT);

Als Input definiert kann man von einem Pin die anliegende digitale Spannung auslesen. Dies bedeutet, dass genau zwei Zustände abgelesen werden können

  • HIGH (bzw. 1): Spannung über einem gewissen Niveau liegt an diesem Pin an
  • LOW (bzw. 0): Spannung unter einem gewissen Niveau liegt an diesem Pin an

Anmerkung: Mikrocontroller und digitale Schaltungen werden mit einer definierten Spannung betrieben. Das Arduino UNO wird mit 5V betrieben, viele andere Mikrocontroller verwenden 3.3V. Normalerweise entspricht die Betriebsspannung der Spannung die notwendig ist um den Zustand HIGH auszugeben. LOW liegt hingegen bei 0V. Am Arduino hat der GND Pin (engl. Ground, dt. Masse) immer 0V.

Spannungen zwischen diesen Zuständen sind im digitalen Bereich nicht definiert (auch bezeichnet als undefined bzw. floating). Je nach Eigenschaft der Schaltung gibt diese dann HIGH oder LOW aus. Da man nicht vorhersagen kann welcher Zustand Eintritt ist im Normalfall nicht wünschenswert.

Beispiel 1

Laden Sie folgenden Code auf das Arduino:

In diesem Beispiel wird der elektrische Zustand an Pin 6 (definiert als INPUT) gemessen und anschließend wir der Zustand auf Pin 13 (definiert als OUTPUT) übertragen. Die LED an Pin 13 dient für uns als Ausgabe des an Pin 6 gemessenen Wertes.

Probieren Sie nun folgendes mit einem Kabel aus:

  1. Verbinden Sie Pin 6 mit dem 5V Pin am Arduino: Die LED sollte nun auf jeden Fall leuchten, da Pin 6 nun den Zustand HIGH hat.
  2. Lösen Sie die Verbindung von Pin 6: Da Pin 6 als Sensor agiert und keine Verbindung mit einem anderen Pin hat, ist sein Zustand nun floating. Messen kann der Pin aber nur die digitalen Zustände HIGH oder LOW. Dementsprechend leuchtet die LED oder auch nicht. Wir können dies aber nicht vorhersagen, beides ist möglich.
  3. Verbinden Sie Pin 6 mit GND: An Pin 6 liegen nun auf jeden Fall 0V an. Der Zustand ist also sicher LOW und LED leuchtet sicher nicht.

Möglicherweise ist der Unterschied zwischen dem 2. und dem 3. Fall nicht gleich erkennbar. Beim Design von elektronischen Schaltungen sollte aber dennoch unbedingt verhindert werden, dass ein Sensor-Pin in einen undefinierten Zustand kommt. Man baut Schaltungen daher so, dass entweder HIGH oder LOW am Pin anliegt.

Verhindern von undefinierten Zuständen:
PullUp/PullDown Widerstände

Beispiel 1 demonstrierte mit Kabeln, wie an einem Pin zwischen einem definierten Zustand (HIGH bzw. LOW) und einem undefinierten Zustand gewechselt werden kann. Wir bauen zunächst Beispiel 1 erneut auf, dieses Mal mit einem Taster und einem Steckbrett. Zunächst wird die schlechte Praxis mit dem floating Zustand analysiert.

no_pullup_Schaltplan
Schlechte Praxis! Taster ist nur mit dem Sensor und der Spannungsquelle verbunden.
no_pullup_Steckplatine
Schlechte Praxis! Taster ist nur mit dem Sensor und der Spannungsquelle verbunden, daher ist der Sensorpin 6 im floating Zustand

Anmerkung: Der Taster hat üblicherweise 4 Füßchen, allerdings werden immer nur zwei mit bei einem Tastendruck miteinander verbunden.

In diesem Beispiel hat der Sensor-Pin 6 entweder eine Verbindung mit dem 5V Pin (wenn der Taster gedrückt wird) oder nicht (wenn der Taster nicht gedrückt wird). Im ersten Fall ist der Zustand definiert (5V), im weiten nicht (keine Verbindung, daher floating). Undefinierte Zustände sind unerwünscht. Wir bedienen uns daher einem Trick und bauen die Schaltung ein wenig um.

Beispiel 2: Externe PullUp-Widerstände

In diesem Beispiel wird gezeigt, wie die Schaltung in beiden Fällen (Taster gedrückt und nicht-gedrückt) einen definierten Zustand (HIGH oder LOW bekommt).

pullup_extern_Schaltplan pullup_extern_Steckplatine

Der in die Grafik eingefügte Widerstand erfüllt einen wichtigen Zweck: Er verhindert, dass der 5V Pin direkt mit dem GND Pin verbunden wird. Dies würde einem Kurzschluss entsprechen, der das Arduino möglicherweise zerstören würde.

In dieser Schaltung können wir nun zwei Fälle unterscheiden

  • Taster ist nicht gedrückt:
    In diesem Fall ist keine Verbindung zwischen dem 5V Pin und dem GND-Pin gegeben. Am Widerstand fällt daher kaum Spannung ab, sodass hinter dem Widerstand ebenfalls eine Spannung von 5V gemessen wird. Pin 6 misst daher den Zustand HIGH.
  • Taster ist gedrückt:
    Es existiert nun eine Verbindung zwischen 5V und GND. Da der Taster geschlossen ist fällt nun am Widerstand die volle Spannung von 5V ab. Pin 6 misst daher den Zustand LOW.

Egal ob nun der Taster gedrückt wird oder nicht, existiert kein undefinierter Zustand mehr. Der Widerstand in dieser Schaltung wird als Pull-Up Widerstand bezeichnet, da er die Spannung bei offenem Taster nach oben auf sein Niveau zieht.

Interne PullUps

Das Schema von PullUp-Widerständen wird in Schaltungen, gerade für Taster, sehr oft benötigt. Viele Mikrocontroller haben daher einen flexibel zuschaltbaren PullUp Widerstand bereits im Chip an den I/O-Ports eingebaut, sodass man auf einen externen Widerstand verzichten kann. Die Komplexität des Schaltungsaufbaus wird daher erheblich reduziert.

Beispiel 3: Interner Pullup

Aktiviert wird der interne Pullup-Widerstand wiefolgt:

Das gleiche bewirkt übrigens folgende Konfiguration:

Am entsprechenden Pin liegt nun die Betriebsspannung an. Allerdings kann man diesen Pin ohne weiters auf Masse ziehen (also mit GND verbinden), ohne das ein Kurzschluss ausgelöst wird. Der interne PullUp Widerstand hat einen Wert von 20 KΩ.

pullup_intern_Schaltplan
Die Prozessoren der Arduino haben an den Pins interne PullUp-Widerstände, die bei Bedarf zugeschaltet werden können.

Diese Konfiguration ist also hervorragend geeignet um externe Taster als Benutzerinput zu verwenden.

Problem: Bouncing von Tastern und Schaltern

Das Problem des Contact-Bounce von Tastern und Schaltern wird hier genauer beschrieben und behandelt.

Zusammenfassung

Digitale Eingänge werden verwendet um digitale Spannungen zu messen. Diese Spannungen sollten den Wert LOW oder HIGH annehmen, wobei Spannungswerte dazwischen undefiniert sind. Pins, die mit keinem definierten Spannungsniveau verbunden sind bezeichnet man als floating.

Um einen Taster als Eingabemöglichkeit an einem Input anzuschließen, sollte eine Schaltung mit PullUp-Widerstand verwendet werden. Das Arduino verfügt einen internen PullUp-Widerstand, der mit der Konfiguration INPUT_PULLUP  aktiviert werden kann.

Aufgaben

  • Bauen Sie die Beispiele 1, 2 und 3 nach und verinnerlichen Sie sich die Konzepte. Sie sollen fähig sein externe und interne PullUps ohne fremde Hilfe aufzubauen und zu verwenden.
  • Finden Sie heraus, was ein PullDown Widerstand ist.
    • Worin unterscheidet er sich von einem PullUp-Widerstand?
    • Wie würde ein Taster mit einem externen PullDown-Widerstand aufgebaut werden?

Weiterführende Links

  • http://playground.arduino.cc/Deutsch/Eingang
  • https://www.arduino.cc/en/Tutorial/DigitalPins

 

 

2 Kommentare

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.