Logo

last update: Sunday, October 14, 2007

BMW I-Bus Toolbox

Neu! Über dieses Thema kann im Forum geschrieben werden. Bei Fragen und Problemen bitte ich im Forum Hilfe zu suchen.

Diese Toolbox soll die Grundlage für eigene (I-Bus) Projekte bieten. Es wird ein ATmega 162 AVR Mikrokontroller verwendet. Die Hardwarebeschreibung wird unter AVR/Elektronik veröffentlicht. Mit den fertigen Beispielen ist zum Beispiel eine CD-Wechsler Emulation möglich.
Die Software und der Quellcode ist im Forum verfügbar. Für den Quellcode ist eine Registrierung im Forum erforderlich!


Inhalt

Beschreibung

Software


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.

Viel Spaß bei den eigenen Projekten - und bitte darüber im Forum berichten!

Für das Kompillieren ist eine ältere Version von AVR-GCC notwendig. Wenn Versionen über 3.X verwendet werden sollen, ist eine Anpassung des Quellcodes notwendig. Die passende AVR-GCC Version kann hier heruntergeladen werden.

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]


Software

Download des Quellcodes im Forum

AVR-GCC Download



Fragen?

Neu! Über dieses Thema kann im Forum geschrieben werden. Bei Fragen und Problemen bitte ich im Forum Hilfe zu suchen.


© 2007 Alexander Brünnert