PDA

View Full Version : Speedometer reads high by design. How to fix it!



Gene Poole
11-16-2010, 01:04 AM
I remember a few different threads on this or other BMW forums about how BMW deliberately skews the speedo reading a a couple of MPH high because of some stupid law in the US (or possibly elsewhere). With the digital speed mod floating around, I noticed that this (at least on my car) reads pretty much spot-on with my GPS. I found a setting in NCS Expert for the KOMBI module: BC_V_KORREKTUR, which apparently controls this skew. Set it to nicht_aktiv in NCS expert and your speedo should read a lot closer to actual speed.

rondo
11-16-2010, 01:15 AM
Hi good to find new setting :D

TerraPhantm
11-16-2010, 01:57 AM
It's actually a law in europe, not the US. You'll find that most American cars have dead-accurate speedometers, while european cars are usually off by 5% or so. Apparently in Germany, the manufacturer has to take into account the possibility that the consumer will install oversized tires. Stupid law IMO, if someone screws with his car, then he should be responsible for it.

So that "BC_V_KORREKTUR" that affects the analog gauges? I always assumed that only effected the digital reading. If it does analog, that's very cool!

EuroSportChi69
11-16-2010, 02:07 AM
It's actually a law in europe, not the US. You'll find that most American cars have dead-accurate speedometers, while european cars are usually off by 5% or so. Apparently in Germany, the manufacturer has to take into account the possibility that the consumer will install oversized tires. Stupid law IMO, if someone screws with his car, then he should be responsible for it.

So that "BC_V_KORREKTUR" that affects the analog gauges? I always assumed that only effected the digital reading. If it does analog, that's very cool!

In other cars, if you have different size wheels/tires then you can take it to the dealer to have it changed so the speed is accurate.
As with other cars, is it the same for the BMW?

TerraPhantm
11-16-2010, 02:15 AM
In other cars, if you have different size wheels/tires then you can take it to the dealer to have it changed so the speed is accurate.
As with other cars, is it the same for the BMW?

I've never actually seen a way to officially edit the speedometer readings through BMW's own tools... With the assistance of revtor's new NCS Dummy, this shouldn't be hard.

Gene Poole
11-16-2010, 08:42 AM
It's actually a law in europe, not the US. You'll find that most American cars have dead-accurate speedometers, while european cars are usually off by 5% or so. Apparently in Germany, the manufacturer has to take into account the possibility that the consumer will install oversized tires. Stupid law IMO, if someone screws with his car, then he should be responsible for it.

So that "BC_V_KORREKTUR" that affects the analog gauges? I always assumed that only effected the digital reading. If it does analog, that's very cool!

BC_DIGITAL_V_KORREKTUR is for the digital readout (I'm assuming; I haven't changed it to see).

TerraPhantm
11-16-2010, 01:32 PM
Ah. I dont have the "digital_v" option on my e46, so thats why I assumed. definitely going to play with it later

Gene Poole
11-16-2010, 02:02 PM
Guess I should have mentioned that his is an '06 330i E90.

strobeyprobey
11-17-2010, 11:46 AM
Have any of you tried changing any of the CBS display options? I saw a bunch of CBS entires in the trace file in my R56 (which is very similar to the E90 I believe).

Also as I mentioned before, my R56 came with the speed display option from the factory, but the R56 also comes with digital instant-read MPG reading in the "list" of displayable information (average speed, average MPG, instant mpg, miles to empty, speed). So I would image you guys would be able to turn that on, too.

Are there any other information pieces that can be enabled?

NikolaiD
11-23-2010, 12:26 PM
Great job, that's one of the few options in the KMB module that I don't have translated and it's awesome.
Now I just wish I could figure out the shift lights...

NikolaiD
11-25-2010, 04:19 PM
Tried BC_V_KORREKTUR on my car today, it made absolutely no difference.

I will try it again on one more before writing it off...

NikolaiD
12-20-2010, 02:01 PM
OK, so I still don't know what BC_V_KORREKTUR does, but I did figure out how to get the speedometer to read a bit more accurate.
At 100km/h it used to read about 108, and now it reads about 103.
There are four lines in the AKMB module:
K_ZAHL_TACHO
K_ZAHL_TACHO_KOMPL
K_ZAHL_WEG
K_ZAHL_WEG_KOMPL
The first two are for the speedometer, the 2nd two for the odometer, I only changed the first two. These lines are marked in impulse per kilometer and every 10 impulses are one tire rotation. So, mine was defaulted at 4846, which means that the cluster is expecting 484.6 tire rotations per kilometer.
The other option I could change it to was 4961, which means that it'd now read lower because it's expecting more turns per kilometer.
Every model seems to have different options, I got these from NCSDummy, you can check for what other options are on your car:
For E46 M3 options are 4846 and 4961.
For E46 non-M options are: 4812, 4846 and 4961.
The rest of it comes down to tire circumference. I'll post up my math and exact numbers when I get a chance.

Gene Poole
12-20-2010, 03:19 PM
Yeah, I may have been mistaken on that initially. I've tried BC_V_KORREKTUR both ways a few different times now and gave it more than just an around-the-block with the GPS and I don't notice a significant difference either way.

Interesting find on the K_ZAHL_TACHO though. Mine are in KOMBI module and designated wert_01 to wert_05 though. Perhaps these are presets (mine is set to wert_02). I'll try some different values and see what I get.

kreller
12-29-2010, 10:01 AM
Mine is set to 4961 and 4912, so i belive that the odometer count more km than it actually runs. I tried to change it to 4961 but it reports an error.

