Gast
#77013
Hallo Leute! Ich verwenden, um die Temperatur zu messen mehrere DS18S20. Deshalb habe ich mir eine Funktion geschrieben die aus dem 2-Byte Wert, den der Sensor liefert einen double-wert mit der Temperatur macht. double temp_inttotemp(unsigned int val) { double retval=0; char tmp; // Ist das 0,5-Flag gesetzt? if ((val & 0x0001) != 0) retval = 0.5; tmp = val & 0x00FE; tmp = tmp >> 1; // Wenn Negativ, dann Invertieren und 1 dazu if ((val & 0x8000) != 0) tmp = (tmp^0x7F) + 1; retval += tmp; // Wenn Negativ.... if ((val & 0x8000) != 0) retval = retval * -1; return retval; } Nun hatten wir das erste mal seit Inbetriebnahme wieder Minusgarde. Komischerweise zeigt er mir jetzt auf dem Display 127.0°C an. Das ist eigentlich der Effekt, wenn ich eine Signed-Variable als unsigned ausgebe. Zur Ausgabe verwende ich die sprintf-Funktion: sprintf(str,"%02.1f°C", temp(OUTDOOR)); (das temp-Makro gibt einen double-wert zurück) Ich bin für jede Hilfe Dankbar! MfG Sascha