Logo

last update: Monday, January 14, 2008

BMW MP3 PROJEKT


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

Die Hardware des Players (yampp3/USB) ist wieder verfügbar! Informationen im Forum..

Nach vielen Anfragen habe ich mich daführ entschieden die Software zu veröffentlichen! Im Forum kann nach Registrierung die Firmware passend für Fahrzeuge mit MK3/MK4 Navirechner und Bordmonitor heruntergeladen werden.

Aufruf! Programierer gesucht! Ich suche nach Programmierern die interresse daran haben die Software auf andere Ausstattungen wie MID anzupassen. Mir selbst fehlt leider die Zeit und die passende Ausstattung des Fahrzeugs. Interressierte Entwickler sollten Kentnisse mit AVR-Mikrokontrollern haben. Außerdem möchte ich das die fertige angepasste Software dann veröffentlicht wird. Es steht ein Forum mit entsprechnden Board für registierte Entwickler zur Verfügung.
Bitte registieren sie sich im Forum!


Dieses Projekt beschäftigt sich mit der vollständigen Integration eines MP3-Players in einen BMW 5er E39. Dabei wird der Player an das Bussystem der im Fahrzeug vorhandenen Steuergeräte gekoppelt.

Es handelt sich um einen yampp MP3-Player basierend auf einem ATMEL ATmega 162 Prozessor. Dieses System wurde um eine I-Bus (BMW Fahrzeugbus / K-Bus ähnlich) Schnittstelle erweitert.

Die Schwerpunkt lag darin die Firmware des MP3-Players (AVR-GCC) um Funktionen zu erweitern die die Kommunikation über den I-BUS mit dem Fahrzeug ermöglichen. Es sollte eine vollständige Integration erreicht werden. Das heißt Bedienung bzw. Steuerung über die vorhandenen Bedienelemente des Fahrzeuges und entsprechende Anzeige der Informationen auf dem Navigationsdisplay.
Weitere Aufgaben ergaben sich aus der zu entwickelnden Peripherie des MP3-Players zur Anpassung der RS232 Schnittstelle an den K-BUS Standard. Außerdem war es erforderlich die Stromversorgung entsprechend der im Fahrzeug auftretenden Betriebsmodi zu steuern.


Video

Einbau und Bedienung im Fahrzeug (Download)

(Videodownload ca. 10MByte)


Inhalt

Funktionen und Bedienung

Yampp MP3-Player Grundmodul

Konstruktiver Aufbau

Hardwarebeschreibung

Softwarebeschreibung der Anpassungen des Quellcodes

Pläne


Funktionen und Bedienung

Steuerung über die Komponenten des Fahrzeugs (BMT/LKR)

Tastenlayout: Bordmonitor 16:9 Widescreen

Legende:
(BMT) - Bordmonitortasten
(LKR) - Lenkradtasten
[.. H] - Taste >1s gedrückt halten

[MODE](BMT)
- Aktivierung / Deaktivierung des Players
- > Play/Stop Modus (mit automatischer Fortsetzung des zuletzt gehörten Titels)

[< >](BMT) und [<][>](LKR)
- Titel vor/zurück

[1 4](BMT) und [< H][> H](LKR)
- Playlist vor/zurück

[2 5](BMT)
- Taste (2) Sprung auf erste Playlist
- Taste (5) Sprung auf letzte Playlist

[3 6](BMT)
- Taste (3) Sprung auf ersten Titel in Playlist
- Taste (6) Sprung auf letzten Titel in Playlist

[1-H](BMT)
- Sprung auf Playlistspeicher "1"

[2-H](BMT)
- Sprung auf Playlistspeicher "2"

[3-H](BMT)
- Sprung auf Playlistspeicher "3"

[4-H](BMT)
- Sprung auf Playlistspeicher "4"

[5-H](BMT)
- Sprung auf Playlistspeicher "5"

[6-H](BMT)
- Sprung auf Playlistspeicher "6"

[PUSHNAVIKNOP](BMT)
- Pause

[NAVIKNOP-Rechtsdrehung](BMT)
- Schneller Vorlauf

[NAVIKNOP-Linksdrehung](BMT)
- Schneller Rücklauf

[<>](BMT)
- Anzeige der Gesamtzeit für 5s

[<>-H](BMT)
- Umschaltung der Zeitanzeige (aktuell/gesamt)

[TONE H](BMT)
- Equalizer Modus

[PUSHNAVIKNOP-H](BMT)
-->Optionen Modus

