Gast
#397672
Hallo,
ich habe mich die letzte Woche mit dem auslesen der Temperatur
beschäftigt.
Nur wie lese ich diese am genauesten aus?
Ich habe mir eine Tabelle erstellt, in der ich die Spannungen
abspeicher die der sensor liefert.
//Temperatur Tabelle (Spannungen in mV
static uint16_t table_temp[] PROGMEM = {2936, 2645, 2358, 2085, 1829,
1594, 1383, 1196, 1032, 889, 765, 659, 569, 491, 425, 369, 321, 279,
244, 214, 188, 166, 147, 130, 116, 103, 92, 82, 74, 67, 60};
Nun die Frage, gibt es eine einfachere schnellere genauere lösung,
als die ich unten aufgeführt habe?
// Lese die Temperatur eines Kanals ein
uint16_t ReadTemp(uint8_t mux)
{
uint16_t temp = 0, temp1 = 0, temp2 = 0;
uint8_t i;
temp2 = ReadChannel(mux); (liesst eine Spannung ein)
for(i = 0; i<= 30; i++)
{
temp = pgm_read_word(&table_temp[i]);
if((temp2 <= temp1) && (temp2 >= temp))
{
temp2 = temp2 - temp;
temp1 = temp1 - temp;
temp1 = 50000 / temp1;
temp1 = temp1 * temp2;
temp1 = temp1 / 10000;
temp = (i*5)-temp1;
i = 30;
}
temp1 = temp;
}
return temp;
}
Ich gehe hin, und rechne die Differenzspannung zwichen dem "ist Wert"
und dem nägstem Punkt ein.
dann rechne ich 50000 / diese Spannung und habe den Temperaturwert pro
mV
Diesen Wert multipliziere ich mit dem Rest, (der in der Tabelle steht -
ADC Wert)
und ziehe diesen Wert von dem Temperatur Wert wieder ab.