LM75 und Datenformat

Gast #321838
Lesenswert?

Hallo,
ich verwende den LM75 und empfange schon die beiden (hoffentlich
richtigen) Datenbytes.

Als welchen Datentyp muss ich sie abspeichern, damit das richtige
Ergebnis raus kommt?

Habe schon folgende zwei Versionen getestet:

unsigned char temperatur=0x00,temphalf=0x00,temphelp,teiner,tzehner;
void TEMP_LCD(void)
{
  temphelp = temperatur; //ersten Datenbyte
  teiner = 0x00;
  tzehner = 0x00;

  do
  {
  if (temphelp > 9)    // wenn Temperatur > 9
  {
    temphelp = (temphelp - 0x0a);  // Temperatur - 10
    tzehner ++;  // Ausgabebyte Temp.-Zehner + 1
  }  // end if
  }while (temphelp > 9);    // solange, bis Temperatur < 9

  teiner = temphelp; //Rest in Ausgabebyte Temp.-Einer speichern

  teiner |= 0xb0;        // Korrektur f&#65533;r LCD
  tzehner |= 0xb0;      // Korrektur f&#65533;r LCD
  temphelp = 0x00;
  fprintf(uart,"%d%d,%d", tzehner, teiner, temphalf);
  fprintf(uart,"%o%o,%o", tzehner, teiner, temphalf);
  fprintf(uart,"%u%u,%u", tzehner, teiner, temphalf);
  fprintf(uart,"%x%x,%x", tzehner, teiner, temphalf);
   //nichts hat funktioniert
}

und Version 2:
    int temp = buf[0]*256+buf[1];
            temp >>=7;
            if (temp>512)
                temp &= -1;
    fprintf(uart,"Temperatur %d in Grad Celsius", temp/2.0);
    fprintf(uart,"Temperatur %f in Grad Celsius", temp/2.0);
    fprintf(uart,"Temperatur %e in Grad Celsius", temp/2.0);
auch hier hat nichts funktioniert.

Habt Ihr vielleicht ein Programm, das geht?
Gast #321839
Lesenswert?

Wenn Du auf der Threadliste
http://www.mikrocontroller.net/forum/list-1-1.html
rechts oben "Im Betreff suchen:"
LM75
eingibst, bekommst Du mindestens 30 Treffer, da ist sicher was
passendes für Dich dabei.

Also: zuerst suchen dann fragen.

    fprintf(uart,"Temperatur %d in Grad Celsius", temp/2.0);

geht auf keinen Fall, da die Division ein real-Ergebnis liefert, das
mit %d inkompatibel ist.

Temphalf ist immer 0, da würde ich mal temphelp ausgeben (zum Debuggen,
aber vorher temphelp=0 weglassen).
Gast #321840
Lesenswert?

Hab gesucht, daher hab ich ja auch meine Beispiele.

Da der LM75 ja ein sehr gängiger Baustein ist, wollte ich nur fragen,
ob schon wer einen Code in C hat, der funktioniert.

Ich bin mir auch nicht im klaren darüber, mit welchem Datentyp ich
arbeiten muß und wenn ich ehrlich bin, so versteh ich bei beiden
Versionen die Berechnung nicht.
Meiner Meinung nach müsste man erst schauen, ob die Temperatur negativ
(am MSB)ist und dann den Wert berechnen. Probier es selber mal. Ich hab
nur gedacht, dass die Berechnungen oben einen besonderen Trick
beinhalten.
Gast #321842
Lesenswert?

Probier doch mal das:
    int temp = buf[0]*256+buf[1];

    fprintf(uart,"Temperatur %f in Grad Celsius", temp/256.0);

oder so:
    fprintf(uart, "Temperatur %d.%d", buf[0], (buf[1] ? 5 : 0));

oder einfach:
        fprintf(uart, "Temperatur %d", buf[0]);
Damit verschenkst du zwar die Nachkommastellen, aber falls die nicht
gebraucht werden ist das einfacher.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren