Bitte besuchen Sie unsere originalen Webseiten.

Visit our original site, please.


English OBD 2 / OBD II cath me page.
Spanish OBD 2 / OBD II cath me page.
French OBD 2 / OBD II cath me page.
Italian OBD 2 / OBD II cath me page.
Greek OBD 2 / OBD II cath me page.



OBD OBD-2 OBD2 OBD II OBD 2 OBD III OBD2-Sop.eu Diagnose

OBD-2 Shop.eu OBD2

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.


Zusätzlich kann das Display auch zum Spritsparen genutzt werden und so die Kosten des Fahrzeugs senken helfen: Die Anzeige des berechneten Lastwertes (so weit vom Auto unterstützt), ist ein Indiz für den momentanen Verbrauch: Je höher der Lastwert ist (0-100%), desto höher ist der Verbrauch. Wer nicht über eine Multifunktionsanzeige (MFA) bzw. serienmäßigen Bordcomputer verfügt, kann seine Fahrweise am Lastwert orientieren. digitales zusatzinstrument

Jeffs OBD-2 Adapter für unter 15,- Euro

Inhalt

Einführung
Bauteile für den Adapter
Platine anfertigen
Platine bestücken
Funktionstest
Tuning
Fazit

Einführung

Inzwischen habe ich ein eigenes KW 1281 Interface entwickelt, welches meiner Meinung nach der Schaltung von Jeff vorzuziehen ist.

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.

Bauteile für den Adapter

Die Adapterplatine stammt von Jeff Noxon. Auf seiner Webseite steht alles, was man wissen muß. Nur manchmal etwas sehr kurz, wenn man nicht gerade täglich lötet. Also Schritt für Schritt:

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

Platine anfertigen

Info: Ich habe mein Angebot um einen umfangreichen Artikel zur Platinenherstellung erweitert.

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.

Platine im Ätzbad

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.

Platine bestücken

Jetzt wird die Platine gemäß dem Bestückungsplan auf Jeffs Webseite bestückt (R8 ist dort fälschlicherweise mit 140 K statt 150 K angegeben). Wenn Sie kein Lötprofi sind, achten Sie darauf, die Bauteile nicht zu überhitzen. Lieber Pausen einlegen und immer nur ein Beinchen anlöten und dann vielleicht erst ein anderes Bauteil einlöten. Fangen Sie mit den Widerständen an, dann die Dioden, bei denen Sie auf die Ausrichtung achten müssen, ebenso beim Kondensator und den Transistoren. Die ICs zum Schluß. Achten Sie auch hier auf die kleine Markierung in Form eines Punktes oder einer Kerbe.

Bestückte Platine

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.

Funktionstest

Showtime! Ab auf die Straße. Abdeckung zur OBD-2 Buchse öffnen und den selbstgebastelten Stecker vorsichtig einschieben bis etwa die Augen der Lötösen verschwunden sind. Anschließend die Sub-D-Buchse in den COM-Port des Laptops stecken. Laptop hochfahren. VGA-COM starten. Zündung einschalten. Fahrzeug per Autoscan erkennen lassen. Wenn alles klappt, dann werden die Fahrzeugkenndaten aufgelistet etc. und nun kann es losgehen und der Boardcomputer ist uns ausgeliefert (wahnsinnig interessant: noch 31 Liter Tankinhalt und die Zentralverriegelung steht auf offen).

VAG-Scope

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

Tuning

Immer wieder ist die Begehrlichkeit groß, per OBD auch Motortuning vorzunehmen. Also ohne Chip oder Blackbox mehr Leistung herauszuholen. Ich halte davon nichts und rate ab! Ohne Motorprüfstand kann man keine qualifizierte Aussage über die Leistungssteigerung bei einhergehender Abgas- und Antriebsbelastung etc. machen. Bei Ross-Tech findet man eine kurze Info, wie man u. a. die Leerlaufdrehzahl und die Einspritzmenge anpassen kann, wozu der Login Code 12233 benötigt wird.

Fazit

Nicht nur, daß es nach langer Abstinenz mal wieder Spaß gemacht hat, den Lötkolben anzuheizen und mit Chemie zu spielen. Nein, das Projekt funktioniert auch noch wie erhofft und wir haben eine Menge Geld gespart: Für € 14,63 Bauteile und Verbrauchsmaterial hätten wir sonst nicht einmal einen OBD-2 Stecker bekommen. Selbst wenn man noch € 15,- mehr ausgibt, um sich einen billigen Handbohrer, Plastikschale usw. zu kaufen, bleibt man unter den üblichen Preisen für einen Adapter. Und ab sofort müssen wir nicht mehr darauf vertrauen, daß beim Service in der Werkstatt alles so gemacht wird, wie wir es uns vorstellen, sondern erledigen den Ölwechsel lieber selber. Das kostet entschieden weniger.

Viel Spaß!


Zum Abschluß möchte ich noch darauf hinweisen, daß ich (wie auch Jeff) keinerlei Hilfen und Auskünfte zu dem Projekt per Email beantworte und auch keine Bausätze oder Adapter verkaufe. Nutze das Diskussionsforum!

OBD-2 Interface AGV4000