TerraPhantm
01-14-2011, 08:00 PM
OK, so I still don't know what BC_V_KORREKTUR does, but I did figure out how to get the speedometer to read a bit more accurate.
At 100km/h it used to read about 108, and now it reads about 103.
There are four lines in the AKMB module:
K_ZAHL_TACHO
K_ZAHL_TACHO_KOMPL
K_ZAHL_WEG
K_ZAHL_WEG_KOMPL
The first two are for the speedometer, the 2nd two for the odometer, I only changed the first two. These lines are marked in impulse per kilometer and every 10 impulses are one tire rotation. So, mine was defaulted at 4846, which means that the cluster is expecting 484.6 tire rotations per kilometer.
The other option I could change it to was 4961, which means that it'd now read lower because it's expecting more turns per kilometer.
Every model seems to have different options, I got these from NCSDummy, you can check for what other options are on your car:
For E46 M3 options are 4846 and 4961.
For E46 non-M options are: 4812, 4846 and 4961.
The rest of it comes down to tire circumference. I'll post up my math and exact numbers when I get a chance.
Mathematically, 4846 would be spot on, so I'm wondering if there's another function that raises the value by a certain factor.

kkamakasi
03-07-2011, 11:07 PM
Mathematically, 4846 would be spot on, so I'm wondering if there's another function that raises the value by a certain factor.

Did you get to the bottom of this?

TerraPhantm
03-07-2011, 11:34 PM
Did you get to the bottom of this?

I never found one... there might be something in the nettodata, but guessing which value it would be is just about impossible.

KB120D
03-08-2011, 12:35 AM
Oversized tires? Yes, ive done it also in Germay! We have TÜV here, this instituiton is testing the car. So ive changed tires, then testing by TÜV. Driving with me together with !!gps!!. He was comparing GPS speed with car gauges. And you cannot put any rims to your car, a was writing to bmw to get an piece of paper which says one of my rim can carry 650kg.... ;-)

NikolaiD
03-08-2011, 02:33 PM
I haven't looked for any other options yet, I'm just happy there's an improvement.
I have an Escort 9500ix detector on the dashboard which has GPS speed on the display anyway, so it hasn't bothered me enough.

The one thing that does bother me however is that if you're reading speed with INPA from the ECU, it's the same as GPS speed (less than 1% difference), but it's not the same as the instrument cluster... There has to be a way to change the options...

tirlibibi
03-08-2011, 03:05 PM
I do not have a BMW, in fact i got one, for girls (i'm a boy), a mini coopers :p
The electronics modules are almost the same, i do not remember in which one but i got this :
ODOMETER_OFFSET
wert_01

kkamakasi
03-08-2011, 10:38 PM
I tried changing these:

K_ZAHL_TACHO
K_ZAHL_TACHO_KOMPL
K_ZAHL_WEG
K_ZAHL_WEG_KOMPL

to 4961 imp/km and I didn't see any difference in the speedometer reading.

TerraPhantm
03-08-2011, 11:29 PM
I tried changing these:

K_ZAHL_TACHO
K_ZAHL_TACHO_KOMPL
K_ZAHL_WEG
K_ZAHL_WEG_KOMPL

to 4961 imp/km and I didn't see any difference in the speedometer reading.
There's definitely a difference... the settings are there because the M3 CSL comes with smaller diameter tires than the standard M3. Just go to 3000 RPM in 6th gear and check the speed with each setting.

kkamakasi
03-08-2011, 11:32 PM
So technically, setting those 4 parameters to 4961 imp/km should get it closer to the correct mph in both the speedometer and the odometer, right?

TerraPhantm
03-08-2011, 11:38 PM
So technically, setting those 4 parameters to 4961 imp/km should get it closer to the correct mph in both the speedometer and the odometer, right?
I don't think the odometer was really off though

kkamakasi
03-08-2011, 11:45 PM
I guess I'll have to retry coding the two values on a highway. I tried it around my house doing 35 mph.. lol

TerraPhantm
03-09-2011, 12:07 AM
Hmm, so I was double checking my math, and now I'm not sure what to think. Going purely by calculations this is what I get... let's use 255/40ZR18 as our example stock size:

(255 * .4)*2 + (18*25.4) = 661.2 <--- overall diameter in millimeters
* 3.14 = 2077 = circumference in millimeters
/ 1,000,000 = .002077 = circumference in kilimoters

Reciprocal = 481.4 revolutions per km

With that number, it would seem the value BMW picked is correct.

However, let's take the specifications of an actual tire. Let's say bridgestone S-04 pole position for example.

They say their 255/40ZR18 tire will do 801 revolutions per mile.

801 rev/mile * (1 mile/1.61 km) = 497.5 revolutions per km. That would make it seem like the other value is the correct one.

Idk which one to go by. I guess the other one has proven to be more accurate by IRL, so we should go by that?

kkamakasi
03-09-2011, 12:18 AM
If anything, it's going to be tire manufacturer's specs that I'd go with since that is the actual diameter to calculate with.

IcemanBHE
03-09-2011, 01:13 AM
Nothing beats a cloth tape measure. :)

TerraPhantm
03-15-2011, 04:44 PM
If anything, it's going to be tire manufacturer's specs that I'd go with since that is the actual diameter to calculate with.

Yea, but BMW did some funky things with the math. I decided to use the non-M values for my speedometer and odometer since my new tire are slightly smaller diameter than stock (275/35ZR18). The speedometer is almost spot-on accurate (Upto 100mph, the divergence between GPS and speedometer is < 1mph), but the odometer seems to be off by nearly somewhere around 5%, even though the tire is *not* 5% larger than the non-M tire.

I guess best I can do is use non-M speedometer and M odometer readings. My odometer will read *slightly* fast, but it should be close. I can tweak the calibration in PASoft once I have an idea of which direction it needs to be adjusted in.

Edit: I took a look at the speedometer and odometer calibration values from an E39 M5 (I changed my tire sizes to 245/40 18 and 275/35 18, which happens to be the E39 M5 sizes), and now I'm really confused.

