CarPi - Raspberry Pi mit VW RNS2 DVD (MFD2)

Alles fing damit an, dass mein Auto mir mit Pieptönen nach dem Anlassen mitteilte, daß ich den Motor sofort abstellen muss und die Werkstatt rufen soll. Die VW-Werkstatt meines vertrauens teilte mir nun mit, daß es sich hierbei um ein bekanntes Problem handeln würde. Die Behebung wäre der Austausch der Batterie und die Reinigung aller Massepunkte im Motorraum.
Leider trat die Meldung nach Durchführung aller Maßnahmen immer noch auf. Daraufhin teilte mir die VW-Werkstatt meines Vertrauens mit, dass jetzt nur noch das Amaturenbrett (die gesamten Anzeigen hinter dem Lenkrad) getauscht werden könne. Das würde ca. € 1000,- Kosten, es wäre kein Tauschteil so dass ich die Kosten auf jeden Fall tragen müsste und ob der Fehler damit beseitigt würde, wäre nicht sicher.
Ungefähr zu dieser Zeit entstand die Idee, mit einem Raspberry Pi am CAN-Bus zu lauschen, was denn so passiert.
Zum besseren Verständnis erläutere ich das Projekt in mehreren Etappen:
  1. Das MFD2 als Bildschirm für den Raspberry Pi
  2. Verbindung zum Fahrzeug
  3. Der Einbau

Das MFD2 als Bildschirm für den Raspberry Pi

Natürlich bräuchte der Raspberry Pi einen Bildschirm und es wäre doch cool dafür das MFD2 zu verwenden. Auf der Rückseite gibt es auch einen passenden Anschluß, so daß es auch kein Problem sein sollte. Na ja, bis auf den Umstand, daß es nur einen Composit-Sync-Eingang gab. Aber ein RGB-Eingang inklusive Ton über einen eigenen Stecker war es ja schon mal.
Schwieriger war es da schon den Raspberry Pi dazu zu bewegen das passende VGA-Signal zu erzeugen. Meine erste kostenoptimierte Idee war der Gert VGA 666 adapter. (https://www.raspberrypi.org/forums/viewtopic.php?f=91&t=94424)
Es hat eine ganze Weile gebraucht, bis ich zu der Erkenntnis kam, daß der Gert VGA 666 adapter eine LCD-Schnittstelle nutzt und diese grundsätzlich nur Progressiv kann während das MFD2 grundsätzlich nur Interlaced kann. So konnte es nichts werden!
Der zweite Ansatz war mit einem HDMI-VGA-Adapter von manhattan. (http://manhattan-products.com/hdmi-to-vga-converter3) Den habe ich günstig bei K&M COMPUTER gekauft. Er hat keinen Audio Ausgang und wird vollständig von der HDMI Buchse des Raspberry Pi gespeist. Damit war ich in der Lage grundsätzlich ein interlaced VGA-Signal zu erzeugen. Ein erstes Timing habe ich hier gefunden: (http://www.mp3car.com/forum/general/show-off-your-project/158651-oem-mfd2-vw-and-a-pc-my-next-ivi-to-replace-my-nexus-7-custom-hu)
Jetzt begann aber der harte Teil. Welches Timing und Pixel verträgt das MFD2? Nun ich fasse mich kurz und präsentiere nur das Ergebnis. Das Display hat 400x230 Pixel muss aber mit dem Timing für 800x460 angesteuert werden. Zusätzlich müssen die Ränder aber so gewählt werden, daß die Pixel auf dem Display gut aussehen.
Wie geht das denn?
Hilfreich bei der Einstellung war dieser Hintergrund.
Als erstes wird die Information des Adapters ignoriert. Der kennt nämlich nur bestimmte Modi, die aber nicht passen. Auch das heraus zu finden hat etwas Zeit beansprucht. Weiterhin ist der Spezialmodus zu wählen und entsprechend einzustellen. In dieses Timing spreizt nun das Raspberry Pi die angegebene Pixel und Zeilen Zahl.
sudo nano /boot/config.txt
# MFD2 at HDMI-VGA adapter
hdmi_ignore_edid=0xa5000080
hdmi_group=2
hdmi_mode=87
hdmi_timings 800 0 51 44 121 460 0 10 9 14 0 0 0 32 1 16000000 3
framebuffer_width=400
framebuffer_height=230
disable_overscan=1
... und schon sieht es gut aus!
Da der Raspberry Pi über die Pfostensteckerleiste mit 5V versorgt wird, habe ich die Warnungen abgeschaltet.
sudo nano /boot/config.txt
avoid_warnings=1
Da der Raspberry Pi hinter dem Amaturenbrett eingebaut wird habe ich alle LEDs abgeschaltet.
sudo nano /boot/config.txt
dtparam=act_led_trigger=none
dtparam=act_led_activelow=off
dtparam=pwr_led_trigger=none
dtparam=pwr_led_activelow=off
Jetzt sollte das Display aber dauerhaft eingeschaltet sein. Dazu mussten ein paar Einstellungen angepasst werden.
Als erstes musste der Screensaver an diversen Stellen deaktiviert werden. sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
#@xscreensaver -no-splash
Dann sollte der Maus Cursor unsichtbar werden. sudo apt install unclutter sudo nano /etc/xdg/lxsession/LXDE/autostart
#@xscreensaver -no-splash
@unclutter -idle 0.1 -root
Weiterhin durfte das Power Management den Bildschirm nicht abschalten. nano ~/.config/lxsession/LXDE-pi/autostart
#@xscreensaver -no-splash
@xset s noblank
@xset s off
@xset -dpms
Nun sollte der VSWITCH am MFD2 vom Raspberry Pi per infrarot Fernbedienung geschaltet werden. Dazu habe ich ganz normal den lircd installiert und den Empfänger konfiguriert. Das beschreibe ich mal an anderer Stelle.
An dieser Stelle sind die zusätzlichen Konfigurationen interessant, um den Ausgang zu schalten. Als erstes müssen die GPIO Pins konfiguriert werden. Das mache ich nach dem Startup mit diesem Desktop Kommando: nano ~/.config/autostart/poweron.desktop
[Desktop Entry]
Name=PowerOn
Comment=Set GPIO
Exec=sh -c "sudo /home/pi/poweron.py"
Icon=/usr/share/pixmaps/python.xpm
Terminal=false
Type=Application
Categories=Application;
StartupNotify=true
Im Python Script werden die GPIOs konfiguriert: nano ~/poweron.py
#!/usr/bin/python
# RPi.GPIO Official Documentation
# http://sourceforge.net/p/raspberry-gpio-python/wiki/Home/

import RPi.GPIO as GPIO              # import RPi.GPIO module

# Define Pins
AUX_ON_PIN=16
LIGHT_IN_PIN=20
MOTOR_IN_PIN=21

# choose BOARD or BCM
GPIO.setmode(GPIO.BCM)             # BOARD for P1 pin numbering

# Set up In- and Outputs
GPIO.setup(AUX_ON_PIN, GPIO.OUT) # output
GPIO.setup(LIGHT_IN_PIN, GPIO.IN,  pull_up_down=GPIO.PUD_UP) # input with pull-up
GPIO.setup(MOTOR_IN_PIN, GPIO.IN,  pull_up_down=GPIO.PUD_UP) # input with pull-up
chmod +x ~/poweron.py
Die Reaktion auf dem KEY_POWER erfolgt in lircrc: sudo nano /etc/lirc/lircrc
begin
    button = KEY_POWER
    prog = irexec
    config = toggle_gpio 27
end
Das Programm toggle_gpio schaltet entsprechend den Ausgang: sudo nano /usr/bin/toggle_gpio
#!/bin/bash
if [ `gpio read $1` == 0 ]
	then gpio write $1 1
	else gpio write $1 0
fi
sudo chmod +x /usr/bin/toggle_gpio
Damit ist der Raspberry Pi vollständig konfiguriert und kann eingebaut werden.

Verbindung zum Fahrzeug

Damit der Raspberry Pi im Auto funktioniert sind ein paar Dinge erforderlich. Als erstes einmal brauchen wir einen DC/DC Wandler der die 5V für den Raspberry Pi erzeugt. Ich habe mich für eine integrierte Variante mit wenig Spannungsabfall entschieden.
Dann wollte ich den Videoeingang auch während der Fahrt nutzen. In einem amerikanischen Thread fand ich die Info zu den Schalteingängen des MFD2. (http://forums.vwvortex.com/showthread.php?2601216) Der VSWITCH-Eingang sollte über 5k6 an die 12V Bordspannung gelegt werden, um den Videoeingang zu aktivieren.
Relativ schnell war eine einfache Schaltung (http://www.epanorama.net/circuits/sync_r.html) gefunden um H-Sync und V-Sync zusammen zu führen. Da die Schaltung ohne Stromversorgung auskommt, habe ich sie an den VGA-Stecker angelötet.
Für die Signalübermittlung habe ich mich für einen Mehrfachoptokoppler entschieden. Damit konnte ich mehrere Probleme gleichzeitig lösen. Die Verbindung war potentialfrei und ich konnte wahlweise auf +12V oder auf 0V schalten.
Die Schaltung ist relativ einfach und ich habe sie zusammen mit dem DC/DC-Wandler auf einer Lochrasterplatine untergebracht.

Der Einbau

Damit das ganze sicher montiert werden kann, habe ich den Raspberry Pi und die Zusatzplatine gemeinsam auf eine 2mm Aluminiumplatte montiert, die ich durch die doppelte Biegung (auf der linken Seite) gut hinter dem Amaturenbrett befestigen konnte. Der Platz oberhalb des Raspberry Pi wird für den HDMI- und den Klinkenstecker benötigt. Auch die Verbindung zum Fahrzeug habe ich über eine Steckverbindung realisiert. Im Bild ist die weiße Stiftleiste oben rechts zu sehen. Damit kann der Raspberry Pi gegebenenfalls einfach entfernt werden.
Als Montageplatz bot sich der Bereich hinter dem Lichtschalter an. Da ist ausreichend Platz und zwei Bohrlöcher für M3-Gewinde gibt es auch. Es war also nur noch das Gewinde zu schneiden und das Blech konnte montiert werden.
Merke: Beim Schneiden das Öl nicht vergessen!
Ja ganz so einfach war es dann doch nicht. Um Überhaupt arbeiten zu können mussten doch verschiedene Teile demontiert werden und am roten Pfeil musste ich das Amaturenbrett etwas weg biegen, um Arbeitsraum zu haben.
Die Seitenklappe ist mit Clips fest gemacht und kann einfach zur Seite abgehebelt werden. Dieses ist auch der Zugang zum Raspberry Pi wenn alles in Betrieb ist.
Als erstes ist die Abdeckung über den Pedalen zu entfernen. Das Teil ist mit einer Schraube, einer Nase und drei Federn befestigt. Es ist also diese, eine Schraube zu entfernen.
Dann fasst man die Abdeckung links außen Richtung Tür an und rupft beherzt nach unten. Von links nach rechts geben die Klammern dann nach und das Teil fällt nach unten.
Beim Einsetzen ist unbedingt darauf zu achten, daß die Nase (im Bild rechts oben) als erstes in die vorgesehene Öffnung eingefädelt wird. Sonst passen die Clips nicht oder es hängt runter!
Wie man den Lichtschalter heraus bekommt muss man wissen, sonst klappt das nie! Wenn der Schalter in der Aus-Stellung steht, kann man den Drehknauf wenige Millimeter hinein drücken und dann auf Standlicht drehen. Damit werden zwei Nasen (roter Pfeil) eingezogen und der Schalter läßt sich einfach heraus ziehen. Der Stecker ist seitlich arretiert und kann nach dem Entriegeln abgezogen werden.
Auf diesem Bild sind sehr schön die gegenüber liegenden Aussparungen für die Nasen zu sehen. Weiterhin sind die zwei Schrauben zu sehen, die für die Demontage der Amaturenbrettverkleidung heraus zu drehen sind.
Jetzt fehlen noch die drei Schrauben am unteren Rand, die durch das entfernen der Pedalabdeckung freigelegt wurden.
Mit den zwei Schrauben vom Lichtschalter sind also fünf Schrauben zu entfernen. Danach kann die Verkleidung beherzt von unten nach oben aus den Klemmverbindern (vier Stück) gezogen werden.
Achtung: Aufgrund der oberen zwei Führungsnasen sind die oberen Klammern unbedingt Richtung Fahrer zu lösen!
Bei mir ist immer irgend eine Klammer am Amaturenbrett hängen geblieben.
Zum Abspreitzen für das Gewindeschneiden sind noch ein paar Schrauben zu entfernen. Davon habe ich aber kein Foto gemacht.
Dieses Bild zeigt den fertig eingebauten Raspberry Pi.
Dabei bleiben die Anschlüße weiterhin zugänglich.
Wie man hier erkennen kann, musste ich das Gehäuse vom VGA-Stecker entfernen, da der Stecker sonst nicht in die versenkte Buchse gepasst hätte. Die Belegung der VGA-Buchse habe ich mir im Internet gesucht. Am gelben Draht mit dem Schrumpfschlauch hängt die C-Sync Schaltung. Mit einem Kabelbinder habe ich die Videokabel vom Radio am Amaturenbrett abgefangen und somit auch den Adapter und die Schaltung fixiert. Falls sich jemand wundert, warum es dieses Bild nicht größer gibt, es war zu unscharf.
Hier ist zu erkennen, wie die Stecker neben der Lochrasterplatine Platz benötigen.
Über diesen Stecker kommen die Stromversorgung und die Signale vom Auto zum Raspberry Pi.
Dieses handlesübliche Leerrohr schützt die Koaxiallitze zum Stecker am MFD2. Das Leerrohr liegt oberhalb des höhenverstellbaren Lenkrades lose auf dem Metall.
Mit dem passenden Werkzeug läßt sich das MFD2 entriegeln und heraus ziehen.
Nun ist das andere Ende des Leerrohres zu sehen. Es liegt unter dem Halter für das MFD2. Ich habe einen Rest verwendet, der ca. 1m lang ist.
Die Koaxiallitzen habe ich umgesetzt auf die vorgefertigten Drähte mit gequetschter Klemme für den Stecker.
Für den Stecker habe ich die fertig konfektionierten Kabel von VW (000 979 009 E) gekauft und abgeschnitten. Mit Aderenthülsen habe ich sie rüttelfest mit der Koaxiallitze verbunden und mit Schrumpfschlauch isoliert und fixiert.
Das aus zwei Teilen bestehende Steckergehäuse habe ich ebenfalls bei VW gekauft. Ich glaube, daß es günstigere Wege gibt.
Hier ist das Innere des Steckers zu sehen. Zur Orientierung:
Von links nach rechts sind die Signale:
  1. Rot
  2. Grün
  3. Blau
  4. <leer>
  5. CSYNC
  6. <leer>
  7. Audio Rechts
  8. Audio Links
  9. <leer>
Den VSWITCH und die Masseanschlüsse habe in der anderen Reihe verbunden.
Nach kurzem Experimentieren habe ich mich dazu entschlossen vorübergehend einen IR- Receiver zu nutzen. Er hat zwar bei Sonnenschein erhebliche Probleme, ist aber eine einfache Methode den Raspberry Pi zu bedienen. Ich nutze den lircd und werte den Event aus.
Mit dem Ein/Aus Schalter einer Fernbedienung (KEY_POWER) aktiviere / deaktiviere ich den VSWITCH Eingang des MFD2. Das hat zwei Vorteile:
  1. Auch wenn das Fahrzeug fährt erscheint das Bild vom Raspberry Pi im Display
  2. Die Audio Quelle bleibt aktiv. Ich kann also weiter Radio oder AUX-In hören
Sollte ich auch den Ton vom Raspberry Pi benötigen, so kann ich am MFD2 auf AUX-In mit Video und Audio schalten und habe bei stehendem Fahrzeug beide Signale des Raspberry Pi auf dem MFD2.
Soweit der erste Teil meines Berichtes.
Die Auswertung der CAN-Busse folgt noch ...