Universität Koblenz Landau Name:..... Institut für Physik Vorname:..... Hardwarepraktikum für Informatiker Matr. Nr.:..... Assembler/C Programmierung eines Mikrocontrollers I/O und Unterprogramme Versuch Nr. 6 Vorkenntnisse: CISC, RISC, von Neumann, Harvard, Komponenten eines Microcontrollers, Architektur und Befehlssatz des Mikrocontrollers AtMega16, Register, Speicher, IO, Stackpointer, Unterprogramme, Statusregister C-Programmierung Aufbau und Wirkungsweise des Oszilloskops: Strahlerzeugung, Bildschärfe, Bildhelligkeit, Strahlablenkung, Zeitablenkung, Synchronisation, Triggerung.
Versuch 6 2 Im vorliegenden Versuch sollen einfache Programme für den 8 Bit Mikrocontroller AT- Mega16 in Maschinensprache (Assembler) oder in C entwickelt werden. Die Programme können alle am Simulator entwickelt und getestet werden. Die Programme werden am Versuchstag in das Experimentierboard ECB16 geflasht und getestet. Weitere Hinweise: Lesen Sie die Kurzanleitung zum Experimentierboard ECB16 Weitere Anleitungen zur Programmierung der AVR-Serie finden Sie im Internet Im folgenden sind alle Zahlen als Hexadezimalzahlen zu interpretieren! Sie können nicht von bestimmten Registerinhalten beim Programmstart ausgehen. Mangels Kommentar unverständliche Programme werden auch bei fehlerfreier Funktion nicht akzeptiert. 1. Aufgabe Die Eingaben an PortA sollen auf den PortC kopiert werden. Konfigurieren Sie PortA als Eingabe- und PortC aus Ausgabeport. In einer Endlosschleife sollen die Werte die an PortA anliegen auf den PortC ausgegeben werden. 1.1 Aufgabe Entwickeln Sie ein Assembler oder C Programm und tragen Sie dieses in das Lösungsblatt ein! Kommentieren Sie alle Anweisungszeilen! 2
Versuch 6 3 2. Aufgabe Gesucht ist ein möglichst kurzes Programm, das aus zwei Bits des Eingabekanals PortA die folgenden Elementarverknüpfungen bestimmt und auf dem Ausgabekanal PortC ausgibt: liegt bei 0x00. 2.1 Aufgabe C5 := A0 A1 C4 := A0 A1 C3 := A0 A1 C2 := A0 A1 C1 := A0 A1 C0 := A0 A1 Entwickeln Sie ein Assembler oder C Programm und tragen Sie dieses in das Lösungsblatt ein! Kommentieren Sie alle Anweisungszeilen! 3
Versuch 6 4 3. Aufgabe Entwickeln Sie ein Programm, das auf dem Ausgabepin C0 ein Rechtecksignal ausgibt, dessen Periodendauer in Millisekunden über den am 8 Bit Eingabekanal PortA anstehenden Wert festgelegt werden kann: Liegt dort z.b. der Wert 0000 0101 entsprechend dezimal 5 an, so soll die Periodendauer ca. 5 msec betragen. Änderungen am Eingabekanal sollen sich ohne Neustart des Programms direkt auswirken. Das erzeugte Signal ist auf dem Oszilloskop darzustellen. Gehen Sie dabei in folgenden Teilschritten vor: 3.1 Aufgabe Entwickeln Sie ein Unterprogramm, das eine Zeitverzögerung von möglichst exakt 1msec erzeugt (Im Simulator testen!). Unter C dürfen die Funktionen delay ms und delay us aus der clib nicht verwendet werden. Kommentieren Sie alle Anweisungszeilen! 4
Versuch 6 5 3.2 Aufgabe Entwickeln Sie das Hauptprogramm, das den Eingabekanal PortA einliest und ein dem Wert entsprechendes Rechtecksignal am Ausgabepin C0 erzeugt. Der zusätzliche Aufwand zur Abarbeitung des Hauptprogramms kann dabei vernachlässigt werden. Stellen Sie das Ausgangssignal auf dem Oszilloskop dar. Kommentieren Sie alle Anweisungszeilen! 4. Füllstandsregelung Die Wassermenge in einem Vorratsbehälter soll geregelt werden. Dazu wird mit einer Messeinrichtung der augenblickliche Füllstand erfaßt. Um den Füllstand zu regulieren, wird die Pumpe ein oder ausgeschaltet. In unserem Versuch besteht die Messeinrichtung zur Erfassung des augenblicklichen Füllstands aus zwei Lichtschranken. Die Ausgänge der Schwellwertschalter liefern 0 Pegel, wenn sich der Korken zwischen Lampe und Photodiode befindet. Der Regler, d.h. Ihr Orogramm, muß dafür sorgen, daß der Füllstand nur zwischen der oberen und unteren Marke schwanken kann. 5
Versuch 6 6 Pumpe X X Lampe Ablauf Schwellwertschalter PinC0 Photodiode PinC1 ECB 16 PinA0 Vorratsbehälter Abbildung 1: Füllstandsregelung mit dem Experimentierboard ECB16 4.1 Aufgabe Stellen Sie das Problem in einem Zustandsgraphen dar! 6
Versuch 6 7 4.2 Aufgabe Entwickeln Sie ein Programm und tragen Sie dieses in das Lösungsblatt ein! Kommentieren Sie alle Anweisungszeilen! 4.3 Aufgabe Simulieren Sie die Regelstrecke mit Taster und Anzeigebausteinen und überprüfen Sie damit Ihr Programm! 4.4 Aufgabe Schließen Sie Ihr Experimentierboard an die reale Regelstrecke an! 5. Ansteuerung eines Umsetzroboters Es ist ein Programm zur Ansteuerung des Unsetzroboters aus Versuch 5 zu entwickeln: Der Umsetzrobotor besitzt zwei Gleichstrommotoren. Ein Motor öffnet und schließt den Greifer, der zweite Motor schwenkt den Arm. In jeder Bewegungsrichtung ist ein Endschalter montiert, so dass ingesamt vier Endschalter vorhanden sind. Die Schalter schliessen, sobald das Ende einer Bewegungsrichtung erreicht ist. Die Schalter schließen gegen Masse (Low-Pegel). 7
Versuch 6 8 5.1 Aufgabe Entwickeln Sie ein Programm und tragen Sie dieses in das Lösungsblatt ein! Kommentieren Sie alle Anweisungszeilen! 8