220 likes | 447 Views
Ampelsteuerung. EL4 Projekt WS 2004 Microcontroller 2. Inhalt. Aufgabenstellung Hardware Software. Aufgabenstellung. Ampelsteuerung in C auf Z8 Platine. Programmierung einer Ampelsteuerung und Bau einer Hardware für eine Straßenkreuzung mit Fußgänger-Überwegen.
E N D
Ampelsteuerung EL4 Projekt WS 2004 Microcontroller 2
Inhalt • Aufgabenstellung • Hardware • Software
Aufgabenstellung • Ampelsteuerung in C auf Z8 Platine. • Programmierung einer Ampelsteuerung und Bau einer Hardware für eine Straßenkreuzung mit Fußgänger-Überwegen. • Realisierung von drei Betriebsarten: Ampelbetrieb, Blinkbetrieb und Aus. • Programmentwicklung mit Entwicklungskitt der Firma Zilog, einem JATG fähigen Z8-Encore Prozessor Z8F6423
Zilog Z8 Encore! Flash Microcontrollers Development Tools
Die Kreuzung • Zeichnung
Z8 Encore! Z8F0822 Evaluation Board JP2 Leiste
Beispiel für die Ampelphase 1: Um die Hauptstrasse auf Rot zu schalten, wird PCOUT auf den Binärcode von PC4 gesetzt. Um die Nebenstrasse und Linksabbieger auf Rot zu setzen, müssen PA4 und PA0 logisch mit ODER verknüpft werden. 0001 0000 ODER 0000 0001 0001 0001 Dies entspricht Dezimal 17
Software • Projektdateien • Pseudocode • Entwicklungsumgebung
Liste der Programmdateien Erstellung des Projekts: Ampel.pro
Programm Main.c im Pseudo-Code 1 Deklarierung der globalen Variablen BUSY = 1 RUN = 0 Deklarierung der Variablen ProgStat und Initialisierung mit BUSY Hauptprogramm beginnt Deklarierung einer Variablen phase und Initialisierung mit 1 Initialisierungsprogramm Port A Initialisierungsprogramm Port C Wiederhole immer Fall phase Setzen der Ports Timer starten und Zeit übergeben phase plus 1 setzen Wenn phase == 15 Dann phase wieder auf 1 setzen
Programm Main.c im Pseudo-Code 2 Deklaration des start_timer Unterprogramms, das eine Zählvariable counter übergeben bekommt. Für i=0 bis counter, wiederhole Interrupt deaktivieren Timer0 Initialisierung aufrufen Interrupt aktivieren Wiederhole immer, solange bis Timer Interrupt ausgelöst hat (Status = RUN) ProgStat wieder auf BUSY setzen
Programm Gpio.c im Pseudo-Code Initialisierung von Port A Port A Address Register auf Data-Direction-Mode setzen Port A Control Register auf Output setzen Port A mit 0x00 initialisieren Initialisierung von Port C Port C Address Register auf Data-Direction-Mode setzen Port C Control Register auf Output setzen Port C mit 0x00 initialisieren Port A & C LED´s löschen Port A & C mit 0x00 überschreiben Port A & C LED´s anschalten Port A & C mit 0xFF überschreiben
Programm Timer.c im Pseudo-Code Initialisierungsprogramm Timer 0 Timer Anfangswert auf 0x00 setzen Timer Reloadwert auf 0xFFFF setzen Timer auf Einzeldurchlauf-Modus setzen Timer Vorzähler auf 128 setzen (Reload Value - Start Value) * Prescale)/System Clock Frequency (Hz) = ( 0xFFFF * 128 )/ 18.432MHz = 0.46sec
Timer in C-Code #include <eZ8f0422.h> #include "main.h" //Interrupt routine #pragma interrupt void isr_timer0(void) { setStatus(RUN); } //Intialize Timer-0 void init_timer0(void) { SET_VECTOR(TIMER0, isr_timer0); T0H = 0x00; // Timer High T0L = 0x00; // Timer Low T0RH = 0xFF; // Reload High T0RL = 0xFF; // Reload Low T0CTL = 0xF8; // Prescale is set to 128/One Shot Timer Mode 1111 1000 }
Wir danken für eure Aufmerksamkeit und wünschen euch noch viel Erfolg im Studium