Kombiinstrument - Tankanzeige erweitern: Unterschied zwischen den Versionen

Aus T4Forums Doku
Zur Navigation springenZur Suche springen
Keine Bearbeitungszusammenfassung
 
(40 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 99: Zeile 105:


Die ersten beiden Kennfelder scheinen den A/D Werten die Literwerte zuzuordnen und die letzten beiden ordnen den Literwerte dann Zeigerwerte zu.
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 ===
=== A/D Kennfeld ===
Zeile 149: Zeile 156:
</tr>
</tr>
</table>
</table>


=== Liter Kennfeld 1 ===
=== Liter Kennfeld 1 ===
(ab hier lasse ich die Offsets weg)
<table border="1" cellspacing="2" cellpadding="4">
<table border="1" cellspacing="2" cellpadding="4">
<tr>
<tr>
<td width="200" align="center">HEX Wert</td>
<td width="200" align="center">HEX Wert</td>
<td width="100" align="center">Dezimalwert</td>
<td width="100" align="center">Dezimalwert</td>
<td width="100" align="center">Liter (Dezimalwert / 8)</td>
<td width="100" align="center">Liter (Dezimalwert / 8)</td>
</tr>
</tr>
<tr>
<tr>
<td align="center">02 70</td>
<td align="center">02 70</td>
<td align="center">624</td>
<td align="center">624</td>
<td align="center">78</td>
<td align="center">78</td>
</tr>
</tr>
<tr>
<tr>
<td align="center">02 70</td>
<td align="center">02 70</td>
<td align="center">624</td>
<td align="center">624</td>
<td align="center">78</td>
<td align="center">78</td>
</tr>
</tr>
<tr>
<tr>
<td align="center">02 70</td>
<td align="center">02 70</td>
<td align="center">624</td>
<td align="center">624</td>
<td align="center">78</td>
<td align="center">78</td>
</tr>
<tr>
<td align="center">01 E0</td>
<td align="center">480</td>
<td align="center">60</td>
</tr>
<tr>
<td align="center">01 40</td>
<td align="center">320</td>
<td align="center">40</td>
</tr>
<tr>
<td align="center">00 A0</td>
<td align="center">160</td>
<td align="center">20</td>
</tr>
<tr>
<td align="center">00 50</td>
<td align="center">80</td>
<td align="center">10</td>
</tr>
<tr>
<td align="center">00 20</td>
<td align="center">32</td>
<td align="center">4</td>
</tr>
</table>




=== Liter Kennfeld 2 ===
Das dritte Kennfeld ist identisch mit dem zweiten, nur das es "spiegelverkehrt ist":
<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>
<tr>
<tr>
<td align="center">02 70</td>
<td align="center">624</td>
<td align="center">78</td>
</tr>
</table>


<td align="center">01 E0</td>


<td align="center">480</td>
=== Schrittmotor-Kennfeld ===
 
<td align="center">60</td>




<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>
<tr>
<tr>
<td align="center">05 9F</td>
<td align="center">1439</td>
<td align="center">179.875</td>
</tr>
</table>


<td align="center">01 40</td>
== Was bedeutet das? ==
Das waren jetzt ganz schön viele Zahlen, was steht da jetzt überhaupt?


<td align="center">320</td>
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">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>




</tr>
Man sieht, das sich jeweils drei Werte wiederholen. Diese enthalten keine neue Informationen für das KI. Das sind also ungenutzte Speicherstellen.


<tr>
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?


<td align="center">00 A0</td>
== 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


<td align="center">160</td>


<td align="center">20</td>
=== 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>
</tr>
</table>


<tr>


<td align="center">00 50</td>
Daraufhin lasse ich mir von Excel eine Trendlinie erzeugen: Polynom 2. Ordnung.


<td align="center">80</td>
Heraus kommt die Formel:
f(x) = -0.005x² + 3.3212x + 55.326


<td align="center">10</td>
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>
<tr>
<td align="center">29.5</td>
<td align="center">149</td>
</tr>
</table>


<td align="center">00 20</td>
Damit hätten wir zwei neue A/D-Werte für Widerstandswerte kleiner 36 Ohm.


<td align="center">32</td>
<td align="center">4</td>


=== Ergänzen der Liter-Werte ===
Zu den oben berechneten A/D-Werten passen sehr gut folgenden Liter-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>
<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>
<td align="center">36</td>
<td align="center">162</td>
<td align="center">80</td>
</tr>
</tr>
</table>
</table>


=== Liter Kennfeld 2 ===
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.
Das dritte Kennfeld ist identisch mit dem zweiten, nur das es "spiegelverkehrt ist":
 
 
Zwei von drei Anpassungen sind nun fertig, allerdings fehlt noch die Neuskalierung der Tankanzeige.
 
=== Skalierung ===


<table border="1" cellspacing="2" cellpadding="4">
Im Originalzustand entsprachen
* 179.875° Zeigerstellung 78l Tankinhalt.
* 18.625° Zeigerstellung 10l Tankinhalt. (Beginn der Reserve)


<tr>
Da ich den Reservebereich so lassen möchte, passe ich nur den Bereich darüber an.


<td width="200" align="center">HEX Wert</td>
Neu soll gelten:
* 90l: Zeiger "Voll"
* 45l: Zeiger "Halb"
* 10l: Zeiger "Beginn Reserve" (also wie original)
* 4l: Zeiger "Leer"


<td width="100" align="center">Dezimalwert</td>
Daraus resultiert folgende Zuordnung


<td width="100" align="center">Liter (Dezimalwert / 8)</td>
<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.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>
<tr>
<tr>
<td align="center">85</td>
<td align="center">179.875</td>
</tr>
</table>


<td align="center">00 20</td>


<td align="center">32</td>
== Berechnete Anpassungen im Dump umsetzen ==
Nun müssen die neu berechneten Werte wieder zurück in den EEPROM.


<td align="center">4</td>
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>
<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>
<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>


<td align="center">...</td>


'''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>


<td align="center">02 70</td>


<td align="center">624</td>
'''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>




=== Schrittmotor-Kennfeld ===
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:


Im Aufbau
* 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]


[https://www.t4forum.de/index.php?user/66401-tca965/ Bei Fragen oder Ergänzungen im Forum als "TCA965" erreichbar]


[[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:

AD ueber Widerstand ohne Trend.PNG
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




Zurück zur Übersicht