Der AGV4000 von OBD-DIAG gehört, wie auch der ELM 327 und der mOByDic, zu den Multiprotokoll Interfaces, die CAN (ISO 15765-4), SAE J1850 PWM, SAE J1850 VPW, ISO 9141-2 und ISO 14230-4 beherrschen. Vom Anbieter gibt es auch andere Adapter, die eine Untermenge der vom AGV4000 beherrschten Protokolle bedienen.

AGV4000

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.

USB Treiber

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

BIOS Einstellungen

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.

Neu entwickeltes USB KKL Interface für OBD (KW 71, KW 1281, ISO 9141, ISO 14230)

Inhalt

Einführung
Entwicklung
Schaltplan/PCB Layout
Aufbau
Software

Einführung

Mit dem bereits vorgestellten seriellen KL-Interface wird dem interessierten Auto-Bastler ein Interface für die On-Board Diagnose (OBD und OBD II) an die Hand gegeben. Bei diesem KL-Interface handelt es sich auch um eins der wenigern echten KL-Interface, die wirklich noch die K- und die L-Leitung getrennt ansteuern - so wie es nach den Normen erforderlich ist. Dadurch können auch sehr alte Fahrzeuge angesprochen werden, die wirklich noch über die L-Leitung aufgeweckt werden müssen (was aber eher selten der Fall ist). Der Nachteil ist, daß viele moderne Laptops keine serielle RS232-Schnittstelle mehr aufweisen und ein RS232-USB-Adapter benötigt wird, der teilweise bei preiswerten Modellen zu Verbindungsproblemen führt. Deshalb jetzt hier auch ein Entwurf für ein USB-Interface.

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
  • Preiswert
  • Einfacher Aufbau auch für Laien gerade noch zum Löten geeignet
  • Normgerecht
  • Für ältere Fahrzeuge notwendig
  • Keine Treiberinstallation
  • Für abgespeckte Laptops geeignet
  • KKL für einige VAG Modelle notwendig
  • Handliches Gehäuse
Contra
  • kein KKL
  • USB-Adapter erforderlich, wenn keine serielle Schnittstelle vorhanden
  • Treiberinstallation erforderlich
  • Teurer
  • Filigrane Lötarbeit

Entwicklung

An dieser Stelle liefere ich mal einen kleinen Einblick in die Entwicklung des Adapters: Zuerst entstand der Prototyp, der hier schon seit einiger Zeit zu sehen war:

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


Platine (mit Fehler) 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.

Schaltplan/PCB Layout

Kern des USB Interface ist ein USB-Chip von FTDI: der FDTI232BL (PDF Datenblatt). Dieser ist zwar etwas aufwendiger in eine Schaltung zu integrieren, da er im Gegensatz zum FTDI232R einen externen Quarz benötigt, aber die Abstände der Beinchen sind etwas größer, so daß er sich besser eignet, um mit Hobbyausstattung eingelötet zu werden.
Dank des (leider etwas teureren) FTDI-Chips ist gewährleistet, daß es mit diesem Adapater zu keinen Problemen mit älterer Software kommt, die nur für die serielle Schnittstelle konzipiert wurde. Treiberinstallation und Handling verläuft analog zu den Ausführungen zum AGV4000.

Platine im Steckergehäuse 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

Platinenentwurf (mit Fehler) 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.


Aufbau

