E46 Fanatics Forum banner
Status
Not open for further replies.

DIY: Changing Temperature Gauge Buffer Range with PA Soft 1.4

333K views 24 replies 116 participants last post by  JWT4700  
#1 · (Edited)
Though I am the author of this original post, it really has become a thread by committee. Thanks to TerraPhantm's & Silbervogel's contributions, this thread is incredibly useful to all e46 owners.

Many e46 owners complain that the non-M coolant temperature gauge is practically useless given its wide buffer range (75ÂşC-115ÂşC) and high range settings. The 12 o'clock position represents the buffer range, which means that the needle will stay at this position when the coolant temperature is between 75ÂşC and 115ÂşC. This is problematic for at least a couple of reasons. Your needle will stay at the 12 o'clock position even if you have the all-too-common soft failing thermostat (See jfoj's excellent thread on this issue and related problems ). This was true on my wife's car, which ran in the 77-87ÂşC range without turning on the service engine soon light (SES). Secondly, an upper limit of 115ÂşC for the buffer range doesn't give the driver much time to shut off the engine in the event that it overheats. Given the relatively high failure rate of t-stats and other cooling system components on the e46, performing this revision can help avert catastrophe.

TerraPhantm has made it possible to reprogram the temperature gauge to behave in a more linear manner, which provides the driver with a more accurate representation of what's happening under the hood. It does so by setting the buffer range to 90-100ÂşC instead of the factory programmed range of 75-115ÂşC and also by adjusting the lower and upper ranges of the gauge. After you perform this modification, you'll know if you have a soft failing t-stat by simply looking at the gauge. You'll also have more advanced warning of overheating and, therefore, more time to shut the engine down. Furthermore, because the lower limit of the buffer range will be set at 90ÂşC instead of the factory preset of 75ÂşC, the driver might be less inclined to flog the engine before it reaches operating temperature. By all accounts, the baseline operating temperature for these cars is 95-97 ÂşC.

TerraPhantm is responsible for most of the useful information that follows. Any errors are, of course, my own.

The first set of instructions that follows can also be found in this thread:

I was asked details on how to make the coolant temp gauge buffer smaller in another thread. Since the procedure requires PASoft and this thread gets a decent bit of traffic, I thought I'd post here.

The following only applies to facelift cars; I'm sure the same can be done to prefacelifts, but the procedure will differ. Even on the facelift cars, the EEPROM addresses may vary.

Read your cluster's EEPROM with PASoft. Open the resulting file with a hex editor and go to offset 0x34D (my edit: 0x340 may be the correct offset; either way, the codes will be identical). Take note of the following 8 bytes:

Code:
06 [B]0F 32 4B 73 7D 8F[/B] 00 10 2D 2D
0x0F = 15ÂşC = Gauge Start (not sure about this one)
0x32 = 50ÂşC = First Notch (I know the ZHP guys say it's 65ÂşC, so it might represent the end of the blue)
0x4b = 75ÂşC = Buffer Start
0x73 = 115ÂşC = Buffer End

0x7D = 125ÂşC = 3rd Notch (or maybe start of red)
0x8F = 143ÂşC = Gauge maxed out

So as you can see, the buffer is 40 degrees in this case. I would change it to the following:

Code:
06 [B]0F 41 5A 64 6E 78 [/B]00 10 2D 2D
That still leaves a small buffer of 90Âş - 100Âş which is an appropriate range for the car. And if it's anything like the M3 (which also has a 10 degree buffer), small variations do cause it to wiggle around in the buffer zone; it's not noticeable on the non-M since the range is so wide. I haven't tried eliminating the buffer, but I imagine you'd set the buffer start and end values to the same thing (95ÂşC would be 5F) -- I'm not sure exactly how I'd scale the surrounding values, but you can play with that.

(if you're wondering why I included the unbolded values, it's because NCS defines that whole region as the coolant gauge characteristic curve)
But I could not find offset 0x34D (nor 0x340) in my EEPROM so I sent him a line that looked very similar:

Code:
 0x0F0: OF 00 32 1F 4B 5A 73 5A 7C 94 7D A4 06 0E 1E 0F
From this, he deduced the following:

TerraPhantm pm w/ revisions for accuracy said:
This is pure conjecture of mine, but I think the format is:

- angle; temperature - angle; etc. (My edit: original message theorized angle/2; temperature)

So for 15ºC and below, the gauge is at the bottom. From 15ºC - 50ºC, it moves from ø0º to 31º; from 50 to 75ºC, it moves towards ø90º. From 75º-115ºC it stays at that angle. From 115 to 124ºC it gets to ø148º, and then 125ºC onward it jumps to ø164º (and turns on the light?). That seems to cover the range of motion of that gauge.

If I'm correct, you'd want to set to something like the following
0F 00 41 1F 5A 5A 64 5A 6E 94 73 A4

Which basically translates to:
15ºC - ø0; 65ºC - ø31; 90ºC - ø90; 100ºC - ø90; 110ºC - ø148; 115ºC - ø164

You might want to play with the values a bit, but I think 100 is about the max the M54 gets under normal operation. 115ÂşC triggering the light should give you enough time to shut down.
Code:
[I]Factory[/I]     0x0F0:  0F 00 [B]32[/B] 1F [B]4B[/B] 5A [B]73[/B] 5A [B]7C[/B] 94 [B]7D[/B] A4 06 0E 1E 0F
[I]Revision #1[/I] 0x0F0:  0F 00 [B]41[/B] 1F [B]5A[/B] 5A [B]64[/B] 5A [B]6E[/B] 94 [B]73[/B] A4 06 0E 1E 0F
Worked like a charm. I used the values shown above, but you may want to play with upper range values depending on your driving style and operating conditions. Here's a chart that can help you do it (Added on 11/23):

Code:
Decimal       20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140
HexaDecimal   14 19 1E 23 28 2D 32 37 3C 41 46 4B 50 55 5A 5F  64  69  6E  73  78  7D  82  87  8C
For example, if you want to eliminate the buffer altogether and make needle behavior in the upper range almost linear, here's another option (added on 11/23):
Code:
[I]Factory[/I]     0x0F0: 0F 00 [B]32[/B] 1F [B]4B[/B] 5A [B]73 5A 7C[/B] 94 [B]7D[/B] A4 06 0E 1E 0F
[I]Revision #2[/I] 0x0F0: 0F 00 [B]41[/B] 1F [B]5F[/B] 5A [B]69 7C 73[/B] 94 [B]78[/B] A4 06 0E 1E 0F
---------------Bottom Hash Mark---Upper Limit of Blue---2nd Hash Mark--12 o'clock---3rd Hash Mark---Lower Limit of Red---Red (Maxed Out/Light On):
Needle Angle-----------ø0----------------ø31-----------------ø55---------ø90----------ø124--------------ø148----------------ø164--------------
T(Factory 0x340)------0-15ÂşC------------ 50ÂşC----------------60ÂşC----75-115ÂşC-----120ÂşC----------------125ÂşC---------------143ÂşC-------------
T(Rev. 0x340)---------0-15ÂşC-------------65ÂşC----------------75ÂşC------90-100ÂşC---105ÂşC----------------110ÂşC---------------120ÂşC----------
T(Factory 0x0f0)------0-15ÂşC-------------50ÂşC----------------60ÂşC----75-115ÂşC-----120ÂşC----------------124ÂşC---------------125ÂşC-------------
T(Rev. #1 0x0f0)----- 0-15ÂşC-------------65ÂşC----------------75ÂşC------90-100ÂşC---105ÂşC----------------110ÂşC---------------115ÂşC----------
T(Rev. #2 0x0f0)------0-15ÂşC-------------65ÂşC-------------75ÂşC-----------95ÂşC--------105ÂşC-------------115ÂşC---------------120ÂşC-------------
T=Temperature

The upper range is, of course, not observed, but we can assume that the needle will move accordingly.

*Take a mental note of the corresponding needle positions and temperatures in the chart above so that you know how to read the reprogrammed gauge, which will now be much more sensitive in the upper range. This is merely a result of the "new normal" gauge behavior that this modification seeks to achieve. Though the baseline operating temperature is 95ÂşC, the electrically controlled t-stat allows normal operating temperature to fluctuate in the 75ÂşC-113ÂşC range depending on driver input and operating conditions. For more details on how it works, look here. As mentioned, the reprogrammed temp. gauge is advantageous because it will, among other things, help you recognize a soft failing t-stat and give you more time to shut off your engine if it overheats.

The following is a graphic of the factory vs. revision #1 temp. gauge, courtesy of SilberVogel. His original post can be found here. He has also attached a screenshot of his revision of offset 0x0F0 with PA Soft 1.4 in post #62 of this thread.

Image


Here are step-by-step instructions with PA Soft 1.4
1) Click on IKE.
2) Click "Read EEPROM"
3) Hex editor functions are in the lower left hand corner. Click the floppy disk icon to save the factory loaded file onto your desktop as backup.
4) Make revisions from "factory" bolded values to "revised" bolded values shown above: Find the corresponding offset and move the cursor over the bytes to be revised. You can use arrow keys to move the cursor as well.
5) Click "Write EEPROM." Your cluster will flash and beep several times after completion -- and like magic, your gauge will now reflect more accurately what's happening under the hood.

