Diese Toolbox soll die Grundlage für eigene (I-Bus) Projekte bieten. Es wird ein ATmega 162 AVR Mikrokontroller verwendet. Die Hardwarebeschreibung wird unter Elektronik veröffentlicht. Mit den fertigen Beispielen ist zum Beispiel eine CD-Wechsler Emulation möglich.
Beschreibung
Ich habe hier mal die allgemeine Beschreibung vom MP3 Player angefügt. Die Tollbox bassiert auf der MP3 Player Software. Genauer gesagt ist es die auf I-Bus Handling reduzierte Version. Diese Version kann und soll die Grundlage für neue Projekte dienen. Ich habe als Beispiele die CD-Emulation, die Anzeigefunktionen für die IKE Textzeile und die Textausgabe auf den CD-Wechsler Screen der Bordmonitor/Radioanzeige in den Quellcode integriert. Die Software kann außerdem auf die verschiedenen Tasten des Bordmonitors und der Lenkradtasten sowie auf diverse Nachrichten anderer Busteilnehmer reagieren.
Grundfunktionen
Timer
Durch einen Interrupt, ausgelöst bei Überlauf eines Timers im Mikrokontroller, wird eine Variable „systime“ alle 100ms inkrementiert. Diese Variable ermöglicht das zeitgesteuerte Ausführen von Befehlen und bildet somit eine wichtige Grundlage für ein Nachrichtensystem. Die Variable ist um Speicherplatz zu sparen nur als „unsigned short“ also eine 16 Bit Integer Zahl deklariert. Das bedeutet einen möglichen Zählbereich von 0 – 65536. Nach folgender Rechnung bedeutet dies dass nach ca. 109 Minuten der maximale Zählerstand der Variable erreicht ist.
Um zu vermeiden das nach dieser Zeit unvorhersehbare Fehlfunktionen durch überlauf und oder Fehler beim vergleichen der Timervariable mit anderen Variablen entstehen wird die Variable bei Erreichen des Zählerstandes „64000“ zurück auf „0“ gesetzt.
UART
Da die Kommunikation mit dem Fahrzeugbus über den UART des Mikrokontrollers stattfindet muss dieser entsprechend initialisiert werden. Außerdem wurden Funktionen zum Senden und Empfangen von Zeichen geschrieben. Die empfangenen Daten werden in einen 64 Zeichen fassenden Ringpuffer zwischengespeichert. Über eine weitere Funktion kann ermittelt werden ob sich Daten im Puffer befinden.Deklaration der I-Bus Nachrichten
Alle statischen Nachrichten werden unter einen eindeutigen Namen deklariert. Dazu gehören einerseits Nachrichten die gesendet werden, als auch Nachrichten auf die der MP3-Player reagieren muss. Dazu werden die empfangenen Telegramme mit den deklarieren Nachrichten verglichen.
cdpoll_ – Radio fragt CD-Wechsler an
getcurtk_ – Radio fragt aktuelle CD ab
next_ – Taste nächster Titel (Bordmonitor)
prev_ – Taste vorheriger Titel (Bordmonitor)
nextstw_ – Taste nächster Titel (Lenkrad)
prevstw_ – Taste vorheriger Titel (Lenkrad)
relnextstw_ – Taste loslassen nächster Titel (Lenkrad)
relprevstw_ – Taste loslassen vorheriger Titel (Lenkrad)
play_ – Play
stop_ – Stop
fwd_ – Schneller Vorlauf
rev_ – Schneller Rücklauf
but1_ – Taste 1 (Bordmonitor)
but2_ – Taste 2 (Bordmonitor)
but3_ – Taste 3 (Bordmonitor)
but4_ – Taste 4 (Bordmonitor)
but5_ – Taste 5 (Bordmonitor)
but6_ – Taste 6 (Bordmonitor)
butl1_ – Taste 1 halten (Bordmonitor)
butl2_ – Taste 2 halten (Bordmonitor)
butl3_ – Taste 3 halten (Bordmonitor)
butl4_ – Taste 4 halten (Bordmonitor)
butl5_ – Taste 5 halten (Bordmonitor)
butl6_ – Taste 6 halten (Bordmonitor)
toneh_ – Taste Tone halten (Bordmonitor)
pushautorev_ – Taste AUTOREVERSE (Bordmonitor)
holdautorev_ – Taste AUTOREVERSE (Bordmonitor)
knopr_ – Bedienknopf Rechtsdrehung (Bordmonitor)
knopl_ – Bedienknopf Linksdrehung (Bordmonitor)
knoprf1_ – Bedienknopf Rechtsdrehung 1 (Bordmonitor)
knoprf2_ – Bedienknopf Rechtsdrehung 2 (Bordmonitor)
knoprf3_ – Bedienknopf Rechtsdrehung 3 (Bordmonitor)
knoplf_ – Bedienknopf Linksdrehung 1 (Bordmonitor)
select_ – Taste SELCET (Bordmonitor)
info_ – Taste INFO (Bordmonitor)
tone_ – Taste TONE (Bordmonitor)
knoppush_ – Bedienknopf drücken (Bordmonitor)
stringcdno_ – Anzeigestring CD-Nummer
stringcd2_ – Anzeigestring “CDC”
navmenuset_ – Anzeigestring “Menü”
navmenutimed_ – Anzeigestring “Menü 2”
refresh_ – Anzeigestring “Anzeige-refresh”
refresh2_ – Anzeigestring “Anzeige-refresh”I-Bus Nachrichteninterpreter (LEXER)
Interpreter für Nachrichten
Durch vergleichen der über den Empfangspuffer empfangenen Zeichen mit den gespeicherten Nachrichten können diese erkannt werden. Die Funktion gibt bei Aufruf mit dem Namen der zu vergleichenden Nachricht als Übergabewert und Übereinstimmung der Daten „TRUE“ zurück.Senden und empfangen von Nachrichten
Sollen Daten gesendet werden ist darauf zu achten keine anderen Busteilnehmer zu stören. Findet gerade eine andere Kommunikation über den Bus statt muss diese abgewartet werden. Durch eine Funktion wird dies vor jedem Sendevorgang geprüft. Die gesendeten Nachrichten müssen außerdem die Telegrammlänge und eine XOR-Prüfsumme enthalten.
Beim Senden wird der Empfang abgeschaltet um nicht die eigenen Zeichen zu empfangen. Außerdem ist zu beachten dass nicht auf die gleiche Weise vom RAM oder Flash-Speicher gesendet werden kann. Es gibt somit zwei unterschiedliche Sendefunktionen.Ausgabefunktionen
Nachrichtengenerierung
Die Nachrichten zur Anzeige auf dem Bordmonitor müssen außer den anzuzeigenden Daten auch die Adressen der jeweiligen Anzeigefelder enthalten.
Zur Generierung werden für jedes Anzeigeziel (Instrumentenkombination, Titelfelder und Indexfelder des Bordmonitors) entsprechende Funktionen bereitgestellt.Überschreiben der Radioanzeige im Bordmonitor
Um eigene Informationen auf dem Bordmonitor anzuzeigen müssen die vom Radio gesendeten Informationen auf dem Bordmonitor bzw. Navigationsrechner überschrieben werden. Um dies zu ermöglichen werden, nachdem das Radio die Nachrichten zum Navigationsrechner übermittelt hat, die eigenen Informationen übertragen. Die Aktualisierung erfolgt weiterhin beim wechseln des Titels um jederzeit die aktuellen Titeldaten anzuzeigen. Um ein Fehlverhalten zu vermeiden ist diese Aktualisierung in bestimmten Fällen zu vermeiden. Die ist beim ausschalten des Radioanzeigemodus und bei dem einblenden der Menüs der Fall. Auch wenn der CD-Wechsler Modus und die Wiedergabe durch ausschalten des Radios oder wechseln zum Radioempfang verlassen wird ist die Aktualisierung der Anzeige zu verhindern.I-Bus Nachrichtensystem
Das Nachrichtensystem bildet den Kern der Anpassung zur Kommunikation mit dem Fahrzeug. Reaktion auf Nachrichten von anderen Busteilnehmern
Die Funktion bzw. der Event enthält eine Schleife die solange durchlaufen wird wie Daten im Empfangsringpuffer vorhanden sind. Die empfangenen Daten werden vom LEXER-Interpreter ausgewertet und lösen je nach Anforderung entsprechende Reaktionen aus. Je nach Anforderung können mehrere Reaktionen erforderlich sein. Soll der Player gesteuert werden wird ein entsprechender Event gesetzt. Das komplette Verhalten des MP3-Players wird in dieser Funktion bestimmt. Dabei werden alle in der Bedienungsanleitung beschriebenen Funktionalitäten ermöglicht. Erfordern die Anfragen nachfolgende Ausgaben von Nachrichten, wie das zum Beispiel bei der Anforderung zum Überschreiben der Textfelder im Bordmonitor der Fall ist, erfolgt dies über eine zeitgesteuerte Ausgabe. Über dieses System kann bestimmt werden in welcher zeitlichen Abfolge die entsprechenden Nachrichten gesendet werden. Ermöglicht wird dies durch Setzen einer Variable mit dem aktuellen Zählerwert der Timervariablen plus der gewünschten Zeit in der eine Aktion bzw. Ausgabe geplant wird. Für jede mögliche Aktion ist eine eigene Variable deklariert.BMW CD-Wechsler Emulation
Um die Funktion im Fahrzeug zu ermöglichen muss sich der MP3-Player wie der originale BMW Wechsler verhalten. Um dies zu gewährleisten sind die im beschriebenen Verhaltensweisen implementiert werden. Außer der Anmeldung mit einer Nachricht an das System beim Start des Fahrzeugs und dem Antworten müssen die Anfragen des Radios beantwortet werden. Das Radio empfängt die Nachrichten beim drücken der Tasten am Bordmonitor gleichermaßen und schaltet den Ton ab um keine Störgeräusche, die beim Wechseln der CD oder des Titel mit dem original CD-Wechsler entstehen würden, über die Lautsprecher wiederzugeben. Im Originalzustand sendet der Wechsler, nachdem der Titel oder die CD gewechselt wurde, eine Nachricht an das Radio das die Wiedergabe startet. Danach wird der Ton wieder eingeschaltet. Der MP3-Player muss sich daher auch hier entsprechend verhalten um bei einem durch die Bedienelemente des Fahrzeugs ausgelösten Titelwechsel ein längeres unterbrechen der Wiedergabe zu vermeiden. Dies wird nach einem Titelwechsel durch das senden einer statischen Nachricht (Wiedergabe CD1 Titel 01) an das Radio erreicht.Zeitgesteuertes senden von Nachrichten
Die Anforderungen aus der Nachrichtenauswertung erfordern zum Teil eine Zeitgesteuerte Ausführung. Dies wird durch vergleichen der Variablen „systime“, die sozusagen die Systemzeit darstellt, und einer der gewünschten Funktion entsprechenden weiteren Variablen ermöglicht.
Systime Aktion
100 Setzen einer Variablen „x“ mit dem aktuellen Stand von „systime“
gewünschte Verzögerung „y“ mal 100 ms [ x = systime + y (y = 5à x = 105) ]
101
105
106 Durch Vergleichen der Variablen x mit der aktuellen Systemzeit wird das
Bestimmte gewünschte Ereignis ausgelöst. [ systime > x ]
Die Variable „x“ wird nachfolgend entweder wieder mit einer neuen Verzögerung geladen oder es eine
weitere Verarbeitung durch laden von „-1“ verhindert da „systime“ niemals negativ werden kann.Variablen des I-Bus Nachrichtensystems
Die folgenden Variablen sind für das Funktionieren des Nachrichtensystems erforderlich:
(Werte in [X] geben den jeweiligen Zustand der Variable an)
display
Schalter ob Bordmonitoranzeige aktiv ist und Informationen an den Navigationsrechner ausgegeben werden können (Radioanzeige aktiv [1])
Außerdem werden bestimmte Bedienfunktionen (hauptsächlich Drehknopf) inaktiv gesetzt, wenn die Radioanzeige nicht aktiv und somit [display = 0] gesetzt ist
ike
Umschaltung der anzuzeigenden Daten in der Instrumentenkombination
t_announce
Timervariable für senden der Nachricht „CD-Wechsler aktiv“ [systime + x]
t_area
Timervariable für Aktualisierung der Titelfelder im Bordmonitor [systime + x]
t_index
Timervariable für Aktualisierung der Indexfelder im Bordmonitor [systime + x]
t_start
Timervariable für Senden der Nachricht „Starte das Abspielen“ [systime + x]
t_time
Timervariable für Aktualisierung der Titelfelder im Bordmonitor zur Anzeige der Spielzeit
[systime + x]
t_ike
Timervariable für Aktualisierung der Textzeile in der Instrumentenkombination [systime + x]
Neueste Kommentare