[>] (BMT) - im "Optionen"-Modus
- Wiedergabemodus

[<] (BMT) - im "Optionen"-Modus
- Zufallswiedergabe ein/aus

[1-H](BMT)
- Playlistspeicher "1"

[2-H](BMT)
- Playlistspeicher "2"

[3-H](BMT)
- Playlistspeicher "3"

[4-H](BMT)
- Playlistspeicher "4"

[5-H](BMT)
- Playlistspeicher "5"

[6-H](BMT)
- Playlistspeicher "6"

Funktionen im Zusammenhang mit dem Fahrzeug

• Einschalten mit Stellung „1“ des Zündschlüssels
Das Gerät wird bei ausgeschalteter Zündung ebenfalls abgeschaltet um ein entladen der Autobatterie zu vermeiden.

• Stromversorgung über Bordnetz
Die Stromversorgung erfolgt über das Bordnetz des Fahrzeugs . Die im Fahrzeug vorkommenden Spannungspegel und Störspannungen wurdenberücksichtigt.

• Anbindung an den K-Bus (I-Bus) zur Kommunikation
Der MP3-Player ist in der Lage über den Fahrzeugdatenbus nach dem K-Bus Standard (im Fahrzeug I-Bus bzw. Instrumentierungsbus genannt) mit den im Fahrzeug vorhandenen Kommunikations- und Steuergeräten zu kommunizieren.

• Emulation des CD-Wechslers
Es wurde zum Betrieb im Fahrzeug eine CD-Wechsler Emulation in die Software des MP3-Player implementiert.

• Bedienung des MP3-Players über Bordmonitortasten und Lenkradtasten
Zur Bedienung werden die Bordmonitor- und Lenkradtasten verwendet. Die entsprechenden Buskommandos sind über den Instrumentierungsbus einzulesen. Die Auswahl der Tasten ist nach ergonomischen Gesichtspunkten zu wählen. Es wurden die Grundfunktionen (Play, Pause, Titel vor/zurück, Playliste vor/zurück) sowie weitere für den Einsatz im Auto verwendbare Funktionen (Random Modus, Abspielmodus, Schnellzugriff auf Titel und Playlisten, Titelscan vor/zurück, Anzeigeumschaltung Spielzeit/Restzeit) des MP3-Players über die Fahrzeugtasten steuerbar gemacht.

• Anzeige der Titeldaten auf dem Bordmonitor
Der im Fahrzeug vorhandene Bordmonitor ist im Zusammenhang mit dem Navigationssystem zur Anzeige der Titeldaten verwendet worden. Die Anzeige umfasst alle Verfügbaren Informationen wie Titelname, Interpret, Playlistname, Spielzeit/Restzeit und Nummerierung des Titels,

Allgemeine Funktionen

• 40GByte Datenspeicher für MP3 Daten
Zur Speicherung von MP3 Daten wurde ein ausreichend großer Massenspeicher gewählt der zum Einbau in ein Fahrzeug geeignet ist.

• Statusanzeige auf LC-Display (integriert im MP3-Player)
Im Gerät wurde eine LC-Anzeige integriert die Informationen über Status und eventuelle Fehlermeldungen zeigt. Diese Anzeige ist nötig um einen Betrieb außerhalb des Fahrzeugs zu ermöglichen.

• USB Schnittstelle
Über die USB Schnittstelle ist ein Laden von MP3 Daten und Softwareaktualisierungen möglich.

• Anschluss für externe Stromversorgung
Zum Betrieb außerhalb des Fahrzeugs ist die Anschlussmöglichkeit für eine Stromversorgung vorgesehen.

• RS232 Schnittstelle mit Zugriff auf den Fahrzeugbus
Das Gerät wurde mit einer RS232 Schnittstelle auszurüstet die sowohl Zugriff auf die Serielle Schnittstelle des MP3-Players ermöglicht als auch parallelen Zugriff auf den Fahrzeugbus.

• Audioausgang über Klinkenbuchse (3,5mm)
Parallel zum Audioausgang für das Fahrzeug ist eine Klinkenbuchse zum Anschluss eines Kopfhörers vorgesehen.


Yampp MP3-Player Grundmodul

Der für dieses Projekt verwendete MP3-Player „yampp-3/USB“ ist ein OpenSource Projekt das von Jesper Hansen entwickelt wurde. Die Bezeichnung „yampp“ steht für „yet another MP3-Player“ was soviel bedeutet wie „nur ein anderer MP3-Player“.