To TerraPhantm, I send a big "thank you." If you're ever in Philly, I'll take you out for a beer, a cheesesteak and whatever else you want.

To make this even simpler, Solidjake made this video of himself reprogramming his 2002 330i:

https://www.youtube.com/watch?v=aZkM5Nx2LN0

Subsequently, Silbervogel improved the graphic with this incredibly useful tool for those of us who do not regularly work with hexadecimals but want to play around with the values; and even for those well versed, this visual representation of gauge behavior is invaluable. His contributions make moot my charts above, but I've not deleted them in order to show the evolution of this thread and contributions of others.

What follows are his words and can also be found in post #132 of this thread.

Silbervogel: I decided to take the temperature gauge graphic a bit further and made an interactive version.

It's a basic hex generator that translates the string from P.A. Soft and displays the corresponding temps. It will also convert the temperature ranges you give it back into hex and properly format it again.

Here's a screenshot of the program's interface:

Image


It's a standalone application that runs on Windows and can be downloaded here:
www.bmwpnpc.com/silbervogel/E46 Temp Gauge Hex Generator.exe

Find this to be a hugely beneficial modification and think it has a lot of value. For anyone who might feel it's beyond their abilities or comfort level, I hope this tool helps alleviate some concerns and makes the process even easier.
 
#2 · (Edited)
Philly,

Thanks for guinea pigging this.

Would be interested to see what the same line in an M3 looks like, might be slightly different to offset the cooler running temps on the M3?

I was connected to an M3 earlier today, too bad I could not have captured the info. The M3 I was looking at today had a soft thermostat, but it may have been softer than I even expected, because I expect the M3 to have the coolant temperature sensor directly on top of the thermostat housing like my M5, but I think it is located in the rear of the cylinder head? I now have to track down what a typical M3 coolant temp baseline is, I think it is actually a bit higher than the E39 M5 based upon where the coolant temperature sensor is actually located.

I think BWM buffered the standard E46 and most other models of the same vintage/design class due to the how the heater thermostat works and keeping the "customer" isolated from the fact the engine coolant temperature is dancing around by design. I think BMW was trying to keep the customer complaints down by buffering the temp gauge. Hell, VW only put a light in many of their cars and the DME low temperature error algorithm was as wide as a house, the VW could run 165-170F all day long vs the expected 205F and never trigger a low engine coolant DTC.

Also I think the EU version E46 may have a cooler thermostat that may maximize performance along with the EU DME tune. Would be interesting to see what the EU E46 temp hex values are and I also wonder if anyone in the US that is running the EU tune on their E46 would be better off with the cooler EU thermostat?
 
#3 · (Edited)
I don't have the data in the pre-2003 format, but this should still tell you enough.

KMT_KENNLINIE (Coolant Gauge Curve)
Code:
2003(?)+ Clusters
E46 M3:  06 0F 3C 55 5F 69 73 00 10 2D 2D
Non-M:   06 0F 32 4B 73 7D 8F 00 10 2D 2D
Revised: 06 0F 41 5A 64 6E 73 00 10 2D 2D

2002(and others?) Clusters:
E46 M3:  0F 00 3C 1F 55 5A 5F 5A 69 94 73 A4 06 0E 1E 0F (hypothesized values)
Non-M:   0F 00 32 1F 4B 5A 73 5A 7C 94 7D A4 06 0E 1E 0F
Revised: 0F 00 41 1F 5A 5A 65 5A 6E 94 73 A4 06 0E 1E 0F
Code:
Non-M Default    M3 Default    Recommended non-M    Function / Angle
0x0F (15ÂşC)    0x0F (15ÂşC)    0x0F (15ÂşC)    Gauge Start (0Âş)
0x32 (50ÂşC)    0x3C (60ÂşC)    0x41 (65ÂşC)    End of Blue (15.5Âş)
0x4B (75ÂşC)    0x55 (85ÂşC)    0x5A (90ÂşC)    Center (Buffer Start) (45Âş)
0x73 (115ÂşC)    0x5F (95ÂşC)    0x64 (100ÂşC)    Center (Buffer End) (45Âş)
0x7D (125ÂşC)    0x69 (105ÂşC)    0x6E (110ÂşC)    Start of Red (79Âş)
0x8F (143ÂşC)    0x73 (115ÂşC)    0x73 (115ÂşC)    End of Red or LED on?? (84Âş)
(note, last two temperatures appear to be different for early clusters)

