Visit our original site, please.

Neu!
Ambitionierten Bastler können nun in meinem eigenen Online-Shop OBD2-Shop.eu einkaufen. Derzeit biete ich vor allem Teile für den hier vorgestellten Adapter, da diese teilweise schwer beschaffbar waren (siehe Forumsbeitrag). In Zukunft soll die Produktpalette noch erweitert werden.
Einführung
Bauteile für den Adapter
Platine anfertigen
Platine bestücken
Funktionstest
Tuning
Fazit
Bevor es losgeht sei noch einmal darauf hingewiesen, daß mit dieser Schaltung nur Fahrzeuge aus dem VAG-Konzern untersucht werden können und sie im wesentlichen für die Software VAG-COM gedacht ist.
Auf zahlreichen Webseiten findet man Diskussionen über Jeffs minimalistische Schaltung. Es soll zu Problemen bei der Zuverlässigkeit kommen etc. Außerdem gibt es wohl auch ODB-2 Anschlüsse im Auto, bei denen die L-Leitung an Pin 15 eine zweite K-Leitung sein soll. So ganz kann ich das nicht nachvollziehen, wann und warum das der Fall sein soll.
Außerdem wird gerne über die billigen und angeblich schwer beschaffbaren Optokoppler, die zudem außerhalb der zulässigen Spezifikation betrieben werden, und die unprofessionellen OBD-Stecker gewettert. Interessanterweise gerne von Leuten, die Ihre eigene - viel bessere - Schaltung verkaufen wollen.
Ich habe die Schaltung an meinem T4 (Bj. 2001) und an einem Sharan (Bj. 200?) erfolgreich betrieben.
Die Beschaffungsprobleme kann ich in keiner Weise nachvollziehen. Das ein Stecker wie der hier vorgestellte nicht professionell ist, wird auch gar nicht bezweifelt, doch muß er das denn sein? Und auf die richtige Polung beim Einstecken muß man halt achten - jemand, der die Schaltung nachbauen kann, wird das wohl hinkriegen.
Aber es gibt natürlich weitere Schaltplanentwürfe und der geneigte Bastler kann sich selber ein Bild machen. Von Lösungen, die völlig ohne Trennung zwischen Bordelektronik und PC auskommen und beide Seiten mehr oder weniger direkt über Transitoren verbinden, rate ich dringend ab, da man sich hier schnell Bordcomputer oder PC-Schnittstelle zerstören kann - das reinste Lotteriespiel.
Auf der Seite finden Sie sowohl das Platinenlayout, als auch eine schematische Zeichnung als PDF. Anhand des Board-Layouts fertigen wir eine Leiterplatte an. Auch dazu hat Jeff eine kurze Anleitung geschrieben, die ich sehr interessant fand, weil der Leiterplan auf die Leiterplatte gebügelt wird. Doch dazu später noch. Zuerst shoppen gehen:
| Anzahl | Bezeichnung | Bestell-Nr. | Preis | Anmerkung |
| 3 | PS2501-1 Optokoppler | € 1,00 | Den gibt's nicht bei Conrad. Den Ersatztyp SFH615-A2 nur auf Bestellung (#153780). Also zu Segor (hach habe ich es als Berliner gut) | |
| 2 | 2N3904 Transistoren | 163350 | € 0,28 | |
| 2 | 1N4004 Dioden | 162248 | € 0,08 | |
| 6 | 1,0 kOhm 1/4W Widerstand | 403253 | € 0,10 | braun|schwarz|rot |
| 1 | 1,5 kOhm 1/4W Widerstand | 403270 | € 0,10 | braun|grün|rot |
| 1 | 10 kOhm 1/4W Widerstand | 403377 | € 0,10 | braun|schwarz|orange |
| 1 | 150 kOhm 1/4W Widerstand | 403512 | € 0,10 | braun|grün|gelb |
| 1 | 1 µF 50V Kondensator (Elko) | 460460 | € 0,12 | Der Minuspol ist markiert und muß "nach oben" wenn die Leiterplatte wie abgebildet vor einem liegt |
| 1 | Sub-D-Buchse 9 pol. | 742082 | € 1,02 | Ggf. noch ein passendes Steckergehäuse dazu nehmen, wenn es etwas professioneller aussehen soll |
Bis hierhin deckt sich die Liste weitestgehend mit der von Jeff, nur daß wir uns die Sub-D-Stecker für die Printmontage auf der Leiterplatte sparen und nachher dort die Kabel der Stecker zum Laptop und zur OBD-2-Buchse direkt anlöten. Bei dem Billigprojekt können wir auf abnehmbare Kabel verzichten. Wir brauchen ggf. noch ein paar Sachen, wenn die Bastelkiste das nicht hergibt:
| Anzahl | Bezeichnung | Bestell-Nr. | Preis | Anmerkung |
| 1 | Kabel 5adrig | 261874 | € 0,99 | Irgendwas. Hier 6adriges Telefonkabel. Kann auch Flachbandkabel sein etc. Die Länge ist nach belieben. Wir brauchen ein Kabel vom OBD-2 Stecker zum Adapter und eins dann zum Laptop. Ich will natürlich im Bus hinten am Tisch sitzend mein Motormanagement kontrollieren, also jeweils ca. 1,5m |
| 1 | Kunststoffgehäuse | 520993 | € 1,43 | |
| 1 | Kunststoffschale ca. 1/2 Liter | ca. € 2,00 | Kann auch Glas sein. Kein Metall. Und nie wieder für Lebensmittel benutzen. | |
| 1 | Eisen-III-Chlorid Beutel 250g | 528722 | € 1,38 | Zum Rühren beim Ätzen wird ein Plastikrührer benutzt. Vielleicht eine Plastikgabel von der letzten Grillparty? |
| 1 | Leiterplatte einseitig, unbesch. | 528307 | € 0,74 | Passend für das Projekt + den OBD-2 Stecker: 50x100 |
| 1 | Material | Eine kleine Handbohrmaschine Dremel o. ä., 1,0 mm und 1,2 mm Bohrer, Lötkolben, Lötzinn, ggf. feinen Permanentmarker für Overheadfolien (wasserfest) Staedtler Lumocolor permanent o. ä. |
Jeff beschreibt auf seiner Seite bei den FAQs eine interessante Methode, wie man das Leiterbahnbild auf die Leiterplatte überträgt. Dabei bügelt er das mit einem Laserdrucker auf eine Folie gedruckte Layout auf die Kupferschicht. Meine letzten Ätzerfahrungen liegen zig Jahre zurück und die Technik wollte ich gleich mal testen. Im Prinzip funktioniert das Verfahren, doch ist das Leiterbahnbild bei mir anschließend nicht deckend genug gewesen. Macht aber nichts, denn auf der Kupferschicht konnte ich die Leiterbahnen erkennen und dann habe ich die Bahnen einfach von Hand mit einem Permanentmarker (Edding, den oben genannten Staedtler o. ä.) nachgezogen. Wichtig ist dabei nur, daß die Farbe deckend aufgetragen wird. Die eigentliche Farbe ist egal, denn es geht nur darum, einen Schutzfilm aufzubringen, an dem das Ätzbad später nicht die Leiterbahnen angreifen kann.
Da die Leiterplatte noch genügen Platz bietet, bringen wir in einer Ecke noch die Lötaugen für den OBD-2 Stecker gemäß der oben abgebildeten Vorlage an. So ätzen wir beide Platinen in einem Arbeitsgang und sägen anschießend die Leiterplatte in zwei Teile.
So, jetzt kommt der toxische Teil: Zuerst einmal entledigen wir uns aller Klamotten und ziehen uns was an, womit wir sonst auch am Auto basteln oder malern, denn Eisen-III-Chlorid Flecken sind häßlich und lassen sich nicht entfernen. Das Zeug auch nicht in die Augen reiben und nicht zu tief einatmen! Den Tisch gut mit Zeitungspapier abdecken und dann heißes Wasser (ca. 40-60°C) in die Plastikschüssel geben. Etwa die gleiche Gewichtsmenge Eisen-III-Chlorid hinzugeben und mit dem Plastikrührer auflösen.
Die Leiterplatte mit der Kupferseite nach oben in das Bad legen und jetzt die ganze Zeit das Bad leicht bewegen, bis sämtliche Kupferflächen weggeätzt wurden und nur noch die markierten Leiterbahnen übrig sind. Das dauert ca. 15 Minuten. Am Anfang verfärbt sich das Kupfer rosafarben, was oft dazu führt, daß man denkt, das war's schon, doch erst wenn man die Expoxydschicht des Trägermaterials durchscheinen sieht, ist das Kupfer weg. Die Ablösung beginnt immer vom Rand her und arbeitet sich dann zur Mitte vor.

Anschließend die Platine gründlich mit Wasser abspülen und die Schutzschicht über den Leiterbahnen mit Nagellackentferner o. ä. entfernen bis die blanken Kupferbahnen sichtbar sind.
Da bei der Vorlage von Jeff die Lötpunkte keine Augen haben, sondern geschlossen sind, fällt das Bohren der Löcher schwer, da der Bohrer auf den Kupferbahnen hin und her rutscht, wenn man keinen Bohrständer besitzt und mit der Hand bohrt. Da hilft es, wenn Sie mit einem spitzen kleinen Nagel alle Bohrlöcher vorsichtig mit einem sanften Hammerschlag ankörnen. Anschließend alle Löcher mit einem 1mm Bohrer bohren.

Gemäß der schematischen Zeichnung werden die Kabel für die Stecker angelötet. Da wir keine Sub-D-Buchsen für die Printmontage einsetzen, werden die Kabel direkt eingelötet. Für die Computerseite werden die Lötpunkte 1:1 mit den gleichbenannten Kontakten der neunpoligen Sub-D-Buchse verbunden. Die Abbildung zeigt, wie die Lötstellen auf der linken Seite numeriert sind. An der Buchse sind die Kontakte ebenfalls gekennzeichnet. Der OBD-2 Stecker wird gemäß der Legende in der schematischen Zeichnung angeschlossen (1->4, 4->7, 8->15, 9->16). Da wir 4 und 5 am Stecker verbunden haben, brauchen wir nur die eine Leitung von Punkt 1 der Platine zu Pin 4.
Ein Klecks Heißkleber sorgt für die notwendige Zugentlastung der Kabel, so daß diese nicht mir der Zeit ausreißen. Nach dem Funktionstest kann dann die Platine mit zwei weiteren Heißkleberklecksen im Gehäuse befestigt werden.

Die Abbildung zeigt zum Beispiel die Motordrehzahl (1) bei der sich exakt die Schaltvorgänge ablesen lassen, die steigende Geschwindigkeit bis auf ca. 160 km/h (2) und den Ladedruck des Turbos (3), der rapide abfällt, als der Wagen ausrollt. Mit diesen Daten können Sie dann beispielsweise selber überprüfen, ob der Turbolader in Ordnung ist, da er in jedem Gang einen konstanten Druck aufbaut und diesen auch während der Beschleunigung hält.
Auf der Webseite von openobd und MFT findet man einige Beispiele zu den Einstellmöglichkeiten für gängige Fahrzeuge. Beispielsweise um für meinen T4 TDI Bj. 2001 mit LongLife und flexibler Anzeige das Serviceintervall zurückzusetzen (auch mal bei T5 schauen, da stehen teilw. mehr Angaben, die aber auch für T4 gelten):
Für diese Anpassung ist aber die Vollversion von VAG-COM notwendig. Funktion 17 (Kombiinstrument) in VAG-COM auswählen und zur Funktion 10 (Anpassung) wechseln. Dann folgende Werte einstellen, um nach einem Ölwechseln das Serviceintervall zurückzusetzen:
| Kanal | Bedeutung | Wert |
| 02 | 1 = Service fällig, 0 = Service fertig | 0 |
| 43 | max. Entfernung bis zum nächsten Ölwechsel [in 1.000 km-Schritten] | 50 |
| 44 | max. Zeit bis zum nächsten Ölwechsel (24 Monate) [in Tagen] | 720 |
| 45 | Ölqualität. Öl nach VW Spezifikation 506.00 verwendet | 4 |
Weitere interessante Werte dort sind:
| Kanal | Bedeutung |
| 40 | gefahrene Wegstrecke seit letztem Service [in 100 km-Schritten] |
| 41 | Zeit seit letztem Service in Tagen |
| 42 | minimale km-Fahrleistung [in 1.000 km-Schritten] |
| 46 | Gesamtverbrauchsmenge (nur Benzin), Rechenwert für die Serviceanzeige |
| 47 | Rußeintrag (nur Diesel), Rechenwert für die Serviceanzeige |
| 48 | thermische Belastung (nur Diesel), Rechenwert für die Serviceanzeige |
Viel Spaß!

Im Gegensatz zu anderen Adaptern ist der AGV direkt in einem OBD II Steckergehäuse integriert. Der Anschluß an den PC erfolgt über eine USB Schnittstelle (große B-Buchse). Angesprochen wird das Interface über einen USB-RS232 Treiber, der auf dem PC einen weiteren, virtuellen COM-Port installiert. Diese Treiber haben die Eigenart, bei Wechsel des USB-Ports ständig neue COM-Ports zu belegen. Einige Programme (beispielsweise VAG-COM) sind nicht in der Lage, die vorhandenen COM-Ports zu erkennen und/oder Ports nach COM4 anzusprechen. Deshalb unbedingt kontrollieren, unter welchem Port der Treiber das USB-Gerät anspricht (Geräte-Manager der Windows Systemeigenschaften: Start/Einstellungen/Systemsteuerung/System, Registerkarte Hardware). Ggf. einen der niedrigen Ports aktivieren und die ggf. erscheinende Fehlermeldung ignorieren.

Der Grundbefehlssatz besteht wie beim ELM aus einfachen (AT-) Befehlen, die kompatibel zum ELM sind, so daß Software, die den ELM bedient, auch mit dem AGV zusammenarbeitet. Für in die Tiefe gehende Funktionen, wie zum Beispiel die Protokollierung und Filterung der auf dem CAN-Bus übertragenen Bytes, wird spezielle Software benötigt. Das ausführliche Datenblatt liefert die gewünschten Informationen.
Wie auch schon beim ElmScan ist die Standardgeschwindigkeit für die simulierte serielle Schnittstelle 9600 Bd. Die maximal möglichen 38.400 Bd Übertragungsrate und andere Parameter werden über ein kostenloses Programm zur "BIOS"-Konfiguration eingestellt, so daß keine Jumperänderungen notwendig sind. Beim Programm ist zu beachten, daß der AGV erst nach dem Klick auf Connect mit Spannung versorgt werden darf (z. B. durch einstecken in die Diagnosebuchse des Autos).

Für den Bastler gibt es den Schaltplan, Platinenlayout und den eigentlichen Chip (Basis ist ein AVR µC) bei OBD-DIAG auch als DIL Version. Vor allem, wer auf das noch eher seltene und nur bei wirklich neuen Autos benutzte CAN verzichten kann, ist vermutlich mit einer der preiswerteren kleinen Typen gut beraten.
Bemerkenswert ist, daß der AGV als einziges Interface mit integriertem Protokollinterpreter auch einen KKL-Transitmodus beherrscht. Durch Tastendruck wird der Adapter quasi inaktiv und dient als USB Interface für VAG-COM (max. Version 409.1). Wie bei allen KKL-Adaptern wird die eigentlich separate L-Leitung dazu wie eine zweite K-Leitung angesprochen. Wird doch mal eine echte L-Leitung benötigt, wird ein Interface wie das von mir entwickelte benötigt. Wünschenswert wäre, wenn der AGV über einen Steuerbefehl zwischen dem KKL-Modus und dem OBD-2 Modus umschalten könnte, um aus einer Anwendung heraus beide Features einsetzen zu können, ohne den Adapter zum Umschalten, aus der Diagnoseschnittstelle ziehen zu müssen.
Einführung
Entwicklung
Schaltplan/PCB Layout
Aufbau
Software
Dieses USB-Interface trägt der Entwicklung Rechnung, daß einige Fahrzeuge der Volkswagen AG die L-Leitung zur Datenkommunikation verwenden (entgegen der erlaubten Norm) und die L-Leitung nicht mehr zum aufwecken benutzt wird. Laut Ross-Tech handelt es sich dabei um: "All B6/8E chassis A4/S4 models with Xenon headlights. All 2002 and newer A6 (C5-platform, 4B-chassis) models, including the Allroad.". Das Interface überträgt deshalb auf der L-Leitung K-Daten, weshalb ein solches Interface auch KKL-Interface genannt wird (viele andere schreibweisen sind möglich: K/KL, KK/L usw.).
Um sich zwischen einem der beiden Adapter zu entscheiden, hier einige Pro und Contra Argumente:
| RS232 (KL) | USB (KKL) | |
|---|---|---|
| Pro |
|
|
| Contra |
|
|
Dieser enthielt noch einen Designfehler, zeigte aber, daß das Prinzip schon richtig war und auch alles in das kleine Steckergehäuse paßt. Also wurde der Fehler behoben und da es sich gerade anbot, wurden auch gleich einige professionelle Leiterplatten in Auftrag gegeben. Allerdings wurde die neue Version nicht zuvor getestet, da die Zeit zu knapp war und die Fertigung mit einerm anderen Auftrag kombiniert werden sollte, um Kosten zu sparen.
Das erweis sich leider als taktisch Unklug, denn der Fehler war nicht behoben, sondern nur verlagert, da es sich eher um einen Denkfehler handelte. Deshalb liegen jetzt hier einige PCBs im Grunde unnütz herum. Das Interface ist zwar im Prinzip funktionsfähig, doch wird nur die K-Leitung unterstützt. OK, das genügt auch für vermutlich 98% aller Anwendungsfälle. Die L-Leitung wird ja nur für einige Exoten benötigt.
Da ich denke, daß einige Anwender gar keine L-Leitung benötigen, verschleudere ich im Shop diese Platinen unter Einkaufspreis - allemal besser, als in den Müll zu schmeißen (bzw. fachgerecht zu entsorgen). Wer also will, kann den Adapter bereits nachbauen. In der Schaltung darf T1, R6 und R8 nicht bestückt werden.
Während im ersten Prototyp noch eine Duo-LED vorgesehen war, die den Zustand der virtuellen Sende- und Empfangsleitung (RXD/TXD) getrennt signalisierte, wurde bei der nächsten Schaltungsversion darauf verzichtet (aufgrund der etwas schweren Beschaffbarkeit der hierfür notwendigen LED mit gemeinsamer Anode). Jetzt signalisiert eine Standard-LED den Zustand für beide Leitungen, was völlig ausreicht, da man ansonsten sowieso nur selten die Farben unterscheiden konnte.
Im Gegensatz zum seriellen KL-Interface werkelt in dieser Schaltung der ISO-Baustein L9637D (PDF Datenblatt) von STMicroelectronics. Dieser bietet nämlich zusätzlich die Möglichkeit, Signalpegel der eingehenden Daten auf der L-Leitung zu konvertieren.
Sobald die endgültige Fassung des Interfaces verfügbar ist, wird hier noch der Schaltplan etc. nachgereicht. Bis dahin muß eine Bauteilliste (für das fehlerhafte Interface) genügen:
| Anzahl | Bezeichner | Typ |
| 1 | R1 | 470 Ω |
| 2 | R2, R3 | 27 Ω |
| 1 | R4 | 510 Ω |
| 1 | R5 | 1,5 kΩ |
| 1 | R7 | 220 Ω |
| 1 | C1 | 33 nF, RM 2,5 |
| 1 | C2 | 10 nF, RM 2,5 |
| 2 | C3, C6 | 100 nF, RM 2,5 |
| 2 | C4, C5 | 27 pF, RM 2,5 |
| 1 | C7 | 10 µF/63 V; Elko; RM 2,5; radial |
| 1 | LED1 | 5mm Standard LED |
| 1 | Q1 | 6 MHz Quarz |
| 1 | IC1 | L9637D |
| 1 | IC2 | FT232BL |
| 1 | USB1 | USB Buchse Typ B |
Da die Schaltung fehlerhaft ist, hier lediglich der Platinenentwurf. In der Schaltung darf T1, R6 und R8 nicht bestückt werden. Ansonsten funktioniert das Interface aber.
Bei der Bestückung darauf achten, daß zuerst die ICs eingelötet werden. Später ist da kein 'rankommen mehr.
Dann die restlichen Bauteil. Der Quarz darf nicht die Platine berühren, da er ansonsten die beiden Lötpads kurzschließt. Also etwas Abstand einhalten (z. B. einen abgeschnittenen Bauteildraht beim Einlöten als Abstandhalten verwenden). Die LED kann auf der Bauteilseite oder von unten eingelötet werden. Je nach dem, wie herum der Stecker später ins Auto gesteckt wird, damit die LED zu sehen ist.
Bevor die Bauteile entlang der gestrichelten Linie eingelötet werden, den Stecker anlöten. Das Layout ist für einen Standard OBD Stecker entworfen. Die Platine wird mit der Bestückungsseite an die äußere Seite der Stifte 1-8 (breiter Stiftkragen) angelötet. Pin 15 (bei fehlerhafter Platine nicht erforderlich) und Pin 16 werden mit einer kurzen Drahtbrücke in die Platine gelötet.
Zum Schluß noch ein Loch für die LED in die Gehäsueschale bohren. Die Gehäuseschalen sollten zusammen steckbar sein. Allerdings ist die USB-Buchse schon etwas sperrig. Also ggf. an der Innenseite der Gehäuseschalen etwas Material abtragen.
Einführung
Informationsquellen
Protokolltyp
Testumgebung
KW1281 - Initialisierung
KW1281 - Timing
KW1281 - Gerätedaten
KW1281 - Sensordaten
KW1281 - Kommunikationsende
KW1281 - Kommunikationsfehler
KW1281 - Fehlerspeicher auslesen/löschen
Während die Kommunikation via ELM323 relativ einfach realisierbar ist, erfordert Jeffs Interface einen wesentlich höheren Aufwand, da das Interface lediglich eine Anpassung der Signalpegel vornimmt und kein Protokoll unterstützt, so daß man die gesamte Kommunikation mit dem Bordcomputer selber programmieren muß. Dafür stehen einem dann auch viel mehr Daten zur Verfügung.
Um die immer wieder auftauchende gleiche Frage vorwegzunehmen: Jeffs Interface und somit auch meine µC-Lösung funktionieren nur mit VAG-Fahrzeugen, die auch von VAG-COM ausgelesen werden können. Ich biete keinen Support, beantworte keine emails und verkaufe nichts. Wer will, kann mein Forum nutzen, in dem ich interessante Fragen auch ggf. beantworte - Standardfragen, die man auch per Google lösen kann, ignoriere ich.
Bei der Recherche habe ich folgende Quellen gefunden, die mir weitergeholfen haben:
Einige nicht so wichtige Links, die Infos bieten, die teilweise noch im weiteren Verlauf benötigt werden:

Bei ebay werden Steuergeräte, die neu bis über 1.000 Euro kosten können, haufenweise angeboten. Motorsteuergeräte sind recht beliebt. In Deutschland natürlich vor allem die von VAG (und hier vor allem vom Golf - welch Wunder). Meist sind es vermutlich Chip-Tuner, die die Geräte haben wollen, um entweder ein zerschossenes zu ersetzen oder, um Experimente zu machen. Dumm, das wir ja auch ein VAG-Gerät wollen, nicht aber bereit sind, die hochgeschraubten Preise zu bezahlen. Ideal wäre natürlich genau das gleiche Gerät, das auch im eigenen Fahrzeug verbaut ist. Die Typenbezeichnung zeigt VAG-COM bei VAG Number an (s. o.). Nun, für meinen T4 absolut unrealistisch, da selten und teuer. Also erst einmal ein Modell für die ersten Gehversuche suchen. Auch wenn die eigentlich spannenden Daten alle aus dem ECM stammen, so reicht ein ABS oder Airbag Controller erst einmal aus, um wenigstens die ersten Protokollklippen zu umschiffen. Diese sind meist wesentlich billiger (bis ca. € 20,-), denn wer baut eine gebrauchte Lebensversicherung schon in seinen eigenen Wagen ein. Da diese Geräte aber tweilweise keine Meßwerte liefern, wird später auf jeden Fall ein ECM fällig.

Jetzt fehlen nur noch Informationen über den Anschluß des Controllers, also die Pinbelegung der an die 100 Pins. Im Web ist hier wieder wenig zu finden. Ein paar Pinouts habe ich gefunden. Diese werde ich im Forum veröffentlichen und hoffe, daß weitere von Euch hinzukommen. Diese Controller waren mir aber bei ebay immer zu teuer. Meinen herzlichen Dank deshalb an Wladimir von WGSoft, der mir einen Tip gab und auch die passende Pinbelegung zur Hand hatte. Inzwischen habe ich auch herausgefunden, daß das Programm Autodata die Pinbelegung für die meisten ECUs (aber keines ABS-Steuergeräte etc.) kennt. Da die relevanten Steuergeräte nicht brandneu sind, reicht auch eine ältere Version aus. Sobald man weiß, für welches Fahrzeug das Motorsteuergerät verwendet wurde, kann man sich die Pins anzeigen lassen.

Kennt man die bei VAG-COM (s. o.) als Component bezeichnete Typenbezeichnung, hilft vielleicht auch die Liste bei EVC weiter.
Was jetzt benötigt wird, ist ein Lötkolben und ein Netzteil. Das Steuergerät muß mit ca. 12V versorgt werden. Es ist notwendig alle der oft zahlreich vorhandenen Anschlüsse für Masse (GND) und Vcc (Plus) zu verbinden. Der Anschluß für die K-Leitung des OBD-2-Steckers von Jeffs Adapter wird mit dem Diagnosesignal des Steuergerätes verbunden.
Wurde alles richtig angeschlossen, dann muß es möglich sein, Jeffs Adapter mit dem Steuergerät wie gewohnt an den PC anzuschließen und das Steuergerät mit VAG-COM auszulesen. Je nach Modell werden verschiedene Geräteinformationen angezeigt. Außerdem können Meßwerte und Fehlercodes ausgelesen werden. Da das Steuergerät nicht an irgendwelche Meßfühler angeschlossen ist, werden immer wieder neue Fehler aufgezeichnet (eventuell Versorgungsspannung zum Steuergerät kurz unterbrechen), auch wenn man die bisherigen löscht. Der Versuchaufbau auf dem Schreibtisch ist nun komplett und es kann an die Protokoll-Analyse gehen.
Um unterschiedliche Meßwerte abfragen zu können und die Anzahl der von der ECU gespeicherten auftretenden Fehler zu reduzieren, kann man relativ einfach einige Meßfühler simulieren. Die meisten Sensoren liefern eine Widerstandsänderung. Lediglich die Geschwindigkeit und die Motordrehzahl wird aus einem Taktsignal abgeleitet, welches aufweniger ist. Wird an die Anschlüsse eines Sensors (die Pins und die Widerstandswerte kann man mit Autodata in Erfahrung bringen) ein Widerstand angeschlossen, läßt sich der entsprechende Fehler nachhaltig aus dem Speicher löschen. Anstatt eines Festwiderstandes kann man auch ein Potentiometer anschließen, um änderbare Meßwerte zu simulieren. Folgende Tabelle zeigt exemplarisch drei Sensoren für die ECU 030 906 032 E:
| Sensor | Pin 1 | Pin 2 | Widerstand | Meßwert |
| Einlaß Lufttemperatur | 54 | 56 | 2,2KΩ | 24°C |
| Motor Kühlmitteltemperatur | 54 | 74 | 330Ω | 79°C |
| Einlaß Luftdruck | 54 | 70 | 1KΩ | ca. 590mbar |
| 62 | 70 | 10KΩ |
Bei KW1281 erfolgt die Initialisierung, also das wake up, etwas ungewöhnlich: Mit einer Übertragungsgeschwindigkeit von lediglich 5 Baud wird an den Controller dessen Adresse geschickt. Die Adressen sind analog zu den Controller-Nummern in VAG-COM. Zu beachten ist dabei, daß in VAG-COM die Zahlenangaben für die Module in hexadezimaler schreibweise stehen. Also 1 für das Motorsteuergerät, 3 für ABS, 15 (Hex) (21 Dezimal) für Airbags usw. Nach dem aufwecken werden alle weiteren Daten mit einer wesentlich höheren Baudrate übermittelt. Problematisch ist aber die niedrige Baudrate. Auf dem PC gibt es nur wenige Programme, die so langsame Baudraten unterstützen. Auf dem ATmega8 µC ist sie nicht über den internen USART möglich. Auf dem PC kommt wohl noch das Problem hinzu, daß der Umschaltvorgang von 5Bd zu 9600 etc. zu lange dauert, so daß Daten in der Zwischenzeit verloren gehen. Ein Umstand, der für mein µC Projekt nicht relevant aber interessant ist.
Aus den genannten Gründen wird von VAG-COM und anderen Anbietern ein Trick genutzt, um das 5Bd wake up zu durchlaufen. Um das Protokoll zu analysieren gibt es zwei Möglichkeiten, bei denen die Kommunikation von VAG-COM mit dem Steuergerät belauscht wird:
IOCTL_SERIAL_SET_BREAK_ON IOCTL_SERIAL_SET_RTS IOCTL_SERIAL_CLR_DTR IOCTL_SERIAL_SET_BREAK_OFF -> Start-Bit? IOCTL_SERIAL_CLR_RTS IOCTL_SERIAL_SET_BREAK_ON -> 0 IOCTL_SERIAL_SET_RTS IOCTL_SERIAL_SET_BREAK_ON -> 0 IOCTL_SERIAL_SET_RTS IOCTL_SERIAL_SET_BREAK_ON -> 0 IOCTL_SERIAL_SET_RTS IOCTL_SERIAL_SET_BREAK_ON -> 0 IOCTL_SERIAL_SET_RTS IOCTL_SERIAL_SET_BREAK_ON -> 0 IOCTL_SERIAL_SET_RTS IOCTL_SERIAL_SET_BREAK_ON -> 0 IOCTL_SERIAL_SET_RTS IOCTL_SERIAL_SET_BREAK_ON -> 0 IOCTL_SERIAL_SET_RTS IOCTL_SERIAL_SET_BREAK_OFF -> 1 IOCTL_SERIAL_CLR_RTS IOCTL_SERIAL_SET_DTR
Zwischen den einzelnen Umschaltungen liegen genau 200ms, woraus sich dann die 5Bd (1000ms/5bps) ergeben. Im Beispiel wird die Adresse 1 angesprochen. Dezimal 1 entspricht Binär 000 0001.
Meine anfängliche Vermutung, daß die Behauptung, die Initialisierung findet mit 7O1 statt (also 7 Daten-Bit, einer ungeraden (Odd) Parität und einem Stop-Bit), nicht stimmt, hat sich bei genauer Anaylse als falsch erwiesen. Die für die jeweiligen Adressen benötigte Signalform wird genau eingehalten, wobei bei der seriellen Übertragung zuerst das niederwertige Bit des Datenwortes gesendet wird. Beispielsweise für Adresse 1:
1->0 1000 000 0 1 = 1 Start-Bit (Wechsel von 1 auf 0), 7 Daten-Bits; 0 weil ungerade Parität erfüllt ist; 1 Stop-Bit
Auf der sicheren Seite ist, wer ein Oszilloskop nutzen kann. Vorteilhaft ist ein Speicheroszilloskop, da man bei der extrem niedrigen Übertragungsrate und des nur einmalig anliegenden Signals sonst nichts erkennt. Die Abbildung zeigt den Signalverlauf auf meinem Hameg 205-3. Das Signal wurde direkt an der K-Line, also hinter Jeffs Interface abgegriffen, da die verschiedenen seriellen Schnittstellen unterschiedlich saubere Signale liefern, die bei der Analyse irritieren, wenn man das Signal am Eingang von Jeffs Interface abgreift. Die Initialisierungsphase wurde rot hervorgehoben:
Die darauf folgenden Signalspitzen sind auf die anschließende Kommunikation mit höherer Baudrate nach dem wake up zurückzuführen. Deutlich ablesbar sind die Signallängen: Der kurze Wechsel ist je 200ms lang und die längere Phase 1400ms. Die erste Signalflanke High->Low dient als Start-Bit. Um also das Steuergerät sauber zu initialisieren, lohnt es sich, den Signalverlauf zu analysieren und darauf zu achten, daß man die Signalzeiten genau einhält, wenn man die Datenübertragung nicht einem Schnittstellenbaustein überläßt.
Genau das wird auch von meinem Programm im µC gemacht (vergl. Schaltbild): Statt die Adresse des Steuergerätes mit 5Bd über den integrierten seriellen USART Schnittstellenbaustein zu generieren, wird die TxD Datenleitung (PD1), die an den T1IN des MAX232 angeschlossen ist, direkt angesteuert, so daß der MAX232 die jeweiligen Signale ausgibt. Zu beachten ist bei der Programmierung noch, daß man vor der Initialisierung eine kurze Wartezeit einlegt, da durch das einschalten des Steuergerätes (Spannungsversorgung) oder vorherige Kommunikationen, noch Daten vom Controller gesendet werden, die man nicht nutzen will.
Die Kommunikation zur Initialisierung sieht folgendermaßen aus:
| vom µC | von ECU | Beschreibung |
| 0x01 | 5 Baud Adresse des Steuergerätes | |
| 0x55 | Sync Byte zum festlegen der Baudrate (Bedeutung unklar) | |
| 0x01 | key word LSB (low significant byte) (Bedeutung unklar) | |
| 0x8A | key word HSB (high significant byte) (Bedeutung unklar) | |
| 0x75 | Komplement zur 0x8A |
Ein paar Anmerkungen:
Großes Kopfzerbrechen hat mit die Baudrate nach der Initialisierungsphase gemacht. Ich ging davon aus, daß dies stets 9600 Baud ist. Dem ist nicht so. 9600 ist wohl nur weit verbreitet aber prompt nutzte meine ECU 10400 Baud. Da ich die falsche Baudrate gewählt hatte, kam nur Datenschrott statt der drei Bytes 0x55, 0x01 und 0x8A an. Erst als ich nach Tagen 10400Bd ausprobierte, klappte alles auf Anhieb. Deshalb ist es unumgänglich, die Baudrate zu ermitteln. Das geht sehr gut, in dem man die 5Bd Adresse an die ECU schickt und dann die Antwort bei 4800Bd empfängt. Ist es nicht 0x55, 0x01 und 0x8A, dann noch mal die Adresse mit 5Bd schicken und mit 9600Bd warten und ggf. anschließend noch mit 10400 Bd. Es kann auch sein, daß es weitere Baudraten gibt - über Infos freue ich mich.
Die Lösung ist trivial: Ich empfange ein Byte von der ECU und sende sofort eine Antwort oder ein anderes Anforderungs-Byte. Das ist zu schnell. Ich habe leider keine genauen Angaben über die Zeitabstände. Nach dem ich aber vor jedem zu sendenden Byte eine Pause von 5ms einlege, steht die Verbindung absolut fehlerfrei. Der Interrupt-gesteurte Puffer sorgt dafür, daß keine Daten verloren gehen. Wie es aussieht ist die ECU mit 10400Bd also schnell genug gewesen, um die Daten von meinem µC abzunehmen, was die 9600er nicht schaffte.
Andererseits darf die Pause auch nicht zu groß werden. Nach einer mir unbekannten Zeit (schätzungsweise <500ms) wird die Verbindung zur ECU abgebrochen.
Zuerst wird die VAG-Nummer bzw. Controller ID übertragen (in diesem Fall "030906032E "):
| vom µC | von ECU | Beschreibung |
| 0x0F | block length (s. u.); ECU ist Master | |
| 0xF0 | Komplement | |
| 0x01 | block counter (s. u.) | |
| 0xFE | ||
| 0xF6 | block title (s. u.) | |
| 0x09 | ||
| 0x30 | ASCII Wert für "0" | |
| 0xCF | ||
| 0x33 | "3" | |
| 0xCC | ||
| 0x30 | "0" | |
| 0xCF | ||
| 0x39 | "9" | |
| 0xC6 | ||
| 0x30 | "0" | |
| 0xCF | ||
| 0x36 | "6" | |
| 0xC9 | ||
| 0x30 | "0" | |
| 0xCF | ||
| 0x33 | "3" | |
| 0xCC | ||
| 0x32 | "2" | |
| 0xCD | ||
| 0x45 | "E" | |
| 0xBA | ||
| 0x20 | " " (Leerzeichen) | |
| 0xDF | ||
| 0x20 | " " | |
| 0xDF | ||
| 0x03 | block end (s. u.) |
Ein paar Hinweise zu einzelnen Werten:
| vom µC | von ECU | Beschreibung |
| 0x03 | block length; µC ist Master | |
| 0xFC | Komplement | |
| 0x02 | block counter | |
| 0xFD | ||
| 0x09 | ack command | |
| 0xF6 | ||
| 0x03 | block end |
Jetzt ist wieder die ECU an der Reihe. Genau wie zuvor schon schickt sie jetzt den nächsten Datenblock (block counter = 3). In diesem Datenblock wird die Bauteilbezeichnung angegeben. Dies kann z. B. "ME7.5.10 " sein.
Anschließend schickt der µC wieder einen ack block (block counter = 4).
Dieses Spiel wiederholt sich so lange, wie das Steuergerät Daten preis geben will. In der Regel sind es insgesamt vier Datenblöcke: VAG-Nummer, Bauteilbezeichnung, Software Version (z. B. "3013") und Händlerbezeichnung. Eventuell folgen aber noch weitere Zusatzdaten.
Bei all diesen Angaben kann es sein, daß einzelne Bytes geliefert werden, die keinem ASCII-Zeichen entsprechen, so daß die Infos von denen von VAG-COM abweichen, zudem ich davon ausgehe, daß VAG-COM die empfangenen Daten auswertet und etwas aufbereitet, was man schon an der Darstellung der VAG-Nummer erkennen kann.
Unter anderem kann die ECU anstatt eines ASCII-Wertes 0x00 liefern, was als cut-off signal bezeichnet wird. Was es damit auf sich hat, weiß ich nicht. Ich ersetze einfach alle empfangenen Zeichen-Werte außerhalb des ASCII-Bereiches von 0x21-0x7A durch 0x3F ("?").
Auf den letzten Kommunikationsblock der ECU reagiert der µC wie gewohnt mit einem ack block. Wenn die ECU dann keine weiteren Daten senden will, schickt sie nun selber einen ack block:
| vom µC | von ECU | Beschreibung |
| 0x03 | block length; ECU ist Master | |
| 0xFC | Komplement | |
| 0x?? | block counter (Wert je nach Anzahl der bisher ausgetauschten Blöcke) | |
| 0x?? | Komplement des block counter (Wert je nach Anzahl der bisher ausgetauschten Blöcke) | |
| 0x09 | ack command | |
| 0xF6 | ||
| 0x03 | block end |
Jetzt ist die Reihe wieder am µC. Dieser schickt einfach einen ack block, um die Datenverbindung aufrecht zu halten. Die ECU sendet dann wieder einen ack block, dann der µC usw. bis in alle Ewigkeit. Schickt der µC keinen ack block bricht die ECU die Verbindung alsbald ab und es muß wieder mit einer 5Bd Initialisierung begonnen werden. Während der folgenden Phasen kann der µC auch jederzeit statt einer Datenanforderung o. ä. einen ack block senden, woraufhin die ECU mit einem ack block antwortet.
Bevor wir einen Blick auf das Protokoll werfen, zuerst einmal ein paar Infos zum Verständnis: Per group reading wird das Steuergerät aufgefordert vier Meßwertblöcke zu liefern. Dabei gibt es Gruppen von 1 bis 255. Welche vier Meßwerte in einer Gruppe geliefert werden ist unterschiedlich und je nach Modell des Steuergerätes anders. Es kann vorkommen, daß ein Meßwertblock keine Angaben enthält und in einer Gruppe können die gleichen Meßwerte geliefert werden, wie in einer anderen. Das kann praktisch sein, denn so kann man schauen, ob es eine Gruppe gibt, in der vier gewünschte Meßwerte geliefert werden. Ansonsten ist es aber kein Problem, beliebig viele Gruppen abzufragen. Vor den Meßwerten wird immer die Kennzahl für den Meßwerttyp übermittelt. Die Kennzahl hat abhängig vom Steuergerät (und eventuell auch der Gruppe (noch nicht geprüft)) in der sie vorhanden ist, eine andere Bedeutung hat. So kann zum Beispiel die gleiche Kennzahl einmal für die Außentemperatur und einmal für die Öl-Temperatur stehen. Die Meßwerte sind stets in zwei Bytes aufgeteilt. Erst durch eine Rechenoperation wird aus den zwei Bytes der tatsächliche Meßwert. Je nach Sensortyp ist die Rechenoperation eine andere.
Dies ist deshalb auch der "spaßige" Teil: Es gilt für jedes Steuergerät individuell herauszufinden, welche Daten je Gruppe geliefert werden und wie diese zu berechnen sind.
Wie immer gibt es ein paar Infos im Netz, die lückenhaft sind und von mir so weit wie möglich ergänzt sind - über Zusatzinfos freue ich mich mal wieder! Die folgende Tabelle (basierend auf der Datei Value-calculation.txt aus der Yahoo! Gruppe opendiag) zeigt die Kennzahlen für die Sensordaten (1. Byte) und deren Umrechnung, wobei a für das erste Meßwert-Byte (2. Byte) steht und b für das zweite Byte (3. Byte). Alle Angaben sind noch unbestätigt. Lediglich die mit einem √ in der Spalte Bedeutung versehenen sind von mir geprüft.
| Kennzahl | Bedeutung | Berechnung | Einheit | |
| 1: ECU | 23: Instruments | |||
| 1 | Motordrehzahl √ | Motordrehzahl √ | 0.2*a*b | rpm |
| 2 | Absolute Drosselklappenstellung (???) | a*0.002*b | % | |
| 3 | 0.002*a*b | Deg | ||
| 4 | abs(b-127)*0.01*a | "ATDC" if Value >127, else"BTDC" | ||
| 5 | Öl-Temperatur √ | Außentemperatur √ | a*(b-100)*0.1 oder 0.1*a*b - 10*a | °C (beide Formeln scheinen OK zu sein) |
| 6 | Versorgungsspannung ECU (= Batterie) √ | Versorgungsspannung ECU (= Batterie) √ | 0.001*a*b | V |
| 7 | Fahrzeuggeschwindigkeit √ | Fahrzeuggeschwindigkeit √ | 0.01*a*b | km/h |
| 8 | Bit Value Cruise Control??? | 0.1*a*b | (no units) | |
| 9 | (b-127)*0.02*a | Deg | ||
| 10 | if b==0 then "COLD", else"WARM" | |||
| 11 | 0.0001*a*(b-128)+1 | - | ||
| 12 | 0.001*a*b | Ohm | ||
| 13 | (b-127)*0.001*a | mm | ||
| 14 | 0.005*a*b | bar | ||
| 15 | CAN Bus Status??? | 0.01*a*b | ms | |
| 16 | Bin. Bits | ??? | bitvalue | |
| 17 | ??? | chr(a) chr(b) | - | |
| 18 | Absolute Pressure, Atmospheric,Pressure, Intake Manifold,Pressure | 0.04*a*b | mbar | |
| 19 | Tankinhalt √ | a*b*0.01 | l | |
| 20 | a*(b-128)/128 | % | ||
| 21 | Modul. Piston,Movement Sender (???) Voltage | 0.001*a*b | V | |
| 22 | 0.001*a*b | ms | ||
| 23 | EGR Valve, Duty Cycle / Inj. Timing ??? | b/256*a | % | |
| 24 | 0.001*a*b | A | ||
| 25 | (b*1.421)+(a/182) | g/s | ||
| 26 | b-a | C | ||
| 27 | Ign. Timing Calculated/Actual ??? | abs(b-128)*0.01*a | ° ("ATDC" if Value <128, else"BTDC" ???) | |
| 28 | b-a | - | ||
| 29 | Kennfeld | if b<a then "1.Kennfeld"else "2.Kennfeld" | ||
| 30 | b/12*a | Deg k/w | ||
| 31 | Preheating,Time ??? | b/2560*a | °C | |
| 32 | ??? | if b>128 : b-256 else b | - | |
| 33 | Stellung Gaspedal √ | 100*b/a (if a==0 then 100*b) | % | |
| 34 | (b-128)*0.01*a | kW | ||
| 35 | Treibstoff-Verbrauch √ | 0.01*a*b | l/h | |
| 36 | Ges. Laufleistung (letzte Stelle gerundet) √ | a*2560+b*10 | km | |
| 37 | Öldruck (???) | ??? | "Oil Pr. 2 < min" | |
| 38 | (b-128)*0.001*a | Deg k/w | ||
| 39 | Inj. Quantity Driver Request/Torque Limitation/Smoke Limitation [bei T4 5,8mg/h im Leerlauf] | b/256*a | mg/h | |
| 40 | b*0.1+(25.5*a)-400 | A | ||
| 41 | b+a*255 | Ah | ||
| 42 | b*0.1+(25.5*a)-400 | Kw | ||
| 43 | b*0.1+(25.5*a) | V | ||
| 44 | Uhrzeit √ | a : b | h:m | |
| 45 | 0.1*a*b/100 | |||
| 46 | (a*b-3200)*0.0027 | Deg k/w | ||
| 47 | (b-128)*a | ms | ||
| 48 | b+a*255 | - | ||
| 49 | Mass Air/Rev. oder Air Mass,Calculated oder Air Mass,Actual??? | (b/4)*a | mg/h | |
| 50 | ??? | (b-128)/(0.01*a), if a==0 (b-128)/0.01 | mbar | |
| 51 | ??? | ((b-128)/255)*a | mg/h | |
| 52 | b*0.02*a-a | Nm | ||
| 53 | Luftdurchfluß Luftmassenmesser (???) | (b-128)*1.4222+0.006*a | g/s | |
| 54 | a*256+b | Count | ||
| 55 | a*b/200 | s | ||
| 56 | a*256+b | WSC | ||
| 57 | a*256+b+65536 | WSC | ||
| 58 | 1.0225*b, if b>128 then 1.0225*(256-b) | \s | ||
| 59 | (a*256+b)/32768 | - | ||
| 60 | (a*256+b)*0.01 | sec | ||
| 61 | (b-128)/a, if a==0 (b-128) | - | ||
| 62 | 0.256*a*b | S | ||
| 63 | Text | chr(a) + chr(b) + "?" | - | |
| 64 | Widerstand √ | a+b | Ohm | |
| 65 | 0.01*a*(b-127) | mm | ||
| 66 | (a*b)/511.12 | V | ||
| 67 | (640*a)+b*2.5 | Deg | ||
| 68 | (256*a+b)/7.365 | deg/s | ||
| 69 | (256*a +b)*0.3254 | Bar | ||
| 70 | (256*a +b)*0.192 | m/s2 | ||
Will man nun wissen, welche Meßwerte in welcher Gruppe geliefert werden, kann man einfach nacheinander alle 256 Gruppen auslesen und die Kennzahlen notieren. Hilfreich kann aber auch VAG-COM sein. Liest man das Steuergerät mit VAG-COM aus, kann man auf die Schaltfläche Meas. Blocks - 08 klicken und dann nacheinander genau die Gruppen durchklicken und die jeweiligen vier Sensordaten ablesen. Alternativ kann man auch die Labelfiles studieren, die sich auch im Unterordner Labels befinden. Anhand der VAG-Nummer kann man die entsprechende Datei identifizieren. Dabei gibt es aber mir teilweise unklare Konventionen, denn zum einen gibt es redirects für Steuergerätenummern und für meine getesteten Steurgeräte gab es keine Labelfiles, obwohl VAG-COM die Bezeichner kannte. Hat man aber das passende Labelfile, findet man in dieser Textdatei Angaben über die Gruppen und die gelieferten Daten. Beispielsweise 022-906-032-AYL.lbl:
002,0,Basic Functions (Mass Air Flow) 002,1,Engine Speed,,Specification: 650...750 RPM 002,2,Engine Load,,Specification: 12.0...26.0 % 002,3,Injection,Timing,Specification: 1.0...4.0 ms 002,4,Intake Air Mass,,Specification: 2.5...5.0 g/sHierbei handelt es sich um die Gruppe mit der Kennzahl 2. Nach dem Komma werden die vier Datenblöcke unterteilt. 0 gibt es nicht und ist nur eine Kategoriebezeichnung für VAG-COM. Das erste Byte liefert die Engine Speed (Motordrehzahl), das zweite Byte dann den Ladedruck usw.
Die Kennzahl 16 liefert einen Binärwert. Teilweise findet man in den Labelfiles die Bedeutung der einzelnen Bits. Beispielsweise für die zweite Gruppe in 074-906-018.lbl:
; Measuring block 002 - Idle 2,1,Engine,Speed 2,2,Accelerator,Position 2,3,Operating,Condition 1) 2,4,Coolant,Temperature ; ; 1) 010-OK ; 011-Air Conditioning switched onDer dritte Datenblock liefert einen Bytewert, der in der Binärdarstellung u. a. angibt, ob die Klimaanlage an ist.
Wenn die Reihe wieder am µC ist, kann dieser wie gesagt auch ein group reading statt des ack blocks schicken:
| vom µC | von ECU | Beschreibung |
| 0x04 | block length; µC ist Master | |
| 0xFB | Komplement | |
| 0x?? | block counter | |
| 0x?? | Komplement | |
| 0x29 | block title (group reading) | |
| 0xD6 | ||
| 0x02 | group Kennzahl (0x01 bis 0xFF) die gelesen werden soll | |
| 0xFD | ||
| 0x03 | block end |
Hierauf antwortet die ECU beispielsweise (ECU 030-906-032E):
| vom µC | von ECU | Beschreibung |
| 0x0F | block length; ECU ist Master | |
| 0xF0 | Komplement | |
| 0x?? | block counter | |
| 0x?? | Komplement | |
| 0xE7 | block title (Antwort auf group reading) | |
| 0x18 | ||
| 0x01 | Kennzahl für 1. Datenblock | |
| 0xFE | ||
| 0xC8 | 1. Sensordaten-Byte = Meßwert a | |
| 0x37 | ||
| 0x00 | 2. Sensordaten-Byte = Meßwert b | |
| 0xFF | ||
| 0x21 | Kennzahl für 2. Datenblock | |
| 0xDE | ||
| 0x85 | 1. Sensordaten-Byte = Meßwert a | |
| 0x7A | ||
| 0x85 | 2. Sensordaten-Byte = Meßwert b | |
| 0x7A | ||
| 0x0F | Kennzahl für 3. Datenblock | |
| 0xF0 | ||
| 0x29 | 1. Sensordaten-Byte = Meßwert a | |
| 0xD6 | ||
| 0x00 | 2. Sensordaten-Byte = Meßwert b | |
| 0xFF | ||
| 0x12 | Kennzahl für 4. Datenblock | |
| 0xED | ||
| 0xFA | 1. Sensordaten-Byte = Meßwert a | |
| 0x05 | ||
| 0x5A | 2. Sensordaten-Byte = Meßwert b | |
| 0xA5 | ||
| 0x03 | block end |
Anschließend kann der µC ein weiteres group reading für eine beliebige Gruppe anfordern.
Völlig zur Verzweifelung hat mich getrieben, daß die ECU aus meinem Bus während des group readings nach einigen (unterschiedlich häufigen) erfolgreichen group readings ein Byte 0x0F schickt, nach dem der µC an der Reihe war und das Byte für die block length geschickt hat. Scheint ein Fehler zu sein, denn es trat nur auf, wenn der Motor lief und nicht, wenn nur die Zündung ein war. Anschließend ist die Kommunikation beendet und man muß wieder mit der Initialisierung beginnen. Inzwischen habe ich das als Timing-Problem erkannt.
Im Beispiel sendete die ECU folgende Daten für die zweite Gruppe, die dann umgerechnet werden können:
| Kennzahl | Meßwert a | Meßwert b | Berechnung (vgl. oben) | Ergebnis |
| 1 | 200 | 0 | a*0.2*b | 200*0,2*0 = 0 rpm |
| 33 | 133 | 133 | 100*b/a (if a==0 then 100*b) | 100*133/133 = 100% |
| 15 | 41 | 0 | 0.01*a*b | 0,01*41*0 = 0ms |
| 18 | 250 | 90 | 0.04*a*b | 0,04*250*90 = 900Mbar |
Als Beispiel eine Auflistung der ersten 26 groups, wie sie die ECU (074 906 018 A) aus meinem T4 111KW liefert:
| group # | 1. Kennzahl | 2. Kennzahl | 3. Kennzahl | 4. Kennzahl |
| 1 | 1 | 39 | 21 | 5 |
| 2 | 1 | 33 | 16 | 5 |
| 3 | 1 | 49 | 49 | 23 |
| 4 | 1 | 27 | 27 | 23 |
| 5 | 1 | 39 | 27 | 5 |
| 6 | 7 | 16 | 16 | 8 |
| 7 | 5 | 17 | 5 | 5 |
| 8 | 1 | 39 | 39 | 39 |
| 9 | 1 | 39 | 39 | 17 |
| 10 | 49 | 18 | 18 | 33 |
| 11 | 1 | 18 | 18 | 23 |
| 12 | 16 | 31 | 6 | 5 |
| 13 | 51 | 51 | 51 | 51 |
| 14 | 51 | 17 | 17 | 17 |
| 15 | 1 | 39 | 35 | 39 |
| 16 | 2 | 16 | 16 | 6 |
| 17 | 17 | 17 | 17 | 17 |
| 18 | 7 | 16 | 7 | 7 |
| 19 | 21 | 21 | 17 | 17 |
| 20 | 1 | 39 | 21 | 33 |
| 21 | 49 | 49 | 23 | 16 |
| 22 | 27 | 27 | 23 | 7 |
| 23 | 18 | 18 | 23 | 18 |
| 24 | 5 | 5 | 5 | 8 |
| 25 | 17 | 17 | 17 | 17 |
| 26 | 63 | 50 | 53 | 17 |
Eine Gesamtübersicht der ersten 128 Byte liegt als Textdatei vor. Es können also die Meßwerte für die Kennzahlen 1, 2, 5, 6, 7, 8, 15, 16, 17, 18, 21, 23, 27, 31, 32, 33, 35, 39, 49, 50, 51, 53, 63 abgefragt werden.
Interessant ist auch der Umstand, daß andere Steuergeräte die gleiche obige Tabelle mit den Kennzahlen verwenden. Liest man beispielsweise mein T4 Steuergerät Kombiinstrument (7D0 920 823 C) aus (Adresse 0x17), bekommt man für die ersten beiden groups die Kennzahlen 7, 1, 37, 44 und 36, 19, 64, 5 geliefert. Textdatei mit allen Werten.
| vom µC | von ECU | Beschreibung |
| 0x03 | block length; µC ist Master | |
| 0xFC | Komplement | |
| 0x?? | block counter | |
| 0x?? | Komplement | |
| 0x06 | block title (end ouput) | |
| 0xF9 | ||
| 0x03 | block end |
Anschließend kann ein Steuergerät bei Bedarf wieder mit der gewohnten 5Bd Initialisierung aufgeweckt werden.
| vom µC | von ECU | Beschreibung |
| 0x?? | beliebiges Byte | |
| 0x0F oder 0x27 | 1. Byte zur Fehlerkennzeichnung (?). 0x0F nach dem zuvor 0x05 gesendet wurde. 0x27 nach 0x57 | |
| 0x0F oder 0x27 | 2. Byte zur Fehlerkennzeichnung (?) | |
| 0x?? | Komplement zum letzten Byte (2. Fehlerbyte) | |
| 0x55 | Sync Byte zum festlegen der Baudrate (Bedeutung unklar) | |
| 0x01 | key word LSB (low significant byte) (Bedeutung unklar) | |
| 0x8A | key word HSB (high significant byte) (Bedeutung unklar) | |
| 0x75 | Komplement zu 0x8A |
Wie man sieht, schickt die ECU nach Signalisierung des Fehlers die drei Bytes wie bei der Initialisierung. Durch diese Aktion wird der block counter auf Null zurückgesetzt. Der nächste von der ECU gesendete Block beginnt mit dem block counter Wert 1.
Es folgt eine ähnliche Phase wie nach der Initialisierung:
Jetzt kommt etwas merkwürdiges. Statt eines ACK block schickt der µC:
| vom µC | von ECU | Beschreibung |
| 0x03 | block length; µC ist Master | |
| 0xFC | Komplement | |
| 0x08 | block counter | |
| 0xF7 | Komplement | |
| 0x00 | Was auch immer dies bedeutet | |
| 0xFF | Komplement | |
| 0x03 | block end |
Anschließend sendet die ECU wieder einen 0xF6 ASCII Daten Block mit weiteren ASCII Zeichen. Dies scheint dann der letzte zu sein, denn jetzt beginnt wieder das Wechselspiel, bei dem zuerst der µC einen ACK block und dann die ECU einen sendet, bis der µC einen anderen Befehl schickt.
| vom µC | von ECU | Beschreibung |
| 0x03 | block length; µC ist Master | |
| 0xFC | Komplement | |
| 0x?? | block counter | |
| 0x?? | Komplement | |
| 0x07 | block title (get errors) | |
| 0xF8 | ||
| 0x03 | block end |
Nun sendet die ECU alle gespeicherten Fehlercodes. In der ersten Antwort werden maximal vier Fehlercodes gesendet.
| vom µC | von ECU | Beschreibung |
| 0x0F | block length; ECU ist Master | |
| 0xF0 | Komplement | |
| 0x?? | block counter | |
| 0x?? | Komplement | |
| 0xFC | block title (Antwort auf get errors) | |
| 0x03 | ||
| 0x46 | 1. Fehlercode High Byte | |
| 0xB9 | ||
| 0x5A | 1. Fehlercode Low Byte | |
| 0xA5 | ||
| 0xA3 | 1. Fehlercode Status-Byte | |
| 0x5C | ||
| 0x40 | 2. Fehlercode High Byte | |
| 0xBF | ||
| 0x71 | 2. Fehlercode Low Byte | |
| 0x8E | ||
| 0x23 | 2. Fehlercode Status-Byte | |
| 0xDC | ||
| 0x46 | 3. Fehlercode High Byte | |
| 0xB9 | ||
| 0x1E | 3. Fehlercode Low Byte | |
| 0xE1 | ||
| 0x23 | 3. Fehlercode Status-Byte | |
| 0xDC | ||
| 0x46 | 4. Fehlercode High Byte | |
| 0xB9 | ||
| 0x20 | 4. Fehlercode Low Byte | |
| 0xDF | ||
| 0x23 | 4. Fehlercode Status-Byte | |
| 0xDC | ||
| 0x03 | block end |
Die jeweils beiden ersten Bytes eines jeden Fehlercodes werden hintereinander gesetzt und interpretiert. Aus beispielsweise 0x46 und 0x5A ergibt sich 0x465A. Dies entspricht Dezimal 18010 und gibt den Volkswagen Diagnostic Trouble Code (DTC) an. Die DTC Tabelle listet die mir bekannten Fehler auf. Im Web verfügbar ist auch eine Liste der B-Codes. Weitere Codes (muß noch integriert werden)
Das dritte Fehler-Byte (Status-Byte) beschreibt den Fehler näher und gibt z. B. an, ob der Fehler nur sporadisch auftritt oder in welcher Form das Signal abweicht, wie die Liste der Status-Codes zeigt.
Alternativ zu den DTCs gibt es noch die Codes nach SAE J2012 der Society of Automotive Engineers (SAE). Diesen steht ein Buchstabe voran:
Für obiges Beispiel kann man so feststellen, daß der zweite gemeldete Fehler 0x4071 (16497) heißt und dies bedeutet Intake Air Temp.Circ High Input (Einlaß Lufttemperatur Schaltkreis zu hoher Eingang).
Nach dem der erste Block mit den Fehlern geschickt wurde, antwortet der µC mit dem üblichen ack block. Wenn weitere Fehler vorliegen, schickt die ECU dann einen weiteren Block mit dem block title 0xFC. Dieser kann kürzer sein, wenn z. B. nur noch drei Fehler folgen (0x0C für block length). Darauf reagiert der µC wieder mit einem ack block und die ECU schickt ggf. weitere Fehler oder antwortet selber mit einem ack block, wenn keine weiteren Fehler vorliegen.
Sind keine gespeicherten Fehler vorhanden sieht die Antwort der ECU folgendermaßen aus:
| vom µC | von ECU | Beschreibung |
| 0x06 | block length; ECU ist Master | |
| 0xF9 | Komplement | |
| 0x?? | block counter | |
| 0x?? | Komplement | |
| 0xFC | block title (Antwort auf get errors) | |
| 0x03 | ||
| 0xFF | kein Fehler vorh. (1. Fehlercode High Byte) | |
| 0x00 | ||
| 0xFF | kein Fehler vorh. (1. Fehlercode Low Byte) | |
| 0x00 | ||
| 0x88 | kein Fehler vorh. (1. Fehlercode Daten-Byte) | |
| 0x77 | ||
| 0x03 | block end |
Ist man sich sicher, daß die gespeicherten Fehler gelöscht werden können, ist dies ebenfalls möglich:
| vom µC | von ECU | Beschreibung |
| 0x03 | block length; µC ist Master | |
| 0xFC | Komplement | |
| 0x?? | block counter | |
| 0x?? | Komplement | |
| 0x05 | block title (clear errors) | |
| 0xFA | ||
| 0x03 | block end |
Darauf reagiert die ECU mit einem normalen 0x09 ACK block. Daraufhin kann dann der µC wieder wie gewohnt Befehle senden. Sinnvoll könnte es zum Beispiel sein, anschließend noch einmal den Fehlerspeicher auszulesen, um zu überprüfen, ob das Löschen geklappt hat.
Einführung
Schaltplan/PCB Layout
Aufbau
Software
Schon vor einiger Zeit bin ich auf zwei Interessante ICs gestoßen, die dem ein Ende setzen würden. Da gibt es zum einen den L9637D von STMicroelectronics und zum anderen den MC33290D von Motorola/Freescale. Beide bieten ein ISO-Interface nach ISO9141. Der L9637D ist etwas teurer und kann Spannungen bis 36V ab, weshalb er sich auch für Nutzfahrzeuge mit 24V Bordnetz eignet. Allerdings ist er etwas zu langsam und nicht CAN-tauglich, da er maximal 58kBit/s schafft und CAN bei bis zu 500kBit/s arbeitet. Der MC33290D ist nur bis 18V ausgelegt, ist aber dafür für OBD per CAN schnell genug. Deshalb habe ich mich für den MC33290D entschieden. Für VAG-COM ist dies aber unbedeutend, da KW1281 und ISO 9141 nur mit bis zu 10400Bd arbeiten. Eine Adaption an den L9637D ist aber relativ einfach zu bewerkstelligen, wenn dies erforderlich sein sollte. Mit dem USB-Interface gibt es nun auch eine derartige Lösung.
Selbstverständlich sollte die Schaltung auch problemlos mit Diagnosesoftware für andere Fahrzeuge zusammenarbeiten. BMW und Mercedes Benz nutzen beide ebenfalls mindestens eine K-Datenleitung zur Diagnose bei alten Modellen. Für BMW gibt es bspw. die Software Car Scanner für KW 71. Infos zur Belegung des BMW Steckers findet man u. a. bei http://luuk.xs4all.nl/bmwboeken/Diagnose.htm. Die dort als RXD Datenleitung bezeichnete Verbindung dürfte wohl die L-Leitung sein und TXD ist die K-Leitung.
Bei Mercedes sieht die Sache komplizierter aus, da im Diagnosestecker die verschiedenen Steuergeräte unterschiedlichen Pins zugeordnet sind, die dann mit der K-Leitung verbunden werden. Die Motorsteuergeräte sind an Pin 4 und 5 zu finden. Ein Pinout findet sich auch: http://articles.mbz.org/electric/diag.
Im Besonderen möchte ich auf die kostenlose Software OBD Scan Tech hinweisen (s. u.), welche alle wichtigen OBD II Funktionen anbietet.
Wichtiges Kriterium bei der Konstruktion war, daß ausschließlich Standardbauteile verwendet werden und keinerlei Einstellungen notwendig sind, da sich die Bauteile an die Normen halten. Für die OBD-Seite ist der ISO-Chip zuständig und für die serielle Seite ein Standard RS232-Schnittstellenbaustein vom Typ MAX232.
Ich bitte alle Anwender, die diese Schaltung nachbauen, sich für meine Entwicklung erkenntlich zu zeigen, und die Fahrzeuge, an denen sie den Adapter ausprobiert haben, in die Liste der getesteten Fahrzeuge einzutragen.
Die Schaltung wurde mit Eagle entworfen. Der Schaltplan kann herunter geladen werden.
Die Schaltung ist im Prinzip relativ einfach: Der MAX232 setzt die Signale der seriellen Schnittstelle in TTL-Pegel um, die dann vom MC33290D in ISO-Pegel umgesetzt werden und andersherum. Versorgt wird die Schaltung aus dem Fahrzeug (12V Bordnetz) über das OBD2-Kabel und einen einfachen Spannungsregler. Die LED leuchtet bei anliegender Betriebsspannung.
Damit die Schaltung auch zu älteren Autos kompatibel bleibt, muß lediglich für die L-Leitung eine extra Lösung her, da der ISO-Chip nur die K-Leitung unterstützt. Die L-Leitung wurde deshalb mit einem Transistor realisiert, da vom PC zur L-Leitung nur Daten gesendet, nicht aber empfangen werden. Für den angegebenen Typ BC547B kann man natürlich auch die C Variante einsetzen oder einen der zahlreichen Ersatztypen. Die meisten Autos benötigen diese Leitung nicht, sondern nur noch die K-Leitung. Deshalb ist auch der Schalter integriert, um die Verbindung zum OBD-Stecker unterbrechen zu können. So kann man testen, ob das Fahrzeug noch die L-Leitung zur Initialisierung benötigt oder nicht mehr.
Ein Platinenentwurf für eine lediglich 40x60mm große Platine ist ebenfalls vorhanden. Eine Vorlage für die Platinenbelichtung liegt auch als PDF vor.
Hier noch eine Bauteilliste:
| Anzahl | Bezeichner | Typ |
| 2 | R1, R3 | 560 Ω - besser: 510 Ω |
| 1 | R2 | 2,2 kΩ |
| 1 | R4 | 330 Ω |
| 2 | C1, C2 | 100 nF; Keramik; RM 2,5 |
| 5 | C3, C4, C5, C6, C7 | 1 µF/63V; Elko; RM 2,5; radial |
| 1 | D1 | 1N4148 |
| 1 | LED1 | 5mm Standard LED |
| 1 | T1 | BC547 B/C |
| 1 | IC1 | MAX232 |
| 1 | IC2 | 78L05 |
| 1 | IC3 | MC33290 |
| 1 | S1 | Mini DIP Schalter 1-fach; 2 polig |
| 1 | X1 | 9 pol. Sub-D-Buchse; female; Printmontage; gewinkelt; EU-Norm 9,4 mm |
| 1 | X2 | 9 pol. Sub-D-Stecker; male; Printmontage; gewinkelt; EU-Norm 9,4 mm |
Außerdem wird benötigt: Platine, 1:1 Datenkabel, OBD->SUB-D-Kabel
Wichtiger Hinweis: Entgegen der bisherigen Angabe und auch entgegen dem falschen Bestückungsaufdruck auf der Platine wird kein Nullmodemkabel, sondern ein 1:1 Datenkabel benötigt!