BMW has the speedometer value listed at "4846_imp/km" and the odo listed at "4797_imp/km" - just like the stock E46 M3 values (which has slightly larger diameter tires). Are we certain there are exactly 10 impulses per rotation? If so, then why did BMW use the same calibration data between two cars that have different diameter tires? Maybe I didn't manipulate NCS Expert properly when gathering that data. Does anyone here have a real E39 M5? If so, can you read out the FSW_PSW.TRC from your car?

For now I'm using the E46 non-M diameter for the speedometer (4961 iirc), and I've adjusted the odometer counter to be exactly in between the non-M and M values (via PASoft). So far this seems to be pretty accurate.

joako
03-17-2011, 05:44 AM
Hmm, so I was double checking my math, and now I'm not sure what to think. Going purely by calculations this is what I get... let's use 255/40ZR18 as our example stock size:

(255 * .4)*2 + (18*25.4) = 661.2 <--- overall diameter in millimeters
* 3.14 = 2077 = circumference in millimeters
/ 1,000,000 = .002077 = circumference in kilimoters

Reciprocal = 481.4 revolutions per km

With that number, it would seem the value BMW picked is correct.



It is correct. That is why you can read the correct speed from digital readings. It is the actual instruments who intentionally display the speed some 5% higher than it actually is. All German cars do this.

TerraPhantm
03-17-2011, 11:11 AM
It is correct. That is why you can read the correct speed from digital readings. It is the actual instruments who intentionally display the speed some 5% higher than it actually is. All German cars do this.

It seems to be worse on the m3 than most other BMWs. My old 330i was always within 2mph of GPS upto 100 (and I ran stock tire sizes). At stock, my M3 read 80 when I was going 72. I've tried looking for a value that effects the needle calibration, but couldn't find one

TerraPhantm
03-23-2011, 02:17 PM
Well the cluster definitely knows how fast it's supposed to be going - the analog speedometer function is off relative to the digital by almost exactly 7.5% (which just happens to be the amount one needs to increase the value by to get the analog to be accurate).

There has to be a function that multiplies the speedo readings..

Alpejohn
03-28-2011, 01:37 PM
Hi,

I also have this "problem" on my 530d 2003 (E39)!

When the speedometer shows 60 km/h, im actually going 50 km/h. But the digital speedometer in the OBC shows exactly 50 km/h, and the same as the GPS shows.

The weird thing is that I used 235/45-17" tires first, then going to 235/35-19" front and 265/30-19" rear, but it still reads the same. Even with my winter tires thats 205/55-16" it shows exactly the same.. (Maybe all are the same size, i dont know:rolleyes)

I read out the speedometer, and i think my showed 4846...

I really would like it to be more acurate! :mad

TerraPhantm
03-28-2011, 10:56 PM
Okay so I realized the addresses listed in the NCS Dummy generated file correspond exactly to the KMB's EEPROM, so I decided to take a look at the EEPROM I dumped via PASoft. There are a couple values with names that sound promising.

"OFFSET_GESAMTWEGSRECKE" or "Offset Total Distance" is at address 7F. In my EEPROM, that address has a value of 09, and according to NCS Dummy, no other parameter shares that address.


TACHO_VOR_KENNLINIE
and TACHO_KENNLINIE

Translates to "Speedometer true Curve" and "Speedometer Curve" I think. NCS Dummy only lists the address for these values, but seems to suggest the parameter isn't configurable.

The first one is at address 339, and according to NCS Dummy it's a 7-byte value. The 7-bytes at offset 339 in my eeprom are 03 00 2D C8 00 31 D6
The next one is at address 340 and is 8 bytes. Value = 03 05 96 9E 00 8A 92 17

Not really sure what it means

"DREHZAL_KENNLINIE" translate to "RPM Ratio" is at address 32E. NCS Dummy indicates this an address that the nettodata can't configure. It's an 11-byte value.
05 01 B2 B2 B2 B2 00 78 78 78 78

I'm not sure what the hex values actually represent.

I think one of the "TACHO_KENNLINIE" values will hold the trick, but I'm not sure what the effects of changing the number would be. And I'm not sure if google translate is giving me a good understanding of those values. Anyone have any experience with this kind of thing?

TerraPhantm
08-25-2011, 07:33 PM
Okay I think I made some progress in understanding the various "kennlinie" values. If you look in NCS Dummy, you'll see these following keywords, addresses, and address lengths.



DREHZAHL_KENNLINIE 0000032E (0B)
TACHO_VOR_KENNLINIE 00000339 (07)
TACHO_KENNLINIE 00000340 (08)
KVA_KENNLINIE 00000348 (05)
KMT_KENNLINIE 0000034D (0B)
TNK_KENNLINIE 0000035A (05)

E46 M3:
05 01 B2 B2 B2 B2 00 78 78 78 78 03 00 2D C8 00 31 D6 03 05 96 9E 00 8A 92 17 02 32 96 00 8C 06 0F 3C 55 5F 69 73 00 10 2D 2D 4A 52 00 17 2E 42 5E

E46 non-M:
05 01 8A 8A 8A 8A 00 78 78 78 78 03 00 23 C8 00 25 CC 03 05 7D 83 00 8A 92 E1 02 00 C8 00 8C 06 0F 32 4B 73 7D 8F 00 10 2D 2D 4A 52 00 17 2E 42 5E
I left the two bytes "4A52" uncolored since "KMT_KENNLINIE" is supposed to be from 0x34D to 0x358, and "TNK_KENNLINIE" doesn't start 'tli 0x35A. Anyway these values don't show up in the FSW_PSW or NETTODATA, but they're in the actual cluster EEPROM that you can read from PASoft.

I didn't understand *what* the values actually were in the post above, but I've made some progress there by comparing M and non-M Clusters. I'm not really concerned with "TNK_KENNLINIE" (gas tank gauge), KVA_KENNLINIE (mpg/oil temp gauge), and KMT_KENNLINIE (coolant temp gauge). So let's take a look at the ones that are left.

DREHZAHL_KENNLINIE (Tachometer Characteristics)