Link zum "Yampp MP3-Player"

Der Player stammt aus der Zeit in der viele Selbstbauprojekte für MP3-Player im Internet veröffentlicht wurden. Viele von diesen Projekten wurden von 1997 bis  2002 veröffentlicht. Dies lag unter anderen darin das die Industrie anfangs den Standard MP3 zu Musikkomprimierung kaum unterstützt hat. Durch den Boom in den letzten Jahren der unter anderen durch die Tauschbörsen im Internet ausgelöst wurde sind MP3-Player in allen Varianten zu sehr günstigen Preisen verfügbar geworden. Als Folge davon gibt es kaum noch neuere Projekte die sich mit dem Selbstbau von MP3-Playern beschäftigen.

Der Player eignet sich sehr gut für das Projekt da er alle benötigten Eigenschaften hat. Es handelt sich um einen MP3-Player für IDE-Festplatten als Speichermedium.  Gesteuert wird der Player von einem Atmel ATmega 162 RISC-Mikrokontroller.  Ein Vorteil des Atmel Mikrokontrollers gegenüber anderen Mikroprozessor-Familien ist, dass sich dank der RISC-Architektur die meisten Befehle auf Register innerhalb eines Systemtakts abarbeiten lassen, ausgenommen Sprung- und Multiplikationsbefehle, sowie Zugriffe auf das Speicherinterface (u. a. RAM und I/O-Ports). Somit ist diese Architektur sehr schnell im Vergleich zu anderen, schnell genug den Datenstrom von der Festplatte mit ATA-Protokoll zum MP3 Decoder zu leiten und noch Reserven der Rechenleistung bereit zu halten.

Der MP3 Datenstrom wird über einen MP3 Decoderschaltkreis vom Typ VS1001 der Firma VLSI decodiert. Der VS1001 beinhaltet ein 16/32 Bit DSP in Harvard Architektur, neben 4 kByte Speicher im 32Bit breiten Befehlsspeicher, stehen dem Anwender noch jeweils 256 Byte Speicher im X- Und Y- Datenbereich für eigene Anwendungen zur Verfügung. Die während der Dekodierung dem Anwender zur Verfügung gestellte Rechenzeit variiert, und hängt hauptsächlich von der Bitrate des gerade dekodierten Bitstromes, und der Taktfrequenz des DSPs ab.  Der vom Hersteller zur Verfügung gestellte Dekodieralgorithmus unterstützt MPEG 1 und 2, in den Audio Layern 1, 2 und 3. Der DSP verfügt über zwei unabhängig voneinander arbeitenden Schnittstellen. Das bidirektionale Serielle Command Interface (SCI) dient zur Steuerung. Das Serielle Daten Interface (SDI) nimmt nur die zu dekodierenden Daten entgegen. Die Arbeitsweise des SDI wird bei der Initialisierung über das SCI gesteuert. Das SCI ist ein reines Slave Device, wobei das SDI auch als Master konfiguriert werden kann.

Die MP3 Titel können im Gegensatz zu anderen MP3-Playern ohne die Festplatte auszubauen direkt über die USB Schnittstelle aufgespielt werden. Für diese Schnittstelle wird ein FT8U245BM verwendet der  parallel am Mikrokontroller angeschlossen ist. Dieser Schaltkreis der Firma FTDI übernimmt die gesamte Protokollbearbeitung des USB-Protokolls und wird bei Anschluss an einen PC (Windows oder Linux) mit entsprechendem Treiber als Serielle Schnittstelle erkannt. Die USB Schnittstelle war das Hauptkriterium zur Auswahl da sich ein Ausbau der Festplatte nach dem Einbau des fertigen Gerätes in das Fahrzeug sehr schwierig gestalten würde.

Die zur Kopplung an das Fahrzeug benötigte RS232 Schnittstelle ist in der Grundversion des Players ebenfalls vorhanden.

 

Der MP3-Player hat folgende Eigenschaften:

 

·IDE Interface nach ATA Standard für IDE-Festplatten

·USB Interface für zum laden neuer Firmware und aufspielen von MP3 Titeln. Der Bootlader kann eine neue Firmware in weniger als 2 Sekunden in den Flashspeicher des Mikrokontrollers laden

·Integrierte 5V Spannungsversorgung (Schaltregler)

·Kopfhörer Ausgang, verwendbar als Ausgang mit Line-Pegel

·RS-232 Interface zur Kommunikation mit dem LIN-Bus

