Anwendungen der Mikrocontrollertechnik

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