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