·Optionales RS-485 Interface (wird nicht verwendet)

·IR Empfänger für Infrarotfernbedienung (wird nicht verwendet)

·LCD Display Anschluss für Grafische Displays (wird nicht verwendet)

·LCD Display Anschluss für “Standard" LCD.

·Bis zu 8 Tasten zur Steuerung (wird nicht verwendet)

 

Das Hardwaredesign wurde für dieses Projekt nicht verändert. Somit konnte der originale Bausatz des MP3-Players vom Typ „yampp 3/usb“ verwendet werden. Die Anpassungen wurden über externe Schaltungen vorgenommen.

yampp3u_asseml.jpg

Abbildung 1.11: MP3-Player Grundmodul (yampp) wie im Projekt verwendet. Die Platine misst in der Diagonale exakt 2,5 Zoll.

 

Als Speichermedium für MP3 Daten wird eine 2,5 Zoll Festplatte verwendet. Die verwendete Festplatte (Hitachi IDE 40GByte) eignet sich zum Einbau in ein Kraftfahrzeug.  Dies begründet sich zum einen darin das die benötigte 5V Stromversorgung vom MP3-Player Grundmodul bereitgestellt wird. Außerdem sind 2,5 Zoll Festplatten für tragbare Geräte ausgelegt und relativ unempfindlich gegen Erschütterungen.  Eine „normale“ 3,5 Zoll Festplatte, wie in jedem PC zu finden, benötigt zum einen zusätzlich eine 12V Versorgung und ist im Betrieb wesentlich empfindlicher gegen Erschütterungen. Gerade die 12V Versorgung gestaltet sich aus dem Bordnetz eines Kraftfahrzeuges als problematisch. Die vorkommenden Schwankungen von <11V bis >14V je nach Betriebszustand des Fahrzeuges lassen sich ohne aufwendigen DC/DC Wandler nicht kompensieren.


Konstruktiver Aufbau

Der MP3-Player soll einen Ersatz für den CD-Wechsler des Fahrzeugs sein. Dies erfordert eine ähnliche Gehäuseform da nur so die Originale Aufnahme verwendet werden kann. Es wurde nach Recherchen festgesellt, dass der BMW CD-Wechsler als OEM Produkt vom Hersteller Alpine produziert wird. Der Hersteller passt seine Standardgeräte nach Vorgaben von BMW an die Technik des Fahrzeugs an. Von der Mechanischen Konstruktion sind die Geräte gleich. Nur Farbe und BMW Aufdruck werden speziell für BMW geändert.

bmw_01.jpgalpine_01.jpg

Abbildung 2.1: Gegenüberstellung BMW-Wechsler (links), Alpine Wechsler (rechts)

 

Aufgrund dieser Gegebenheiten bot es sich an das Gehäuse eines defekten Alpine CD-Wechslers zu verwenden. Durch die Übereinstimmung der Maße des verwendeten Gehäuses mit dem BMW-Wechsler kann die originale Aufnahme des Fahrzeugs verwendet werden. Das Gehäuse bietet außerdem eine hydraulische Dämpfung der Komponenten im Inneren. Zu diesem Zweck ist ein Grundträger federnd mit ölgefüllten Aufnahmen im Gehäuse verbaut. Diese Konstruktion dämpft harte Schläge und schützt die Einbauten.

alpine_02.jpg

Abbildung 2.2: Geöffneter Alpine CD-Wechsler im Originalzustand

 

Für das Projekt wurde der CD-Wechsler entkernt, das heißt die Wechsler-Mechanik und die Elektronik wurde entfernt. Die einzelnen Teile des MP3-Players wurden dann auf den Grundträger verbaut. Somit konnte das Dämpfungssystem weiterverwendet werden.

yampp-total_01.jpg

Abbildung 2.3: Grundträger mit Display, Festplatte, MP3-Player Grundmodul und Anpassungsschaltung

 

Außer der 2,5 Zoll Festplatte und dem Grundmodul des MP3-Players bleibt auf dem Grundträger noch genügend Platz für die Platinen mit den externen Anschlüssen, dem Display und der Anpassungsschaltung für die Fahrzeugkommunikation.

yampp_anpassung.jpg

 

 

 

 

 

 

Abbildung 2.4: Platine der Anpassungsschaltung mit Stromversorgung

 

Auf der Rückseite des Grundträgers ist die Platine mit den Anschlüssen untergebracht. Auf dieser befinden sich die Schnittstellen zum Betrieb außerhalb des Fahrzeugs.