M3 buffer is from 85Âş to 95ÂşC. Which is odd because the car comes with an 82Âş thermostat and it's rare that I can get it above 85Âş

115ÂşC might be a little aggressive to max out the gauge, but I figure the early warning would be good. You guys can tweak the values to your liking
 
#4 ·
Worked like a charm. I didn't see line 0x34D, but I did find the string of code Terra pointed out starting in the middle of line 0x340 and continuing into line 0x350. A bit different than what I expected, but I triple checked to make sure it was the exact same string and then gave it a go.
Original: 06 0F 32 4B 73 7D 8F 00 10 2D 2D
Modified: 06 0F 41 5A 64 6E 78 00 10 2D 2D

Question, if 0x8F reflects gauge's maximum, then what is the result of changing the value to 78?
 
#7 · (Edited)
The string continues from line 34 near the end like you noticed and onto line 35. That confused me at first as well.

Non-M: 06 0F 32 4B 73 7D 8F 00 10 2D 2D
Revised: 06 0F 41 5A 64 6E 73 00 10 2D 2D
 
  • Like
Reactions: jeffbert
Save
#9 ·
Here bud, I took a screenshot (attached) of your IKE code and highlighted the string you need. Changes to make are as follows:
Original: 06 0F 32 4B 73 7D 8F 00 10 2D 2D
Modified: 06 0F 41 5A 64 6E 78 00 10 2D 2D
 

Attachments

#11 ·
E46 Temperature Gauge Hex Generator v1.0

Wanted to bump a great thread to mention that I decided to take the temperature gauge graphic a bit further and made an interactive version.

It’s a basic hex generator that translates the string from P.A. Soft and displays the corresponding temps. It will also convert the temperature ranges you give it back into hex and properly format it again.

Here’s a screenshot of the program’s interface:

Image


It’s a standalone application that runs on Windows and can be downloaded here: www.bmwpnpc.com/silbervogel/E46 Temp Gauge Hex Generator.exe

Find this to be a hugely beneficial modification and think it has a lot of value. For anyone who might feel it's beyond their abilities or comfort level, I hope this tool helps alleviate some concerns and makes the process even easier.
 

Attachments

#12 ·
Since I have a pre-facelift E46, and I don't have PA Soft, I've been poking around in NCS Dummy looking at the KMB module, and it looks like the hex values posted by the OP match up pretty close to the data for the parameters in the functions KUEHLMITTELTEMP_ANZEIGEWI (coolant temperature gauge angle) and KUEHLMITTELTEMP_WERT (coolant temperature gauge value).

KUEHLMITTELTEMP_ANZEIGEWI - COOLANT TEMPERATURE GAUGE ANGLE
00,00,00,1F,00,5A,00,5A,00,94,00,A4

KUEHLMITTELTEMP_WERT - COOLANT TEMPERATURE VALUE
00,0F,00,32,00,4B,00,73,00,7C,00,7D

I'm going to try adding custom parameters to the daten files via NCS Dummy. If I can make this work, I'll write up a DIY for it!
 
#13 ·
It might be worthwhile to use the keys that BMW uses (part number / hw/sw version / coding index) to identify the clusters. On my 2000 323i (hw: 0x10, sw: 0x20, ci: 0x04), it looks like the temperature scale lives at 0x78, and looks like this:

Code:
B 00000078,0006,0F00,321F,4B5A,735A,7C94,7DA4
 
#14 ·
FWIW, the curve I ended up with was this:

Code:
// KUEHLMITTELTEMP_ANZEIGEWI
PARZUWEISUNG_PSW1 : 003D (00,00,00,1F,00,53,00,62,00,94,00,A4) // kennlinie_01
Code:
// KUEHLMITTELTEMP_WERT
PARZUWEISUNG_PSW1 : 003D (00,0F,00,41,00,59,00,61,00,73,00,7D) // kennlinie_01
PARZUWEISUNG_PSW1 : 003E (00,0F,00,41,00,59,00,61,00,73,00,7D) // kennlinie_02
Instead of two points at 90 degrees*(needle), I've one at 83 and one at 97. This puts 81C at about the mark just to the left of center, and 103C around the mark to the right of center, with noon being 93C. The needle moves around quite a bit during normal operation, but once it's gone past the initial marks you know you're in trouble.
 