Ein Bild vom realen Aufbau des ersten Prototyps. Diese Version hatte noch einen kleinen Designfehler. Bei der Korrektur wurde dann der Schalter versetzt, wie in den folgenden Bildern zu sehen ist.
Bestückung der professionell gefertigten Platine.
Die Leiterbahnseite mit dem SMD-Bauteil (Bild anklicken für Großdarstellung).
Hinweis zum MC33290: Der eingelaserte helle Punkt auf dem Gehäuse markiert die kurze Seite, zu der sich Pin 1 am nächsten befindet (analog zu den früher üblichen Einkerbungen bei ICs) und nicht unbedingt unmittelbar Pin 1. Pin 1 ist eigentlich immer links unten, wenn man die Schrift lesen kann.

Zwei Bilder aus Eagle3D, welche die aktuelle Bauteilanordnung passend zu obigen Schaltplan zeigen.

Das SMD-IC wird auf der Leiterbahnseite angelötet. Dazu am besten zuerst die Anschlußstücke der Leiterbahn dünn verzinnen, dann das Bauteil auflegen und fixieren und mit dem Lötkolben anheften, in dem einzelne Beinchen erhitzt werden, bis das Lötzinn der verzinnten Leiterbahn flüssig wird; anschließend nachlöten.
Einbaubeispiel des KW1281/ISO9141 OBD-2 Interface in Strapubox Gehäuse #2412. Die Platine paßt genau hinein und hält ohne weitere Befestigung wenn in die Stirnseiten Ausschnitte für die Sub-D Buchsen gesägt werden.
Einbautip: In der Höhe nicht mittig, sondern die Leiterplatte ca. 1 mm nach oben versetzt einbauen.
Audi-VWTool
OBD Scan Tech
Einführung
Software
Über OBD2 läßt sich die tatsächliche Beschleunigung von 0 auf 100 km/h relativ einfach und komfortabel ohne Stopuhr etc. ermitteln. Dabei ist allerdings zu beachten, über welches Protokoll die gefahrene Geschwindigkeit ermittelt wird. Wie bereits gezeigt, weicht die Angabe bei KW 1281 erheblich von der Realität ab. Somit liefern Programme, die beispielsweise auf VAG-COM aufsetzen, keine aussagekräftigen Ergebnisse. Erst wenn wirklich ein OBD-2 Protokoll wie ISO 9141 eingesetzt wird, wird eine erstaunlich genaue Geschwindigkeitsangabe geliefert.
Passend zu meinem ISO-Interface habe ich deshalb eine Software geschrieben, mit der Sie die Messung durchführen können. Diese Software ist also nicht auf Fahrzeuge von VAG beschränkt, sondern eignet sich für alle Autos mit OBD-2 auf Basis des ISO 9141/14230 Protokoll (kein CAN).
Sicherheitshinweis: Achten Sie auf Ihre Sicherheit und die anderer Verkehrsteilnehmer! Hantieren Sie nicht mit der Software herum, während Sie fahren.
Systemvoraussetzungen: Der PC sollte flott sein. Mit einem Celereon 550 lief es, doch führten parallele Aktionen zu abbrüchen. Windows (XP). Serielles ISO KL-Interface (oder vergleichbares). Mit meinem Prototyp USB-KKL-Interface gab es erhebliche Probleme - keine Ahnung, ob das am Prototyp oder (was ich eher glaube) am Treiber des USB <-> RS232-Umsetzer auf dem langsamen Laptop lag.
Download: SpeedyUp - Acceleration measurement Version 0.1 (254 KB)
Installation: Archiv irgendwohin auspacken und speedyup.exe aus dem Explorer heraus starten. Danke an Burkhard Kainka für die rscom.dll, für die serielle Schnittstellenkommunikation.
Anwendung:





Einführung
OBD-2 Stecker basteln
Fachwerkstätten haben natürlich spezielle Geräte, die für den normalen Autofahrer indiskutabel teuer sind. Was aber, wenn Sie selber Öl wechseln können und nun vor dem Problem stehen, den Ölwechsel der Serviceintervallanzeige mitzuteilen, damit Sie dann wieder zum richtigen Zeitpunkt auf den nächsten Ölwechsel hingewiesen werden können? Dafür und für viele andere nette Spielereien benötigt auch der Selbstbastler Zugriff auf den Boardcomputer, will er nicht in die überteuerte Hersteller-Werkstatt gehen, um zu erfahren, welche Fehlercodes aufgelaufen sind etc.
So, nun fahre ich einen VW T4, Bj. 2001 und bastle gerne selber. Stand also vor dem beschriebenen Problem mit dem Ölwechsel. Was tun? Die beiden folgenden Beiträge zeigen, wie man mit etwas Hardware und einem PC Daten aus dem Fahrzeugbordcomputer auslesen und manipulieren kann.
Im Internet gibt es zum Beispiel die Software VAG-COM, mit der man den Laptop (oder PC, wenn man die Kiste ins Auto schleppen will) an den Boardcomputer anschließen kann, um dann Parameter auszulesen und Werte zurückzuschreiben (auf die Bedienung der Software gehe ich nicht ein). Für weitergehende Diskussionen und Fragen zur Anwendung gibt es Diskussionsforen, wie das VAG-COM-Forum. Die unregistrierte Demoversion kann immerhin schon Fehlercodes ausgeben und aus dem Bordcomputer löschen. Da in der Demoversion nicht alle Fehler- und Statuscodes als Klartext erscheinen, gibt es entsprechende Listen der Fehler- und Statuscodes (weitere Infos auf der Seite zum KW1281). Nur wie schließt man den PC an den Boardcomputer? Ross-Tech bietet dazu beispielsweise exklusive und teure Adapter an. Profis schwören auf diese Interfaces.
Aber man findet auch im Internet zahlreiche Angebote (u. a. in Online-Auktionen), die als Adapter zwischen Laptop und OBD-2 gesteckt werden. Alle haben aber eins gemeinsam: Sie sind so unverschämt teuer, daß man dann auch in die Werkstatt fahren kann. Außerdem hasse ich dubiose Auktionen, bei denen eine Person unter verschiedenen Pseudonymen mehrere Dutzendmal den identischen Artikel mit der identischen Produktbeschreibung anbietet und merkwürdigerweise alle Bietenden immer sich gegenseitig überbieten, statt einfach den nächsten Artikel zu kaufen. Für um die € 60,- + € 7,- Porto ist mir zu viel.
Also weiter suchen und Jeff Noxon finden. Hier hat jemand eine simple Schaltung aufgebaut, die alles macht, was man braucht: Galvanische Trennung zwischen Auto und PC, um zerstörerische Pegel zu umgehen und Anpassung der Pegel. Das ganze besteht aus einer Handvoll Bauteilen und ist von jedem halbwegs geschickten Menschen nachbaubar. Da einige Sachen etwas erklärenswert sind, werde ich im Artikel zum Adapter mit VAG-COM ein paar Punkte näher beleuchten.
Da die Schaltung von Jeff nur mit VAG-COM zusammen arbeitet und daher nur bei VW und Audi benutzt werden kann, sei noch darauf hingewiesen, daß es auch Alternativen gibt, die ich inzwischen auch realisiert habe und über die ich einen extra Bericht zum Adapter mit ELM 323 geschrieben habe: Elektor-Projekt 11/2002-12/2002 mit selbstbestückbarer Platine. Diese Schaltung weist dank des ICs ELM 323 mehr Eigenintelligenz auf und führt nicht nur die galvansiche Trennung durch, sondern übernimmt auch die Kommunikation mit der Schnittstelle und liefert die Ergebnisse direkt als ASCII-Zeichen. Den benötigten ELM323 (Original Datenblatt) kann man u. a. bei KDS für ca. € 21,- oder bei Segor für ca. € 33,- bestellen. Alle anderen Bauteile (auch den Quarz) gibt es bei Conrad für wenige Euros. Die Platine liefert Elektor für ca. € 14,-. Ohne Stecker kostet der Adapter also etwa € 45,-. Die Software ScanTool ist dafür umsonst erhältlich.
Desweiteren habe ich mitbekommen, daß es bei nachträglich eingebauten Radios vorkommen kann, daß auf der K- oder L-Leitung (Pin 7 und 15) Masse oder UBatt (ca. 12V) liegt. Keine Ahnung wieso, aber wer sicher gehen will, kann das ja vorher mit einem einfachen Multimeter überprüfen. Infos bei Ross-Tech.

Also selber machen! Genau! Der Stecker weist ja keine Geheimnisse auf. An welchen Einbauorten die Buchse zu finden ist, hängt vom Fahrzeugmodell ab.

Abgebildet ist die OBD-2 Buchse, wie sie im Auto zu finden ist (Draufsicht):

| Pin | Beschreibung |
|---|---|
| 2 | J1850 Bus+ |
| 4 | Fahrzeug Masse |
| 5 | Signal Masse |
| 6 | CAN High (J-2284) |
| 7 | ISO 9141-2 K Ausgang |
| 10 | J1850 Bus |
| 14 | CAN Low (J-2284) |
| 15 | ISO 9141-2 L Ausgang |
| 16 | Batterie-Spannung +12V |
Anhand der belegten Pins kann man erkennen, welche Protokolle unterstützt werden:
| Stift (Signal) | Stift (Masse) | Stift (Signal) | Stift (Signal) | Stift (+12 V) | Protokoll |
|---|---|---|---|---|---|
| -- | 4 + 5 | 7 | 15 *) | 16 | ISO 9141-2 |
| 2 | 4 + 5 | -- | 10 | 16 | PWM J1850 |
| 2 | 4 + 5 | -- | -- | 16 | VPW J1850 |
| -- | 4 + 5 | 6 | 14 | 16 | CAN Bus |
Die hier vorgestellte Schaltung unterstützt lediglich das ISO 9141-2 Protokoll.
Es gibt auch noch ältere Anschlüsse, die aus zwei zweipoligen Steckern bestehen. Diese sind meistens im Motorraum zu finden:

| Steckerfarbe | Pin | Kabelfarbe | Beschreibung |
|---|---|---|---|
| weiß | 1 | blau oder grau/blau | ISO 9141-2 K Ausgang |
| weiß | 2 | gelb oder grau/gelb | ISO 9141-2 L Ausgang |
| schwarz | 3 | rot | Batterie-Spannung +12V |
| schwarz | 4 | schwarz oder braun | Fahrzeug Masse |
Wenn man sich nicht als professioneller Tachoversteller betätigen will, nutzt man das ganze Adapterkabel maximal ein paar mal im Jahr. Da muß der Stecker nicht als Edelversion vorliegen.
Bei meinem Bus befindet sich die Buchse für den Anschluß an den Boardcomputer in der Lenksäule etwa 30cm unterhalb des Lenkrades hinter einer einfachen Plastikklappe. Flugs die Abmessungen ermittelt und dann kann es losgehen: Ich habe mich für eine einfache Lösung entschieden, bei der Materialkosten in Höhe von € 2,51 anfallen. Dafür kann man dann allerdings theoretisch 10 Stecker basteln, denn die Bauteile gibt es nur im 50er Beutel.
Es wird benötigt:
| Anzahl | Bezeichnung | Bestell-Nr.*) | Preis |
| 1 Btl. | Lötstifte 1mm | 526266 | € 1,00 |
| 1 Btl. | Steckschuhe 1,3mm (mit Crimp-Anschluß) | 526258 | € 1,51 |
Da wir im weiteren Verlauf eh noch ätzen, wird auch der Sockel für den Stecker im gleichen Arbeitsgang auf einer freien Ecke der Platine geätzt, so daß für einen einzelnen Stecker keine zusätzliche Leiterplatte benötigt wird. Das zu fertigende Leiterbahnbild ist denkbar einfach und liegt als Vorlage in PDF vor:
Nach dem die Leiterplatte geätzt und von der Adapter-Schaltung (s. u.) abgesägt wurde, werden die Löcher mit einem 1,2mm Bohrer gebohrt. Es werden nur die Löcher 4, 5, 7, 15 und 16 benötigt. In die Löcher werden dann Löststifte gesteckt und verlötet. Bei der Abbildung fehlt noch Pin 7:

Auf die Lötstifte werden nun die Lötösen gesteckt und verlötet. Dabei ist darauf zu achten, daß alle Ösen in die gleiche Richtung zeigen, da die Fahne nicht symmetrisch ist. Pin 7 fehlt noch immer ;-) Mit einer Drahtbrücke werden die Pins 4 und 5 verbunden, um die Masse sicher abzugreifen.

Das war's schon. Später wird der Stecker noch mit dem Adapter verdrahtet und mit einem Klecks Heißkleber als Zugentlastung versehen. Die Lötstifte sind jetzt so angeordnet, daß der Stecker mit etwas Gefühl in die rosafarbene OBD-2 Buchse im Auto paßt. Kleine Paßprobleme können vorsichtig mit einer Flachzange behoben werden. Die Reihe mit den drei Stiften ist dabei nach oben zur Seite mit den zwei hervorstehenden Nasen an der rosafarbenen Buchse auszurichten.
Einführung
Die Schaltung
Software
Fazit
Für die wohl meisten Fahrzeuge mit OBD-2 bietet sich die relativ preiswerte Schaltung auf Basis eines Chips von ELM electronics an. Das IC übernimmt sämtliche Kommunikation zwischen Auto und PC, so daß mit einfachsten Mitteln Werte ausgelesen werden können. Mit ScanTool gibt es auch ein praktisches Freeware Programm, welches Fehlercodes auslesen, anzeigen und zurücksetzen kann. Ebenso können verschiedene Meßwerte angezeigt werden.
Wie immer bei OBD gibt es drei verschiedene Protokolle. Hier wird nur das verbreitete ISO9141-2 betrachtet. Welches Protokoll das Auto unterstützt kann anhand der Steckerbelegung oder der Liste erfolgreich gescannter Fahrzeuge festgestellt werden.
Die Bauteile sind alle handelsüblich und bei den einschlägigen Händlern für unter € 10,- verfügbar. Lediglich der ELM323 ist selten und nur bei KDS für ca. € 20,- oder bei Segor für ca. € 33,- erhältlich. Da ich mir diesmal auch einen OBD-2-Stecker gönnen wollte, den man nur bei Küster bekommt, habe ich dort bestellt. Meine Bastelversion täte es zwar auch, aber so ist es schon stabiler. Außerdem kann ich den Stecker über einen Pfostenverbinder an beide Schaltungen anstöpseln. Für ein € 10,- teures Gehäuse war ich dann doch zu geizig - Heißkleber ist eine tolle Sache.

Bauteilersatzliste:
| Kennung | Original | Ersatz | Bemerkung |
| T1, T2 | 2N 3904 | BC 547B | |
| T3, T4 | 2N 3906 | BC 557B | |
| Q1 | 3,579545MHz | Bei Elektor wird der mit 32pF angegeben. Erhältlich ist irgendwas zwischen 18pF (Reichelt) und 30pF (Conrad). Lediglich die LP-Version bei Segor weist 32pF auf. Ich habe einen mit angeblich 18pF verbaut und es läuft. | |
| R1, R5, R6 (Elektor: R14, R8, R9) | 220Ω, 220Ω, 220Ω | 680Ω, 330Ω, 330Ω | Die Werte beim ElmScanISO sind ein wenig niedrig (LEDs leuchten hell). Besser die konservativen Werte wie beim ELM Datenblatt (750Ω und 330Ω) benutzen oder die E12er aus Elektor |
| R2, R4 (Elektor: R1, R3) | 510Ω | 560Ω | 510Ω als Widerstand sind üblich, nur nicht aus der beim Bastler vorhandenen E12er Reihe. Ich habe 560Ω eingebaut und alles läuft. |
Elektor hat außerdem bereits eine etwas üblichere 9-polige SUB-D-Buchse verbaut. Die Originale verwenden eine 25-polige. Soll ein vorhandenes 9-poliges Datenkabel benutzt werden, müssen Sie die Anschlüsse ändern und bei einer 9-poligen Verbindung die Pins 2 (RxD), 5 (SG) und 3 (TxD) verwenden und 7 und 8 verbinden. Wird das Kabel noch gekauft, können Sie auch ein 25- zu 9-poliges benutzen und die Originalschaltung beibehalten. Zum PC wird ein 1:1 Datenkabel und kein Nullmodem-Kabel benutzt!
Mit der Anleitung zur Herstellung von Platinen sollte der Nachbau jedem Bastler gelingen. Die Platine liefert Elektor aber auch für ca. € 14,-.

Die zurückgelieferten Hexadezimal-Werte sind oft mit einem Offset versehen, der subtrahiert werden muß oder sie müssen in anderer Form umgerechnet werden. Ebenfalls sehr aufschlußreich ist ein Blick in den Source-Code von ScanTool (speziell die Datei sensors.c). Für die Fehlercodes gibt es eine englische Liste der meisten Fehler. Inzwischen gibt es auch bei mir eine Zusammenstellung der DTCs.
Die Abfrage läuft relativ einfach ab:
| PID | Bezeichnung engl. | Bezeichnung dt. | Anmerkung | Berechnung |
| 1 | System tests status | System Status | MIL-Status, Anzahl Fehlercodes, Überwachungsstatus | >128 bedeutet, daß die MIL an ist, Nach Abzug dieses Offsets verbleibt die Anzahl der Fehlercodes. Es können auch Fehler auftreten, die nicht zum aufleuchten der MIL führen. |
| 4 | Calculated Load Value | berechneter Lastwert | 0-100%, x*100/255 | |
| 5 | Engine Coolant Temperature | Motor-Kühlmitteltemperatur | siehe Besonderheiten | -40-215°C, x-40 (1° pro Bit, Offset von 40) |
| 11 | Intake Manifold Pressure | Absolutdruck Einlaßkanal | 0-255 kPa, x (1 kPa pro Bit) | |
| 12 | Engine RPM | Motor-Umdrehungen | 0 min-1-16383,75 min-1, x/4 (0,25 U/min pro Bit) | |
| 13 | Vehicle Speed | Geschwindigkeit | siehe Besonderheiten | 0 km/h-255 km/h, x (1 km/h pro Bit) |
| 14 | Ignition Timing Advance | Zündvoreilung | -64°-63,5°, (x-128)/2, (0,5° mit 0° bei 128) | |
| 15 | Air Intake Temperature | Einlaß-Lufttemperatur | -40-215°C, x-40, (1° pro Bit, Offset von 40) | |
| 16 | Air Flow Rate from Mass-Air-Flow (MAF) | Luftdurchfluß über Luftmassenmesser (LMM) | 0g/s-655,35g/s, x*0,01, (0,01g/s pro Bit) | |
| 17 | Absolute Throttle Position | Absolute Drosselklappenstellung | 0-100%, x*100/255 | |
| 28 | OBD standard | OBD Kompatibilität | 01=OBD-2 (California ARB/CARB), 02=OBD (Federal EPA), 03=OBD und OBD-2, 04=OBD-1, 05=kein OBD, 06=EOBD (Europa) |
![]()

