www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LM75 und Datenformat


Autor: Stefanie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Stefanie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der LM75 liefert das Ergebins als Einer-Komplement; negative Werte
werden also mit einer führenden (MSB) "1" gekennzeichnet.
Das LSB hat die Wertigkeit 0,5°C.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefanie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganz herzlichen Dank für die Hilfe!!!
Super, habe selbst viel zu dumm drum rum gedacht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.