Troubleshooting¶
Symptoms you may see while bringing up an NTC thermistor, their causes and the fix for each.
Start with the voltage: GetVoltage() and GetResistance() on a failing reading tell wiring and ADC problems
(the voltage is wrong) apart from configuration problems (the resistance is right, the degrees are not).
Initialize() returns false¶
| Cause | Check | Fix |
|---|---|---|
| ADC not up | Your port's EnsureInitialized() |
Fix the SDK call |
| Channel missing | IsChannelAvailable(adc_channel) in your port |
Use a channel the port accepts |
| Invalid config | R25, supply or series resistor not positive; B outside 1000 K to 5000 K; min_temperature ≥ max_temperature; sample_count 0 |
Correct the value; SetConfiguration() returns InvalidParameter for the same cases |
| No port | nullptr passed to the constructor |
Pass the port's address |
Temperature conversion failed¶
The node reads 0 V or the supply, or the resistance is outside 0.1 Ω to 1 MΩ.
| Cause | Check | Fix |
|---|---|---|
| Thermistor shorted or missing to the node | GetVoltage() near 0 V |
Wiring, solder joints |
| Thermistor open | GetVoltage() near the supply |
Wiring, connector, cable |
| Port returns counts, not volts | GetVoltage() returns thousands |
Return volts from ReadChannelV() (Porting) |
reference_voltage below the real supply |
GetVoltage() above reference_voltage |
Set the divider's real supply |
Temperature out of range¶
The conversion worked but the result is outside min_temperature to max_temperature (−40 °C to +125 °C by
default). Read GetResistance(): if it matches the thermistor's table at the real temperature, widen the window;
if not, see the next section. A part near a hot spot may be right.
Off by a few degrees¶
| Cause | Check | Fix |
|---|---|---|
| Wrong supply value | Measure the divider supply | Set reference_voltage to it: 1 % is about 0.5 °C at 25 °C |
| Wrong series resistor | Measure it | Set series_resistance |
| Uncalibrated ADC | GetVoltage() against a meter |
Use your SDK's ADC calibration in ReadChannelV() |
| Beta error far from 25 °C to 85 °C | The error grows with distance: +4.4 °C at −40 °C for this part | LookupTable for the TDK types, Steinhart-Hart or a calibration offset (Conversion methods) |
| Wrong B for the part | B25/50 and B25/85 differ by 1 % to 2 % | Use the B for your range |
| Self-heating | Reading drops when you lower the divider current | Larger resistors, or power the divider only while sampling (Hardware) |
Reading moves the wrong way¶
The temperature falls as the part heats: the thermistor is on the high side of the divider. Swap the two parts, or return VREF − VNODE from the port (Hardware).
Noisy readings¶
| Cause | Fix |
|---|---|
| ADC noise | SetSamplingParameters(16, 0) |
| Slow drift or ripple | SetFiltering(true, 0.1F); a smaller α smooths more |
| Long wire to the sensor, high source resistance | C_FILT, 10 nF to 100 nF from the node to ground |
| Supply ripple | Feed the divider from a clean rail (Hardware) |
Calibration made it worse¶
Calibrate() corrects the reading at one temperature only: the offset is a constant, so the Beta equation's
error elsewhere remains (Conversion methods). Calibrate at the temperature you care about most,
with the sensor settled at the reference, and use LookupTable or Steinhart-Hart for a wide range.