OBD II LCD für µC mit AVR ATmega ohne separaten OBD Controller-Chip
Inhalt
Hinweis auf Update
Einführung
Hardware
Software
FAQ
Hinweis auf Update
Sie haben sich dieses Modell bereits aufgebaut und sind an den Funktionen von Modell B interessiert?
Kein Problem! Tauschen Sie einfach den bisherigen Prozessor durch den neuen aus - mehr ist nicht notwendig. Dadurch erweitern Sie Ihr Modell und können fast alle neuen Funktionen (große Zahlendarstellung, Spritverbrauch, Fehleranzeige/-löschen, Beschleunigungsmessung usw.) nutzen. Lediglich die Batteriespannungsanzeige (es wird ein falscher Wert angezeigt) und die adaptive Helligkeitssteuerung werden nicht Unterstützt.
Einführung
Bei den beiden bisher entwickelten LCDs fürs Auto war stets das Problem, daß im Fall des ELM (oder auch des mOByDic ein separates Modul mit einem relativ teuren und aufwendigen OBD Controller-Chip benötigt wurde. Bei Jeffs Interface (welches sowieso durch ein ISO Interface ersetzt werden sollte), war das Display nur für Fahrzeuge von Volkswagen, Audi & Co. nutzbar und bedurfte einer individuellen Programmierung je nach Modell. Zudem benötigen beide Modelle relativ viel Platz, da mindestens zwei Platinen benutzt werden.
Dieses OBD II LCD eignet sich für alle Fahrzeuge mit (Teilfunktionen von) OBD II und den Protokollen ISO 9141 bzw. ISO 14230 (KW2000).
Schon seit längerem werkelt bei mir im Bus deshalb ein kleineres Display, welches direkt über das OBD II Protokoll ISO 9141 der Diagnoseschnittstelle Daten ausliest und anzeigt. Das Projekt wurde nun optimiert und ist jetzt für die Öffentlichkeit verfügbar. Eine Aufgabe bestand darin, sicherzustellen, daß die Protokollumsetzung auch für andere Fahrzeuge korrekt ist (Timing) und es sollte auch ISO 14230 unterstützt werden.
Im Internet anzutreffende Behauptungen, es schade der Fahrzeugelektronik, permanent Daten auszulesen sind unfug.
Ein großer Vorteil des LCDs ist neben den Informationen über die reale Drehzahl und Geschwindigkeit (vgl. Besonderheiten) auch die ggf. zusätzliche Öltemperatur und die Sicherheit, keine Fehlermeldungen im Fahrzeugcomputer zu verpassen, da nicht erst gravierende Fehler über die MIL signalisiert werden, sondern auch weniger bedeutende Fehlereinträge zur Ausgabe eines Hinweises auf dem Display führen.
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.
Lassen Sie sich während der Fahrt permanent relevante Meßwerte aus Ihrem Fahrzeug anzeigen und werden Sie beim Auftreten von Fehlern automatisch gewarnt.
- Bis zu acht Meßwerte gleichzeitig annähernd in Echtzeit - individuell konfigurierbar
- Je nach Fahrzeug:
- Geschwindigkeit (real und ohne die Ungenauigkeit des normalen Tachos)
- Drehzahl
- Kühlmitteltemperatur (bei Diesel oft Öltemperatur - in keinem PKW sonst vorhanden)
- Einlaß-Lufttemperatur
- Motorlast
- Zündvoreilung
- Gaspedalstellung
- Meßwerte Lambdasonde
- Unterstützter OBD Standard
- und weitere ...
- Warnung bei gespeicherten Fehlern (DTCs)
- Anzeige der Anzahl gespeicherter, permanenter Fehler (SID 3)
- Modernes blaues oder weißes Display vorgesehen
- Einbau in handlichem Gehäuse möglich
Hardware
Der Aufbau im Eigenbau ist nicht weiter kompliziert und paßt auf eine halbe Europakarte.
Die Platine ist extra passend für das Gehäuse Modell Teknet TN22.29 (PDF) von Teko entworfen, weil ich das Teil mit seinen abgerundeten und gummierten Kanten besonders schick finde. Wird das empfohlene LCD-Modul benutzt, sitzt der Anzeigebereich genau zentrisch.
Beim LCD-Modul habe ich mich für ein EA DIP204B-4NLW (PDF) mit blauem Hintergrund und weißen Zeichen bei vier Zeilen à 20 Zeichen entschieden. Blau/Weiß ist ja derzeit im Trend und es paßt zu meiner werksseitig blauen Armaturenbeleuchtung. Das Modul ist auch als Weiß/Schwarz Version erhältlich, was sicherlich auch sehr schön wirkt. Die kleinen Abmessungen sind ideal und der Temperaturbereich von -20 °C bis +70 °C ist ebenso vorteilhaft. Über das Trimmpoti wird der optimale Kontrast einmalig eingestellt. Die interne Temperaturkompensation des Displays sorgt dann für eine gleichbleibend gute Ablesbarkeit. Einen wirklich passenden Frontrahmen gibt's nirgends, aber der in der Bauteilliste genannte paßt relativ gut.
Als Mikroprozessor werkelt ein ATmega16 bei 8 MHz. Dieser Typ hat den Vorteil, einfach durch einen ATmega32 mit mehr Speicher ausgetauscht zu werden, wenn durch Programmerweiterungen der Platz eng wird. Bewußt wurde auf eine kleinere SMD-Version verzichtet, damit das Projekt auch ohne fortgeschrittene Löterfahrung nachgebaut werden kann.
Auf der Platinenunterseite sorgt ein ISO Baustein vom Typ MC33290 für die Pegelanpassung zwischen µC und OBD. Dieser Chip ist leider nur als SMD verfügbar, läßt sich aber noch gut von Gelegenheitselektronikern löten und wird auch im RS232 KL-Interface benutzt. Es wird lediglich die K-Leitung benutzt (siehe OBD Einführung), da die alten Fahrzeuge mit Initialisierung über die L-leitung zu selten sind, als daß sich der Aufwand lohnt und nur das Motorsteuergerät ausgelesen wird, so daß die Extrawurst für Audis nicht gebraten werden muß (vgl. KKL).
Großer Wert wurde auf eine Absicherung der Schaltung gegen Störspannungen gelegt. Eine sich selbständig zurückstellende Sicherung und eine Suppressordiode übernehmen den Schutz. Für den Spannungsregler 7805 ist eigentlich kein Kühlblech notwendig, doch kann es auch nichts Schaden, ihm ein kleines zu verpassen, damit vor allem bei hohen Temperaturen im Fahrzeug der maximale Temperaturbereich nicht zu sehr ausgereizt wird.
Versorgt wird die Schaltung mit der Batteriespannung, die am besten vom Zündungsplus aus dem Sicherungskasten abgegriffen wird. Zusätzlich wird noch Masse (GND) und die Datenleitung (K-Leitung) angeschlossen. Masse findet man auch im Sicherungskasten. Die K-Leitung kann entweder im Sicherungskasten (wenn vorhanden) oder am OBD-Stecker abgegriffen werden. Dazu kann mit einer Vampirklemme (auch Abzweigklemme oder ähnlich genannt) das Kabel für die K-Leitung an der Rückseite der OBD Buchse im Auto angezapft werden. Man kann auch die Leitung durchschneiden und dann mit einer Lüsterklemme wieder verbinden und zusätzlich die Leitung zum Display anklemmen. Analog kann auch Masse und Batterie an der OBD Buchse abgegriffen werden. Die Belegung der OBD-Buchse beachten. Alternativ kann natürlich auch ein OBD-Stecker an das LCD angelötet werden.
Bis Version 0.4 bzw. 1.0 galt noch folgendes bei Verwendung eines OBD-Steckers: Dann sollte aber ein Schalter in die Versorgungsleitung eingebaut werden, da die OBD Buchse permament unter Spannung steht und das Display dann auch bei abgestelltem Fahrzeug in Betrieb ist.
Das Spannungsmanagement wurde ab Softwareversion 0.41 / 1.1 grundsätzlich modifiziert: Das Display erkennt nun selbständig, ob die Zündung eingeschaltet ist oder nicht. Deshalb kann der Bordcomputer einfach über die OBD-Buchse eingesteckt werden und verbunden bleiben (bzw. von hinten an die Kabel angeschlossen werden). Bei eingeschalteter Zündung versucht das Diagnosegerät sich mit dem Motorsteuergerät (ECU) zu verbinden. Wurde das Display dazu erstmals mit Spannung versorgt (bzw. bei jedem erneuten Verbinden mit der Batteriespannung), leuchtet das Display und zeigt die Bereitschaft an. Kann keine Verbindung aufgebaut werden (lost ECU), weil keine ECU gefunden wird (Zündung aus, K-Leitung nicht angeschlossen, Gerät funktioniert an diesem Auto nicht), erlischt das LCD nach einer Weile. Solange das Modul nun mit Spannung versorgt wird (mit der OBD-Buchse verbunden bleibt) versucht das Modul permanent eine Verbindung zur ECU aufzubauen. Dafür wird minimal Strom verbraucht, der eine intakte Fahrzeugbatterie innerhalb einiger Wochen nicht merklich entladen kann und im Bereich des normalen Verbrauchs der Fahrzeuguhr etc. liegt. Sobald die Zündung eingeschaltet wird, stellt das Modul die Verbindung zur ECU her (wenn möglich) und das LCD leuchtet auf und zeigt die Verbindungsparameter und anschließend die eingestellten Meßwertblöcke (bzw. die Meldung Meßwertblöcke/PIDs auszuwählen). Nach dem Abstellen der Zündung schaltet das Display sich automatisch ab. Dies kann bei einige Fahrzeugen ca. eine Minute dauern, da das Motorsteuergerät noch kurzzeitig weiter arbeitet.
Damit diese neue Funktion genutzt werden kann, ist eine kleine Modifikation der Platine erforderlich! Wird diese nicht vorgenommen, funktioniert das Display wie bisher und benötigt eine separate Trennung der Versorgungsspannung. Wird keine ECU gefunden, wird das Display dann lediglich gelöscht, die Hintergrundbeleuchtung bleibt aber an.
Folgender Umbau ist notwendig, damit die Hintergrundbeleuchtung abgeschaltet wird:
- Trennen Sie die Leiterbahn zwischen R3 und C4.
- Verbinden Sie mit einem isolierten Draht o. ä. R3 an der soeben aufgetrennten Seite mit Pin 21 des ATmega.
Modifikation Platine
Anzahl |
Bezeichner |
Typ |
2 |
R1, R2 |
10 kΩ |
1 |
R3 |
47 Ω |
1 |
R4 |
2,2 kΩ Trimmer |
1 |
R5 |
510 Ω |
2 |
C1, C2 |
22 pF, RM 2,5 |
3 |
C3, C4, C5 |
100 nF, RM 2.5 |
1 |
D1 |
1N4004 |
1 |
D2 |
Überspannungsschutzdiode P6KE 33A |
1 |
F1 |
Rückstellende Sicherung PFRA 030 |
1 |
IC1 |
ATmega MEGA16-P; |
1 |
IC2 |
7805T |
1 |
IC3 |
MC33290; bzw. Nachfolger |
1 |
LCD |
LCD 204BL-4 DIP |
1 |
Q1 |
8 MHz Quarz |
1 |
S1 |
Kurzhubtaster 13 mm |
1 |
JP1 |
Stiftleiste RM 2,5 |
1 |
- |
Sockel IC1 40 pol. |
1 |
- |
Kühlblech |
1 |
- |
Gehäuse TEKO TN 22.29 |
1 |
- |
LCD Rahmen |
1 |
- |
Kabeldurchführung, ggf. OBD Stecker |
Software
Kostenlos verfügbar ist Version 0.41, welche die ersten 32 PIDs von ISO 9141 unterstützt (Ausnahme: PID 02 wird grundsätzlich nicht unterstützt). Weiterhin wird die Aktualisierungsrate der Meßdaten künstlich um 4 Sekunden zwischen zwei Meßwerten verzögert.
Über die vereinfachte ISP Schnittstelle kann der Controller jederzeit programmiert werden. Mit einem ISP Interface + Software wird die (für den oben vorgestellten Aufbau) compilierte HEX-Datei in den Prozessor übertragen. Unbedingt die Fuse-Bits setzen, wenn selbst programmiert wird (bei Kaufversion nicht notwendig)! Analog zur Anleitung dürfen z. B. in yaap nur die Häkchen für BODEN, BOOTSZ0, BOOTSZ1 und SPIEN gesetzt sein.
Welche PIDs vom jeweiligen Auto tatsächlich unterstützt werden, ist unterschiedlich. Dies kann teilweise in der Fahrzeugliste nachgeschaut werden. Dort ist auch zu finden, bei welchen Modellen das Display bereits erfolgreich eingesetzt wurde. Bitte die eigenen Erfahrungen auch eintragen!
Noch mal in aller Deutlichkeit: Nur ISO 9141 bzw. ISO 14230 (Kaufversion) und kein CAN oder sonst was wird unterstützt. Wurden andere OBD Adapter bereits ohne Erfolg an einem Modell erprobt, wird man auch kein Glück mit diesem Display haben. Ein Auto unterstützt immer nur eins der beiden Protokolle - niemals beide. Wenn ein Fahrzeug erfolgreich mit der Freewareversion getestet wurde, funktioniert das Auto auch mit der Kaufversion. Bei erfolgreichem Test mit der Kaufversion, funktioniert die Freewareversion nur, wenn vom Auto ISO 9141 genutzt wird. Es ist nicht möglich, Fehlerspeichereinträge zu löschen, da dies ohne vorheriges Auslesen der DTCs (Diagnostic Trouble Code) Stümperei wäre.
Download Freeware V 0.41 HEX-Datei
Neuerungen (V 0.41 / V 1.1):
- Verbessertes Timing zur Verbindung mit ISO 14230 (nur Kaufversion 1.1)
- Lost ECU Erkennung (siehe oben)
- Die Diagnosemeldung/Werkzeugschlüssel (s. u.) wird gezeigt, wenn sowohl permanente Fehler (SID 3) (mit und ohne Aufleuchten der MIL im Fahrzeug), als auch vorübergehende Fehler (SID 7) im Motorsteuergerät abgelegt werden.
Die Bedienung ist einfach: Nach dem Einschalten versucht das Gerät eine Verbindung mit dem Fahrzeug aufzubauen. Dies klappt i. d. R. nur bei eingeschalteter Zündung. Auf dem Display wird die Initphase durch Punkte angezeigt. Wurde kurz vorher die Verbindung aufgebaut und dann wieder unterbrochen (typischerweise beim Anlassen beim Diesel mit Vorglühen), kann es etwas länger dauern (ca. 10-20 Sekunden), bis die Verbindung erneut steht. Anschließend wird das gefundene Protokoll und die Geschwindigkeit kurz angezeigt.
Dann erkennt das Gerät, ob es an einem neuen Auto angeschlossen wurde. In dem Fall wird man darauf hingewiesen und muß die Taste drücken. Bei gleichem Fahrzeug (genauer: gleiche PIDs des Steuergeräts) und bereits erfolgter Konfiguration werden gleich die Messwerte angezeigt.
Wurde das Fahrzeug gewechselt (leeres Display) oder soll die Anzeige neu konfiguriert werden, muß die Taste etwas länger gedrückt werden, bis der blinkende Cursor erscheint.
Durch kurzes drücken der Taste wird jetzt durch die im Fahrzeug vorhandenen Meßwertblöcke geblättert. Als erstes wird die Anzeige des gefundenen Protokolls ("F" für Fast-Init und "S" für Slow-Init) und der vom Fahrzeug unterstützten PIDs (gleich in die Fahrzeugliste eintragen!) angeboten. Als letzte Einstellmöglichkeit gibt es einen leeren Block und dann beginnt die Auswahl wieder von vorne.
Am Anfang einer jeden Zeile wird dazu einmal die lange (ganzzeilige) und dann anschließend beim nächsten Tastendruck die kurze (halbe Zeilenlänge) Darstellung angeboten. Wenn ein paar Sekunden die Taste nicht gedrückt wurde, wird zur nächsten Displayposition gesprungen. Wurde zuvor eine lange Darstellung gewählt, wird die nächste Zeile angesteuert. Nach einer kurzen Anzeige wird an die zweite Position in der gleichen Zeile gewechselt, an der dann nur noch kurze Darstellungen möglich sind. Jede Zeile kann individuell zwei kurze oder eine lange Darstellung beinhalten. Wurde die letzte freie Anzeigeposition konfiguriert, beendet sich die Konfiguration nach ein paar Sekunden ohne Tastendruck automatisch und es werden wieder aktuelle Meßwerte angezeigt.
Erkennt das Modul einen Fehlereintrag im Fahrzeugsystem, wird an erster Position ein invertiertes Ausrufezeichen im Wechsel mit einem Werkzeugschlüsselsymbol und der Text "Diagnose" angezeigt. Die Anzahl der Fehler kann über das entsprechende PID angezeigt werden.
Die folgende Tabelle zeigt für sämtliche Meßwerte die Darstellungsform im Display in Lang- und in Kurzschreibweise:
PID |
Funktion |
lange Darstellung (exemplarisch) |
kurze Darstellung (exemplarisch) |
Bedeutung |
- |
Ausgabe von ISO-Protokoll und den verfügbaren PIDs |
ISO 9141F · 983F8010 |
ISO 9141F |
Fast Init/Slow Init (ISO 14230) bzw. 9600/10400 Baud (ISO 9141) |
1 |
System Status |
Fehleranzahl: 3 |
3 Fehl. |
Anzahl der gespeicherten permanenten Fehler |
3 |
Status Einspritzsystem |
A:Open Lp B:Clsd Lp |
A:oL B:cL |
Offener/geschlossener Kreislauf ohne Fehler; geschlossener Kreislauf (wegen
Ansteuerbedingungen) = "Driving/Dr"; Offener/geschlossener Kreislauf mit Fehler |
4 |
Berechneter Lastwert |
ber. Lastwert: 50% |
50% %Last |
|
5 |
Motor Kühlwasser-/Öltemperatur |
Kühlmittel: 74°C |
74°CKühl |
|
6 |
Kurzzeitige Kraftstoff-Einspritz-Korrektur Bank 1 |
Kurz.Ein.Tr. B1 -5,3% |
-5,3%KETB1 |
mager (<0) bis fett |
7 |
Langfristige Kraftstoff-Einspritz-Korrektur Bank 1 |
Lang.Ein.Tr. B1 10,8% |
10,8%LETB1 |
|
8 |
Kurzzeitige Kraftstoff-Einspritz-Korrektur Bank 2 |
Kurz.Ein.Tr. B2 -5,3% |
-5,3%KETB2 |
|
9 |
Langfristige Kraftstoff-Einspritz-Korrektur Bank 2 |
Lang.Ein.Tr. B2 10,8% |
10,8%LETB2 |
|
10 |
Kraftstoffdruck |
Kraftst.dr.: 120kPa |
120kPa Kd |
|
11 |
Absolutdruck Einlaßkanal |
Abs.dr.Einl.: 99kpa |
99kpa Ek |
|
12 |
Motor-Umdrehungen |
Drehzahl: 1234upm |
1234upm |
¤ |
13 |
Geschwindigkeit |
Tachometer: 150km/h |
150km/h |
¤ |
14 |
Zündwinkel/-voreilung Zylinder 1 |
Zündvoreilung:-12,5° |
-12,5° Zv |
|
15 |
Einlaß-Lufttemperatur |
Ein.Lufttemp.: 70° |
70°CLuft |
|
16 |
Luftdurchfluß |
Luftmasse: 150,25g |
150,25gLm |
|
17 |
Drosselklappenstellung |
Drosselklappe: 75% |
75%Drosl |
kann auch Gaspedalstellung sein |
18 |
Status Zweitluftsystem |
Zweitluft: vorgesch. |
ZwL.vorg. |
vorgeschaltet, nachgeschaltet, Aus, unbekannt |
19/29 |
Einbauort Lambdasonde |
O2 Sensor: 00000001 |
O2 Sensor |
Zahlwert gem. ISO (s. ISO 15031) nur bei Langform |
20-27 |
Ausgangsspannung Lambdasonde & Kurzzeit Einspritztrimm |
B2 S3: 0,12V -18,5% |
0,12VB2S3 |
keine Anzeige des Trimmwertes bei Kurzdarstellung |
28 |
OBD Standard |
EOBD (Europa) |
EOBD |
usw. |
30 |
Leistungsentnahme Nebenantrieb |
Nebenantrieb: ein |
N-Antr. 1 |
ein/aus bzw. 1/0 |
31 |
Zeit seit Motorstart |
Motorstart: 01:20:05 |
M01:20:05 |
|
nicht unterstützte PIDs |
|
PID #02 Wert:C4 PID #32 ID: 8FABC105 |
PID #02 |
|
FAQ
Verschoben.