E46 M3: 05 01 B2 B2 B2 B2 00 78787878
Non-M: 05 01 8A 8A 8A 8A 00 78787878
Bolded are the values that differ between the two. 0xB2 in decimal = 178. 0xA in decimal 138. At first glance they look like random values. But let's multiply them by 50; 178*50 = 8900 and 138*50 = 6900. M tach limit = 9000 and non-M tach limit = 7000. So if we wanted to make the maximal value 10000, theoretically we would take 9900, divide by 50, and convert to hex (C6). I haven't tested this, but it makes sense.

TACHO_VOR_KENNLINIE (Speedometer ??? Characteristics)


E46 M3: 03 00 2D C8 00 31 D6
Non-M: 03 00 23 C8 00 25 CC
Honestly, I haven't been able to make sense of this one, so I just bolded the different values. I have a feeling that this one controls the error factor, but maybe not. Maybe someone else can see a pattern that I don't see?

TACHO_KENNLINIE (Speedometer Characteristics)


E46 M3: 03 05 96 9E 00 8A 92 17
Non-M: 03 05 7D 83 00 8A 92 E1

Bolded are the values that differ and seem to be meaningful. Italicized is a differing values that I can't make sense of. The rest of the values are the same. 0x96 * 2 -> decimal = 300 (M3 speedo goes to 300km/h). 9e*2 -> decimal = 316 (which is approximately 5% greater than 300). Likewise for the non-M 7D * 2 = 0d250; 83 * 2 = 0d262. So that's pretty easy. For the values that are constant - this is a guess, but I believe they represent the speedometer "offset" and the maximum angle - I'm basing these guesses based on the type of values that clusters from different BMWs have. (They have actual lines labeled tacho_offset and tacho_winkel_endwerte)

I suspect 17 and E1 are checksums of some sort.

ejaz3739
08-26-2011, 05:46 AM
Some awesome info here terraphantm.

TerraPhantm
09-01-2011, 02:10 AM
I was digging through Tool32 and found this


apiJob("KOMBI46R","tacho_endwert_lesen","","")

Satz : 0
OBJECT = kombi46r
SAETZE = 1
JOBNAME = tacho_endwert_lesen
VARIANTE = KOMBI46R
JOBSTATUS =
UBATTCURRENT = 1
UBATTHISTORY = 1
IGNITIONCURRENT = 1
IGNITIONHISTORY = 1
Satz : 1
JOB_STATUS = OKAY
TACHO_ENDWERT_CODE = 316
SG_ANTWORT = 6 Bytes
0000 : 80 06 A0 96 9E 2E €.*–ž.


"Tacho_Endwert_Code" being 316 confirms my suspicion that it's that 9E value that controls the speedometer offset (0x9E * 2 = 0x13C = 316)... I'm not quite sure where the rest of the values came from though, since those are definitely not the same numbers that are in the "TACHO_KENNLINIE" section of the EEPROM.


And here's the Job Info

name : TACHO_ENDWERT_LESEN
comment : Auslesen des Tacho-Endausschlags aus dem EEPROM

result : JOB_STATUS
type : string
comment : Status der Kommunikation: OKAY, ERROR_ECU_NACK...

result : TACHO_ENDWERT_CODE
type : string
comment : gibt den Codierwert zum Tachoendwert als String aus

result : SG_ANTWORT
type : data
comment : Antworttelegramm vom SG

TerraPhantm
09-02-2011, 05:13 AM
Okay, figured out how to calculate the checksum for the Tacho_Kennlinie values... let's take the stock E46 M3 value



01 02 03 04 05 06 07 08
------------------------
03 05 96 9E 00 8A 92 17

The checksum is block 8. To calculate it you do just XOR everything together and add 1 to the final result. That's your checksum.
03 XOR 05 = 06
06 XOR 96 = 90
90 XOR 9E = 0E
0E XOR 00 = 0E
0E XOR 8A = 84
84 XOR 92 = 16
16 + 1 = 17

You'll find the procedure holds true for the non-M values too. Of course it's annoying to do it by hand all the time, so I just let excel do the calculations for me

I tested this on my own car with some custom values; if you calculate the checksum wrong, your cluster's display will just say "ppppp" indicating a "corrupt" eeprom. If you calculate it properly, it'll start up properly.

As for what the bytes each represent:
01: I have no clue
02: Starting value (set to 10km/h since that's where the needle rests when stopped)
03: End value
04: End value with error (I'm not sure which one the cluster uses for the needle position... I set both to 96 and am going to compare w/ GPS)
05: Starting angle (I think - when I accidentally set it to 96, my needle rested way past the end)
06 and 07: Possibly ending angle
08: Checksum

there you guys go. I'm going to compare my indicated speed w/ GPS speed to see if the error is gone/reduced over the next coming days. Those of you who have PASoft can probably use the above information to experiment too.


I haven't tried editing it since I don't know what the values represent, but "TACHO_VOR_KENNLINIE" seems to have a similar checksum calculation, except you subtract one at the end instead.

03 00 2D C8 00 31 D6

03 XOR 00 = 03
03 XOR 2D = 2E
2E XOR C8 = E6
E6 XOR 00 = E6
E6 XOR 31 = D7
D7 - 1 = D6

03 00 23 C8 00 25 CC

03 XOR 00 = 03
03 XOR 2E = 20
20 XOR C8 = E8
E8 XOR 00 = E8
E8 XOR 25 = CD
CD - 1 = CC

joako
09-03-2011, 05:48 PM
So I was going to experiment with this, but the radar speed sign that has been across the street from my home all week was removed this morning :(

TerraPhantm
09-03-2011, 11:23 PM
So I was going to experiment with this, but the radar speed sign that has been across the street from my home all week was removed this morning :(

damn, lol.

Well I've been doing some experimenting, and for the "Tacho_Kennlinnie" values, this is what I've figured out
byte 1 = ??? - no idea.
byte 2 = Starting speed (10km/h in the case of all E46s)
byte 3 = Ending speed on scale
Byte 4 = Ending speed + 5% (If you've ever watched an E46 vid going for a top-speed run, the needle goes a bit past the scale. I think this value represents the value that would be in that non-printed region)
Byte 5 = Starting Angle
Byte 6 = Ending Angle
Byte 7 = Ending Angle + 5% (I think this parameter is used as the maximum "allowed" angle; if it goes past this angle, the needle would hit the trim)

Well I've been experimenting with mine... My speedometer seemed to be off by ~5%, so I decided to set the scale 5% higher. So I changed mine from 03 05 96 9E 00 8A 92 17 to 03 05 9E A6 00 8A 92 27 -- basically I changed the scale from 300km/h to 316km/h.

Here's what I don't get though - I set the "starting angle" to 8A just to see how accurate BMW's servos are. The needle shot right to the 300km/h position - not even a little bit off. So you would think setting the original data which basically says "Angle 0 = 10km/h; Angle 8A = 300km/h; Angle 92 = 316km/h" would be accurate... but that's not the case, I had to fool the cluster into thinking that the speedometer scale goes upto 316km/h at angle 8A. My suspicion is that the "Tacho_Vor_Kennlinnie" parameter somehow fudges it a bit and adds 5% to the value... but I cannot for the life of me figure out what each of those different bytes do. Or maybe that first byte ("03") bumps everything up by 6% or something (I say 6% because every other value in this parameter is doubled before being used). I don't know.


The nice thing correcting the error this way is that NCS Expert, DIS, Progman, etc... can't edit this section of the EEPROM. So my speedometer will remain corrected even if I recode my cluster to defaults and forget to restore my various custom settings. Also, the digital and analog speedometer's agree. Before the digital one read quite a bit lower, which always bugged me.

NikolaiD
09-06-2011, 10:46 AM
Very nice progress, gives me something to do in my free time now. :)

TerraPhantm
09-07-2011, 01:22 AM
I haven't tested this, but I think I have a minor correction to make about the checksum calculation algorithm

I think rather than adding 1, you have to add or subtract 1 based on whether the XORs is even or odd. If even, add 1. If odd, subtract 1.

Or on a binary level, you can think of it as negating the very first bit. (If 1, make 0; if 0 make 1)



Very nice progress, gives me something to do in my free time now. :)

Thanks! If you figure out anything about those "TACHO_VOR_KENNLINIE" values, make sure to post here. I did notice in early E85/E83 clusters, there's a parameter called "TACHO_VOREILENDE_GESCHW"; I suspect the "VOR" is short for "VORELENDE" which according to google means "hasty" but I'm sure there's some other use for that term... searching google with a search parameter of "TACHO VORLEINDE" got me a few hits of german forums and websites discussing speedometer errors of various cars; including the Prius

James39
09-22-2011, 12:09 PM
Subscribing to this one! -- Mine is off by about 7%

I could teach myself to compensate, but I know I'll get in my wife's car and forget that 80 != 75.

I haven't coded anything outside of NCSExpert. Which software do you use to do this? Is the procedure similar to NCSExpert?

Reefin Dude
07-05-2012, 07:53 PM
OK, so I still don't know what BC_V_KORREKTUR does, but I did figure out how to get the speedometer to read a bit more accurate.
At 100km/h it used to read about 108, and now it reads about 103.
There are four lines in the AKMB module:
K_ZAHL_TACHO
K_ZAHL_TACHO_KOMPL
K_ZAHL_WEG
K_ZAHL_WEG_KOMPL
The first two are for the speedometer, the 2nd two for the odometer, I only changed the first two. These lines are marked in impulse per kilometer and every 10 impulses are one tire rotation. So, mine was defaulted at 4846, which means that the cluster is expecting 484.6 tire rotations per kilometer.
The other option I could change it to was 4961, which means that it'd now read lower because it's expecting more turns per kilometer.
Every model seems to have different options, I got these from NCSDummy, you can check for what other options are on your car:
For E46 M3 options are 4846 and 4961.
For E46 non-M options are: 4812, 4846 and 4961.
The rest of it comes down to tire circumference. I'll post up my math and exact numbers when I get a chance.

i just put some oversized tires on my touring. i am trying to get the odometer and speedometer corrected. i am not concerned about the offset for the analog speedometer. i have gotten used to that.

i have found the value needed after calculating the revs per Km. can i just enter the new value in NCS Expert, or does it need to be converted to hex?

current:

K_ZAHL_TACHO
4812_imp/km
K_ZAHL_TACHO_KOMPL
4812_imp/km

K_ZAHL_WEG
4764_imp/km
K_ZAHL_WEG_KOMPL
4764_imp/km

can i just replace these values within my text editor with 4636? i am new to this and am not sure exactly what needs hex coding and what can just be replaced with real world data.

once i get this settled i could play around with the analog offset if people are still interested.

TerraPhantm- in my output from the IKE i do not have a TACHO_KENNLINIE, but i do have a TACHO_AB_DAEMPFUNG and TACHO_AUF_DAEMPFUNG. this also seems to translate to buffer. with auf translating to up and down. my values read:

TACHO_AB_DAEMPFUNG
wert_01

TACHO_AUF_DAEMPFUNG
wert_01

i am not sure if that helps you in any way, but that is what i have.

Thank you all for putting the time in to figure this out and help the community.

G~

Reefin Dude
07-07-2012, 12:02 PM
an update.

i just changed the values as listed above. i was not able to change them using Revtor's profile. i had to use the expert profile. when using Revtor's i kept getting a COAPI-1142:PSW faulty error. with the value i changed being the cause. when using the Expert profile everything went smoothly.

after the change the vehicle is significantly closer to actual speed. i was actually showing slower than actual by about 2mph before the change with my oversized tires. i am now showing with 1mph of actual, with the about 1mph being faster than showing on the analog. legal or properly. i was just using my iPhone for comparison. not the best, but i drove around for about a half an hour to get a good feel for how close it was. i was on surface streets and highway. it was very close the entire time.

i did not change any of the DAEMPFUNG values. i doubt i will since i am now really close to showing actual speed on the analog. i did not check the value with the high OBC display.

this was all done on my 02 E39 touring.

G~

Alpejohn
07-07-2012, 01:17 PM
That sounds great!

How did you calculate the new number? :)

I believe that i can change this in the IKE with my bmw scanner 1.4.0 also.. :) Will deffinetly try it! :)

