Когда-то давно делал, в таблице использованы значения расчитанные
для температур 0°..240°Ц. Терморезистор включен последовательно с
резистором 2,7к
memento mori
- volatile const uint16_t TemperatureToAdcLookUpTable[49] =
{
1006, 1001, 996, 989, 980, 970, 958, 944, 927, 909,
888, 864, 838, 809, 778, 746, 711, 675, 638, 600,
563, 525, 489, 453, 419, 386, 355, 326, 299, 274,
250, 229, 209, 191, 174, 159, 145, 133, 122, 111,
102, 94, 86, 79, 73, 67, 62, 58, 53
};
static uint16_t LinearInterpolateTableToDegCelsius(uint8_t Index, uint16_t NTCValue) { uint16_t T1, T2, T3; uint16_t Top, Bottom; Bottom = TemperatureToAdcLookUpTable[Index]; Top = TemperatureToAdcLookUpTable[Index - 1]; T1 = NTCValue - Bottom; T1 *= 100; T2 = Top - Bottom; T3 = T1 / T2; T1 = Index * 5; T2 = 5 * T3; T2 /= 100; return (T1 - T2); }
bool SensorenMeasure(void) { uint16_t NTCValue; uint8_t Index; NTCValue = ReadADC(MuxNTCLeft); if ((NTCValue > TemperatureToAdcLookUpTable[0]) || (NTCValue < TemperatureToAdcLookUpTable[48])) { return false; } for (Index = 0; Index < 49; Index++) { if (NTCValue == TemperatureToAdcLookUpTable[Index]) { TemperatureActual = Index * 5; break; } else if (NTCValue > TemperatureToAdcLookUpTable[Index]) { TemperatureActual = LinearInterpolateTableToDegCelsius(Index, NTCValue); break; } } return true; }