DS3231 Temperatur weicht um etwa 4 Grad ab

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;
}

Das ist die Kerntemperatur des arbeitenden ICs. Der produziert etwas Wärme durch seine Verlustleistung, und die misst du.

noiasca:
karma.

oh, danke

noiasca:
ok, dann bau ich das wieder aus.

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.

noiasca:
kanns ein Problem sein, wenn ich alle 30 Sec eine Zeitabfrage mache, dass er deshalb so warm wird ?

Nein, ich frage alle 20 ms nach einer eventuell neuen Zeit. Mein Chip steht senkrecht, das erleichtert die natürliche Konvektion.

noiasca:
eigentlich bei mir auch. Könntest du mir bitte deine Funktion rauskopieren, dann probier ich das noch mal...

Ich habe Deine zu meinem Sketch ergänzt ::slight_smile:

noiasca:

    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

Funktioniert das auch bei negativen Temperaturen richtig?

Wie weit ist dein Referenzthermometer von der richtigen Temperatur weg? Hast du Fotos vom Aufbau?

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?

Gruß

Das IR-Thermometer habe ich erwähnt ::slight_smile:

Oh man bin ich neben der Spur... Ja hast du :zipper_mouth_face: