Which ECUs this applies to
| Input | Pull-up to 5 V | Use Haltech's calibration as-is? |
|---|---|---|
| AVI on any Haltech ECU | 1k ohm | Yes |
| SPI on Nexus ECUs and VCUs | 1k ohm | Yes, NSP's calibrations already match |
| SPI on dual-connector Elites (1000, 1500, 2000, 2500) | 10k ohm | No, it must be converted |
ESP flags this too: pick an SPI for a temperature sensor and open the help for the pull-up setting and you'll find a note about it.
Why the pull-up changes the reading
A two-wire temperature sensor is a thermistor, a resistor whose value changes with temperature. The ECU can't read resistance directly, so it feeds 5 V through a fixed pull-up resistor into the sensor and measures the voltage in the middle. The pull-up and the sensor form a voltage divider:
V = 5 x R_sensor / (R_sensor + R_pullup)
Haltech publishes its sensor calibrations as voltage against temperature, and those voltages assume a 1k pull-up. Put the same sensor behind a 10k pull-up and every voltage changes, so the ECU would read the wrong temperature everywhere. The fix is to go back to resistance, then forward again with the new pull-up.
Step 1: turn each calibration voltage into resistance
Rearrange the divider formula for the sensor resistance, using the 1k pull-up the calibration was written for:
R_sensor = 1000 x V / (5 - V)
Say one row of the calibration reads 2.00 V. That gives 1000 x 2 / 3 = 667 ohms. Another row at 4.00 V gives 1000 x 4 / 1 = 4,000 ohms. The temperature on each row stays exactly as it was; only the voltage column is changing.
Step 2: work out the new voltage with a 10k pull-up
Plug each resistance back into the divider with 10,000 ohms as the pull-up:
V_new = 5 x R_sensor / (R_sensor + 10000)
667 ohms becomes 5 x 667 / 10,667 = 0.313 V. 4,000 ohms becomes 5 x 4,000 / 14,000 = 1.429 V.
The whole conversion at a glance
| Voltage with 1k pull-up | Sensor resistance | Voltage with 10k pull-up |
|---|---|---|
| 0.50 V | 111 ohms | 0.055 V |
| 1.00 V | 250 ohms | 0.122 V |
| 2.00 V | 667 ohms | 0.313 V |
| 3.00 V | 1,500 ohms | 0.652 V |
| 4.00 V | 4,000 ohms | 1.429 V |
| 4.50 V | 9,000 ohms | 2.368 V |
Do this for every row of your sensor's calibration, keep each row's temperature, and enter the new voltages in ESP against the SPI. A spreadsheet makes it a two-minute job: one column for the original voltage, one for resistance, one for the new voltage.
Notice how the converted voltages bunch up near zero where the sensor resistance is low. Small voltage changes now represent bigger temperature changes, so resolution suffers in that part of the range. If the temperature you care about most falls there, an AVI is the better home for the sensor.
Checking your work
- With the engine cold, the new reading should match ambient temperature and any other temperature sensor on the car.
- As the engine warms, compare it against coolant temperature or a known-good gauge.
- If it's way off at one end only, recheck the rows at that end; a single typo in the table is the usual cause.
For more on chasing wrong readings, see temperature sensor problem diagnosis. The same method works for any two-wire thermistor, whether it reads oil, air or fuel temperature. For setting the sensor up in ESP, see Oil Temperature Sensor and Intake Air Temperature Sensor.
FAQ
Do I need to do this on a Nexus?
No. Nexus SPIs use 1k pull-ups, so the standard calibrations work.
Can I just turn the SPI pull-up off?
Not for a two-wire thermistor. Without a pull-up there's nothing to create the voltage the ECU measures.
Does this apply to Elite AVIs?
No. AVIs use a 1k pull-up, so Haltech's calibrations are correct there. Stuck on a conversion? Send us your calibration and we'll help.