Regards
Fredrik

Sent from my GT-I9100 using Tapatalk 2

Reefin Dude
07-07-2012, 01:44 PM
i used the same calculations that TerraPhantm used in post #10. i was able to find the diameter of the tire from the tire manufacturers website for my particular size.

my software computer has everything on it including Scanner 1.4. i was not able to find it when i fired it up, but then again i am very new to all of this. whenever i use the Scanner i just get a bunch of hexadecimal outputs. i must be doing something wrong i guess. i do not get understandable values to change.

G~

Alpejohn
07-07-2012, 01:47 PM
I dont think it shows up in every IKE, but in mine it does. :)

I will have a look at the post and try it! :)

Sent from my GT-I9100 using Tapatalk 2

James39
07-07-2012, 02:38 PM
Thanks for the update!!!

Reefin Dude
07-08-2012, 07:49 PM
another update. it seemed like it did work, but now it seems to have gone back to the way it was. when i get back to my computer i am going to pull the data from the IKE to see what value is in there. i am think that it reverted back somehow. :(

if it is not these values, what else could it be? could the values need to be changed somewhere else? is there a way to search through all of the modules to see where this value shows up?

G~

Reefin Dude
07-11-2012, 03:25 PM
another update. :D

i looked back over my NCS Expert output from the IKE. the values did not change. i played around some more with NCS Expert and found that i can not just change the values in the output file, then code them to the car using Expert. with either the Revtor or Expert profiles. i am not exactly sure how Expert reads/writes to the modules, but it seems that the exact info is needed to change a value if it is more involved, then making something active or not active.

i then fired up Scanner 1.4. after flopping around in there for a bit and getting used to it i found the values in the coding section, kind of hiding in the lower right of the screen, but there they were. Scanner was able to edit the value. i then turned off the car. waited, then checked again. sure enough the value stayed. i also noticed that there is a value above these values that i may play with later to see if it adjusts the "over reading" of the analog speed.

this is where it gets a bit interesting. i then fired up NCS Expert again to check the values to see if they showed up properly in that. the values and the descriptions were not there at all now. they had vanished on the IKE output. i am guessing that if the values are not understood by the profile, then the profile can not view/understand it.

i did another test run and the speedometer seems very accurate again. i will test over the next few days to make sure the values stay. then i will try adjusting the value that is right next to the wheel speed values to see if it affects the "over speed" value.

G~

lruygrok
09-12-2012, 03:41 AM
Hi !

My name is Len, from the netherlands ...
I have a 1999 E46 316 and i like to add a M3 cluster to it.
I bought a 2000 cluster from ebay. (pre 2003)
I am an electronical engeneer, and i know about programming..
For what i read "TerraPhantm" i believe bmwscanner 1.4 gives me acces to the eeprom inside my cluster.
Can i change vin and milage with it ?
Can i i change some values to activate oil temperature leds ??

Please can somebody help me ? I am willing to buy software/hardware what is needed to get the job done !

If you can help me, i will post all progress on the forum ! tnx !

Alpejohn
09-12-2012, 03:46 AM
Hi !

My name is Len, from the netherlands ...
I have a 1999 E46 316 and i like to add a M3 cluster to it.
I bought a 2000 cluster from ebay. (pre 2003)
I am an electronical engeneer, and i know about programming..
For what i read "TerraPhantm" i believe bmwscanner 1.4 gives me acces to the eeprom inside my cluster.
Can i change vin and milage with it ?
Can i i change some values to activate oil temperature leds ??

Please can somebody help me ? I am willing to buy software/hardware what is needed to get the job done !

If you can help me, i will post all progress on the forum ! tnx !

Hi,

Yes you can change the milage with bmw scanner 1.4, and im pretty sure you can change the vin also. But that might be impossible with a newer cluster. And i think you can write eeprom also with 1.4. Never tried that but it says read and write eeprom in the program. :)


Fredrik

Sent from my GT-I9300 using Tapatalk 2

Sparafucile
07-01-2013, 12:12 PM
After reading through this thread, it seems everybody's trying to correct the built-in speedo error with a completely improper approach.

Let's examine the observation: My speedo, my GF's speedo, and others all exhibit a symptom of reading 3-5 mph high at ALL speeds -- from 10mph to 100+ mph. This means that the speedometer error is **NOT** a percentage deviation, since a 4mph error, showing 10mph instead of 6mph, is actually a speedo that's off by 67%. But a 4mph error at 84mph, for an actual speed of 80mph, is only a (still large) 5% error.

Therefore, you CANNOT correct this behavior by altering the denominator for mph per revolution calculations, unless you only wish to have an accurate speed for, well, one speed. That's like the proverbial broken watch that's accurate twice per day.

