Praktikum Mikrocomputertechnik Versuch 5: Labor: Termin der Durchführung: IE-Labor und DT-Labor Ampelsteuerung als Automat Teilnehmer: Gruppe: Semester: Student 1: Student 2: Testat: Datum: Bemerkungen: Unterschrift: - 1 -
Praktikum Mikrocomputertechnik Versuch 4: Erstellen einer Ampelsteuerung mit dem Mikrocontroller XC164 1 Versuchsinhalte Allgemeine Beschreibung Bei der Programmierung der Ampelsteuerung wird Ihnen weitestgehend freie Hand gegeben. Sie müssen eine Ampelanlage nach einem definierten Zeitschema ansteuern. Die LEDs werden direkt vom den Port P1 des µcs angesteuert. Die Status-LEDs und -taster werden in diesem Versuch nicht benötigt, stehen Ihnen aber für Debugoder Statuszwecke zur Verfügung. Die einzige Einschränkung ist, dass Sie die Ampelsteuerung als Automaten realisieren müssen. Verwenden Sie zur Definition der Zustände und Übergangsbedingungen (Wartezeiten) einen Datenbereich. Umsetzungen die einfach nur mit Ausgabelisten oder ähnlichem arbeiten, werden als Lösung nicht akzeptiert. Vorbereitung Sie sind bei diesem Versuch darauf angewiesen, sich grundlegende Gedanken bereits in der Vorbereitung zu machen. Die Vorbereitung sollte folgende Punkte beinhalten: Grundlegende Überlegungen zum Lösungsprinzip. (Es gibt eine ganze Reihe von Möglichkeiten das System zu realisieren.) Lesen Sie die Übungsaufgabe Automaten! Dieses Dokument erleichtert Ihnen die Umsetzung eines Automaten in Assembler erheblich. Dieses finden Sie auf der Labor-Homepage parallel zu den Versuchsbeschreibungen. Flussdiagramm des Hauptprogramms sowie ggf. verwendeter Interrupt-Routinen und Unterprogramme. (Abstraktionslevel bitte so wählen, dass der generelle Ablauf verstanden werden kann, befehlsgenaue Darstellung ist nicht notwendig.) Erstellen Sie ein graphisches Ablaufdiagramm mit den genauen Zeiten und Abfolgen des Ampelablaufes. Erstellen Sie ein State-Diagramm mit allen vorkommenden Zuständen sowie die Übergangsbedingungen. - 2 -
Versuchsdurchführung Codieren Sie die vorbereiteten Flussdiagramme. Sollten sich während der Versuchsdurchführung Ihr Konzept ändern, fügen Sie dieses in Ihr Flussdiagramm ein. Verwenden Sie für die Durchführung das Keil Projekt Rumpf.Uv2 von der Laborhomepage. Ausarbeitung Nach Beendigung des Versuches haben Sie alle Arbeiten erledigt. Sie können die Ausarbeitung direkt nach dem Praktikumstermin abgeben. Die Ausarbeitung besteht aus folgenden Komponenten: Ausgefülltes Deckblatt Das am Ende befindliche, von Ihnen ausgefüllte Fragenblatt zur Theorie Am PC erstellte Flussdiagramme und ggf. Berechnungen aus der Versuchsvorbereitung Ausdruck der Assemblerdateien zur Durchsicht Zustandsdiagramm des Automaten - 3 -
2 Beschreibung des Versuchsaufbaus 2.1 Das Board Abb. 2.1.1: XC164 Ampel-Board der HS Regensburg - 4 -
2.2 Portbelegung der Ampelanlage 2.2.1 Die LEDs der Ampel (und auch die Status-LEDs) werden alle über Port 1 angesteuert Port Ampel / Status Licht 1L.0 Fußgänger O W Grün 1L.1 Fußgänger O W Rot 1L.2 Straße N S Grün 1L.3 Straße N S Gelb 1L.4 Straße N S Rot 1L.5 N.C. - 1L.6 Status LED: Automatik Blau 1L.7 Status LED: Ost West Blau 1H.0 Status LED: Nord Süd Blau 1H.1 Status LED: Nacht Blau 1H.2 N.C. - 1H.3 Fußgänger N S Grün 1H.4 Fußgänger N S Rot 1H.5 Straße O W Grün 1H.6 Straße O W Gelb 1H.7 Straße O W Rot 2.2.2 Die Taster werden über den Port 9 eingelesen Port Taster 9.0 Automatik 9.1 Ost West 9.4 Nord Süd 9.5 Nacht Die Taster können zwar für eigene Zwecke verwendet werden, sind in diesem Versuch allerdings nicht notwendig. - 5 -
2.3 Skizze der Ampelkreuzung - 6 -
2.4 Zeitablauf der Ampelanlage 2.4.1 Ablauf der Straßenampeln Nach dem Start der Software beginnt die Ampel mit einer vollständigen Rotphase, d.h. alle Straßen- und Fußgängerampeln zeigen Rot. Phase Rot Phase der kompletten Kreuzung Rot Gelb Phase Grün Phase in Nord-Süd Richtung Grün Phase in West-Ost Richtung Gelb Phase Zeitdauer 1s 1s 15s 12s 2s Alle anderen Zeiten ergeben sich automatisch durch diesen Ablauf. Ein gesamter Durchlauf dauert nach diesen Angaben also 35 Sekunden. 2.4.2 Ablauf der Fußgängerampeln Der Ablauf der Fußgängerampeln steht natürlich im direkten Zusammenhang mit dem Ablauf der Straßenampeln. Es sind zur Steuerung der korrespondierenden Fußgängerampeln noch die beiden folgenden Zeitangaben notwendig: Rot Grün der Fußgängerampel erfolgt gleichzeitig mit dem Übergang von Rot/Gelb Grün der entsprechenden Straßenampel. Grün Rot der Fußgängerampel erfolgt 2s vor dem Grün Gelb Übergang der entsprechenden Straßenampel. 2.5 Zusätzliche Informationen / Angaben Die Zeiten der einzelnen Phasen sind im Gesamtablauf auf mindestens 1% einzuhalten. Die Realisierung erfordert also einen genau abgestimmten Timer im Interrupt-Betrieb. Das Board läuft mit einer Grundfrequenz von 20 MHz - 7 -
3.) Versuchsdurchführung Bevor Sie mit der Programmierung der Ampelanlage beginnen, bauen Sie das Konzept in ein paar einzelnen Schritten auf. Damit vermeiden Sie komplexere Fehler, die in einem aufwendigeren Programm dann nur schwer zu finden sind. 3.1) Unterprogramm warten_3s Schreiben Sie zunächst ein Unterprogramm, das eine Wartezeit von ca. 3 Sekunden generiert. Hierzu können Sie z.b. das Warteprogramm aus Versuch 1 entsprechend abändern. Zum Test des Unterprogramms lassen Sie einfach etwas blinken. Sie können die Zeit mit dem Logicport nachmessen. 3.2) Tabelle im Datenbereich anlegen Definieren Sie eine Tabelle im Datenbereich, die folgende Werte beinhalten soll: alle_roten_leds DW/DB/DS... alle_gelben_leds DW/DB/DS... alle_gruenen_leds DW/DB/DS... Tabellenende DB 0h Schreiben Sie nun ein Programm, das nacheinander alle roten, alle gelben, alle grünen LEDs ausgibt und dann wieder von neuem beginnt. Nutzen Sie dabei das obige Warteprogramm warten_3s. Dabei soll die erste Adresse in ein Register geladen werden und dann automatisch hochgezählt werden. Hinweis: Als letzter Tabelleneintrag sollte ein eindeutig identifizierbarer Wert stehen (z.b. 0h). 3.3) Verwendung von Interrupts Initialisieren Sie nun im Hauptprogramm einen Timer, der möglichst exakt eine Sekunde läuft. Hierzu ist ein GPT zu verwenden, der mit einem automatischen Reload konfiguriert ist (Verwenden Sie hierzu Timer 2 und Timer 3). Ebenso müssen Sie den zu Timer 3 gehörigen Interrupt konfigurieren. Definieren Sie den Interrupt mit Grouplevel 1 und Interruptlevel 3. Die Beschreibung der Timer finden Sie im Handbuch zum µc (Infineon Technologies; XC164-16 User s Manual, Volume 2 (of 2): Peripheral Units). Der Vorteiler für den Timer soll so gewählt werden, dass ein möglichst großer Zählbereich verwendet wird, um die Genauigkeit zu erhöhen. Um den Timer und den Interrupt zu testen, geben Sie im Hauptprogramm kontinuierlich alle roten LEDs aus. Bei einem Interrupt geben Sie hingegen alle grünen LEDs aus. Damit diese auch sichtbar aufleuchten, verwenden Sie noch ein auf ca. eine viertel Sekunde getrimmtes, geeignetes Warteprogramm. - 8 -
3.4) Realisierung des Ampelablaufes Im letzten Schritt generieren Sie nun die Tabelle, die alle Ampelzustände enthält, die Übergangsbedingungen beschreibt und die Folgezustände definiert. Schreiben Sie nun Ihr Hauptprogramm und Ihre Interrupt-Service-Routine so, dass der Ampelablauf dem vorne definierten Zeitablauf entspricht. Für Anpassungen am Ampelablauf darf der Code nicht geändert werden müssen. Alle Änderungen müssen durch Editieren der Tabelle vorgenommen werden können. Die Tabelle muss die folgenden Informationen enthalten: Name des Zustandes Wert des Zustandes (hier: Ausgabewert auf die LEDs) Übergangsbedingung (hier: Zeit des jeweiligen Zustandes) Name des Folgezustandes Der Datenbereich NCONST wird über den dpp1 definiert (Siehe Definitions-Header im Rumpf-Programm). Eine entsprechende Tabelle im FLASH könnte also wie folgt aussehen: State_1 DW 0x2d12, 0x000d, dpp1:state_2 State_2 DW 0x2e88, 0x0003, dpp1:state_3 State_3 DW 0x522b, 0x0010, dpp1:state_1 Der Assembler setzt in die Datentabelle dann direkt die Adresse der entsprechenden Zeile für den Folgezustand ein. Somit kann dieser Wert im Anschluss für den Zugriff auf die Informationen des Folgezustandes verwendet werden. - 9 -
4) Weitere Informationsquellen 1. Infineon technologies; XC164-16 User s Manual, Volume 1 (of 2): System Units 2. Infineon technologies; XC164-16 User s Manual, Volume 2 (of 2): Peripheral Units 3. Infineon technologies; XC164-16 Data Sheet 4. Infineon technologies, C166S User Manual (Befehlssatz) 5. http://www.infineon.com 6. https://hps.hs-regensburg.de/~fam39454/ie_lab/pmc.php 7. http://www.keil.com 8. G. Schmitt; Mikrocomputertechnik mit dem Controller C167, Oldenbourg Wissenschaftsverlag GmbH, München 2000 9. Automaten - Praktikumsbegeleitende Unterlagen von Prof. Dr. Hans Meier - 10 -
5) Begleitende Fragen (Vorbereitung, mit abzugeben!) Konfiguration von Timer und Interrupt: 1. Mit welcher Taktfrequenz läuft die CPU auf dem Ampel Board? f clk = MHz 2. Welcher Settings für den Timer verwenden Sie für diesen Versuch? Optimaler Vorteiler für f clk : Zählrichtung des Timers: up down Wiederladewert für T3 (Reload): dezimal bzw. hex 3. Was ist der Unterschied zwischen einem Timer und einem Counter? 4. Bitte ermitteln Sie für die folgenden Register die Konfigurationswerte: GPT12E_T3CON: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 GPT12E_T3IC: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 GPT12E_T2CON: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0-11 -
5. Zeichnen Sie den prinzipiellen Verlauf (Zählerwerte) von T3 über die Zeit in folgendes Diagramm: - 12 -