Im wesentlichen macht das Interface natürlich, was es soll und ich hatte keine Probleme bei verschiedenen Steuergeräten. Als Software empfiehlt sich ScanMaster-ELM, da die Oberfläche und der Funktionsumfang von ScanTool nicht wirklich überzeugt, allerdings dafür kostenlos verfügbar ist.
Eine nette Spielerei ist die Möglichkeit, die Versorgungsspannung des Fahrzeugs auszulesen. Das ist keine OBD-2 Funktion, sondern wird über einen A/D-Wandler gemacht. Allerdings wird der angezeigte Wert erst nach manueller Kalibrierung genau.
Der Befehlsumfang ist größer, als bei den älteren ELM-Chips, was vor allem daran liegt, daß es mehr Funktionen für den CAN-Bus gibt. Das Datenblatt ist gewohnt umfangreich und informativ. Angenehm ist, daß der neue Chip im befehlsumfang abwärtkompatibel ist. So kann beispielsweise mein OBD-2 LCD weiterhin betrieben werden. Für CAN-Nutzer gibt es einige hübsche Features, wie zum Beispiel die Monitor-Funktion, um alle CAN-Nachrichten auf dem Bus auszulesen. All das geht aber schon weit über die üblichen OBD-2 Anwendungen hinaus. Auch die verschiedenen Software-Resets sind praktisch, da so die Software die Verbindung neu aufbauen kann, ohne das Interface immer wieder mechanisch vom Auto trennen zu müssen.
Ärgerlich ist die vollmundige Werbung mit der möglichen Übetragungsbaudrate von 9600 und 38400. Per Default sind die ElmScans lediglich auf 9600 eingestellt. Erst ein wenig suchen fördert ein Jumper Diagram als PDF zu Tage, im dem gezeigt wird, wie man nach dem öffnen des Gehäuses per Jumper die Baudrate auf 38400 umstellen kann. Eine softwaremäßige Umstellung wäre wünschenswert.

Für den ambitionierten Selbstbastler gibt es versteckt ein Leiterplattenplayout (der Schaltplan kann dem Datenblatt entnommen werden), bei dem dann auch keine SMD-Bauteile verwendet werden.
Einführung
Hardwarekomponenten
Software
Die im folgenden entstandene Schaltung befindet sich noch in einem etwas klobigen Gehäuse, soll aber dann in die Mittelkonsole meines VW T4 eingebaut werden, wozu ich aber erst noch beim "Freundlichen" nach einer passenden Frontblende fahnden muß, damit das LCD dann möglichst dort hinein kommt, wo derzeit das kleine Ablagefach über der Climatronic ist.

Wesentlich einfacher ist der Einsatz der Schaltung mit ELM323. Hier übernimmt die Hardware die Protokollkommunikation und man kann sich auf eine sehr einfache Kommunikation über die serielle Schnittstelle beschränken. Leider stehen mir dann nur relativ wenige Informationen zur Verfügung. Aber für einen ersten Machbarkeitstest reicht es, zudem ist die Lösung dann universell für andere Autos einsetzbar.
Die Hardware setzt sich aus zwei bereits beschriebenen Komponenten zusammen: Dem ELM323 OBD-2-Adapter und dem I/O-Board für den ATmega8. Über ein Datenkabel, bestehend aus zwei über ein Flachbankabel 1:1 miteinander verbundenen D-Sub-Buchsen/Steckern, werden beide Module verbunden. Noch etwas unorthodox wird die Versorgungsspannung für das I/O-Board vom ELM323-Adapter abgezweigt, da dieser über den OBD-2 Stecker mit der Autobatterie verbunden ist. Das weiße Kabel ist +Vcc und das braune ist Masse. Natürlich sollte das noch geändert werden, so daß nicht Dauerplus, sondern Zündungsplus für das I/O-Board verwendet wird, damit nur bei eingeschalteter Zündung das LCD betrieben wird, und nicht wie jetzt permanent, und der OBD-2-Stecker jedesmal heraus gezogen werden muß.

Alles zusammen paßt in ein Europa-Gehäuse oder mit etwas mehr handwerklichen Aufwand auch in ein kleineres. In die Frontplatte wurde der Taster vom I/O-Board eingebaut, der für die Darstellungskonfiguration benötigt wird.
Programmiert habe ich in C. Der Source Code ist gut dokumentiert. Die Informationen zum ELM323 sind hilfreich. Die derzeitige Version 1.3 ist nur für meinen VW T4 optimiert. Dies betrifft vor allem die Anzeige von Meßwerten, da nur solche berechnet und angezeigt werden, die der T4 bietet. Eine Erweiterung/Adaption ist aber einfach machbar und wird folgen. In einem Fiat Punto Bj. 2002 funktionierte die Schaltung wie zu erwarten auch, da sie dank des ELM323 ja naturgemäß zu vielen Fahrzeugen kompatibel ist und es wurden die meisten gleichen PIDs unterstützt.
Nach der Programmierung des µC kann das Modul im Auto an die OBD-2 Buchse angeschlossen werden. Da es sofort mit Spannung versorgt wird, versucht es, eine Verbindung zum Datenbus herzustellen. Solange die Zündung aus ist, wird dies nicht gelingen und nach einer entsprechenden Fehlermeldung wird etwa alle fünf Sekunden immer wieder ein neuer Versuch gestartet. Sobald die Verbindung hergestellt wurde, werden permanent die Meßdaten angezeigt. Wird die Zündung wieder ausgeschaltet, können keine Daten mehr vom OBD-2-Bus gelesen werden, was sich durch einen entsprechenden Fehler bemerkbar macht. Das Modul versucht jetzt auch immer wieder, eine neue Verbindung aufzubauen. Im Regelbetrieb werden etwa im Sekundentakt nacheinander aktuelle Werte dargestellt.

Wenn ein Fahrzeugfehler vom OBD-2-System erkannt wird, erscheint an der ersten Zeichenstelle links oben im Wechsel ein weiß hinterlegtes Ausrufezeichen und ein Werkzeugschlüsselsymbol.
![]()
Im Display können sechs verschiedene Werte angezeigt werden. Um Platz zu sparen sind die Bezeichner oft stark verkürzt. Wird die Taste etwas länger gedrückt, aktiviert sich der Konfigurationsmodus und an der ersten Position blinkt der Cursor. Durch kurze Tastendrücke kann nun durch die im jeweiligen Auto möglichen Meßwerte (PIDs) geblättert werden. Alternativ kann auch kein Meßwert angezeigt werden (leerer Datenblock beim blättern). Erfolgt für ca. fünf Sekunden keine Eingabe, wird zum nächsten Datenblock gewechselt und dieser kann eingestellt werden. Nach dem letzten Datenblock kehrt das Modul wieder zur Meßwertanzeige zurück.
Welche Meßwerte (PIDs) angezeigt werden, merkt sich das Programm im EEPROM des µC. Vor der ersten Benutzung oder bei einem Fahrzeugwechsel sollten die ersten sechs Bytes des EEPROMS mit der Programmiersoftware möglichst auf 00 gesetzt werden, damit es zu keinen Fehlern kommt. Dies kann auch erfolgen, in dem man für alle sechs Datenblöcke über den Konfigurationsmodus einstellt, daß kein Meßwert angezeigt wird (leerer Anzeigebereich des Datenblock). Dazu während der Initialisierungsphase die Taste permanent drücken, bis man im Konfigurationsmodus landet, bevor versucht wird, den ersten Meßwert zu ermitteln und auszugeben.
Folgende Werte (alle, die von meinem T4 unterstützt werden) können ab Version 1.0 angezeigt werden (vergl. Infos zum ELM323):
| PID | Bezeichnung | Darstellung |
| leerer Datenblock | ||
| 1 | System Status | 00error |
| 4 | berechneter Lastwert | 000%lst |
| 5 | Motor-Kühlwassertemperatur | 000°Cöl |
| 11 | Absolutdruck Einlaßkanal | 000 kpa |
| 12 | Motor-Umdrehungen | 0000upm |
| 13 | Geschwindigkeit | 000 kmh |
| 14 | Zündvoreilung | 000,0°z |
| 15 | Einlaß-Lufttemperatur | 00°Cair / 000°Cai |
| 16 | Luftdurchfluß LMM | 000,00g |
| 17 | Absolute Drosselklappenstellung | 000%drs |
| 28 | OBD Kompatibilität | OBD-2 / OBD / OBD +2 / OBD-1 / no OBD / EOBD / EOBD +2 / E+ OBD / E+OBD+2 / JOBD / JOBD +2 / E+ JOBD / E+J+2 / OBD #00 (unbekannt) |
| unbekannter PID | PID#000 |

Einführung
Hardwarekomponenten
Software
Als hätten die VW-Techniker an mich gedacht, befindet sich über dem Sicherungshalter ein sehr praktisches Buchsenpanel für Stecker über das man dann sogar die OBD-2 K-Leitung abgreifen kann. Klemme X ist Zündungsplus, so daß die Schaltung nur Spannung bekommt, wenn die Zündung an ist. Während der Anlasserphase liegt keine Spannung an, so daß die Schaltung wirklich erst versorgt wird, wenn auch OBD ein Signal liefert. Rechts daneben ist der braune Massestern zu erkennen. Allerdings brachte ich den Teileverkäufer bei VW zur Verzweifelung, denn dieses praktische Panel ist ein absolutes Novum - dabei ist es wirklich super, kann man doch so die OBD-2-Buchse frei lassen und muß nicht mit Lüsterklemmen etc. hantieren.
Wie auch bei der ELM-Lösung wird an erster LCD-Position ein invertiertes Ausrufezeichen/Schraubenschlüssel-Symbol angezeigt, wenn ein Fehler in der ECU gespeichert ist.
![]()
Da es sowohl während der Initialisierungsphase, als auch während der kontinuierlichen Anzeige zu Protokollfehlern kam, überwacht der Watchdog des ATmega8 das Programm. Inzwischen ist das Problem aber eigentlich behoben. Sollte er einen Stillstand feststellen, wird die Anzeige mit der Initialisierungsphase neu gestartet.
Eine Besonderheit ist die Fahrzeuggeschwindigkeit. Hier wird nicht der von der ECU gemeldete Wert angezeigt, sondern ein Korrigierter. siehe Besonderheiten

Die Zeitschrift elektor hat eine Adaption des Adapters entwickelt und in der Ausgabe Juli/August 2005 vorgestellt: Artikel I, Artikel II. Als Bausatz ist er ein wenig preiswerter als das Fertiggerät bei Özen. Ich habe den elektor-Bausatz getestet. Es gibt nur Probleme mit dem Reset-Signal. Am besten die FAQs im elektor-Forum nachlesen.
Im Prinzip ist die Vielfalt der Protokolle interessant, denn so wird theoretisch kaum ein Auto dem Adapter widerstehen können und man kommt an die Daten heran. Mit der kostenlosen Software OBD-II ScanMaster für mOByDic Interfaces von WGSoft kann man einiges an Daten anzeigen lassen.
Wie bei allen OBD-Adaptern wird lediglich das Auslesen von Daten unterstützt und nicht das Ändern! Analog zum ELM323 kann auch der mOByDic nur wesentlich weniger Sensordaten auslesen als VAG-COM und zusätzlich die OBD-Fehlermeldungen ausgeben.
Meine Erfahrungen mit dem Adapter sind auch nicht so gut, wie erwartet. Meinen VW Bus findet das Interface nicht, so daß keine Daten ausgelesen werden können, obwohl der ELM323 dies ja kann. Inzwischen muß ich mich korrigieren: Ich habe auch bei meinem T4 den Adapter zum laufen bekommen. Allerdings waren dazu mehrere Versuche notwendig. Laut Hersteller ist der mobydic nur für PKW ab EZ 2001 (Benziner) und EZ 2004 (Diesel) geeignet.
Kommunizieren kann man mit dem mOByDic ähnlich wie mit dem ELM323 über ein Terminalprogramm. Allerdings ist die Dokumentation nur als katastrophal schlecht zu bezeichnen. Gravierender Nachteil ist in meinen Augen auch, daß es kein Software-Reset gibt.
In der Elektor Mai 2006 ist ein Artikel von mir, in dem der mobyidc-Adapter zusammen mit einem LCD autark betrieben wird - ähnlich dem Projekt mit dem ELM 323. VGA.COM VAG-COM VGA-COM VAG-KOM VAG-COMM ODB2 ODBII ODB-2 http://www.obd2-shop.eu/obd2.html http://www.s3web.de/catch_all.html http://www.blafusel.de/misc/obd2_obdii_obd-2_list_me.html