Temperatur berechnung ADE7758

Irgendwo stand mMn, daß der Offset mit der Spannung variiert. Ich würde den erstmal im Code (also im Flash) einmal festnageln, und sehen ob das reicht. Dann kannste später immer noch 'ne Routine dazupacken, die auf Anforderung den Offset mit der anzugebenden tatsächlichen Temp im Eeprom ablegt, und beim Startup dort laden...
 
Gut.

Habe ich das jetzt richtig verstanden das ich einen int16 nehmen muss? Kann ja bis 381°C kommen.
 
Hast Du doch mit der readTemp bereits gemacht.
Der Sensor liefert Dir erstmal 'ne 8bit-Zahl, diese weist Du einer 16bit-Zahl zu. beides müßten eigentlich signed sein. Inwiefern diese Zuweisung auch mit signed-Ints klappt (16bit <- 8bit) muß @Dirk sagen).
Im nächsten Schritt korrigierst Du um den Offset, dann multiplizierst Du mit drei, und addierst die Temperatur des Offsets.
Sollte soweit passen, nur daß Du eben signed brauchst, und zueinander passende Werte für Offset und die ambient-Temperature.
 
Ich komme auf keine ordentliche Temperatur oder Änderung von Werten. Wenn ich aber Register mit ihren default Werten auslese, passt es. Also an der Kommunikation kann es nicht liegen.

Hier meine Routinen.:



CodeBox C
int8_t ADE7758_read_int8(uint8_t reg)
{
     int8_t temp = 0;
     
     spi_enable_chip();
     spi_disable_chip(); // start transmission condition
     
     spi_master_transmit(reg); // register address
     spi_master_transmit(0x00); // dummy byte
     
     spi_enable_chip(); // stop transmission condition
     
     temp = (int8_t)spi_receive(); // first byte
     
     return (int8_t) temp;
}

int8_t ADE7758_readTEMP_OFFSET(void)
{
   return (int8_t)ADE7758_read_int8(REG_TEMP);
}

int16_t ADE7758_readTEMP(int8_t offset)
{
   int16_t temperature = 0;
   
   temperature    = (int16_t)ADE7758_read_int8(REG_TEMP);
   temperature -= (int16_t)offset;
   temperature *= (int16_t)3;
   temperature += (int16_t)25;
   
   return ((int16_t)temperature);
}

 
Laß Dir doch mal für ein paar unterschiedliche Temperaturen die Rohdaten (8bit) ausgeben. Möglichst weit auseinander. Ohne zwischendurch die Spannungsquelle zu verändern.
Der Sensor wird sicher mit einer beachtlichen Trägheit reagieren - ist ja wie bei den AVR irgendwas internes...
(erstens aufgrund seines thermischen Widerstandes, und zweitens aufgrund der relativ geringen Auflösung)

P.S.: wie betaktest Du den ADE...? Mit'nem 10MHz-Quarz+Bürdekapazitäten, oder über einen externen Takt/Quarzoszillator?

P.P.S.: dieses Temperaturregister wird quasi ununterbrochen (sofern der IC arbeitet) mit dem gewandelten Temperaturwert synchronisiert - 'n festgelegten Defaultwert gibts also eigentlich nicht.

Bei 20°C hattest Du 0xDD erhalten
Bei 25°C (Temperatur des Offsetwertes-> Zeile 30 im Code aus #24) müßten es 0xDE oder 0xDF sein
Bei 50°C wären etwa 0xE7 zu erwarten...
 
Also ich Takte ihn mit 10MHz externen Quarz + Bürde.
Wie soll ich die Temperatur denn so extrem erhöhen? Föhn? Lötkolben könnte man auch nehmen (muss mal schauen ob mein RD80 soweit runter kann)
 
Der IC darf von -40°C bis +85°C - das ganze zusammen mit 'nem Referenzthermometer für 'ne Viertelstunde in den Kühlschrank wär schon mal'n Anfang. 'N Herd in der Küche (wenn die Frau grad nicht da ist - wegrenn)?
 
  • Like
Reaktionen: TommyB
So, habe jetzt mal den (hoffentlich) richtigen Offset ermittelt.
Das sind bei 21°C -40.

Jetzt scheint die Temperatur auch zu stimmen.
Hier der Code.:



CodeBox C
int8_t ADE7758_readTEMP(int8_t offset)
{
   int8_t temperature = 0;
   
   temperature    = ADE7758_read_int8(REG_TEMP); // raw data
   temperature -= 40; // offset for this sensor
   temperature *= 3; // 3°C/Bit
   //temperature += 21; // ambient temperature
   
   return temperature;
}
 
Hmm... warum ist dann die Addition den ambient temperature auskommentiert?
ca. 20°C einen Rohwert von 0xDD
Das sind bei 21°C -40.
bei ca 20°C 'n Offset von -35=0xDD und bei 21°C 'n Offset von -40=0xD8 könnte zusammenpassen.
Aber Du addierst 0°C als Ambient-Temperature, als wenn Du die -40 Offset bei 0°C ambient ermittelt hättest - das paßt nicht zu den -35@ca 20 °C...

verwirrend...
 
Ja, es klappt ohne.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)