yampp_total_unten.jpg

Abbildung 2.5: Rückseite des Grundträgers mit Anschlussplatine.

 

Diese Anschlüsse sowie das Display sind bei geschlossenen Gehäuse unter der Klappe verdeckt an der ursprünglich das Magazin des Wechslers eingeschoben wird. Als Blende wurde eine lackierte Plexiglasabdeckung über dem Display angebracht um bei geöffneter Klappe Schutz zu bieten.

yampp_front.jpg

Abbildung 2.6: Frontansicht mit offener Klappe und Gehäuse

 

Zur Herstellung der Betriebssicherheit im Fahrzeug sind die Platinen mit einem isolierenden Klarlack überzogen worden. Die auftretenden Vibrationen im Fahrzeug erfordern eine Sicherung aller Schraubverbindungen. Dies wurde durch eine Fixierung mittels Epoxidharz erreicht.

Bei den elektrischen Verbindungen wurde weitgehend auf Stecksysteme verzichtet. Die konstruktiv unverzichtbaren Steckverbinder und die Steckverbinder auf der MP3 Player Grundplatine sowie die direkt aufgelöteten Kabel sind mit Heißkleber gesichert.

Das Dämpfungssystem des Gehäuses sorgt für eine Reduzierung der Übertragung von Schwingungen und Stößen auf die Komponenten des MP3-Players. Gerade die Festplatte wird so effektiv geschützt.

yampp_aufhängung.jpg

Abbildung 2.7: Dämpfungssytem mit Aufhängung des Grundträgers im Gehäuse

 

Die Konstruktive Lösung ist durch die Nutzung des Alpine-Gehäuses weitgehend vorgegeben und auf diesen Prototypen bzw. dieses Projekt beschränkt. Daher wird hier auf technische Zeichnungen verzichtet. Der Aufbau wurde unter rein funktionellen Gesichtspunkten realisiert.

yampp_einbau_offen.jpg yampp_einbau_geschlossen.jpg

.Abbildungen 2.8: Im Kofferraum des Fahrzeugs eingebauter MP3-Player

 Der MP3-Player wir in der Halterung des CD-Wechslers im Fahrzeug verbaut. Die Einbaulage ist vertikal und längs im Fahrzeug unter einer Abdeckung im Kofferraum. Der Ausbau des Gerätes aus dem Fahrzeug zum Aufspielen von neuen MP3-Titeln zum Beispiel gestaltet sich einfach da die Halterung einen sicheren Halt auch ohne festes Verschrauben gewährleistet.



Hardwarebeschreibung

Die Entwicklung der Hardware hat zum einen die Anpassung an den Fahrzeugbus zu realisieren. Außerdem sind die Schnittstellen für einen Betrieb außerhalb des Fahrzeugs und die konstruktiven Vorgaben zu berücksichtigen.

Das Grundmodul des MP3-Players verfügt über eine Serielle Schnittstelle nach dem RS232 Standard. Über diese Schnittstelle  erfolgt die Anpassung an der K-Bus bzw. I-Bus des Fahrzeugs. Zur Anpassung wird ein Melexis TH8080 LIN-Transceiver verwendet. Dieser Schaltkreis passt die TTL-Pegel der Sende- und Empfangsleitungen an den K-Bus an.

Ein zweiter LIN-Transceiver wird für die externe RS232 Schnittstelle mit MP3-Player und K-Bus Zugriff benötigt. Die Buseingänge beider Transceiver liegen parallel auf dem Fahrzeugbus. Somit kann von der externen RS232 Schnittstelle und vom MP3-Player Grundmodul gemeinsam auf den Bus zugegriffen werden. Die LIN-Transceiver wurden nach den Vorgaben des entsprechenden Datenblattes beschalten und benötigen nur einen Kondensator und einen Widerstand als externe Bauteile am LIN-Bus Eingang.

Sowohl die LIN-Transceiver und der MAX232 Pegelwandler-IC benötigen eine Betriebsspannung von 5V, die von dem MP3-Player Grundmodul abgegriffen wird. Somit werden keine weiteren Spannungsregler, außer dem auf dem Grundmodul des MP3-Players integrierten, benötigt. Das Grundmodul und somit der komplette MP3-Player kann direkt vom Bordnetz des Fahrzeugs betrieben werden.