However, if anybody has any idea where this speedometer (and I'm convinced, odometer, too) misbehavior is actually programmed, I'd be thrilled to hear it !!

TerraPhantm
07-06-2013, 04:45 AM
Both of my BMWs did have percentage errors. It would read 54mph when going 50, and 108 when going 100. Since adjusting the scale, my speedometer is dead accurate to at least 120 (haven't tested above)

If yours is off by a fixed value, I'd probably just move the needle

geargrinder
07-28-2013, 10:41 AM
Short update - Terra and I have gone back and forth as I tried to implement this, there's a little bit of dated info in previous posts for anybody else trying his trick of editing TACHO_KENNLINIE hex values in PASoft.

Disregard his last post which has wrong values and checksum (will lock your cluster w/ "PPPPP"):


We are currently running values: 03 05 9E A6 00 8A 92 27
This seems to be pretty close but perhaps a 2% error remaining - about ~2mph at 70mph
I am going to try tweaking it a bit closer eventually but for now it's a lot better, Terra is happy w/ it being 'close enough' and he's right... you certainly don't want error in other direction aka "gee officer my speedo said I was going 70 and you say I was going 80?"


And to answer another question that came in - to try this you need:

PASoft 1.4.0 with its proprietary cable to read/write EEPROM (can't use INPA or VAG-COM cables)
MUST backup your EEPROM file if something goes wrong, and flash that back if your cluster pukes on the upload.
Don't blame anybody else if you brick your cluster. This is not for faint of heart n00bz. If you're worried and aren't confident you can do this, DON'T.

TerraPhantm
07-28-2013, 05:49 PM
Short update - Terra and I have gone back and forth as I tried to implement this, there's a little bit of dated info in previous posts for anybody else trying his trick of editing TACHO_KENNLINIE hex values in PASoft.

Disregard his last post which has wrong values and checksum (will lock your cluster w/ "PPPPP"):


We are currently running values: 03 05 9E A6 00 8A 92 27
This seems to be pretty close but perhaps a 2% error remaining - about ~2mph at 70mph
I am going to try tweaking it a bit closer eventually but for now it's a lot better, Terra is happy w/ it being 'close enough' and he's right... you certainly don't want error in other direction aka "gee officer my speedo said I was going 70 and you say I was going 80?"


And to answer another question that came in - to try this you need:

PASoft 1.4.0 with its proprietary cable to read/write EEPROM (can't use INPA or VAG-COM cables)
MUST backup your EEPROM file if something goes wrong, and flash that back if your cluster pukes on the upload.
Don't blame anybody else if you brick your cluster. This is not for faint of heart n00bz. If you're worried and aren't confident you can do this, DON'T.


Might be worth trying 03 05 A1 A9 00 8A 92 17 -- 7% increase in scale.

I do still think that the "best" way would be to edit 'TACHO_VOR_KENNLINIE' if we can figure out how to adjust it

Here's what I figured out so far (actually most of this came to me in the last 5 minutes): The checksum calculation is the same as in the others. XOR all the values and a 1 (thanks for the tip btw, never formally learned any of this, so bitwise operations aren't intuitive to me :))

I'm thinking it might be a ratio of sorts? 0x31 = 49; 0x2d = 45. 49/45 = 1.0888... For the non-M values 37/35 = 1.057 -- both of those values appear to be inline with the error found in those respective models

I am not sure what the C8 value is supposed to represent

geargrinder
07-28-2013, 06:33 PM
Might be worth trying 03 05 A1 A9 00 8A 92 17 -- 7% increase in scale.

I do still think that the "best" way would be to edit 'TACHO_VOR_KENNLINIE' if we can figure out how to adjust it

Here's what I figured out so far (actually most of this came to me in the last 5 minutes): The checksum calculation is the same as in the others. XOR all the values and a 1 (thanks for the tip btw, never formally learned any of this, so bitwise operations aren't intuitive to me :))

I'm thinking it might be a ratio of sorts? 0x31 = 49; 0x2d = 45. 49/45 = 1.0888... For the non-M values 37/35 = 1.057 -- both of those values appear to be inline with the error found in those respective models

LOL. I just looked at the same thing and came back to post here. The question is which you adjust!? Probably the 6th value given the odd numbers there? I bet there is a logic to the units however I can't imagine what it is yet. Odd that the 200 value is same for both - nothing there that looks scaled for the speedometer 250km/300km - all the speedo scaling difference is clearly done in the other one.

These digits may be related to ODO impulses or fractions of a KM or perhaps a time scale for sampling or something? I'd be game to try resetting the other field to stock values and monkeying w/ this one but running off on a flight for business and away from the car for a bit.

BTW, "vor" as a preposition in German, according to online dictionaries, can mean "ahead or behind" - so "speedo ahead(behind) characteristics" would make a ton of sense.
http://www.collinsdictionary.com/dictionary/german-english/vor?showCookiePolicy=true

Oh yeah - I DID try setting the first digit of TACHO_KENNLINIE to "00" as it also doubles to a decimal "6" but that did NOT work! Speedo PINNED itself at any speed over a crawl. Had to stop and reflash immediately hoping I didn't break something.

TerraPhantm
07-28-2013, 07:13 PM
Yeah I remember setting that first value to 0 that a long time ago myself and it did the same thing. Thankfully the servo and needle didn't get damaged.

I think there might be something to my ratio theory. Those are the smallest possible integers that can generate those ratios. I wish I can send a speed signal to the cluster without having to get into the car and get to a high speed to verify the changes.

I'm thinking of setting both to 01, or possibly FE and FF

Edit: Just tested 01 for both values (03 00 01 C8 00 01 CA) while setting the Tacho_Kennlinie back to default. The cluster still booted, so that was a good sign. I went around for a quick drive -- at least compared to the digital speedometer (Test 7.3), the gauge is spot on as far as I can tell. This was not the case with the original values. I didn't check against GPS, so there may be some error remaining (and there always will be a small amount because of tire manufacturing variances), but I think it's probably damn close. I'm also wondering if that C8 is an offest (2 km/h?) or maybe a maximum allowed deviation from true speed (20 km/h?).

On another note, I find it kind of interesting that the only check digits throughout this EEPROM are for the speedometer scale. Guess BMW didn't want you to mess with those values.

I wonder if there's a Japanese dump for an E46 M3 (or even non-M) cluster floating out there somewhere. If the E39 is dead accurate with the Japanese values, it stands to reason that the E46 would be too. They do have a different part number from other KM/H clusters