In der Schaltung darf T1, R6 und R8 nicht bestückt werden. (Haben's jetzt alle gelesen/verstanden?)

Detail Einbaurichtung ICs Bei der Bestückung darauf achten, daß zuerst die ICs eingelötet werden. Später ist da kein 'rankommen mehr.

Platine an Stiftleiste 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.

Detail Stiftleiste 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.

Software

An Software gibt es die gleiche Auswahl, wie beim seriellen KL-Interface.

OBD-2 KW 1281 Protokoll

Inhalt

Einführung
Informationsquellen
Protokolltyp
Testumgebung
KW1281 - Initialisierung
KW1281 - Timing
KW1281 - Gerätedaten
KW1281 - Sensordaten
KW1281 - Kommunikationsende
KW1281 - Kommunikationsfehler
KW1281 - Fehlerspeicher auslesen/löschen

Einführung

Die bisherigen Informationen zeigen, wie mit Hilfe des Interface von Jeff und dem ELM323 Daten aus dem Bordcomputer via OBD2 ausgelesen werden können. Bei Jeffs Interface wird die Software VAG-COM benutzt und beim ELM323 ScanTool. Beide Lösungen haben ihre bereits erläuterten Vor- und Nachteile. Nach dem ich bereits erfolgreich einen µC mit dem ELM323 verbunden habe, sollte noch der µC mit Jeffs Interface realisiert werden. Dies vor allem, da ich an speziellen Daten interessiert bin, die der ELM nicht liefert, sehr wohl aber per VAG-COM aus meinem VW T4 ausgelesen werden können.

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.

Informationsquellen

Im Web findet man nur spärliche Informationen zu dem Protokoll, um mit den Steuergeräten des Autos Daten auszutauschen. Zum Teil liegt das daran, daß nicht viel existiert, aber auch daran, daß viele Chip-Tuner sich zwar in die Materie eingearbeitet haben, aber nichts von ihren Betriebsgeheimnissen preisgeben wollen. Deshalb diese Seite, auf der ich mein erarbeitetes Wissen zusammenfassen möchte.

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:

Protokolltyp

Die Steuergeräte im Auto nutzen verschiedene Protokolle. Da ich nur KW1281 bzw. KWP1281 (KW steht für KeyWord) benötige, beschränken sich alle Ausführungen auf dieses Protokoll. Ohne es genau zu Wissen, gehe ich davon aus, daß die Protokolle KeyWord82 und KeyWord2000 relativ ähnlich arbeiten. Andere Protokolle sind teilweise ähnlich oder auch ganz anders. Gerne wird KW1281 und ISO 9141-2 zusammen geworfen. Es handelt sich aber dabei um zwei getrennte Protokolle, die lediglich die gleichen Anschlüsse an der OBD-Buchse benutzen. Wer VAG-COM besitzt (Demoversion reicht), kann das Protokoll des Steuergerätes links oben im Programm ablesen, sobald ein Controller ausgelesen wird.

VAG-COM

Testumgebung

Das Hauptproblem bei der Protokoll-Analyse und Programmierung besteht darin, daß das Auto auf der Straße parkt und der Computer weit weg davon in der Wohnung steht. Also muß man das Auto irgendwie auf den Schreibtisch holen, wenn man nicht im Winter im Auto programmieren will (meine Standheizung respektive die Batterie hat dabei schon einmal leiden müssen). Zum Glück wird nicht das ganze Auto benötigt, sondern nur ein Steuergerät. Im Auto sind zahlreiche dieser Controller verbaut. Das interessanteste ist das Motorsteuergerät (ECM - Engine Control Module), aber auch für ABS, Airbag, Instrumente usw. gibt es separate Einheiten, die unter dem Begriff ECU (Electronic Control Unit) zusammengefaßt werden. Hat man so ein Steuergerät, kann man es auf dem Schreibtisch mit Spannung versorgen und Jeffs Interface anschließen (ein paar nette Fotos von Bastlern). Problematisch ist nur: Welches Steuergerät und wie wird es angeschlossen?

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.

ECU im Testaufbau

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.

Autodata

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Ω

KW1281 - Initialisierung

Um mit dem Controller zu kommunizieren sind zwei Phasen wichtig:
  1. Der Controller muß aufgeweckt werden, so daß er weiß, man will mit ihm kommunizieren. Niedrige Baudrate 5Bd, 7O1.
  2. Die eigentliche Kommunikation mit üblicherweise 4800, 9600 oder 10400 Baud, 8N1

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:

  1. Mit einem Datenlogger (z. B. Portmon) wird die serielle Schnittstelle des PCs protokolliert. Portmon verliert bei mir allerdings Daten, da der Puffer scheinbar nicht groß genug ist. Sehr gute Ergebnisse liefert Free Serial Port Monitor. Allerdings führt das Programm auf einem meiner Rechner zum Totalabsturz - also Vorsicht. Dafür ist der Puffer groß genug, so daß man sehr gut Reverse Engineering praktizieren kann.
  2. Mit einem Oszilloskop werden die Signalpegel an der K-Leitung abgegriffen.
Die erste Methode ist einfach, hat aber den Nachteil, daß sie nicht hundertprozentig akkurat ist. Ich hatte teilweise den Verdacht, daß nicht alle Daten protokolliert wurden. Allerdings findet man so heraus, wie VAG-COM die 5Bd Initialisierung abwickelt: Statt die Geschwindigkeit an der Schnittstelle zu wechseln, wird diese gleich auf die gewünschte Datenrate für die folgende Kommunikation eingestellt (bspw. 9600Bd) und dann wird mit SET_BREAK die Übertragung simuliert:

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:

Signalverlauf

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.

KW1281 - Timing

Noch mehr Kopfzerbrechen als die Baudrate, hat mir das Timing bereitet. Wie erwähnt, traten bei mir verstärkt Kommunikationsprobleme auf, die ich nicht in den Griff bekam. Meine Tisch-ECU nutzt 10400Bd und zeigte keine Fehler. Nur die im Auto (9600Bd) produzierte Fehler. Wie ich schon mal bemerkte, ist der µC mit 8MHz relativ schnell im Vergleich zu einem modernen PC, der mehr damit beschäftigt ist, Windows-Elemente neu zu malen. Deshalb wurde die Problematik bisher auch meines Wissens nach nirgends dokumentiert.

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.

KW1281 - Gerätedaten

Nach dem das Steuergerät bereit ist, startet die Übertragung der Gerätespezifikation. Hierbei meldet sich der Controller mit der VAG Nummer, der Gerätebezeichnung usw. VAG-COM stellt teilweise mehr Daten da, als das Gerät anscheinend liefert. Die gelieferten Daten sind meiner Meinung nach auch nicht ganz so spannend, so daß kleine Unstimmigkeiten ignoriert werden können. Wichtig ist, daß die Kommunikation zügig abläuft, da das Steuergerät nicht gerne wartet. Da zuvor der µC die Kommunikation begonnen hatte, ist nun die ECU dran und der µC ist nur damit beschäftigt, die Daten anzunehmen und mit dem Komplement zu bestätigen.

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:

Nun ist der µC wieder an der Reihe. Er hat keine andere Wahl, als einen Bestätigungsblock (ack command) zu schicken und die ECU bestätigt die einzelnen Bytes mit dem Komplement:

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.

KW1281 - Sensordaten

Anstatt die Datenverbindung durch den endlosen Austausch von ack blocks aufrecht zu erhalten, kann der µC auch die Initiative ergreifen und Meßwerte bzw. Sensordaten anfordern. Anstatt eines ack blocks sendet er dann, wenn er an der Reihe wäre, ein group reading.

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/s
Hierbei 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 on
Der 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.

KW1281 - Kommunikationsende

Soll die Datenverbindung beendet werden, weil der µC die Kommunikation einstellen möchte, sollte man einen sauberen end output block schicken:

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.

KW1281 - Kommunikationsfehler

Wie schon geschildert, kann es während der Kommunikation seitens der ECU zu Fehler kommen. Noch nicht ganz sicher bin ich mir beim Ablauf, wie auf einen solchen Fehler reagiert wird. Ich habe zwei Arten von Fehlern protokollieren können, die beide nur bei wiederholten group readings auftraten. Der Fehler wird wohl durch zwei gleiche Bytes zur Fehlersignalisierung markiert. Allerdings werden unterschiedliche Bytes gesendet. Bisher scheint sich folgendes Bild abzuzeichnen:

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:

  1. Die ECU schickt einen 0xF6 ASCII Daten Block mit der Controller ID und weiteren ASCII Zeichen, deren Bedeutung ich noch nicht untersucht habe.
  2. Der µC bestätigt mit einem ACK block
  3. Die ECU schickt einen weiteren 0xF6 ASCII Daten Block mit weiteren ASCII Zeichen.
  4. Der µC bestätigt mit einem ACK block
  5. Die ECU schickt einen weiteren 0xF6 ASCII Daten Block mit weiteren ASCII Zeichen.
  6. Der µC bestätigt mit einem ACK block
  7. Die ECU schickt einen weiteren 0xF6 ASCII Daten Block mit weiteren ASCII Zeichen.

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.

KW1281 - Fehlerspeicher auslesen/löschen

Folgend noch die Vorgehensweise zum Auslesen von Fehlern und das Löschen. Zuerst fordert der µC alle Fehlercodes an. Eine Möglichkeit, nur die Anzahl der gespeicherten Fehler zu erfragen, scheint es nicht zu geben.

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:

  1. Pxxxx - Powertrain
  2. Bxxxx - Body
  3. Cxxxx - Chassis
  4. Uxxxx - for future systems
Die erste Zahl bedeutet:
  1. 0xxx - Government required codes
  2. 1xxx - Manufacturer codes for additional emission system function; not required but reported to the government
Die folgende Ziffer gibt den Fehlerort an:
  1. Gruppe x1xx - Kraftstoff-Luft Messung
  2. Gruppe x2xx - Einspritzung
  3. Gruppe x3xx - Zündung
  4. Gruppe x4xx - Aggr. Emissionen
  5. Gruppe x5xx - Leerlauf/Geschw. Kontrolle
  6. Gruppe x6xx - Kfz-Computer
  7. Gruppe x7xx - Getriebe
  8. Gruppe x8xx - Getriebe
  9. Gruppe x9xx - Kontroll-Module, Ein- und Ausgabesignale
Da KW1281 nur die DTCs liefert, sind die Codes nach SAE J2012 für uns uninteressant.

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.

Neu entwickeltes serielles (RS232) KL-Interface für OBD

Inhalt

Einführung
Schaltplan/PCB Layout
Aufbau
Software

Einführung

Mit dieser Selbstbau-Schaltung zum Eigenbau eines Diagnoseinterface möchte ich allen Diskussionen ein Ende setzen, die sich mit dem Thema VAG-COM und den Problemen mit Jeffs Interface befassen. Wie schon beschrieben, kann man VAG Fahrzeuge über die OBD-2 Buchse zu Leibe Rücken und u. a. mit VAG-COM über das KW 1281 Protokoll Werte auslesen und Parameter einstellen. Bis zur VAG-COM Version 311.2 genügte dazu ein KL-Interface mit Optokopplern für die serielle Schnittstelle. Die (Demo-) Version 409.1 läuft nicht mehr mit den Optokopplerschaltungen, wohl aber mit dem hier neu entwickelten Interface! Für alle Anwender, die sich mit einem Laptop ohne serielle Schnittstelle haben Übervorteilen lassen, sei darauf hingeweisen, daß es häufig zu Problemen kommt, wenn man einen USB-RS232 Adapter einsetzt. Da gibt es gute Modelle und schlechte, mit denen es dann nicht klappt. Das liegt aber ausschließlich am Adapter.
Ich hatte Jeffs Interface nachgebaut und nie Probleme damit. Aber es gibt immer wieder Diskussionen über die schwer beschaffbaren Optokoppler (was eigentlich nicht stimmt, denn den Ersatztyp bekommt man recht einfach) und deren ungünstigen Arbeitspunkt und wie man diesen mit viel Aufwand und Fummelei über diverse Potis in den unterschiedlichsten Schaltungsmodifikationen optimieren kann. Oft liest man derartige Behauptungen auf Webseiten, die gerne über Bastellösungen herziehen und nur ihren eigenen Kram verkaufen wollen. Vielleicht auch ein Grund, warum auf den entsprechenden Webseiten Beiträge zu diesem neuen KW 1281 Adapter zensiert werden. Kein Wunder, wenn man dort um die € 56 für ein paar Bauteile für eine weitaus umständlichere Schaltung und etwas Demo/Shareware-Software verlangt.

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.

Schaltplan/PCB Layout

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

PCB Ein Platinenentwurf für eine lediglich 40x60mm große Platine ist ebenfalls vorhanden. Eine Vorlage für die Platinenbelichtung liegt auch als PDF vor.


Platine


Platine

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!

Aufbau

KW1281 Interface

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.

Platine ISO9141 OBD-2 Bestückung der professionell gefertigten Platine.

Platine KW1281 OBD2 Die Leiterbahnseite mit dem SMD-Bauteil (Bild anklicken für Großdarstellung).

Detail MC33290/D 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.
Auf der Leiterplatte markiert ein winziger Leiterbahn-Punkt die Position für Pin 1. Auf dem nebenstehenden Foto ist der Chip zu sehen. Pin 1 ist links unten. Die Doppellinie im Bestückungsdruck markiert die längere Seite des Chips, an der Pin 1 liegt.

Eagle3D Bestückungsseite

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

Eagle3D Leiterbahnseite OBD-2

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.

Interface Adapter Gehäuse OBD2 KW1281 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.

Software

Das Interface arbeitet mit einer ganzen Reihe von Programmen zusammen. Grundsätzlich kann jedes Diagnoseprogramm benutzt werden, welches mit Jeffs Interface zusammen arbeitet. Einige wichtige mir bekannte sind (alle kostenlos als Freeware verfügbar):
Zum Abschluß möchte ich noch darauf hinweisen, daß ich keinerlei Hilfen und Auskünfte zu dem Projekt per Email beantworte. Nutze das Diskussionsforum!
91 88 1,0341 130 126 1,0317 185 180 (1,0278)     1,0398

Drosselklappenstellung

Dies ist nicht unbedingt wirklich die Stellung der Drosselklappe, sondern eventuell auch nur die Stellung des Gaspedals. Dies zeigt sich zum Beispiel bei einem Tempomaten: ist dieser aktiv, wird die Einsprizung usw. durch die Fahrzeugelektronik gesteuert (nur bei alten Modellen über den Gaszug) und die Stellung des Gaspedals liegt bei 0%. Dies ist auch der Wert, der dann geliefert wird, anstatt der Drosselklappenstellung, die ja nicht 0% sein kann, da das Fahrzeug fährt und ggf. beschleunigt.

Beschleunigungsmessung mit OBD-2

Inhalt

Einführung
Software

Einführung

Neben vielen anderen Dingen, interessiert Sie als Autobesitzer vielleicht auch, wie schnell Sie Ihr Fahrzeug beschleunigen können. Die Angaben der Hersteller sind vermutlich i. d. R. etwas optimistisch und praxisfremd, wenn man nicht gerade hauptberuflich burn-outs betreibt.

Ü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).