Eine weitere Aufgabe ist die Stromversorgung des MP3-Players aus dem Bordnetz des Fahrzeugs. Bei den ersten Versuchen den MP3-Player im Fahrzeug zu betreiben wurde ein Problem aufgeworfen. Der MP3-Player hat wenn kein Titel abgespielt und somit die Festplatte runtergefahren ist, eine Stromaufnahme von kleiner 100 mA. Dies lässt sich bei täglichen Betrieb des Fahrzeugs in der Theorie tolerieren so das anfangs keine Maßnahmen zum Abschalten des Players unternommen worden. Allerdings wurde dabei nicht beachtet dass im Fahrzeug ein „Power Management“ der Steuergeräte existiert. Die Steuergeräte des BMW E39 werden nach Ausschalten der Zündung nicht von der Batterie getrennt. Es erfolgt stattdessen nach 15 Minuten Inaktivität des Fahrzeugs ein koordiniertes Abschalten der Steuergeräte bei Inaktivität des jeweiligen Bus-Systems. Da aber der MP3-Player weiterhin Lebenszeichen über den I-Bus sendet kann dieses Abschalten nicht erfolgen. Die Stromaufnahme des gesamten Fahrzeuges bleibt somit bei über 9 Ampere. Dies führte innerhalb von wenigen Stunden zum Entladen der Autobatterie. Eine Möglichkeit zur Lösung dieses Problems über die Software des MP3-Players zu verhindern das bei inaktiven Fahrzeug weiterhin Lebenszeichen gesendet werden hätte weiterhin eine Stromaufnahme von den bereits beschriebenen ca. 100 mA bedeutet. Auch diese geringe Belastung führt über eine entsprechenden Zeitraum zum Entladen der Autobatterie. Ein durch die Firmware gesteuertes Abschalten des MP3-Players würde außerdem an den fehlenden freien Steuerausgängen des im Grundmodul des Players verwendeten Mikrokontrollers scheitern.

Eine in der Praxis gut funktionierende und sehr simple Lösung wird durch den Schaltausgang des Bordmonitorradios ermöglicht. Dieser Schaltausgang wird im Fahrzeug unter anderen zum Steuern (bzw. Einschalten) des DSP-Verstärkers verwendet. Bei eingeschaltetem Radio liegen 12V am Schaltausgang an und können somit zum Aktivieren des MP3-Players verwendet werden. Einziger Nachteil dieser verwendeten Lösung ist die notwendige Erweiterung des Kabelbaumes vom Fahrzeug um die 12V-Steuerleitung vom Bordmonitorradio abzugreifen.

Außer den technischen Anforderungen sind die konstruktiven Vorgaben durch das verwendete Gehäuse bei der Entwicklung der Hardware zu beachten. Aus den Vorgaben wurden 3 Platinen entwickelt.

Platine 1:            Anpassungsschaltung (K-Bus, RS232, Stromversorgung)

Platine 2:            Externe Schnittstellen (externe Stromversorgung, RS232, Audio, USB)

Platine 3:            Externe Verbindung zum Fahrzeug

Zum Design der Platinen wurde die CAE-Software (Computer Aided Engineering) Bartels Auto Engineer eingesetzt. Die Fertigung der Platinen wurde bei der Firma Olimex beauftragt. Alle Platinen sind mit zweiseitigen Layout und Bestückungsdruck ausgeführt.

 

 

 

 

 

 

 

 

 

 

 


Abbildung 2.9: Funktions- und Verbindungsübersicht des MP3-Players

 

Um die Verkabelung zu vereinfachen sind alle Verbindungen über die Platine 1 geführt. Die Verbindungen werden über diese verteilt und an den jeweiligen Anschlussleisten zusammengeführt. Um die Zuordnung zu vereinfachen wurde jede dieser Anschlussleiten mit dem Namen des Ziels der Verbindung über Bestückungsdruck beschriftet.

Platine 1 - Anpassungsschaltung