Edit 2: Going to be about a week before I can mess with this again. Bricked my interface ><

328iJunkie
07-31-2013, 07:59 AM
You bricked your PASoft? How?

geargrinder
07-31-2013, 08:51 AM
: Just tested 01 for both values (03 00 01 C8 00 01 CA) while setting the Tacho_Kennlinie back to default. ....

I wonder if there's a Japanese dump for an E46 M3 (or even non-M) cluster floating out there somewhere. If ....

Edit 2: Going to be about a week before I can mess with this again. Bricked my interface ><

Cool, i am going to try that as soon as i get home from current trip. Agree would be cool if somebody could pull the EEPROM from a Japan model...


You bricked your PASoft? How?

There are arguments on interwebz that using "official" PASoft software (as opposed to whatever ships w it) w a clone interface can kill it.

TerraPhantm
07-31-2013, 01:52 PM
You bricked your PASoft? How?

I grabbed a laptop that I don't normally use, and forgot that some clones get bricked with the "official" software (mine was pretty old; I think the newer ones don't have the same limitation)

James39
07-31-2013, 02:02 PM
Hmmm... and all this time I thought mine was just DOA. Is there a good source for the clones?

TerraPhantm
07-31-2013, 09:27 PM
Hmmm... and all this time I thought mine was just DOA. Is there a good source for the clones?

The software or the hardware? I bought the replacement unit from newegg. Should be here by Friday.

James39
08-01-2013, 07:56 AM
The software or the hardware? I bought the replacement unit from newegg. Should be here by Friday.

Hardware. The one on newegg looks exactly like the one I bought that appeared to be dead as soon as I tried to use it. It was a while ago though, can't remember if I tried to use the official software first on it or not.

TerraPhantm
08-01-2013, 06:57 PM
Hardware. The one on newegg looks exactly like the one I bought that appeared to be dead as soon as I tried to use it. It was a while ago though, can't remember if I tried to use the official software first on it or not.

They all look more or less the same; they're modeled after the real deal. I'll let you know whether or not the one I get tomorrow works (and I'll compare the exe to an official version to determine if there are any changes)

TerraPhantm
08-02-2013, 06:17 PM
Hardware. The one on newegg looks exactly like the one I bought that appeared to be dead as soon as I tried to use it. It was a while ago though, can't remember if I tried to use the official software first on it or not.

Hey man, I got the interface in today. It's definitely a bit different than my old one. Physically it feels a lot lighter, and it has an FT232R chip inside instead of the FT232BM. The software didn't come with a warning saying I cannot use the official software... but it didn't come with the latest (1.4.0.9) either. Instead it was 1.4.0.7. Not sure I want to try using the latest version just in case it bricks this one.

Edit: Got in touch with the seller -- he claimed that the only version that would work is the version on the CD. But then I noticed that in the big PASoft thread, a couple people's boards looked identical to mine, and they worked with 1.4.0.9 from the official website. So I gave it a shot. And it works

geargrinder
08-05-2013, 07:55 AM
[QUOTE=TerraPhantm;26665692]

Edit: Just tested 01 for both values (03 00 01 C8 00 01 CA) while setting the Tacho_Kennlinie back to default. /QUOTE]

Terra - I am running this setup now - seems spot on. I think we are there. Great work as usual, thanks.

James39
08-05-2013, 08:18 AM
Edit: Got in touch with the seller -- he claimed that the only version that would work is the version on the CD. But then I noticed that in the big PASoft thread, a couple people's boards looked identical to mine, and they worked with 1.4.0.9 from the official website. So I gave it a shot. And it works

Thanks! Looks like a safe buy :D

O4M3
09-08-2013, 11:19 PM
TerraPhantm and geargrinder,

Gentlemen,

Being somewhat OCD I too was bothered by the inaccuracy of the speedometer in my newly acquired 2004 E46 M3 Cabrio. This is not what I expected from a quality Teutonic engineered automobile. After looking at many forums, I came across this thread and was impressed by the logical approach you were taking to the problem. I ordered the BMW Scanner 1.4.0, received it yesterday and was able to install and connect the software and hardware to make it work without too much difficulty thanks to your instructions elsewhere. I took a little while to locate the exact line with the code for TACHO_VOR_KENNLINIE but once I found it, it was straight forward on how to edit the code to the values you had worked out, save and write them to the IKE EEPROM.

Upon taking the car for a test drive I thought, “Close, but no cigar,” as my GPS indicated I was travelling 2 km/h (Canada you know) over the speed indicated on the speedometer. Then I remembered the OBC digital speed display, output 7.3. When I called it up and ran the car down the road I was very pleased to see that when the needle was in the centre of the hash marks the digital output was exactly the same. It was my GPS that was indicating high by a consistent 2 km/h.

So a very big THANK YOU to you both on a job well done.

For anyone else with an M3 here is a quick summary of what is required for zeroing out the error in your speedo.


Get BMW Scanner 1.4.0 and install on your laptop.
Connect the cable and device and get the drivers working as stated in above posts.
Open BMW scanner software, turn the key to position 1 and double-click on IKE to read the EEPROM.
Save a copy of the file in case you need to re-write the original back to the cluster.
Go to line 0x0339 and look for the string at the end of the line, 03 00 2D C8 00 31 D6
Edit the string to 03 00 01 C8 00 01 CA
Save the revised file, using a different name than the original file.
Write the revised file to the EEPROM.
Exit BMW Scanner
Turn the key off for at least 10 seconds.
Disconnect the OBD connector
Start up and drive a car with an accurate speedometer.


Once again, great work guys! Way to stay with the problem.

330cdm
01-21-2016, 06:11 AM
http://uploads.tapatalk-cdn.com/20160121/3bbe2977af9bf9cfc0522f30f0c9b870.jpg
Thanks all. I am from spain and the spededometer cluster install on my 330cd e46, Temperature sensor oil just needs and wired to the module.
You Got a diagram?