Kombiinstrument - Tankanzeige erweitern: Unterschied zwischen den Versionen
TCA965 (Diskussion | Beiträge) |
TCA965 (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(37 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 4: | Zeile 4: | ||
Nachdem ich mich einige Zeit mit dem EEPROM-Dump des KIs beschäftigt habe, fand ich insgesamt vier Kennfelder, die mit der Tankanzeige zusammen hängen und die drei beobachteten Szenarien erklären. | Nachdem ich mich einige Zeit mit dem EEPROM-Dump des KIs beschäftigt habe, fand ich insgesamt vier Kennfelder, die mit der Tankanzeige zusammen hängen und die drei beobachteten Szenarien erklären. | ||
'''Hinweis:''' dieses Projekt ist für "Fortgeschrittene". Zum Einstieg eignet sich dieses besser: [https://www.vwbuswiki.de/index.php?title=Kombiinstrument_-_Plateaufunktion_deaktivieren Plateaufunktion deaktivieren] | |||
Zeile 73: | Zeile 76: | ||
== Was steht im Dump? == | == Was steht im Dump? == | ||
Ich habe bei meinem KI (7D0920803B) vier Kennfelder gefunden, die mit dem Tank zusammenhängen. | Ich habe bei meinem KI (7D0920803B) vier Kennfelder gefunden, die mit dem Tank zusammenhängen. | ||
'''Auch hier gilt:''' ist die Teilenummer eine andere, sind wahrscheinlich auch die Offsets unterschiedlich. | |||
[https://www.vwbuswiki.de/index.php?title=Kombiinstrument_-_%C3%9Cbersicht_der_Speicherstellen_im_EEPROM Hier] entsteht nach und nach eine Übersicht. | |||
<table border="1" cellspacing="2" cellpadding="4"> | <table border="1" cellspacing="2" cellpadding="4"> | ||
Zeile 150: | Zeile 156: | ||
</tr> | </tr> | ||
</table> | </table> | ||
=== Liter Kennfeld 1 === | === Liter Kennfeld 1 === | ||
Zeile 201: | Zeile 208: | ||
</tr> | </tr> | ||
</table> | </table> | ||
=== Liter Kennfeld 2 === | === Liter Kennfeld 2 === | ||
Das dritte Kennfeld ist identisch mit dem zweiten, nur das es "spiegelverkehrt ist": | Das dritte Kennfeld ist identisch mit dem zweiten, nur das es "spiegelverkehrt ist": | ||
<table border="1" cellspacing="2" cellpadding="4"> | <table border="1" cellspacing="2" cellpadding="4"> | ||
<tr> | |||
<td width="200" align="center">HEX Wert</td> | |||
<td width="100" align="center">Dezimalwert</td> | |||
<td width="100" align="center">Liter (Dezimalwert / 8)</td> | |||
</tr> | |||
<tr> | |||
<td align="center">00 20</td> | |||
<td align="center">32</td> | |||
<td align="center">4</td> | |||
</tr> | |||
<tr> | |||
<td align="center">...</td> | |||
<td align="center">...</td> | |||
<td align="center">...</td> | |||
</tr> | |||
<tr> | |||
<td align="center">02 70</td> | |||
<td align="center">624</td> | |||
<td align="center">78</td> | |||
</tr> | |||
</table> | |||
=== Schrittmotor-Kennfeld === | |||
<table border="1" cellspacing="2" cellpadding="4"> | |||
<tr> | |||
<td width="200" align="center">HEX Wert</td> | |||
<td width="100" align="center">Dezimalwert</td> | |||
<td width="100" align="center">Zeigerstellung (Dezimalwert / 8)</td> | |||
</tr> | |||
<tr> | |||
<td align="center">00 25</td> | |||
<td align="center">37</td> | |||
<td align="center">4.625</td> | |||
</tr> | |||
<tr> | |||
<td align="center">00 95</td> | |||
<td align="center">149</td> | |||
<td align="center">18.625</td> | |||
</tr> | |||
<tr> | |||
<td align="center">01 84</td> | |||
<td align="center">388</td> | |||
<td align="center">48.5</td> | |||
</tr> | |||
<tr> | |||
<td align="center">02 E2</td> | |||
<td align="center">738</td> | |||
<td align="center">92.25</td> | |||
</tr> | |||
<tr> | |||
<td align="center">04 40</td> | |||
<td align="center">1088</td> | |||
<td align="center">136</td> | |||
</tr> | |||
<tr> | |||
<td align="center">05 9F</td> | |||
<td align="center">1439</td> | |||
<td align="center">179.875</td> | |||
</tr> | |||
<tr> | |||
<td align="center">05 9F</td> | |||
<td align="center">1439</td> | |||
<td align="center">179.875</td> | |||
</tr> | |||
<tr> | |||
<td align="center">05 9F</td> | |||
<td align="center">1439</td> | |||
<td align="center">179.875</td> | |||
</tr> | |||
</table> | |||
== Was bedeutet das? == | |||
Das waren jetzt ganz schön viele Zahlen, was steht da jetzt überhaupt? | |||
Das lässt sich in eine Tabelle runterbrechen: | |||
<table border="1" cellspacing="2" cellpadding="4"> | |||
<tr> | |||
<td width="100" align="center">A/D Wert</td> | |||
<td width="100" align="center">Liter</td> | |||
<td width="100" align="center">Widerstandswert in Ohm</td> | |||
<td width="100" align="center">Zeigerausschlag in °</td> | |||
</tr> | |||
<tr> | |||
<td align="center">162</td> | |||
<td align="center">78</td> | |||
<td align="center">< 36</td> | |||
<td align="center">179.875</td> | |||
</tr> | |||
<tr> | |||
<td align="center">162</td> | |||
<td align="center">78</td> | |||
<td align="center">< 36</td> | |||
<td align="center">179.875</td> | |||
</tr> | |||
<tr> | |||
<td align="center">162</td> | |||
<td align="center">78</td> | |||
<td align="center">< 36</td> | |||
<td align="center">179.875</td> | |||
</tr> | |||
<tr> | |||
<td align="center">246</td> | |||
<td align="center">60</td> | |||
<td align="center">62</td> | |||
<td align="center">136</td> | |||
</tr> | |||
<tr> | |||
<td align="center">318</td> | |||
<td align="center">40</td> | |||
<td align="center">89</td> | |||
<td align="center">92.25</td> | |||
</tr> | |||
<tr> | |||
<td align="center">418</td> | |||
<td align="center">20</td> | |||
<td align="center">137</td> | |||
<td align="center">48.5</td> | |||
</tr> | |||
<tr> | |||
<td align="center">498</td> | |||
<td align="center">10</td> | |||
<td align="center">189</td> | |||
<td align="center">18.625</td> | |||
</tr> | |||
<tr> | |||
<td align="center">599</td> | |||
<td align="center">4</td> | |||
<td align="center">> 283</td> | |||
<td align="center">4.625</td> | |||
</tr> | |||
</table> | |||
Man sieht, das sich jeweils drei Werte wiederholen. Diese enthalten keine neue Informationen für das KI. Das sind also ungenutzte Speicherstellen. | |||
Wie wir oben schon gesehen haben, kann es kleinere Widerstände als 36 Ohm geben. Nur - wie klein können sie werden und welchen Liter-Werten entsprechen sie? | |||
== Die eigentliche Anpassung == | |||
Um die Tankanzeige zu erweitern sind drei Anpassungen notwendig: | |||
* Ergänzen der A/D-Werte für Widestände kleiner als 36 Ohm | |||
* Ergänzen der dazu passenden Liter Werte | |||
* Neuskalierung der Tankanzeige | |||
=== Ergänzen der A/D-Werte === | |||
Zunächst stelle ich die A/D-Werte über die Widerstandswerte graphisch dar: | |||
[[Datei:AD_ueber_Widerstand_ohne_Trend.PNG |400px|thumb|right|]] | |||
<table border="1" cellspacing="2" cellpadding="4"> | |||
<tr> | |||
<td width="100" align="center">Widerstandswert</td> | |||
<td width="100" align="center">A/D-Wert</td> | |||
</tr> | |||
<tr> | |||
<td align="center">36</td> | |||
<td align="center">162</td> | |||
</tr> | |||
<tr> | |||
<td align="center">62</td> | |||
<td align="center">246</td> | |||
</tr> | |||
<tr> | |||
<td align="center">89</td> | |||
<td align="center">318</td> | |||
</tr> | |||
<tr> | |||
<td align="center">137</td> | |||
<td align="center">418</td> | |||
</tr> | |||
<tr> | |||
<td align="center">189</td> | |||
<td align="center">498</td> | |||
</tr> | |||
<tr> | |||
<td align="center">283</td> | |||
<td align="center">599</td> | |||
</tr> | |||
</table> | |||
Daraufhin lasse ich mir von Excel eine Trendlinie erzeugen: Polynom 2. Ordnung. | |||
Heraus kommt die Formel: | |||
f(x) = -0.005x² + 3.3212x + 55.326 | |||
Mithilfe dieser Formel errechne ich jetzt zwei neue (Erinnerung: es wurde drei mal dasselbe gespeichert, zwei davon sind also "frei") A/D-Werte zu Widerstandswerten kleiner 36 Ohm. | |||
Als Widerstandswerte habe ich 29.5 Ohm und 23 Ohm gewählt - die Wahl ist erstmal nur ein Versuch, sie sind geraten [Spoiler: später zeigt sich, sie passen sehr gut]. | |||
Mithilfe der Formel errechne ich dazu die A/D-Werte: | |||
<table border="1" cellspacing="2" cellpadding="4"> | |||
<tr> | |||
<td width="100" align="center">Widerstandswert</td> | |||
<td width="100" align="center">A/D-Wert</td> | |||
</tr> | |||
<tr> | |||
<td align="center">23</td> | |||
<td align="center">129</td> | |||
</tr> | |||
<tr> | <tr> | ||
<td align="center">29.5</td> | |||
<td align="center">149</td> | |||
</tr> | |||
</table> | |||
Damit hätten wir zwei neue A/D-Werte für Widerstandswerte kleiner 36 Ohm. | |||
=== Ergänzen der Liter-Werte === | |||
Zu den oben berechneten A/D-Werten passen sehr gut folgenden Liter-Werte: | |||
<td width="100" align="center">Liter | <table border="1" cellspacing="2" cellpadding="4"> | ||
<tr> | |||
<td width="100" align="center">Widerstandswert</td> | |||
<td width="100" align="center">A/D-Wert</td> | |||
<td width="100" align="center">Liter</td> | |||
</tr> | |||
<tr> | |||
<td align="center">23</td> | |||
<td align="center">129</td> | |||
<td align="center">85</td> | |||
</tr> | |||
<tr> | |||
<td align="center">29.5</td> | |||
<td align="center">149</td> | |||
<td align="center">82.5</td> | |||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td align="center">36</td> | |||
<td align="center">162</td> | |||
<td align="center">80</td> | |||
</tr> | |||
</table> | |||
Diese Werte (also 82.5 und 85) habe ich mehr oder weniger experimentell ermittelt. Erst habe ich 85 und 90l genutzt, den Bulli leer gefahren bis ich liegen geblieben bin und voll aufgetankt. Das KI zeigt mir dann 90l an, die Zapfsäule 85l. Also habe ich die beiden oberen Werte verringert und jetzt passt es ziemlich gut. Kann bei anderen Bullis aber ein wenig anderes aussehen. | |||
Zwei von drei Anpassungen sind nun fertig, allerdings fehlt noch die Neuskalierung der Tankanzeige. | |||
=== Skalierung === | |||
Im Originalzustand entsprachen | |||
* 179.875° Zeigerstellung 78l Tankinhalt. | |||
* 18.625° Zeigerstellung 10l Tankinhalt. (Beginn der Reserve) | |||
Da ich den Reservebereich so lassen möchte, passe ich nur den Bereich darüber an. | |||
Neu soll gelten: | |||
* 90l: Zeiger "Voll" | |||
* 45l: Zeiger "Halb" | |||
* 10l: Zeiger "Beginn Reserve" (also wie original) | |||
* 4l: Zeiger "Leer" | |||
Daraus resultiert folgende Zuordnung | |||
<table border="1" cellspacing="2" cellpadding="4"> | |||
<tr> | |||
<td width="100" align="center">Liter</td> | |||
<td width="100" align="center">Nadelstellung</td> | |||
</tr> | |||
<tr> | |||
<td align="center">4</td> | <td align="center">4</td> | ||
<td align="center">4.625</td> | |||
</tr> | |||
<tr> | |||
<td align="center">10</td> | |||
<td align="center">18.625</td> | |||
</tr> | |||
<tr> | |||
<td align="center">20</td> | |||
<td align="center">38.78</td> | |||
</tr> | |||
<tr> | |||
<td align="center">40</td> | |||
<td align="center">79.1</td> | |||
</tr> | |||
<tr> | |||
<td align="center">60</td> | |||
<td align="center">119.41</td> | |||
</tr> | |||
<tr> | |||
<td align="center">80</td> | |||
<td align="center">159.72</td> | |||
</tr> | |||
<tr> | |||
<td align="center">82.5</td> | |||
<td align="center">169.80</td> | |||
</tr> | |||
<tr> | |||
<td align="center">85</td> | |||
<td align="center">179.875</td> | |||
</tr> | |||
</table> | |||
== Berechnete Anpassungen im Dump umsetzen == | |||
Nun müssen die neu berechneten Werte wieder zurück in den EEPROM. | |||
Das vierte Kennfeld wird fast vollständig ersetzt (da wir ja neu skaliert haben), bei den anderen drei passen wir nur die drei obersten (untersten) Werte an. | |||
'''A/D-Wert''' | |||
<table border="1" cellspacing="2" cellpadding="4"> | |||
<tr> | |||
<td width="100" align="center">Adresse</td> | |||
<td width="100" align="center">A/D alt DEZ</td> | |||
<td width="100" align="center">A/D neu DEZ</td> | |||
<td width="100" align="center">A/D neu '''HEX'''</td> | |||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td align="center">0x1F5 & 0x1F4</td> | |||
<td align="center">162</td> | |||
<td align="center">129</td> | |||
<td align="center">00 81</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x1F7 & 0x1F6</td> | |||
<td align="center">162</td> | |||
<td align="center">149</td> | |||
<td align="center">00 95</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x1F9 & 0x1F8</td> | |||
<td align="center">162</td> | |||
<td align="center">162</td> | |||
<td align="center">00 A2</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x1FB & 0x1FA</td> | |||
<td align="center">246</td> | |||
<td align="center">246</td> | |||
<td align="center">00 F6</td> | |||
</tr> | |||
<tr> | |||
<td align="center">...</td> | |||
<td align="center">...</td> | |||
<td align="center">...</td> | <td align="center">...</td> | ||
<td align="center">...</td> | <td align="center">...</td> | ||
</tr> | |||
</table> | |||
'''Liter 1''' | |||
<table border="1" cellspacing="2" cellpadding="4"> | |||
<tr> | |||
<td width="100" align="center">Adresse</td> | |||
<td width="100" align="center">Liter alt DEZ</td> | |||
<td width="100" align="center">Liter neu DEZ</td> | |||
<td width="100" align="center">Liter neu (DEZ * 8) -> '''HEX'''</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x205 & 0x204</td> | |||
<td align="center">78</td> | |||
<td align="center">85</td> | |||
<td align="center">02 A8</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x207 & 0x206</td> | |||
<td align="center">78</td> | |||
<td align="center">82.5</td> | |||
<td align="center">02 94</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x209 & 0x208</td> | |||
<td align="center">78</td> | |||
<td align="center">80</td> | |||
<td align="center">02 80</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x20B & 0x20A</td> | |||
<td align="center">60</td> | |||
<td align="center">60</td> | |||
<td align="center">01 E0</td> | |||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td align="center">...</td> | |||
<td align="center">...</td> | |||
<td align="center">...</td> | |||
<td align="center">...</td> | |||
</tr> | |||
</table> | |||
'''Liter 2''' | |||
<table border="1" cellspacing="2" cellpadding="4"> | |||
<tr> | |||
<td width="100" align="center">Adresse</td> | |||
<td width="100" align="center">Liter alt DEZ</td> | |||
<td width="100" align="center">Liter neu DEZ</td> | |||
<td width="100" align="center">Liter neu (DEZ * 8) -> '''HEX'''</td> | |||
</tr> | |||
<tr> | |||
<td align="center">...</td> | |||
<td align="center">...</td> | |||
<td align="center">...</td> | |||
<td align="center">...</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x21D & 0x21C</td> | |||
<td align="center">60</td> | |||
<td align="center">60</td> | |||
<td align="center">01 E0</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x21F & 0x21E</td> | |||
<td align="center">78</td> | |||
<td align="center">80</td> | |||
<td align="center">02 80</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x221 & 0x220</td> | |||
<td align="center">78</td> | <td align="center">78</td> | ||
<td align="center">82.5</td> | |||
<td align="center">02 94</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x223 & 0x222</td> | |||
<td align="center">78</td> | |||
<td align="center">85</td> | |||
<td align="center">02 A8</td> | |||
</tr> | |||
</table> | |||
'''Zeiger''' | |||
<table border="1" cellspacing="2" cellpadding="4"> | |||
<tr> | |||
<td width="100" align="center">Adresse</td> | |||
<td width="100" align="center">Zeiger alt DEZ</td> | |||
<td width="100" align="center">Zeiger neu DEZ</td> | |||
<td width="100" align="center">Zeiger neu (DEZ * 8) -> '''HEX'''</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x225 & 0x224</td> | |||
<td align="center">4.625</td> | |||
<td align="center">4.625</td> | |||
<td align="center">00 25</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x227 & 0x226</td> | |||
<td align="center">18.625</td> | |||
<td align="center">18.625</td> | |||
<td align="center">00 95</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x229 & 0x228</td> | |||
<td align="center">48.5</td> | |||
<td align="center">38.78</td> | |||
<td align="center">01 36</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x22B & 0x22A</td> | |||
<td align="center">92.25</td> | |||
<td align="center">79.1</td> | |||
<td align="center">02 78</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x22D & 0x22C</td> | |||
<td align="center">136</td> | |||
<td align="center">119.41</td> | |||
<td align="center">03 BB</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x22F & 0x22E</td> | |||
<td align="center">179.875</td> | |||
<td align="center">159.72</td> | |||
<td align="center">04 FD</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x231 & 0x230</td> | |||
<td align="center">179.875</td> | |||
<td align="center">169.8</td> | |||
<td align="center">05 4E</td> | |||
</tr> | |||
<tr> | |||
<td align="center">0x233 & 0x232</td> | |||
<td align="center">179.875</td> | |||
<td align="center">179.875</td> | |||
<td align="center">05 9F</td> | |||
</tr> | </tr> | ||
</table> | </table> | ||
Jetzt sind wir wieder Hexadezimal unterwegs. | |||
Die neuen Hex-Werte nun wieder dorthin schreiben, wo sie vorher standen (Byteflip nicht vergessen, aus "05 9F" wird im Dump "9F 05"). | |||
== Fazit == | |||
Die Anpassung der Tankkennlinie ist im Vergleich zum Entfernen der [https://www.vwbuswiki.de/index.php?title=Kombiinstrument_-_Plateaufunktion_deaktivieren Plateaufunktion] sicherlich aufwändiger. Aber die Grundprinzipien bleiben die gleichen. | |||
Ich habe bei mir die Tanknadel wie hier beschrieben angepasst und die ganz oben angesprochenen Phänomene sind nicht mehr präsent: | |||
* Nach dem Volltanken werden mir nun 83 - 84 l in der MFA angezeigt. Tanke ich nach dem ersten "Klicken" noch ein wenig mehr, erscheint auch die "85 l" im Display. | |||
* Die Tanknadel bewegt sich nach dem ersten verbauchtem Liter, also nach gut 12 - 13 km (Reichweite mit 85 l = 1.100 km | 7.7 l / 100 km). Gleichzeitig springt in der MFA der Wert von "85l auf 84l" (Eigenbau canMFA - vergleichbar mit ColorMFA, also nicht die originale) | |||
* Zeigt die Nadel "1/2", habe ich knapp die Hälfte meiner Reichweite verbraucht. Die "erste" Hälfte fällt nun gleich "schnell" wie die zweite | |||
<br> | |||
<br> | |||
[https://www.vwbuswiki.de/index.php?title=Kombiinstrument_-_%C3%9Cbersicht Zurück zur Übersicht] | |||
[[Kategorie:Elektrik]] | [[Kategorie:Elektrik]] | ||
[[Kategorie:Kombiinstrument]] | [[Kategorie:Kombiinstrument]] | ||
[[Kategorie:Kombiinstrument Modifikationen]] | [[Kategorie:Kombiinstrument Modifikationen]] |
Aktuelle Version vom 8. April 2021, 12:40 Uhr
Die Tankanzeige im T4 zeigt bekanntlich maximal 78l an. Zusätzlich habe ich das Gefühl, das die erste Hälfte des Tanks "länger" hält, als die zweite. Wenn die Tanknadel beispielsweise genau "1/2" anzeigt, habe ich gut 650 km gefahren. Fahre ich dann den Tank fast leer, sodass die Tanknadel auf "Leer" steht und <4 Liter angezeigt werden, habe ich jedoch keinesfalls 1.300 km geschafft, sondern eher 1.050 - 1.100 km.
Desweiteren bleibt meine Tanknadel nach dem Volltanken sehr lang auf "Voll". Ich kann gut 100 - 150 km fahren, bevor die sich die Nadel das erste mal bewegt.
Nachdem ich mich einige Zeit mit dem EEPROM-Dump des KIs beschäftigt habe, fand ich insgesamt vier Kennfelder, die mit der Tankanzeige zusammen hängen und die drei beobachteten Szenarien erklären.
Hinweis: dieses Projekt ist für "Fortgeschrittene". Zum Einstieg eignet sich dieses besser: Plateaufunktion deaktivieren
Wie funktionert die Tankanzeige eigentlich?
Auch das ist mal wieder sehr gut in der t4-wiki beschrieben. Ich fasse es aber mal kurz zusammen:
Der Tankgeber ist ein veränderlicher Widerstand, der anhand der Stellung des Schwimmers einen bestimmten Widerstandswert erzeugt.
Im Kombiinstrument wird aus diesem Widerstandswert eine Spannung gemacht, die dann von einem Analog-Digital-Wandler digitalisiert und weiterverarbeitet wird.
Diesem (vorzeichenlosen) A/D-Wert wird dann über die Kennfelder des Tankgebers:
- ein Literwert (MFA, VCDS, usw)
- ein Nadelwert (=Zeigerausschlag)
zugeordnet.
Gleichzeitig wird noch ein lesbarer Widerstandswert erzeugt (aber wohl nicht über den EEPROM, sondern hart im Prozessor verknüpft) - das ist aber für die Anpassung nicht so wichtig.
Was ist bekannt?
Folgende Zuordnung zwischen Tankfüllstand, Literwert und Widerstandswert ist bekannt:
Zeigerstellung | Inhalt in Litern | Widerstand in Ohm |
leer | weniger als 4 | größer als 283 |
Reserve | 10 | 189 |
1/4 | 20 | 137 |
1/2 | 40 | 89 |
3/4 | 60 | 62 |
voll | 78 | kleiner als 36 |
Interessant für uns ist, das jedem Widerstandwert, der kleiner als 36 Ohm ist, ein Literwert von 78l angezeigt werden. Ebenso zeigt die Nadel ab diesem Wert "Voll".
Vor einiger Zeit war ich tanken (etwas voller als bis zum ersten "Klick" der Zapfsäule) und habe dann unmittelbar den Widestandswert ausgelesen. Mir wurden 29 Ohm angezeigt. Demnach kann der Tankgeber (also das Bauteil) sehr wohl mehr als 78l messen. Das KI zeigt es nur nicht an.
Was steht im Dump?
Ich habe bei meinem KI (7D0920803B) vier Kennfelder gefunden, die mit dem Tank zusammenhängen.
Auch hier gilt: ist die Teilenummer eine andere, sind wahrscheinlich auch die Offsets unterschiedlich. Hier entsteht nach und nach eine Übersicht.
Kennfeld | Adresse |
Tankgeber A/D Wert | 0x1F4 - 0x203 |
Tankgeber Wert in Liter 1 | 0x204 - 0x213 |
Tankgeber Wert in Liter 2 | 0x214 - 0x223 |
Tankgeber Wert für Schrittmotor | 0x224 - 0x233 |
Die ersten beiden Kennfelder scheinen den A/D Werten die Literwerte zuzuordnen und die letzten beiden ordnen den Literwerte dann Zeigerwerte zu.
A/D Kennfeld
Adresse | HEX Wert | Dezimalwert |
0x1F5 & 0x1F4 | 00 A2 | 162 |
0x1F7 & 0x1F6 | 00 A2 | 162 |
0x1F9 & 0x1F8 | 00 A2 | 162 |
0x1FB & 0x1FA | 00 F6 | 246 |
0x1FD & 0x1FC | 01 3E | 318 |
0x1FF & 0x1FE | 01 A2 | 418 |
0x201 & 0x200 | 01 F2 | 498 |
0x203 & 0x202 | 02 57 | 599 |
Liter Kennfeld 1
(ab hier lasse ich die Offsets weg)
HEX Wert | Dezimalwert | Liter (Dezimalwert / 8) |
02 70 | 624 | 78 |
02 70 | 624 | 78 |
02 70 | 624 | 78 |
01 E0 | 480 | 60 |
01 40 | 320 | 40 |
00 A0 | 160 | 20 |
00 50 | 80 | 10 |
00 20 | 32 | 4 |
Liter Kennfeld 2
Das dritte Kennfeld ist identisch mit dem zweiten, nur das es "spiegelverkehrt ist":
HEX Wert | Dezimalwert | Liter (Dezimalwert / 8) |
00 20 | 32 | 4 |
... | ... | ... |
02 70 | 624 | 78 |
Schrittmotor-Kennfeld
HEX Wert | Dezimalwert | Zeigerstellung (Dezimalwert / 8) |
00 25 | 37 | 4.625 |
00 95 | 149 | 18.625 |
01 84 | 388 | 48.5 |
02 E2 | 738 | 92.25 |
04 40 | 1088 | 136 |
05 9F | 1439 | 179.875 |
05 9F | 1439 | 179.875 |
05 9F | 1439 | 179.875 |
Was bedeutet das?
Das waren jetzt ganz schön viele Zahlen, was steht da jetzt überhaupt?
Das lässt sich in eine Tabelle runterbrechen:
A/D Wert | Liter | Widerstandswert in Ohm | Zeigerausschlag in ° |
162 | 78 | < 36 | 179.875 |
162 | 78 | < 36 | 179.875 |
162 | 78 | < 36 | 179.875 |
246 | 60 | 62 | 136 |
318 | 40 | 89 | 92.25 |
418 | 20 | 137 | 48.5 |
498 | 10 | 189 | 18.625 |
599 | 4 | > 283 | 4.625 |
Man sieht, das sich jeweils drei Werte wiederholen. Diese enthalten keine neue Informationen für das KI. Das sind also ungenutzte Speicherstellen.
Wie wir oben schon gesehen haben, kann es kleinere Widerstände als 36 Ohm geben. Nur - wie klein können sie werden und welchen Liter-Werten entsprechen sie?
Die eigentliche Anpassung
Um die Tankanzeige zu erweitern sind drei Anpassungen notwendig:
- Ergänzen der A/D-Werte für Widestände kleiner als 36 Ohm
- Ergänzen der dazu passenden Liter Werte
- Neuskalierung der Tankanzeige
Ergänzen der A/D-Werte
Zunächst stelle ich die A/D-Werte über die Widerstandswerte graphisch dar:
Widerstandswert | A/D-Wert |
36 | 162 |
62 | 246 |
89 | 318 |
137 | 418 |
189 | 498 |
283 | 599 |
Daraufhin lasse ich mir von Excel eine Trendlinie erzeugen: Polynom 2. Ordnung.
Heraus kommt die Formel: f(x) = -0.005x² + 3.3212x + 55.326
Mithilfe dieser Formel errechne ich jetzt zwei neue (Erinnerung: es wurde drei mal dasselbe gespeichert, zwei davon sind also "frei") A/D-Werte zu Widerstandswerten kleiner 36 Ohm. Als Widerstandswerte habe ich 29.5 Ohm und 23 Ohm gewählt - die Wahl ist erstmal nur ein Versuch, sie sind geraten [Spoiler: später zeigt sich, sie passen sehr gut].
Mithilfe der Formel errechne ich dazu die A/D-Werte:
Widerstandswert | A/D-Wert |
23 | 129 |
29.5 | 149 |
Damit hätten wir zwei neue A/D-Werte für Widerstandswerte kleiner 36 Ohm.
Ergänzen der Liter-Werte
Zu den oben berechneten A/D-Werten passen sehr gut folgenden Liter-Werte:
Widerstandswert | A/D-Wert | Liter |
23 | 129 | 85 |
29.5 | 149 | 82.5 |
36 | 162 | 80 |
Diese Werte (also 82.5 und 85) habe ich mehr oder weniger experimentell ermittelt. Erst habe ich 85 und 90l genutzt, den Bulli leer gefahren bis ich liegen geblieben bin und voll aufgetankt. Das KI zeigt mir dann 90l an, die Zapfsäule 85l. Also habe ich die beiden oberen Werte verringert und jetzt passt es ziemlich gut. Kann bei anderen Bullis aber ein wenig anderes aussehen.
Zwei von drei Anpassungen sind nun fertig, allerdings fehlt noch die Neuskalierung der Tankanzeige.
Skalierung
Im Originalzustand entsprachen
- 179.875° Zeigerstellung 78l Tankinhalt.
- 18.625° Zeigerstellung 10l Tankinhalt. (Beginn der Reserve)
Da ich den Reservebereich so lassen möchte, passe ich nur den Bereich darüber an.
Neu soll gelten:
- 90l: Zeiger "Voll"
- 45l: Zeiger "Halb"
- 10l: Zeiger "Beginn Reserve" (also wie original)
- 4l: Zeiger "Leer"
Daraus resultiert folgende Zuordnung
Liter | Nadelstellung |
4 | 4.625 |
10 | 18.625 |
20 | 38.78 |
40 | 79.1 |
60 | 119.41 |
80 | 159.72 |
82.5 | 169.80 |
85 | 179.875 |
Berechnete Anpassungen im Dump umsetzen
Nun müssen die neu berechneten Werte wieder zurück in den EEPROM.
Das vierte Kennfeld wird fast vollständig ersetzt (da wir ja neu skaliert haben), bei den anderen drei passen wir nur die drei obersten (untersten) Werte an.
A/D-Wert
Adresse | A/D alt DEZ | A/D neu DEZ | A/D neu HEX |
0x1F5 & 0x1F4 | 162 | 129 | 00 81 |
0x1F7 & 0x1F6 | 162 | 149 | 00 95 |
0x1F9 & 0x1F8 | 162 | 162 | 00 A2 |
0x1FB & 0x1FA | 246 | 246 | 00 F6 |
... | ... | ... | ... |
Liter 1
Adresse | Liter alt DEZ | Liter neu DEZ | Liter neu (DEZ * 8) -> HEX |
0x205 & 0x204 | 78 | 85 | 02 A8 |
0x207 & 0x206 | 78 | 82.5 | 02 94 |
0x209 & 0x208 | 78 | 80 | 02 80 |
0x20B & 0x20A | 60 | 60 | 01 E0 |
... | ... | ... | ... |
Liter 2
Adresse | Liter alt DEZ | Liter neu DEZ | Liter neu (DEZ * 8) -> HEX |
... | ... | ... | ... |
0x21D & 0x21C | 60 | 60 | 01 E0 |
0x21F & 0x21E | 78 | 80 | 02 80 |
0x221 & 0x220 | 78 | 82.5 | 02 94 |
0x223 & 0x222 | 78 | 85 | 02 A8 |
Zeiger
Adresse | Zeiger alt DEZ | Zeiger neu DEZ | Zeiger neu (DEZ * 8) -> HEX |
0x225 & 0x224 | 4.625 | 4.625 | 00 25 |
0x227 & 0x226 | 18.625 | 18.625 | 00 95 |
0x229 & 0x228 | 48.5 | 38.78 | 01 36 |
0x22B & 0x22A | 92.25 | 79.1 | 02 78 |
0x22D & 0x22C | 136 | 119.41 | 03 BB |
0x22F & 0x22E | 179.875 | 159.72 | 04 FD |
0x231 & 0x230 | 179.875 | 169.8 | 05 4E |
0x233 & 0x232 | 179.875 | 179.875 | 05 9F |
Jetzt sind wir wieder Hexadezimal unterwegs.
Die neuen Hex-Werte nun wieder dorthin schreiben, wo sie vorher standen (Byteflip nicht vergessen, aus "05 9F" wird im Dump "9F 05").
Fazit
Die Anpassung der Tankkennlinie ist im Vergleich zum Entfernen der Plateaufunktion sicherlich aufwändiger. Aber die Grundprinzipien bleiben die gleichen.
Ich habe bei mir die Tanknadel wie hier beschrieben angepasst und die ganz oben angesprochenen Phänomene sind nicht mehr präsent:
- Nach dem Volltanken werden mir nun 83 - 84 l in der MFA angezeigt. Tanke ich nach dem ersten "Klicken" noch ein wenig mehr, erscheint auch die "85 l" im Display.
- Die Tanknadel bewegt sich nach dem ersten verbauchtem Liter, also nach gut 12 - 13 km (Reichweite mit 85 l = 1.100 km | 7.7 l / 100 km). Gleichzeitig springt in der MFA der Wert von "85l auf 84l" (Eigenbau canMFA - vergleichbar mit ColorMFA, also nicht die originale)
- Zeigt die Nadel "1/2", habe ich knapp die Hälfte meiner Reichweite verbraucht. Die "erste" Hälfte fällt nun gleich "schnell" wie die zweite