Sollte eigentlich die Temperatur vom DS3231 aus Register 11 und 12 halbwegs mit der Umgebungstemperatur zusammenstimmen oder ist das nur ein interner Wert der nicht brauchbar ist.
Ich messe da in etwa 4 Grad mehr als ich wirklich habe.
float getDS3231temp()
{
float temp3231 = 0;
byte tMSB, tLSB;
//temp registers (11h-12h) get updated automatically every 64s
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0x11);
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 2);
if(Wire.available()) {
tMSB = Wire.read(); //2's complement int portion
tLSB = Wire.read(); //fraction portion
temp3231 = (tMSB & B01111111); //do 2's math on Tmsb
temp3231 += ( (tLSB >> 6) * 0.25 ); //only care about bits 7 & 8
}
else {
//oh noes, no data!
}
return temp3231;
}
Mein DS3231 läuft seit ein paar Tagen (auf meinem LED-Teststreifen sehe ich die Rheinturmuhr) und zeigt 22,75 oder 23,00 Grad an. Ein IR-Thermometer auf das IC gerichtet zeigt mir 22,6 Grad an. Umgebung 21,9.
Da die Chiptemperatur bei gleichmäßiger Belastung annähernd proportional der Umgebungstemperatur sein sollte, kann man bei einer Genauigkeit von nur 0,25 Grad durchaus von der Chip- auf die Umgebungstemperatur schließen.
PS: Die Chiptemperatur ist für die interne Zeitkompensation relevant.
4 Grad schon schon heftig trotz Eigenerwärmung. Bei den BME280 sind es meist so 2 Grad. Vielleicht hängt es auch an deinem IR Thermometer, kannst du das anderweitig testen?