Materialien zum Unterricht

Erste Reaktion

Bisher hat der Mikrocontroller ein Programm gespeichert und dieses dann ohne jede Veränderung abgearbeitet. Nun soll er aber auf unsere Eingabe reagieren.

Ziel: Durch einen Schalter kann die Richtung des Lauflichtes bestimmt werden. Ist der Schalter offen, läuft es wie bisher von links nach rechts, ist er geschlossen, läuft es von rechts nach links.

Wir erinnern uns an das Modell des Mikrocontrollers.

Der Controller hat vier Ports zu je 8 Pins. Am Port B sind die 8 Leuchtdioden angeschlossen und jeder Pin ist als Ausgang programmiert.

Der Port A ist noch unbenutzt und kann von uns verwendet werden. Es muss an einem Pin entweder eine 1 oder eine 0 angelegt werden. Das kann so gemacht werden:

Am Pin liegt eine 1 an, wenn er mit dem Pluspol verbunden ist und eine 0, wenn er mit dem Minuspol (Masse) verbunden ist.

Um das zu erreichen, müsste ein Umschalter angeschlossen werden.

Das ist technisch ungünstig. Besser wäre ein einfacher Taster oder Schalter.

Damit lässt sich der Eingang z.B. auf 0 legen, wenn der Schalter geschlossen ist. Was ist aber, wenn er offen ist? Dann hängt der Eingang frei "in der Luft" und der Pegel ist nicht klar festgelegt. Dieser Fall ist verboten, da der Controller dort keinen eindeutigen Zustand sieht und nicht entscheiden kann, was er machen soll.

Abhilfe schafft ein Pull-Up-Widerstand:

Der geschlossene Schalter zieht den Eingang auf 0. Ist er offen, bewirkt der Widerstand eine Verbingung zum Pluspol und der Eingang liegt auf 1.

Zum Glück befindet sich der Pull-Up-Widerstand bereits im Controller und muss von uns nur zugeschaltet werden. Steht in PORT eine 1, wird der Widerstand aktiviert.

Es reicht also aus, einen Schalter zum Minuspol zu legen und den Pull-Up-Widerstand zu aktivieren. Ist der Schalter zu, liegt eine 0 an, ist er offen, wird über den internen Pull-Up-Widerstand eine 1 erzeugt.

 

Festlegen der Hardware

Die ersten beiden Zeilen kennen wir schon, sie legen Port B als den Leuchtdiodenport fest.

Die folgenden drei Zeilen definieren den Schalterport. SCHALTER_PORT wird Port A, SCHALTER_DDR ist das Datenrichtungsregister A und SCHALTER_PIN ist das Register, in dem die von außen eingegebene 0 oder 1 abgelegt wird. Von dort können wir uns dann die Information holen.

Makros

Als Makros benötigen wir das Setzen und Löschen eines Bits sowie das Schieben eines Bits nach rechts oder links. Bei Fragen noch mal auf der Seite Bitmanipulation nachlesen.

Initialsieren der Ports

Der Schalter soll am Pin 0 des Port A angeschlossen werden. Dazu muss im Datenrichtungsregister das entsprechende Bit auf 0 gesetzt werden.
Der zugehörige Pull-Up-Widerstand wird eingeschaltet, in dem im Datenregister des Port das Bit 0 auf 1 gesetzt wird.

Lauflicht von rechts nach

 

Lauflicht lässt sich mit Schalter stoppen

Das Pin-Register des Schalterport muss abgefragt werden. Ist der Inhalt eine 1, also der Schalter nicht gedrückt, soll das Licht laufen, ansonsten nicht.

Die Abfrage erfolgt über eine UND-Verknüpfung mit einem Bitmuster. Das sieht kompliziert aus, erhöht aber die Übersichtlichkeit, wenn mehrere Pins gleichzeitig abgefragt werden sollen. (siehe Bitmanipulation)

Das Drücken des Schalters kann man simulieren, in dem man einfach mit der Maus auf das Bit klickt.

Lauflicht wechselt die Richtung

Jetzt ist klar, dass im else-Zeig der if-Entscheidung der Rechtlauf des Lichtes programmiert werden muss. Das ist sicher nicht schwer.

Aufgabe: Erweitere das Programm so, dass das Licht nach dem RESET bei gedrückten Schalter sofort nach recht släuft und bei nicht gedrückten Schalter nach links.

 

zurück