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º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:
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:
Code:
Factory 0x0F0: 0F 00 32 1F 4B 5A 73 5A 7C 94 7D A4 06 0E 1E 0F
Revision #1 0x0F0: 0F 00 41 1F 5A 5A 64 5A 6E 94 73 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:
Factory 0x0F0: 0F 00 32 1F 4B 5A 73 5A 7C 94 7D A4 06 0E 1E 0F
Revision #2 0x0F0: 0F 00 41 1F 5F 5A 69 7C 73 94 78 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 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.