Software

Gleich vorweg: die Software ist noch lange nicht fertig und noch etwas mit heißer Nadel gestrickt. Es kann also durchaus zu Abstürzen und Verbindungsproblemem kommen. Bisher wird auch nur ISO 9141 unterstützt. ISO 14230 wird noch folgen; ebenso Meßwerteanzeigen in Miles/h. Über Erfolgsmeldungen freue ich mich: einfach eine Ergänzung ins Forum posten.

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:

    SpeedyUp OBD OBD2 OBD-2

  1. Fahrzeug über OBD ISO-Interface mit Computer verbinden.
  2. Software starten.
  3. Die verfügbaren seriellen Schnittstellen (Port) stehen oben rechts zur Auswahl. Schnittstelle mit dem angeschlossenen Interface einstellen.
  4. Motor starten (wir wollen ja gleich los fahren, also reicht die Zündung nicht aus).
  5. AutoSave bedeutet, daß nach einer erfolgreichen Beschleunigung auf 100 km/h im Installationsverzeichnis eine Datei mit dem Namen measured_values.txt angelegt wird, in der die Meßwerte gespeichert sind. Diese Datei wird beim nächsten mal wieder überschrieben. Wird keine Datei gewünscht, Option ausschalten. Die Meßwertdatei beinhaltet die letzte mit AutoSave aufgezeichnete Messung als CSV-Textdatei (Trennzeichen: Semikolon). Diese kann mit einem Texteditor oder einer Tabellenkalkulation etc. geöffnet werden. So kann die Messung genauer untersucht und auch grafisch ausgewertet werden.
  6. Grafische Auswertung

  7. Connect anklicken, um Verbindung zum Fahrzeug aufzubauen.
  8. Wait ISO 9141

  9. Der gelbe Kreis und der Text WAIT zeigen an, daß die Verbindung aufgebaut wird.
  10. Ready

  11. Steht die Verbindung, wird der Kreis grün, der Text GO erscheint und am rechten Rand werden die verfügbaren PIDs des Motorsteuergerätes angezeigt. Am besten gleich die Gelegenheit nutzen und das Fahrzeug in die Datenbank eintragen! Ab jetzt wird die gefahrene Geschwindigkeit permament angezeigt. Ein Signalton zeigt die Bereitschaft an.
  12. Erst wenn sich das Fahrzeug bewegt, beginnt die Beschleunigungsmessung. Der Graph stellt die Zeit/Geschwindigkeitsverhältnisse der ersten 30 Sekunden dar. Werden 100 km/h und mehr gefahren, endet die Zeitmessung und die benötigte Zeit von 0-100 km/h wird angezeigt. Die Zeitmessung ist unabhängig vom Graphen und ermöglicht auch Messungen mit mehr als 30 Sekunden. Ein Signalton zeigt das Meßende an. War AutoSave aktiv, wird die Meßwertdatei automatisch erzeugt.
  13. Acceleration measured

  14. Die aktuelle Geschwindigkeit wird weiterhin angezeigt.
  15. Mit Reset kann der Graph und die Zeitmessung zurückgesetzt werden. Durch die graue Darstellung und die Zahl Null bei Sec. wird deutlich, daß die nächste Messung begonnen werden kann. Anschließend beginnt eine neuer Messung, sobald das Auto mehr als 0 km/h fährt.
  16. Mit Disconnect wird die Verbindung zum Fahrzeug abgebaut.
  17. Anschließend kann das Programm beendet werden.

OBD-2 Adapter zur Fahrzeugdiagnose

Inhalt

Einführung
OBD-2 Stecker basteln

Einführung

OBD-2 (oder auch OBD-II bzw. OBD2/OBDII) steht für On Board Diagnose der zweiten Entwicklungsstufe. Gemeint ist damit ein Anschluß für Diagnosegeräte an die Autoelektrik. Da Heute immer mehr von Boardelektronik gesteuert wird, werden im System auch auftretende Fehler gespeichert, die dann in der Werkstatt ausgelesen werden können. Außerdem besteht die Möglichkeit, Parameter zu verändern (bekanntestes Beispiel ist vermutlich die Tachomanipulation). Von Audi kursiert in der P2P Tauschbörse eMule das PDF On-Board-Diagnose-II Konstruktion und Funktion, welches einen guten Überblick über das Konzept von OBD gibt und zahlreiche Fahrzeug-Sensoren und Systemkomponenten, sowie deren Arbeitsweise beschreibt..

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.

OBD-2 Stecker basteln

Jetzt gibt es nur noch ein Problem: Natürlich konzipierte man bei der Schaffung des OBD-Standards keinen Stecker für den Bordcomputeranschluß, wie man ihn im Elektrobastelladen um die Ecke bekommt. Da könnte ja jeder das Ding nachbauen und die Werkstatt umgehen. Also suchen wir mal nach dem OBD-2 Stecker und werden natürlich auch fündig. Für halsabschneiderische € 12,50 bekommt man dann nur die Steckerleiste. Will man auch noch ein Gehäuse, kostet es gleich €  17,50 und mehr. Für einen popeligen Stecker? Ohne mich, da kann ich dann ja wieder das fertige Set ersteigern.

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.

