DS3234 Temperatur Anzeigen

Hallo,
hab gerade geschafft, die Zeit vom DS3234 auf dem LCD MI0283QT2 anzuzeigen.
Komme aber nicht klar, die Temperaturdaten aufzubereiten. Die Abfrage erfolgt so :

void ReadTemperatur(){
  digitalWrite(cs, LOW);
  SPI.transfer(0x11); 
  unsigned int nt = SPI.transfer(0x00);        
  digitalWrite(cs, HIGH);
  temph=nt;

  digitalWrite(cs, LOW);
  SPI.transfer(0x12); 
  unsigned int nt1 = SPI.transfer(0x00);        
  digitalWrite(cs, HIGH);

  templ=nt1;



}

Wer kann mir helfen. Werte werden zwar übertragen, aber es feht eine Umwandlung.

Gruss Kalli

Was sagt das Datenblatt wie der Temperaturwert übertragen wird?
Grüße Uwe

Hallo Uwe,

das Datenblatt als PDF

andere Daten habe ich nicht dazu.

Gruss Kalli

Ich wollte Dich etwas arbeiten machen. :wink: :wink: :wink:

die DS3234-Bibiothek GitHub - rodan/ds3234: arduino library for DS3234 RTC macht das so:

/ temperature register

float DS3234_get_treg(uint8_t pin)
{
    float rv;
    uint8_t temp_msb, temp_lsb;
    int8_t nint;

    digitalWrite(pin, LOW);
    SPI.transfer(0x11); // temperature register MSB address
    temp_msb = SPI.transfer(0x00);
    digitalWrite(pin, HIGH);
    digitalWrite(pin, LOW);
    SPI.transfer(0x12); // temperature register MSB address
    temp_lsb = SPI.transfer(0x00) >> 6;
    digitalWrite(pin, HIGH);

    if ((temp_msb & B10000000) != 0)
        nint = temp_msb | ~((1 << 8) - 1); // if negative get two's complement
    else
        nint = temp_msb;

    rv = 0.25 * temp_lsb + nint;

    return rv;
}

Du kannst aber auch die Funktion der Bibiothek verwenden.

Das Datenblatt sagt:

Temperature Registers (11h–12h)
Temperature is represented as a 10-bit code with a resolution
of 0.25°C and is accessible at location 11h and
12h. The temperature is encoded in two’s complement
format, with bit 7 in the MSB representing the SIGN bit.
The upper 8 bits, the integer portion, are at location 11h
and the lower 2 bits, the fractional portion, are in the
upper nibble at location 12h. Example: 00011001 01b =
+25.25°C. Upon power reset, the registers are set to a
default temperature of 0°C and the controller starts a
temperature conversion.
The temperature is read on initial application of VCC
and once every 64 seconds afterwards. The temperature
registers are updated after each user-initiated conversion
and on every 64-second conversion. The
temperature registers are read-only.

Grüße Uwe

Hallo Uwe,

habe das Beispiel angepasst, ausprobiert und es funktioniert. Danke !
Für die aktuelle Anwendung hat es aber keinen Zweck, RTC sitzt zwischen LCD und mSD-Shield und zeigt
eine unsinnige Temperatur an. Für weitere Anwendungen steht es dann aber zur Verfügung.
Noch eine Frage, warum schreibt man oft "int8_t" statt "int", ist es nur zur Speicherplatzeinsparung oder hat es noch einen
anderen Grund ?

Gruss Kalli

int ist Standard C und kann je nach Hardware unterschiedliche Größe haben.
Beim Arduino sind es 16 Bit = -32768 .. 32767

int8_t ist auf jeder Maschine 8 Bit groß = -128 .. 127

Ausserdem gibt es das auch als uint8_t, Bereich 0 .. 255.
Da spart man sich das Tippen des Wortes "unsigned"