Diese Platine bildet das Herzstück der Anpassung an das Fahrzeug. Die Eingespeiste Spannung des Bornetzes wird über eine Verpolungsschutzdiode und eine Siebkondensator geleitet. Außerdem schützt eine 15V Leistungs- Z-Diode vor Spannungsspitzen. Zum Einschalten des MP3-Players wird ein von der Radioschaltspannung angesteuertes Relais verwendet. Auf der Platine sind außerdem die LIN-Transceiver untergebracht. Durch Parallelschalten der Buseingänge ist ein paralleler Zugriff auf den LIN-Bus vom MP3-Player Grundmodul und der RS232 Schnittstelle möglich. Die TTL Pegel der Sende- und Empfangsleitungen der Transceiver werden über einen MAX232 Pegelwander auf RS232 kompatible Pegel angepasst. Eine Spannungsregelung ist aufgrund der Möglichkeit das MP3-Player Grundmodul mit 8-18V zu versorgen nicht notwendig. Die Sicherung ist als entsprechend der maximalen Stromaufnahme der Festplatte beim Hochlaufen mit 500mA (Träge) berechnet worden. Anfangs wurde zur Überbrückung des Spannungseinbruchs beim Starten des Fahrzeugs ein Puffer bestehend aus zwei Goldcaps auf einer separaten Platine vorgesehen. Allerdings reichte die Kapazität trotz anders lautender Berechnungsergebnisse nicht aus den Spannungseinbruch zu überbrücken. Bei Messungen wurde als Ursache die Eigenschaft des Fahrzeugs ausgemacht beim Starten des Motors alle Verbraucher die nicht notwendig sind abzuschalten. Dazu wird auch das Radio und somit der Steuerausgang des Radios abgeschalten. Da der MP3-Player nach dem Spannungseinbruch wieder in weniger als 5 Sekunden startet ist diese Funktionalität nicht weiter verfolgt worden.

Platine 2 – Externe Schnittstellen

Die Steckverbinder der externen Schnittstellen sind auf dieser Platine untergebracht. Es kann über diese Schnittstellen außerdem ein Betrieb des MP3-Players außerhalb des Fahrzeugs ermöglicht werden. Dazu wird eine externe 12V Versorgung angeschlossen.

Platine 3 –Verbindung zum Fahrzeug

Die dritte Platine Verbindet das Anschlusskabel vom Fahrzeug mit der Platine der Anpassungsschaltung auf dem Grundträger. Durch das Verschrauben mit dem Gehäuse ist dadurch außerdem eine Zugentlastung des Anschlusskabels gegeben.

Bei den Funktionstests wurde ein Problem der Konstruktion deutlich. Die Wiedergabe wurde vor allem bei laufendem Motor des Fahrzeugs durch Störgeräusche beeinträchtigt. Bei der Analyse wurde eine hauptsächliche Fehlerquelle festgestellt. Die Audiomasse wurde durch die Verkabelung über die Platinen und den Steckverbinder zum Fahrzeug mit einem zu hohen Übergangswiderstand beaufschlagt. Dadurch wurde eine sogenannte Brummschleife erzeugt. Dies konnte durch Anpassung der Verkabelung abgestellt werden.

yampp-total_schirm.jpg

Abbildung 2.10: Gesamtansicht mit Schirmungsfolie (zwischen Anpassungsplatine und MP3-Player Grundmodul

 

Durch Maßnahmen zur Schirmung der Kabel und Einsatz einer Abschirmung (Aluminiumfolie mit elektrischer Verbindung zur Gerätemasse) konnten Einstreuungen von Störsignalen innerhalb des Gerätes weitgehend reduziert werden.


Softwarebeschreibung der Anpassungen des Quellcodes

Die Software des Players ist als Quellcode vom Autor verfügbar und als Opensource freigegeben. Außerdem hat der Autor den Quellcode umfangreich kommentiert. Beides legt den Grundstein für die in diesem Projekt erforderlichen Anpassungen.

Alle zum Betrieb im Fahrzeug notwendigen Funktionen wurden in das Hauptmodul des Quellcodes integriert. Die Funktionen zum Bedienen des MP3-Players steuern diesen über das Auslösen von „Events“ wie die in der originalen Firmware vorhandenen Kontrollfunktionen.

 

 

 

 

 

 

 

 

 


Abbildung 2.11: Architektur der in das Hauptmodul integrierten Funktionen

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.

Formatierung und Adressierung der einzelnen Ausgaben auf die Fahrzeuginformationssysteme

Die Daten werden nicht einzeln sondern in sinnvollen Gruppen zur Anzeige gebracht. Für jede dieser Gruppen ist eine Funktion geschrieben worden. In den Funktionen werden die einzelnen Variablen bzw. Texte in die jeweiligen Felder geschrieben. Zur formatierten Ausgabe dient eine spezielle „Printf“-Funktion die den String in einen reservierten Speicherbereich schreibt der dann zur Anzeige geschrieben wird.

Abbildung 2.12: Datengruppierung der Ausgabe auf die Fahrzeuginformationssysteme

 

Ü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. Es wird durch einen eigenen Event im Queue-System des Hauptmoduls implementiert. In der Queue wird dieser Event als Standartevent eigetragen und somit immer dann ausgeführt wenn kein anderer Event aufgerufen wurde.  

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 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

timemode

Zeitmodus ([0] = anzeige der Gesamtspielzeit des aktuellen Titels, [1] = anzeige der aktuellen Spielzeit)

remtime

Titelzeitumschaltung (Anzeige aktuelle Spielzeit [0] oder Restzeit [1])

playing

Status "Wiedergabe" des MP3-Players [1]

pause  

Pause Modus [1]

ike

Umschaltung der anzuzeigenden Daten in der Instrumentenkombination

 (Titelnummer & Playlistennummer [1] / Titelname [2] / Name des Interpreten [3])

options

Schalter für Optionen Menü aktiv [1]

lbutton

Schalter für Playlistenwiederholungssperre bei Lenkradbedienung (Sperre aktiv [1])

bustx   

Schalter für „IBUS-TX“- Anzeige auf dem LCD

(Bedeutung: Player hat IBUS-Nachricht gesendet [1])

busrx

Schalter für „IBUS-RX“- Anzeige auf dem LCD

 (Bedeutung: Player hat IBUS-Nachricht empfangen [1])

busstatus

Schalter für „BUS POLL“- Anzeige auf dem LCD

(Bedeutung: Poll-Nachricht vom BUS Empfangen [1] / Lebenszeichen gesendet [2])

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]