OBD2 Stecker

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

OBD-2 Buchse

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

PinBeschreibung
2J1850 Bus+
4Fahrzeug Masse
5Signal Masse
6CAN High (J-2284)
7ISO 9141-2 K Ausgang
10J1850 Bus
14CAN Low (J-2284)
15ISO 9141-2 L Ausgang
16Batterie-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 + 5715 *)16ISO 9141-2
24 + 5--1016PWM J1850
24 + 5----16VPW J1850
--4 + 561416CAN Bus
*) Stift 15 kann, muß aber nicht für ISO 9141-2 vorhanden sein

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:
alte OBD Anschlüsse

SteckerfarbePinKabelfarbeBeschreibung
weiß1blau oder grau/blauISO 9141-2 K Ausgang
weiß2gelb oder grau/gelbISO 9141-2 L Ausgang
schwarz3rotBatterie-Spannung +12V
schwarz4schwarz oder braunFahrzeug 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
*) Die meisten Bauteile gibt es in Bastelläden wie Conrad, Reichelt usw. Ich nenne hier der Einfachheit halber ohne Wertung Conrad-Nummern und Preise (Stand: 19.9.03)

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:

Stecker-Layout

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:

Stecker mit Lötsstiften bestück

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.

Stecker mit Lötsstiften und -Ösen bestückt

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.

OBD-2 Adapter mit ELM 323

Inhalt

Einführung
Die Schaltung
Software
Fazit

Einführung

Bereits vor einem Jahr habe ich angefangen, mich mit OBD-2 zu beschäftigen. Damals habe ich den häufig (aus meiner Sicht zu unrecht) kritisierten Adapter von Jeff Noxon nachgebaut und dokumentiert. Ein Grund war, daß ich selbst einen VW fahre und deshalb mit diesem Gerät arbeiten kann. Inzwischen hat sich unser "Fuhrpark" aber um einen Fiat erweitert und bei dem will ich auch mal in den Bordcomputer reinschauen können.

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 Schaltung

Der wesentliche Baustein ist der ELM 323. Die notwendige Schaltung um den Chip herum ist relativ simpel und beschränkt sich auf ein paar Bauteile. Die Zeitschrift Elektor hat in den Ausgaben 10-12/2002 eine Artikelserie dazu gebracht. Der wichtige Beitrag ist der in 11/02. Die dort vorgestellte Schaltung ist keine Eigenentwicklung, sondern lediglich eine Adaption der Entwürfe von ELM electronics aus deren Datenblatt. Etwas aufpoliert und schon mit fertigem Platinenentwurf findet man das ganze auch bei ScanTool als ElmScanISO. Die Schaltung von Elektor hat nur den Vorteil, daß einige Bauteile der Originalentwürfe in Deutschland schwer beschaffbar sind und deshalb bereits durch äquivalente Ersatztypen ausgetauscht wurden.

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.

Original OBD-2-Stecker

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

ELM 323

Software

Für ELM-Schaltungen gibt es zahlreiche kostenlose Programme. Einfach aber doch vollständig ist ScanTool, welches es auch in einer deutschen Version gibt. Interessant ist aber aus meiner Sicht vor allem die Möglichkeit, direkt mit dem ELM zu kommunizieren. Das Datenblatt zeigt ausführlich, wie das geht. Im wesentlichen ist das:
  1. PC und Auto an ELM anschließen, Zündung ein
  2. Terminalprogramm (Windows Hyperterminal) starten
  3. Standardverbindung: 9600Bd, 8N1, kein Handshake
  4. Jetzt können ELM-Befehle eingegeben werden: "ATZ" für Reset, woraufhin sich der ELM meldet: "ELM323 v2.0"
  5. "01 00" gibt einen Zahlencode zurück, welche Werte (PIDs) ausgelesen werden können (zwischen den beiden Zahlen kann, muß aber nicht ein Leerzeichen eingegeben werden)
  6. Mit "01 20", "01 40","01 60","01 80" wird die Verfügbarkeit der höheren PIDs nach PID 32 ermittelt. Werden diese nicht Unterstützt (bei mir leider der Fall), wird "NO DATA" zurückgeliefert.
  7. "01 01" Anzahl der gespeicherten Fehlercodes
  8. u. v. m.
Die einzelnen Meßwerte sind PIDs (Parameter Identifier) zugeordnet. Nicht alle PIDs werden stets unterstützt. Mehr Infos dazu im Beitrag zu den PIDs.

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:

  1. Die Eingabe von "01 00" im Terminalprogramm wird mit einigen Bytes beantwortet, welche die unterstützten PIDs symbolisieren. Z. B. 41 00 98 3F 80 10 bei meinem T4.
  2. Gemäß dem ELM323 Handbuch sind die zwei ersten Bytes uninteressant, da sie nur angeben, daß es sich um eine Antwort auf ein 00 Kommando handelt.
  3. Die restlichen Bytes sind in hexadezimaler schreibweise. Der Windows Taschenrechner kann diese in der wissenschaftlichen Ansicht in binäre Zahlen umrechnen. Hintereinander geschrieben (und immer auf 8 Stellen Länge getrimmt durch einzufügende führende Nullen) ergibt sich dann: 10011000 00111111 10000000 00010000.
  4. Von links nach rechts gelesen, werden die Bits den PIDs zugeordnet. Eine 1 bedeutet, daß das jeweilige PID unterstützt wird. Begonnen wird beim PID mit der Nummer 1, denn das PID 0 lieferte ja diese Antwort, mit den verfügbaren PIDs.
  5. Mein Bus kann also:

    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)

  6. Will man nun einen Meßwert abfragen, gibt man "01 xx" ein, wobei xx für den (zweistelligen) hexadezimalen Wert des gewünschten PIDs steht. "01 0D" liefert z. B. die Motorumdrehung.
  7. Die Antwort kann eine aus mehreren Bytes bestehende Zahl sein, die entsprechend umzurechnen ist.

Fazit

Für mich war enttäuschend, daß ich mit dem ELM wesentlich weniger Daten auslesen kann, als via VAG-COM mit der anderen OBD-2-Schaltung. Dies liegt aber sicherlich daran, daß VAG-COM eben speziell auf VW/Audi zugschnitten ist. Wichtige Meßwerte sind aber auch mit dem ELM erfaßbar und vor allem die Fehlercodes lassen sich auslesen und zurücksetzen (löschen der MIL-Anzeige (malfunction indicator lamp) - bzw. "Check Engine"). Was aber gänzlich fehlt ist die Möglichkeit, Werte in den Steuerungsgeräten zu ändern, um so die zahlreichen Anpassungen vorzunehmen, die bei VAG-COM möglich sind.

MIL


Nutze das Diskussionsforum!

OBD-2 Adapter mit ELM 327

Unter den Produktnamen ElmScan 5 wird ein OBD-2 Interface vertrieben (z. B. bei KDS), welches auf dem ELM 327 aufbaut. Wie auch schon seine Vorgänger, stellt das Interface eine Verbindung zwischen PC (serielle Schnittstelle) und OBD-2 Buchse des Autos her. Der Chip übernimmt die komplette Kommunikation, so daß sich der Anwender nicht um die Protokolle kümmern muß.
Ebenso wie der mOByDic beherrscht der ELM 327 alle gängigen Protokolle: CAN (ISO 15765-4), SAE J1850 PWM, SAE J1850 VPW, ISO 9141-2 und ISO 14230-4. Dadurch kann er universell bei jedem OBD-2-fähigen Auto eingesetzt werden. Erfahrungsgemäß werden auch viele ältere Fahrzeuge gefunden, die nicht vollständig OBD-2 kompatibel sind. Bei diesen Fahrzeugen werden dann aber in der Regel nicht alle Funktionen unterstützt (Anzeige von Meßwerten ist möglich, gespeicherte Fehler werden nicht erkannt).

ElmScan 5

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.

Elm 327 Jumper

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.

OBD2 LCD für µC mit AVR ATmega8 mit ELM323

Inhalt

Einführung
Hardwarekomponenten
Software

Einführung

