In diesem Kapitel wird die Instruktion SBIW sowohl mit dem AVR Simulator als auch auf dem
STK200 näher untersucht mit besonderem Augenmerk auf das SREG. Hilfreich für das Verständnis sind die Erfahrungen aus den Kapiteln
Die Instruktion zieht von einem 16-Bit Registerwert RdH:RdL den Wert K ab.
Die Aufgaben
- In der folgenden Übung geht es um den Aufbau einer einfachen Zeit- oder Warteschleife.
- LED2 auf dem STK200-Board soll so angesteuert werden, dass sie deutlich sichtbar
blinkt.
- Die Periodenzeit und die Frequenz wird über ein Simulationsprogramm Sim_Zeitschleife.asm
(siehe Abb. 1) bestimmt und anschließend im Realaufbau überprüft und mit einem Oszilloskop die
Frequenz gemessen werden.
- Übertrage das Programm aus Abb. 1 in den Editor des AVR Studio und speichere es ab.
- Überlege dir, was das Programm mit jedem Programmschritt veranlasst. Wie lautet die Abbruchbedingung für die Schleife
LED_ein?
- Errechne die Wartezeit in der Zählschleife LED_ein, indem du die Anzahl der Takte jeder aufgerufenen Instruktion in der
Schleife bestimmst (Datenblatt), die Zahl der Durchläufe errechnest und daraus die Gesamt-Verweilzeit in der Schleife bestimmst.
- Welcher Formel-Zusammenhang besteht zwischen Frequenz f und Periodendauer T? Errechne die Periodendauer der
Blinkschaltung.
- Passe das Simulationsprogramm Sim_Zeitschleife.asm an die Hardware-Bedingungen des STK200-Boards an, speichere es
unter dem Namen Zeitschleife.asm ab und führe dann das lauffähige Programm aus. Bestimme mit dem Oszilloskop die Frequenz der blinkenden LED2. Vergleiche das praktische mit dem errechneten
Ergebnis.
-----------------------------------------------------------------------------------------------------------------------------------
Die Materialien
- Datenblatt des ATmega8 Controllers plus AVR Instruction Set Manual
- AVR Simulator Programm oder Debugger des AVR Studio
- USB-Oszilloskop
- STK200 Board mit Programmer und
Schaltnetzteil
Das Programm (siehe Abb. 2) ist vollständig auskommentiert und bedarf keiner weiteren Ergänzungen. Das Verhalten der
Instruktion SBIW kann Abb. 1 entnommen werden.
Das Programm arbeitet mit dem 16-Bit Register ZH:ZL (R31:R30).
Der Zähler startet mit der Einstellung 0101 1111 0000 0000.
In Übung 2 geht es auch wieder um eine Zeitschleife aber auch darum, wie man Daten ins SRAM schreibt und wieder ausliest und wie man Eingangsdaten
eines Tasters liest und damit Entscheidungen trifft.
Im ersten Entwicklungsschritt wird das Lichtmuster erzeugt. Dazu werden die Daten der vier verschiedenen 8-Bit LED-Muster im SRAM abgelegt und zu gegebener Zeit von
dort abgerufen und auf der LED-Bargrafanzeige dargestellt. Die Leuchtdauer jedes LED-Musters sollte ca. 0,1 - 0,3 ms betragen. Pro Sekunde werden dann ca. vier verschiedene Muster übertragen. Wie das
aussehen könnte, zeigt das folgende Video.
Die Aufgaben
- Schreibe ein Simulationsprogramm für einen ATmega8, das auf einer LED-Bargrafanzeige ein dauerhaftes Lichtmuster erzeugt, das
folgende Phasen durchläuft:
Phase 1: 0111 1110
Phase 2: 1011 1101
Phase 3: 1101 1011
Phase 4: 1110 0111.
Dabei bedeutet eine 0, die LED leuchtet und eine 1, die LED leuchtet nicht (Anpassung an das STK200 Board; dort sind die
LEDs low active geschaltet).
- Die Bargrafanzeige wird über PORTB angesteuert, die Taster über PORTD.
- Abgebrochen bzw. beendet wird das Lichtmuster, sobald Taster T1 gedrückt ist.
- Wenn das Simulationsprogramm läuft, übertrage es auf ein STK200 mit einem ATmega8 und überprüfe praktisch seine
Funktionstüchtigkeit.
-----------------------------------------------------------------------------------------------------------------------------------
Die Materialien
- Datenblatt des ATmega8 Controllers plus AVR Instruction Set Manual
- AVR Simulator Programm oder Debugger des AVR Studio
- STK200 Board mit Programmer und
Schaltnetzteil
Vorüberlegung zur Phase 1 - Lauflicht mit vier verschiedenen Lichtmustern erstellen
Programmvorschlag zur Phase 1
Wenn das Programm fehlerfrei läuft, sollte das Lauflicht sich - ähnlich wie im Kurzvideo - verhalten.
Wie arbeitet das Programm?
Alle Programmzeilen des Programms wurden auskommentiert (siehe Abb. 5a - 5c). Der Programmablauf lässt sich wie folgt strukturieren:
- Initialisierung (Stack anlegen/retten, Ports setzen, Lichtmuster festlegen, Daten ins SRAM schreiben)
- Hauptprogramm - Endlosschleife (Die Lichtmuster werden nacheinander aufgerufen. Nach jedem Lichtmusteraufruf geht das Programm in eine
Zeitschleife).
- Unterprogramme (Zeitschleife)
Vorüberlegung zur Phase 2 - Taster T1 hält das Lauflicht an
Im Block Unterprogramme wird das Unterprogramm schlafen eingefügt.
Damit ist die Aufgabe, wie oben beschrieben, erfüllt.