Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

Um die Inhalte dieses Kapitel zu verstehen und nachvollziehen zu können, sollten vorher die AVR-Assembler Grundlagen durchgearbeitet worden sein.

Projekt Ampelsteuerung

Das Ziel in diesem Projekt ist eine Ampelschaltung - bestehend aus einer Signalampel für den Verkehr (rot/gelb/grün) und einer Fußgängerampel (rot/grün) - so zu programmieren, dass verschiedene Aktionen ausgelöst werden:

  1. Im Normalbetrieb zeigt die Fußgängerampel ROT, während die Verkehrsampel auf GRÜN geschaltet ist.
  2. Sobald ein Bedarfsanforderungs-Taster T0 gedrückt wird, springt die Fußgängerampel nach einer vorgegebenen Zeit auf GRÜN, während die Verkehrsampel auf ROT schaltet.
  3. Nach einer vorgegebenen Zeit schaltet die Ampelanlage wieder in den Anfangszustand.

Das Projekt teilt sich in mehrere Stufen auf. In der ersten Stufe wird versucht, sich dem Problem zu nähern.

 

Stufe 1

Über das STK-200 Board wird mit den auf dem Board befindlichen LEDs (Bargraphanzeige) und Tastern gearbeitet; als Mikrocontroller wird ein ATmega8515 eingesetzt und ein Programm entwickelt, das den Normalbetrieb simuliert. Alternativ kann natürlich der Schaltungsaufbau aus LEDs und Taster auch auf einem Steckbrett vorgenommen werden (s. Schaltungsaufbau).

Material für alle Stufen
Material

1x   STK-200 Board mit Schaltnetzteil und USB-Verbindungskabel

1x   Mikrocontroller ATmega8515

1x   Programmer ISP2

 

alternativ zum STK-200 Board:

1x   Steckbrett

5x   LED (rot 2x, grün 2x, gelb 1x)

5x   Widerstand 1kOhm

1x   Taster

1x   Widerstand 10kOhm

diverse Steckdrähte

Stufe 1 - Ampelanlage im Normalbetrieb

Die benutzte Hardware

Der ATmega8515 verfügt über fünf Ports (A, B, C, D und E) mit insgesamt 35 bidirektionalen I/O-Schnittstellen mit internen pull-up Widerständen, die sich einzeln ansteuern lassen.

  • PortB ist hardwaremäßig mit den acht LEDs LED0 bis LED7 der Bargraphanzeige über 1kOhm Vorwiderstände verbunden,
  • PortD entsprechend mit den acht Tastern T0 bis T7 über 10kOhm pull-up Widerstände.

Sowohl die LEDs als auch Taster sind active-low geschaltet. Von den acht vorhandenen Tastern wird in Übung 1 nur T0 benötigt.

Die Taktung des Controllers wird so übernommen, wie werkseitig eingestellt; das heißt, der interne RC Oszillator mit 1,0 MHz Taktfrequenz wird genutzt (S. 39 Datenblatt).

 

Eine Verkehrampel (drei Lichter) und eine Fußgängerampel (zwei Lichter) lassen sich auf einer Bargraphanzeige wie folgt darstellen:

 

 

 

 

 

 

Abbildung 2

Die oberen drei Lichter stehen für die Verkehrsampel, die LEDs 4 - 5 für eine Fußgänger-Ampel.

Die Schaltung kann natürlich auch separat auf einem Steckbrett aufgebaut werden, wenn man nicht über ein STK200 verfügt; die entsprechende Verdrahtung zeigt der folgende Schaltungsaufbau. Nicht dargestellt ist die Spannungsversorgung und allgemeine Anschlussbelegung für den Controller.

Schaltungsaufbau

Das Programm

Abbildung 3 - Testprogramm zur Stufe 1. Sobald T0 gedrückt wird, leuchtet die Verkehrsampel grün und die Fußgängerampel rot.

Wie arbeitet das Programm?

Neu ist in diesem Programm der "Programmkopf", der immer mit mindestens einer RJMP-Direktive endet. Er wird bei verschiedenen Projekten zukünftig stets ähnlich aussehen und lässt sich bei Auflegung eines neuen Projektes einfach in das Programm kopieren. Im vorliegenden Fall ist er noch von geringem Umfang.

Startet man nach dem Kompilieren des Programms den Debugger und öffnet im Fenster "I/O View" PORTB und PORTD, dann lässt sich gut verfolgen, was das Programm leistet. Mit F11 kann Programmzeile für Programmzeile abgearbeitet werden.

 

Nach dem Programmstart werden die Ports B0 - B2 sowie B4 und B5 auf Ausgang gesetzt. Im Register DDRB sind die entsprechenden Bits 1. Entsprechend sind im Register DDRD alle Ports auf 0 (Eingang) gesetzt.

 

Über den Befehl

  • IN hreg_1, PIND

wird der Registerinhalt von PIND in R16 eingelesen und anschließend über logisch AND mit 0x01 verglichen oder, was gleichbedeutend ist, es wird mit Hilfe des logischen AND PortD.0 maskiert und auf 1 überprüft. Ist das der Fall, wird der Verzweigungsbefehl übergangen und mit dem nachfolgenden Befehl im Programm weitergemacht.

 

Eine nicht gedrückte Taste liegt auf HIGH oder 1, eine gedrückte auf LOW oder 0. Durch einen Klick auf Bit0 im Register PIND im "I/O View" des Debuggers wird simuliert, dass keine Taste gedrückt wurde (wg. active low). Das Programm verzweigt deshalb über

  • BRNE t0_offen

zur Marke t0_offen, lädt in das Hilfsregister hreg_1 den Wert $FF (alle Bits werden auf 1 oder HIGH gesetzt) und überträgt dies in das Register PORTB. Alle Portpins sind auf 1 oder HIGH gesetzt mit der Folge, dass keine der LEDs in der Bargraphanzeige leuchtet, die Ampelanlage ist abgeschaltet.

Abbildung 4 - Im Datenrichtungsregister DDRB sind alle schwarz markierten Felder als Ausgang gesetzt. Mit einem Klick wird im Register PIND das Bit 0 auf 1 gesetzt und simuliert in diesem Fall einen NICHT gedrückten Taster T0.

Nimmt man die 1 im Register PIND im Fenster "I/O View" des Debuggers zurück (einfach anklicken) und durchläuft mit F11 das Programm zeilenweise weiter, dann verzweigt das Programm bei BRNE nicht zur angegebenen Marke, sondern fährt unmittelbar mit der folgenden Programmzeile fort, da der Inhalt des Registers hreg_1 ungleich dem Wert $01 ist.

 

In der nachfolgenden Programmzeile wird der Wert $EB (entspricht binär 0b1110_1011) in das Hilfsregister hreg_1 geladen und anschließend an das Register PORTB übergeben. Die LEDs am Ausgang von PortB sind active low geschaltet, d.h., dass eine 0 oder LOW die jeweilige LED zum Leuchten bringt; in diesem Fall LED2 und LED4. Das sind nach Abb. 2 für die Verkehrsampel das grüne Licht und für die Fußgängerampel das rote Licht.

 

Die Ampeln funktionieren und sie reagieren auf Tastendruck über T0. In Stufe zwei müssen wir uns um die Zeitsteuerung der Lichtanlage kümmern.

Stufe 2 - Die Zeitsteuerung

In einem ersten Versuch zur Zeitsteuerung soll, sobald der Taster T0 gedrückt wird, die Verkehrs- und Fußgängerampel für ca. 5 Sekunden eingeschaltet werden.

-> wird fortgesetzt <-

Druckversion | Sitemap
© Reinhard Rahner - Gettorf