#15 ·
On mine this is the stock code in PA
06 0F 32 4B 73 7D 8F 00 10 2D 2D

This is what Im running now
06 0F 41 5A 64 6E 78 00 10 2D 2D

Both of which do not quite fit into the easy program transcriber, since its a different size and such
 
Save
#17 · (Edited)
I am using NCS expert, not PaSoft, on my FL 03/02 330i. Only "Coolant Temperature Gauge Angle" shows up in the trace file for module Daten file KMB_E46.C06. I had to add (KUEHLMITTELTEMP_WERT) - coolant temperature value with modified "kinnlinie" as per pre-facelift instructions to get everything to work which it did.
 
#19 ·
How to edit temperature gauge buffer in E38

I successfully changed the temperature gauge buffer zone in my E38.

Coolant gauge characteristic curve started at 0x0f4 (there's a screenshot in my earlier post):

Code:
27 [B]0f[/B] 5e [B]32[/B] c9 [B][U]4b[/U][/B] c9 [B][U]73[/U][/B] 36 [B]78[/B] 6a [B]7d[/B]
.

Bold underlined ones are the start and end of buffer: hex 4b = 75 °C and hex 73 = 115 °C. Other bold values should be temperature values of other points, but I didn't touch them.

My modified line is now

Code:
27 0f 5e 32 c9 [B][U]64[/U][/B] c9 [B][U]6e[/U][/B] 36 78 6a 7d
which makes buffer zone 100...110 °C.
 
#20 ·
Just did this mod on my 03 330i ZHP. Love the more accurate temp gauge! Here is my code, i ended up going with the "Revision 2" in the original post, and to me this is better than the buffer range..
 

Attachments

Save
#22 ·
Okay, I picked up a 2005 330Ci convertible a week ago. Using the OBD Fusion app, I noticed my coolant temp was maxing at 75 C, even though the temperature gauge was at 12:00. This freaked me out, so the first thing I did was a cooling system overhaul. The car is right at 100k miles, so this was an overdue PM. Drive belts were ready to shred, thermostat was in soft fail mode, and who knows what else was ready to go, expansion tank maybe.

Anyway, I decided to take the buffer out of my temperature gauge and came back to this thread for a refresher. Maddeningly, I could not find the code at 0x0f0. This is what I have on that line:

Image


After a lot of searching, I found the code string on line 0x340, but not at the beginning, and it spilled over onto 0x350:

Image


Just thought I'd post this to help others who may be having difficulty finding this string.

It would be nice if someone had an explanation of every function that is controlled by this EEPROM.
 
Save
#23 · (Edited)
Another shout out to Mr. Philadelphia, TerraPhantm and SilberVogle for this IKE EEPROM code. I just had a soft fail thermostat on my X5 and with the ridiculous 40C buffer I never knew I had a problem until the ambient temps here in Charlotte dropped. I have no idea how long I have been running under the desired operating temperature, probably all year. :facepalm:

Anyway, I found the E53 uses 2 strings of code and both must be changed as posted earlier in this thread. Using the hex generator and some common sense temperature values, I programmed my X5 temp gauge to see what the real story is under the hood. Thanks again guys! :thumbsup:

Image


Image
 
#25 ·
I just attempted this on our 05 325xi (m54B25) and when reading the EEPROM, line 0x0f0 is entirely different. For some reason, i always have issues when trying to search the forums using Tapatalk, couldn't even find this thread to update this post after realizing my problem was already covered twice in this thread lol.
So, if you have 0x0F0 : 7F 7F 7F FF 0A 01 96 23 12 19 64 19 03 F5 00 62
then leave it alone and skip down to 0x340 and 0x350 and change it to
0x340:03 05 7D 83 00 8A 92 E1 02 00 C8 00 8C 06 0F 41
0x350:5A 64 6E 73
00 10 2D 2D 4A 52 00 17 2E 42 5E A2

After a test drive I can confirm it does work correctly. Using the hidden menu obc, the temps are spot on.
 
Status
Not open for further replies.
You have insufficient privileges to reply here.