Flanken und Toggles

Veröffentlicht von

Inhalt

  • Flankenerkennung (engl. edge detection)
  • Toggle-Schalter

Einführung

Taster haben im Gegensatz zu Schaltern die Eigenschaft, ihren Zustand nur solange zu wechseln, solange man ihn betätigt (während ein Schalter auch nach der Betätigung den Zustand behält). Als Lichtschalter wäre er mit dieser Verwendung also ungeeignet (außer man will das Licht wirklich nur dann einschalten, während man den Finger am Schalter hält).

Um einen Taster auch ähnlich wie einen Umschalter (engl. toggle) verwenden zu können benötigt man eine Variable, die einen binären Zustand abspeichert (AN oder AUS). Der Wechsel des Zustands soll immer genau in dem Moment erfolgen, in dem der Taster seinen Zustand von AUS zu AN wechselt (also in dem Moment, in dem der Finger den Taster betätigt). Kein Zustandswechsel erfolgt solange der Taster gedrückt oder losgelassen wird. Der Zustandswechsel zum Ausschalten des Lichts erfolgt bei einem erneuten Tastendruck. Auch hier ist genau der Moment relevant, bei dem der Finger den Taster niederdrückt (also der Zustand des Tasters von AUS zu AN wechselt).

Flanken und Flankenerkennung

Binäre Signale können nur zwei Zustände annehmen. Der Moment des Zustandswechsels wird Flanke (engl. edge) genannt. Eine steigende Flanke (engl. rising) bezeichnet den Wechsel von dem niedrigerem Niveau auf das höhere Niveau, eine fallende Flanke (engl. falling) das umgekehrte Signal. Flanken haben immer nur eine sehr kurze Dauer. Aufgrund Ihrer Kürze und Eindeutigkeit werden Flanken gerne als Steuerinput genutzt.

flanken
Das digitale Signal (dunkelblau) wechselt zwischen den Zuständen LOW und HIGH. Der Moment des Wechsels wird Flanke bezeichnet.

Realisierung einer Flankenerkennung

Beispiel: Taster als Schalter

Zur Programmierung einer Flankenerkennung ist es notwendig den aktuellen Zustand des Tasters mit seinem vorigen Zustand zu vergleichen. Der Zustand muss also gespeichert werden, damit er im nächsten Code-Durchlauf abgefragt werden kann.

Code-Analyse

Pin 6 dient als Input für den Taster, Pin 13 als LED Output.  previousState  speichert den Zustand des Tasters, switchState  den Zustand des Umschalters. Zunächst wird der Zustand des Tasters ausgelesen und invertiert (Zeile 10). Das if-Statement in Zeile 13 prüft, ob sich der Zustand des Tasters von FALSE zu TRUE geändert hat, also eine steigende Flanke vorhanden ist. Der Ausdruck !previousState && currentState  wird nur dann wahr, wenn previousState FALSE ist (beachte das invertierende ! ) und currentState  TRUE ist. Wird die steigende Flanke erkannt, so wird der Zustand des Umschalters invertiert und anschließend der Zustand auf Pin 13 geschrieben.

Zuletzt wird der aktuelle Zustand des Tasters in die Variable previousState  geschrieben (Zeile 23). Bei der nächsten Durchführung ist damit der aktulle Zustand der vorige Zustand.

Zusammenfassung

Digitale Signale nehmen nur zwei Zustände (HIGH, LOW) ein. Die Übergänge zwischen den Zuständen werden Flanken genannt, wobei diese steigend oder fallend sein können.

Um Taster als Schalter zu verwenden werden die Zustände zwischen den Flanken verglichen. Tritt eine Änderung in eine definierte Richtung auf, wird der Zustand invertiert.

Weiterführende Links

  • https://www.arduino.cc/en/Tutorial/StateChangeDetection
  • http://www.mikrocontroller.net/articles/Flankenerkennung

Kommentar hinterlassen

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