Anwendungen der Mikrocontrollertechnik Projektarbeit WS15/16 Prof. Dr.-Ing. Dietmar A. Brück Jannik Haupenthal 3601110 Stichpunkte: ➔ Entwicklung der Aufgabenstellung zu der Erweiterungsplatine „7 Segment Anzeige“ ➔ Entwicklung einer Lösung zu der Aufgabenstellung ➔ Ansteuerung eines Linienbusanzeigers über die Serielle Schnittstellen des Raspberry Pi's (fehlgeschlagen) Inhaltsverzeichnis Aufgabenstelleung – Stoppuhr.............................................................................................................3 Beschreibung...................................................................................................................................3 Funktionsweise................................................................................................................................4 Aufgabe - Initialisierungsdatei.........................................................................................................5 Aufgabe – Trigger............................................................................................................................6 Aufgabe – BCD-Tabelle..................................................................................................................6 Aufgabe – Time...............................................................................................................................6 Aufgabe - Stoppuhr..........................................................................................................................6 Aufgabe – Time1.............................................................................................................................7 Lösungsvorschlag............................................................................................................................8 Ansteuerung eines Linienbusanzeiger................................................................................................11 Beschreibung..................................................................................................................................11 Quellcode main:.............................................................................................................................13 Fazit:..............................................................................................................................................14 2 Jannik Haupenthal Aufgabenstelleung – Stoppuhr Beschreibung Mit Hilfe des Zusatzmoduls "7-Segment-Anzeige" für den Infineon C515C-L soll eine Stoppuhr realisiert werden. Alle Ausgänge sind über das Bus-Driver-Zusatzmodul zu schalten. Die Stoppuhr soll auf insgesamt vier Anzeigen die Zeit in Sekunden und Millisekunden stoppen. Auf der letzten BCD-Stelle soll die Zeit in Millisekunden laufen. Die obersten 3 BCD-Stellen sollen die Sekunden darstellen. Anzeige (Trigger) BCD1: Millisekunden BCD2: Sekunden Einer-Stelle BCD2: Sekunden Zehner-Stelle BCD3: Sekunden Hunderter-Stelle (D0) (D1) (D2) (D3) Steht die Stoppuhr bei 999,9s vor dem Überlauf, soll sie im nächsten Zählzyklus neu beginnen. Zum Start bzw. Reset der Uhr werden Schalter verwendet. Ein Schalter dient zum Starten der Uhr. Die Uhr läuft so lange, bis der Schalter wieder in seine Ruheposition versetzt wird. Das Verhalten des Start- und Reset-Schalters ist in folgender Tabelle festgelegt. Nach dem Einschalten soll die Stoppuhr mit 0000 initialisiert werden. StartResetSchalter Schalter Ereignis x / Die Stoppuhr zählt x x Die Stopuhr läuft weiter. Der Reset hat keine Auswirkung / x Die Stoppuhr wird wieder mit 0000 initialisiert / / Die Stopuhr pausiert. Der aktuelle Zahlenwert ist sichtbar. 3 Jannik Haupenthal Abbildung 1: 7 Segment Zusatzmodul Funktionsweise Abbildung 2: 7 Segment Anzeige Alle vier 7-Segment-Anzeigen werden über einen einzigen Port gesteuert. Es empfiehlt sich, das LSB des Ports für den a-Eingang der Anzeige zu verwenden. Dem entsprechend wird für das MSB des Port der h-Eingang verwendet. 4 Jannik Haupenthal Welche Anzeige man mit dem Wert im Port beschreiben will wird über die Eingänge D0 bis D3 entschieden. Eine positive Flanke am Eingang D0 bewirkt eine Wertübernahme von dem Port (Eingänge a bis h) in den C-MOS Speicher der ersten Anzeige. Selbige Vorgehensweise mit D3 bewirkt eine Wertübernahme auf die letzte Anzeige. Folgende Reihenfolge ist somit für die Ansteuerung einzuhalten: 1. Definierten Wert an die Eingänge a bis h anlegen. 2. Erzeugung eines 0-1 Impulses (denken Sie an das Zurücksetzen für das nächste Triggern) Wichtig: Der Wert, den sie an die Eingänge a bis h legen wird von dem Zusatzmodul invertiert! Aufgabe - Initialisierungsdatei Schreiben Sie Ihre eigene Initialisierungsdatei, damit Sie eine Übersicht der verwendeten Ein- und Ausgänge haben. Speichern Sie diese Datei in Ihrem Projektpfad und konfigurieren Sie Ihr Programm soweit, dass Sie diese Datei in Ihrem Programm verwenden können. Überprüfung Sie Ihre Initialisierungsdatei mit Hilfe der Portsignale im „Keil uVision 4“. Aktivieren Sie die Sensoren/Aktoren nacheinander per Hand und überprüfen Sie dabei den Portstatus. Kontrollieren Sie danach die Funktionalität der Aktoren, indem Sie die Ausgänge des Kontrollers nacheinander setzen um die Bewegung zu erkennen. Achten Sie darauf KEINE Eingänge zu setzten. Bitte beachten Sie folgende Vorgehensweise zur Erstellung der Initialisierungsdatei: - Kopieren Sie die Datei „Reg515C.inc“ im Ordner „Keil\C51\ASM“ auf Ihren USB-Stick in Ihr eigenes Verzeichnis und benennen Sie diese Datei um in „INIAmpel“. - Bearbeiten Sie in der Initialisierungsdatei die Ports die Sie Verwenden, und Vergeben Sie passende Namen, orientieren Sie sich dabei an der Tabelle 2. Ampelphasen. - Sie können nun Ihre eigene Initialisierungsdatei mit folgenden Befehlen in Ihre Quelldatei einbinden: $NOMOD51 //Registerbelegung des C8051 deaktivieren $include (INIUhr) 5 Jannik Haupenthal Aufgabe – Trigger Legen sie im direkten Speicher die Variablen BCD1 bis BCD4 für die jeweiligen Anzeigen an. Diese Variablen BCD1 bis BCD4 werden später im Hauptprogramm mit den BCDWerten aus der Tabelle beschrieben. In dem Unterprogramm Trigger geben sie lediglich ihren BCD-Wert an Port 1 weiter und steuern der Reihe nach die einzelnen Anzeigen an. Testen Sie Ihr Programm, indem Sie die Anzeigen BCD1 bis 4 mit 0 beschreiben. Aufgabe – BCD-Tabelle Schreiben Sie ein Unterprogramm Tabelle. Das Unterprogramm Tabelle soll die invertierten Zahlen von 0 bis 9 in die Adressen 80h bis 89h schreiben. Nutzen Sie die indirekte Addressierung über R0 um die BCD-Werte in die Adressen 80h bis 89h zu schreiben. Aufgabe – Time In einem weiteren Unterprogrammm Time soll eine Verzögerung von 0,1 Sekunde realisiert werden. Erstellen Sie einen Programmablaufplan für das Unterprogramm und codieren Sie den Programmcode in Assembler. Diese Zeit wird als Takt für die BCD1Anzeige verwendet (Millisekunden). Aufgabe - Stoppuhr Realisieren Sie mit den Unterprogrammen Tabelle, Time und Trigger die in Kapitel "Beschreibung" festgelegte Funktionsweise. Das Unterprogramm Time liefern ihnen einen Takt für die Anzeige BCD1. Überlegen Sie sich, welcher Millisekunden Wert einen Wertewechsel in der nächsten Anzeige bewirkt. Greifen Sie auf die Werte der Tabelle über die indirekte Adressierung zu. Gehen Sie Schritt für Schritt vor. Realisieren Sie zuerst den Wechsel der BCD1 zu BCD2-Stelle. Hinweis: Pro BCD Anzeige benötigen sie ein anderes indirekt addressierbares Register. Achten Sie auf die Auswahl der Registerbank. 6 Jannik Haupenthal Aufgabe – Time1 Ersetzen sie das Unterprogramm Time durch Time1. Time1 soll einen Timer verwenden. 7 Jannik Haupenthal Lösungsvorschlag 8 Jannik Haupenthal 9 Jannik Haupenthal 10 Jannik Haupenthal Ansteuerung eines Linienbusanzeiger Beschreibung Linienbusanzeiger reagieren ausschließlich auf, die für sie bestimmten, Ibis-Datensätze. Diese sind vom Verband deutscher Verkehrunternehmen in der VDV-300 Schrift festgelegt worden. Versendet werden die Daten von einem Master über eine serielle Schnittstelle. Die Spannung, mit der die Ibis-Telegramme versendet werden muss 24V betragen. Die Schnittstelle muss folgendermaßen initialisiert werden: ➢ Baudrate: 1200 bit/sec ➢ Anzahl Startbits: 1 ➢ Anzahl Datenbits: 7 ➢ Parität: gerade ➢ Anzahl Stopbits: 2 Abbildung 3: Zielanzeiger In Abbildung 3 sehen Sie drei verschiedene Zielanzeiger. Im Rahmen dieses Versuches werde ich mich ausschließlich auf den mit "1" gekennzeichneten Zielanzeiger beziehen. Dieser Anzeiger reagiert auf zwei verschiedene Ibis-Datensätze. Den Datensatz, der die Liniennummer als Inhalt besitzt und den mit der Endhaltestelle. Datensatz Aufrufcode Beschreibung DS001 lZZZFP Liniennummer DS003a zAHnCFP Endhaltestelle 11 Jannik Haupenthal Am Beispiel des Datensatzes DS001 werde ich den Aufbau des Telegramms erklären. Folgendes Beispiel erklärt den Aufbau des Telegrammes für die Liniennummer 126. Wie in der Tabelle sichtbar muss das Protokoll "l126FP" übertragen werden. Nach dem Aufrufcode werden 3 Ziffern erwartet. Danach folgt das Formatprüfzeichen in Form eines "Carriage Return". Abschließen wird das Paritätsbyte gebildet. Ibis Zielanzeiger arbeiten mit einer ASCII-Codierung. Wandelt man nun den Inhalt in Hexadezimalzahlen um erhält man das Protokoll <6C><31><32><36><0D> <Paritybyte>. "0D" entspricht dabei dem Carriage Return. Um die Paritätsbildung zu erklären wandelt man dieses Protokol in Binärzahlen um. Die Parität wird wiefolgt gebildet: Hex -> Bin 6C -> 0110 1100 31 -> 0011 0001 32 -> 0011 0010 36 -> 0011 0110 0D -> 0000 1101 2B -> 0010 1011 -> Paritybyte Mit der in Abbildung 4 dargestellten Schaltung, einem Raspberry Pi und einem Python Skript wird nun versucht auf die Anzeige zu schreiben. Der Wandler ermöglicht eine Ansteuerung des Anzeigers über die UART Schnittstelle des Raspberry Pi's (3,3V zu 24V). Abbildung 4: 3,3V/24V Wandler 12 Jannik Haupenthal Quellcode main: 13 Jannik Haupenthal Fazit: Die Anzeige hat keinerlei Reaktion auf die versendeten Datensätze gezeigt. Der Grund dafür ist unklar. Ich führe es auf die fehlenden Kenntnisse der Ibis-Schnittstellen Spezifikation zurück. Die Schnittstelle ist in der VDV-300 Schrift spezifiziert. Ohne Geld zu investieren kann ich dieses Dokument leider nicht einsehen. 14 Jannik Haupenthal
© Copyright 2024 ExpyDoc