E46 Fanatics Forum banner
Status
Not open for further replies.

DIY: Changing Temperature Gauge Buffer Range with PA Soft 1.4

299K views 409 replies 116 participants last post by  02 Gray in Blue 
#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.



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:



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.
 
See less See more
2
#3 · (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?
 
#4 · (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
 
#14 ·
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?
 
#15 ·
Interesting write up. Could you program the buffer out entirely, and have the needle respond to temperature, with 100C being at 90 degrees? In other words, why do we need the buffer?
 
#16 · (Edited)
It would appear that you could. You would set both values for the buffer to 90ºC, which Terraphantm mentioned in his first set of instructions. One benefit I see for keeping the upper limit of the buffer range at 100ºC is that you have a better index of the gauge for the upper range, which would then also be reserved for instances when you really need to pay attention to it (T>100ºC).

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?
Awesome.
0x78 = 120ºC, your new maximum.

Thanks for pointing out the discrepancy, probably a typo. in Terraphantm's post. I'll edit my original post to reflect this.
 
#20 ·
Thanks. Great info guys! :thumbsup:
 
#25 ·
If it's correctly reprogrammed, then you most likely have a soft failing thermostat. Have you noticed a marked decrease in fuel efficiency? Even if you were in 3rd or 4th gear the whole time, the needle would hover close to the 2nd hash mark (75ºC). Definitely check out the link to jfoj's excellent thread in my original post.
 
#30 · (Edited)
Has this been demonstrated? I could have sworn most people who do the M3 cluster swap end up with a non functional oil temp gauge.

I tried going the other way around (oil temp -> mpg) on my M3 cluster just to see if I can. There is one parameter that sounds like it would switch between the two functions, but it didn't work. It turned off the oil temp lights, but the gauge still worked like an oil temp gauge. Might be worth just trying to flash an entire EEPROM from an M3 cluster to a non-M cluster (or vice versa).
 
#44 ·
I've still yet to do this. Excellent work, people. Especially mah boi Terra. Love the graphic. Sorry if this has been discussed before, but anyway we can get the car to beep at us when the temp goes above 101c or something like that? Like when it gets cold outside. An audible warning would be sweet.
 
#45 ·
Unfortunately there doesn't appear to be a built in function for that. One thing that you might be able to do however is wire up a piezo to the red LED on the end of the temperature gauge. That way it should at least beep when it gets there (and with the revised temperature of 115C, that should give you time to shut down)
 
Status
Not open for further replies.
You have insufficient privileges to reply here.
Top