Kombiinstrument - Plateaufunktion deaktivieren
Entfernen der sogennanten "Plateau-Funktion" aus dem Kombiinstrument.
(Aktuell nur für die "blauen" KIs!)
Kurz gesagt, zeigt das KI in einem Bereich zwischen 75°C und 105°C immer 90°C an.
Um dieses Verhalten zu ändern, muss man das Kennfeld der Temperaturanzeige bearbeiten.
Das Kennfeld ordnet verschiedenen Temperaturwerten die passenden Werte für die Ansteuerung des Zeigermotors zu.
Im originalen Kennfeld wird hier allen Temperaturen zwischen 75°C und 115°C der Zeigerwert 90° (Mittelstellung) zugeordnet.
Kennfeld finden
Um das Kennfeld bearbeiten zu können, so muss man es im Dump erst einmal finden.
Für einige KIs habe ich das Kennfeld gefunden, leider hat scheinbar jedes KI (also jede Teilenummer) eine andere Speicherstelle dafür.
Teilenummer | Adresse Temperaturwerte | Adresse Zeigerwerte |
7D0 920 800 B | 0x106 - 0x111 | 0x112 - 0x11D |
7D0 920 802 Q | 0x2C8 - 0x2D3 | 0x2E0 - 0x2EB |
7D0 920 803 B | 0x24C - 0x257 | 0x258 - 0x263 |
Was tut man, wenn das eigene KI nicht in der Tabelle auftaucht?
Kennfeld selber finden
Bisher begann das Kennfeld der Temperatur immer bei 30°C. 30°C ist im EEPROM als "F0 00" abgelegt. Also sucht man im Dump nach "F0 00". Bei meinem KI (7D0 920 803 B) gibt es zwei Treffer. Was also nun?
Der Zweite Temperaturwert betrug bisher immer 50°C. Das ist codiert als: "90 01". Die Zahlenfolge "F0 00 90 01" findet sich bei mir nur einmal. Also habe ich das Temperaturfeld gefunden.
Dieser Weg funktionier bei den Zeigerwerten nicht, da offenbar jedes KI ab Werk so kalibriert wurde, das 90°C auch exakt auf dem "90°C-Strich" steht. Hier gibt es aber einen einfach Trick: meist steht das Zeigerkennfeld direkt hinter dem Temperaturkennfeld. Leider aber auch nicht immer. Einige KIs legen das Temperaturfeld doppelt ab, einmal mit fallendenden, dann mit steigenden Temperaturen. Das Zeigerkennfeld liegt "hinter" dem "zweiten" (wenn es zwei gibt).
Wie werden Werte im EEPROM eigentlich abgelegt
Oder auch: wie hole ich aus dem HEX-Durcheinander Zahlen heraus?
Um von einer Zahl auf den abgelegten Wert zu kommen geht man wie folgt vor: Zahl * 8 -> Das in HEX umwandeln (Windows Taschenrechner "Programmierer") -> Die Werte vertauschen.
Beispiel: 115 * 8 = 920. 920 in HEX: 03 98 (der Windows Taschenrechner zeigt "398" an, also vorn Nullen ergänzen). Das vertauscht: "98 03" - so würde es im Dump liegen.
Anderherum geht es genauso: Werte aus dem Dump nehmen und vertauschen: "90 01" wird zu "01 90". Das als dezimalzahl umwandeln: "01 90" -> 400. Das durch 8 teilen: 400 / 8 = 50 <- das ist der gespeicherte Wert.
Wie passe ich das Kennfeld nun an?
Ich schreibe mir alle Werte (mit bereits getauschten Stellen) in Excel auf und berechne dort den Dezimalwert dazu (Excel Funktion: HEXINDEZ(zahl) / HEX2DEC(number) [englische Version]). Dann teile ich die Werte durch 8.
Für das Temperaturfeld ergibt sich:
Adresse | HEX Wert | Dezimalwert | Temperatur in °C (Dezimalwert / 8) |
0x24D & 0x24C | 00 F0 | 240 | 30 |
0x24F & 0x24E | 01 90 | 400 | 50 |
0x251 & 0x250 | 02 58 | 600 | 75 |
0x253 & 0x252 | 03 98 | 920 | 115 |
0x255 & 0x254 | 03 D0 | 976 | 122 |
0x257 & 0x256 | 04 10 | 1040 | 130 |
Das gleiche mache ich für die Werte des Schrittmotors:
Adresse | HEX Wert | Dezimalwert | Schrittmotorwert |
0x259 & 0x258 | 00 24 | 36 | 4.5 |
0x25B & 0x25A | 00 24 | 36 | 4.5 |
0x25D & 0x25C | 02 E4 | 740 | 92.5 |
0x25F & 0x25E | 02 E4 | 740 | 92.5 |
0x261 & 0x260 | 05 0A | 1290 | 161.25 |
0x263 & 0x262 | 05 A4 | 1444 | 180.5 |
Nun stelle ich den Temperaturwert und den Schrittmotorwert graphisch dar. (Ergebnis siehe oben: blau).
Man sieht, das es streng genommen zwei Plateaus gibt. Das oben angesprochene Plateau um 90°C und ein weiteres am Anfang. Die Nadel springt mit dem Einschalten der Zündung auf den Wert von 50°C und verlässt diesen auch erst ab 50°C.
Danach geht es an die linearisierung des Plateaus um 90°C (das erste kann man natürlich auch linearisieren, aber dort findet ohnehin so wenig Zeigerausschlag statt, dass man es vermutlich kaum sieht).
Die eigentliche Linearisierung ist nichts besonderes. Man bildet eine lineare Funktion (f(x) = m * x + b) über die äußeren Werte (50°C zu 4.5° Auslenkung und 130°C zu 180.5° Auslenkung) und ermittelt so die passenden Schrittmotorwerte zu 75°C, 115°C und 122°C.
In meinem Falle ergibt sich nun das:
Temperatur in °C | Zeigerwert alt | Zeigerwert neu |
30 | 4.5 | 4.5 |
50 | 4.5 | 4.5 |
75 | 92.5 | 59.5 |
115 | 92.5 | 147.5 |
122 | 161.25 | 162.9 |
130 | 180.5 | 180.5 |
Das stelle ich dann wieder graphisch dar (Ergebnis siehe oben: orange). Man sieht , das nun der "echte" 90°C Temperaturwert auch mit dem Zeigerwert 92.5 (Mittelstellung) nach wie vor übereinstimmt (Schnittpunkt zwischen blau und orange)
Im Aufbau