Sonstige Funktionalitäten der Anpassung

LCD-Anzeige

Da die LCD-Anzeige im regulären Betrieb nicht benötigt wird wurden die originalen Anzeigeroutinen stark vereinfacht und auf das Notwendigste beschränkt. Es werden nur noch der Status des Players sowie diverse Statusmeldungen ausgegeben. Die Statusmeldungen enthalten auch Meldungen bei Busaktivität bzw. beim Schreiben von Daten auf den I-Bus. In den Funktionen des Nachrichteninterpreters (LEXER) wird hierzu ein Flag (Schalter) gesetzt das dann in der „Idle“-Funktion zur Anzeige gebracht wird. Es werden bei erfolgreichem Empfang von Daten über den I-Bus und bei Sendevorgängen entsprechende Anzeigen auf der LCD-Anzeige ausgegeben. Dies dient zur Diagnose bei eventuellen Fehlverhalten des MP3-Players. Außerdem kann über die LCD-Anzeige der betrieb außerhalb des Fahrzeugs ermöglicht werden da hier die Anzeigesysteme des Fahrzeugs nicht zur Verfügung stehen.

yampp_einbau_display.jpg

Abbildung 2.13: Statusanzeige auf dem LCD

Vereinfachte „Idle“-Funktion

Das Senden der Daten zum Beschreiben der Textfelder nimmt da immer mehrere Textfelder geschrieben werden eine gewisse Zeit in Anspruch. Die führte zu einem stocken der Wiedergabe da die Wiedergabepuffer nicht rechtzeitig gefüllt werden konnten. Als Lösung wurde eine zweite „Idle-Funktion geschrieben die nur das Füllen der Wiedergabepuffer beinhaltet. Diese Funktion wird vor jedem Sendevorgang zur Ausgabe von Informationen ausgeführt und verhindert diesen Effekt.

Speicherung von Parametern nach Abschalten der Stromversorgung

Das Speichern des aktuellen Zustandes in den nichtflüchtigen Speicher des Mikrokontrollers ist bereits in der Originalversion der Firmware implementiert. Dies Funktionen wurden für die Erfordernisse zum komfortablen betrieb im Fahrzeug erweitert. Außer der Speicherung der aktuellen Titeldaten (Titelnummer, Playlistennummer und aktuelle Abspielposition im Titel) werden die Werte der Variablen für die Anzeigeoptionen der Bordmonitoranzeige gespeichert. Außerdem sind die Werte der Playlistenspeicher nach dem Ausschalten zu speichern. Zur Speicherung und dem zurücklesen der Werte beim Start des MP3-Players werden die Funktionen zum lesen und schreiben des EEPROM verwendet. Die Headerdatei für die Speicherverwaltung wurde um die entsprechenden Adressen im EEPROM erweitert.

 


Pläne

Platinen



Schaltpläne

Interface



Frontanschlüsse



BMW-Verbindung






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

© 2007 Alexander Brünnert