FACHHOCHSCHULE FURTWANGEN HOCHSCHULE FÜR TECHNIK UND WIRTSCHAFT Fachbereich Computer & Electrical Engineering Studiengang Computer Engineering Diplomarbeit Konzeption und Implementierung einer CAN-basierten Gerätesteuerung Semester: Wintersemester 2004/05 vorgelegt von: Ayhan Millidere Betreuender Professor: Prof. Dr. Rainer Müller
ANHANG E: CAN Nachrichten Im Folgenden sind alle CAN Nachrichten aufgelistet die zur Steuerung benötigt werden. Die Titelzeilen sind wie folgt aufgebaut (x = Variable, Adresse): Identifier RTR Datenbytes Kurzbeschreibung Funktionsblock System: 1000xxxx000 - D1 Fehlermeldung Diese Nachricht wird von den Modulen verwendet um eine Fehlermeldung zu versenden. Die Nachricht wird in 200ms Intervallen wiederholt. Das Datenbyte beinhaltet einen Fehlercode. Folgende Werte sind bisher definiert: 02: NoBase, das Basis-Modul reagiert nicht auf die Heartbeat-Nachrichten. 03: MotorTimeout, die Motorspannung ist nicht abgeschaltet worden. 1000xxxx001 R - Heartbeat-Signal 1000xxxx001 - - Heartbeat-Acknowledge Diese Nachrichten werden zur Diagnose zwischen den Modulen verwendet. Das Basis-Modul beantwortet die Anfragen der anderen Module. Die Abfrage wird von den Modulen im 1 Sekunden Takt wiederholt. Funktionsblock Switches: 1001xxxx000 R - Tastenstatus abfragen 1001xxxx000 - D1,D2 Diese Request-Nachricht fragt den aktuellen Status der Tasten ab und liefert sie im ersten Datenbyte zurück. Hierbei entspricht Bit 0 des Bytes dem Taster 0, usw. Die Antwortnachricht wird auch automatisch versendet wenn sich eine Änderung der Tastenpegel ergeben hat. In diesem Fall wird im zweiten Datenbyte der Taster der diese Nachricht ausgelöst hat mit einem logischen 1 markiert.
Funktionsblock Motor: 1010xxxx000 R - Motorstatus abfragen 1010xxxx000 - D1 Mit dieser Nachricht wird der aktuelle Status des Motors abgefragt. Der Status wird im ersten Datenbyte zurückgesendet. Folgende Werte sind möglich: 00: Motor gestopt 01: Motor dreht nach Rechts 02: Motor dreht nach Links 1010xxxx000 - D1 Motor steuern Bei dieser Nachricht ist das RTR-Flag gelöscht und ein Datenbyte wird mitgesendet. Je nach übertragenem Wert wird folgende Aktion durchgeführt. 00: Motor anhalten 01: Motor nach Rechts fahren lassen 02: Motor Links fahren lassen Funktionsblock LED: 1011xxxx000 R - LED Status abfragen 1011xxxx000 - D1 Im Datenbyte wird der Status der fünf LEDs zurückgeliefert. Hierbei entspricht Bit 0 der LED 0, usw... 1011xxxx000 - D1 LED ansteuern Das übertragene Byte steuert den Zustand der LEDs. Nur die unteren 5 Bits werden betrachtet. 1011xxxx001 R - LED Status abfragen 1011xxxx001 - D1..D5 Bei dieser Variante wird der ermittelte Status über fünf Datenbytes zurückgeliefert. Jede LED ist durch ein Bytes repräsentiert. Eine 1 signalisiert eine leuchtende LED.
1011xxxx001 - D1,D2 LED ansteuern Bei dieser Variante wird eine einzige LED angesteuert. D1 referenziert die LED die manipuliert werden soll. Gültige Werte sind 0 bis 4. Das zweite Byte gibt die Aktion vor: 00: LED ausschalten 01: LED einschalten 02: Zustand der LED toggeln Funktionsblock Display: 1100xxxx000 - D1 Ein Zeichen auf dem Display ausgeben. 1100xxxx000 - D1..D3 Zeichen auf dem Display scrollen. Im Byte D1 wird in beiden fällen ein ASCI-Zeichen gesendet. Falls es im internen Zeichensatz vorhanden ist wird es angezeigt. Bei der zweiten Version wird durch die zwei zusätzlichen Bytes der Scrollmodus aktiviert. D2 legt die Richtung fest und D3 ob zwischen den Displayinhalten eine Trennzeile eingefügt werden soll (1 = Ja, 0 = Nein). Werte für D2: 00: Zeichen scrollt von oben hinein 01: Zeichen scrollt von unten hinein 02: Zeichen scrollt von links nach rechts 03: Zeichen scrollt von recht nach links 1100xxxx001 R - Inhalt des Framebuffers abfragen 1100xxxx001 - D1..D5 Die aktuell auf dem Display angezeigte Grafik wird zurück geliefert. Dabei entspricht D1 der ersten Spalte von links. Das niederwertigste Bit entspricht dem obersten Pixel. 1100xxxx001 - D1..D5 Grafik anzeigen 1100xxxx001 - D1..D7 Grafik herein scrollen Die in den fünf Bytes übergebenen Pixeldaten werden auf dem Display dargestellt. Ähnlich der obigen Funktion für Zeichen kann durch die zusätzlichen Bytes D6, D7 der Scrollmodus aktiviert werden. Für gültige Werte siehe oben.
1100xxxx010 - D1 Bestätigungszeichen aktivieren Mit dieser Nachricht kann auf dem Display ein Dreieck dargestellt werden. Das Dreieck wird dabei alternierend mit dem ursprünglichen Displayinhalt angezeigt. Die Blinkfrequenz liegt bei 1s. Es sind drei Varianten verfügbar: 00: Animation abschalten 01: ein Dreieck mit der Spitze nach unten 02: ein Dreieck mit der Spitze nach oben 03: beide Dreiecke gleichzeitig darstellen Funktionsblock Diagnose: 1111xxxx000 R - Versionsinformation abfragen 1111xxxx000 - D1..D4 Mit dieser Nachricht kann die Version der Firmware abgefragt werden. In D1 wird die Versionsnummer von der Main.c Datei geliefert, bei D2 von Main_Can.c. Das untere Nibble des Bytes stellt die Minor-Number dar und das obere Nibble die Mayor-Number. In Hex- Darstellung entspricht zum Beispiel 0x27 ziemlich genau v2.7. Die Bytes D3 und D4 übertragen die Checksumme der Firmware. Dieser 16 Bit Wert entspricht der gleichen Checksumme wie die der IDE MPLab von Microchip. D3 repräsentiert dabei das höherwertige Byte. 1111xxxx001 R - erweiterte Versionsabfrage 1111xxxx001 - D1..D8 Mit dieser Nachricht können die restlichen Version der Firmware abgefragt werden. Der Reihe nach werden die Version von Actuator.c, Can.c, ISR.c, Led.c, Matrix.c, Motor.c, Switches.c und Timer.c übertragen. 1111xxxx010 R - Motorstatistik abfragen 1111xxxx010 - D1..D3 Diese Nachricht liefert die Verzögerungszeiten bei der Motoranstuerung zurück. Wird ein Endschalter erreicht, behält der PC 250ms Zeit den Stop-Befehl abzusenden. In dem Byte D1 wird die zuletzt erreichte Verzögerungszeit zurückgeliefert. D2 entspricht der kürzesten und D3 der längsten Verzögerung. Alle in ms. 1111xxxx010 - - Statistik löschen Diese Nachricht veranlasst das die bisher ermittelten Werte zurückgesetzt werden. Das wäre für die min. Verzögerung 250ms und für die max. Verzögerung 0ms. 1111xxxx011 R - Pufferüberlauf Statistik abfragen
1111xxxx011 - D1..D4 Im PIC-Controller werden die CAN Nachrichten in Puffern gespeichert. Wenn der Puffer voll ist wird ein Overflow-Counter hochgezählt. Die Statistik kann mit dieser Nachricht abgefragt werden. D1 stellt die Anzahl Überläufe für die Hardware TX-Puffer dar. D3 und D4 geben die Anzahl nicht empfangbarer Nachrichten für die Hardware Puffer RX0 und RX1 dar. In D2 ist dagegen die Anzahl Überläufe für den Software Ringpuffer eingetragen. 1111xxxx100 R - Alles auf einmal 1111xxxx100 - D1..D8 Mit diesem Aufruf kann jeder Hardware Status auf einmal abgefragt werden. Das wären: D1: Bitfeld, Tastenstatus D2: Motorstatus = Bit 0..1, Bit 2 = Actuator-Status (Buzzer) D3: Bitfeld, alle sieben LEDs (auch Error und CAN) D5-D8: Displayinhalt Im Verbund mit der nächsten Funktion ist eine Read/Modify/Write Aktion durchführbar. 1111xxxx100 - D1..D8 Jede Funktion auf einmal kontrollieren Diese Nachricht ist das Gegenstück zur vorherigen. Die Anordnung der Bits ist die selbe. Nur werden die Daten interpretiert und ausgeführt. Hiermit sind auch die 2 sonst gesperrten LEDs Error und CAN und der Buzzer ansteuerbar. 1111xxxx101 - D1='P' Die Kabine parken Mit dieser Nachricht kann das Basis-Modul veranlasst werden die Kabine zu parken. Das heißt zum obersten Punkt zu fahren. 1111xxxx110 - D1='R' Einen Softreset ausführen Mit dieser Nachricht kann der Microcontroller einen Reset durchführen. Damit wird die Firmware neu gestartet und das Modul läßt sich wieder in einen definierten Zustand bringen.