Das war ja nur ein Frage der Zeit, bis dieses Projekt sich von der ersten Idee zur fertigen Lösung entwickelte. Im Gunde kam die Idee schon bald nach der ersten Realisierung eines OBD-2 Adapters. Angesichts der Fülle interessanter Daten, die man aus der Schnittstelle herausziehen kann, wäre es doch schön, wenn man diese auch im normalen Fahrbetrieb sehen kann. Es gibt schon zahlreiche Ansätze, die stets aber ein Problem haben: Sie benötigen teure Standardhardware. Entweder ein Laptop, um die ganz normale Software zu benutzen oder einen Palm oder PDA. Laptop ist wohl den meisten zu unhandlich (und ist nicht stationär, da man sonst warten kann, bis der geklaut ist) und den PDA nutze ich für das Navi. Ich möchte gerne einfach nur ein kleines LC-Display haben, wo die wichtigen Daten angezeigt werden.

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.

Einsatz im VW T4

Hardwarekomponenten

Eigentlich wäre eine Lösung mit dem Interface von Jeff für VAG-COM wesentlich interessanter (nun auch realisiert). Bei meinem Bus könnte ich dann wirklich viele Meßwerte in Erfahrung bringen, die man sonst nicht zu sehen bekommt. Zum Beispiel würde mich eine Reichweitenanzeige interessieren. Tankinhalt und Momentanverbrauch (kann mein Multifunktionsdisplay im Armaturenbrett anzeigen) sind per OBD-2 verfügbar, so daß man die Reichweite abschätzen könnte. Hierfür muß ich mich aber mit der Programmierung des OBD-2 Protokolls (in dem Fall KWP-1281) beschäftigen (auch geschehen).

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

Spannungsabzweigung auf dem ELM323

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.

Gehäuse     Gehäuse

Software

Download Version 1.3

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.

Display

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.

Fehler Animation

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



Wie immer: Kein Support, keine Bautsätze, keine fertigen Geräte. Aber ein Diskussionsforum! Das Projekt und die Software darf für private Zwecke nachgebaut und benutzt werden. Der kommerzielle Vertrieb von Nachbauten oder der Software ist untersagt.

OBD2-LCD

Die Verschmelzung zweier Interessensgebiete - OBD-2 und µC - ergab ein autarkes LC-Display fürs Auto zur Anzeige von Meßwerten und Parametern. Die eigentlichen Projektseiten befinden sich im Abschnitt zur µC-Technik entweder mit einem ELM323 oder mit Jeffs Interface (VAG-COM).

Display

OBD2 LCD für µC mit AVR ATmega8 mit Jeffs Interface

Inhalt

Einführung
Hardwarekomponenten
Software

Einführung

Eine stand-alone Lösung für den ELM323 zusammen mit einem µC habe ich bereits zuvor entwickelt. Dort finden sich auch einige Infos und Fotos, die ich hier nicht wiederhole. Diesmal soll es daran gehen, Jeffs Interface (also ein VAG-Fahrzeug, den nur mit diesen funktioniert diese Schaltung!) mit einem AVR ATmega8 µC zu verbinden und so Fahrzeugdaten über das KW1281 Protokoll auszulesen. Dazu war es notwendig, dieses zu analysieren, was nicht ganz einfach war, aber trotzdem Spaß machte. Allerdings fehlen mir noch einige Infos.

Hardwarekomponenten

Die Anzeigeeinheit besteht wieder aus meinem AVR ATmega8 an den Jeffs Interface angeschlossen wird. Besonderheiten gibt es dabei keine. Da die folgende Software bisher keine individuelle Konfiguration der anzuzeigenden Werte unterstützt, kann auf den Taster verzichtet werden. Alternativ kann dieser auch als Reset-Taster genutzt werden. Das I/O-Board habe ich entsprechend modifiziert, so daß ein Jumper dafür existiert. Die Spannungsversorgung wird wie beim ELM noch von der Interface-Platine aus dem OBD-2-Stecker abgezweigt, anstatt direkt aus dem Fahrzeugnetz.

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.

Sicherungshalter

Software

Die Software ist wieder in C programmiert. Im Programm werden die anzuzeigenden Meßwerte fest vorgegeben. Dies ist notwendig, da jede ECU andere Sensordaten in den einzelnen groups liefert, wie den Ausführungen zum KW1281 zu entnehmen ist. Ich habe mich zum Beispiel für die Geschwindigkeit, Drehzahl, Batteriespannung, Momentanverbrauch/h, Öl-Temperatur und die (aus Geschwindigkeit und Momentanverbrauch) berechnet Reichweite mit 10l Treibstoff entschieden. Jeder, der eine andere ECU besitzt (also keinen VW T4 111KW), muß sich mit dem Protokoll befassen und im C-Code einige Modifikationen bei der Anzeige/Abfrage der Sensordaten vornehmen.

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.

Fehler Animation

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

Download Version 1.2



OBD-2 Adapter mit mOByDic

Die Firma Özen hat einen OBD-2-Adapter entwickelt, der in einem Gerät gleich mehrere Protokolle vereint und so universell eingesetzt werden kann. Der mOByDic plus-2600 unterstützt die Protokolle ISO9141-2, KW2000, J1850 PWM und VPWM sowie CAN Bus. Vor allem CAN ist für die Zukunft interessant.

mOByDic

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