Ausgegebene Werte passen nicht DS18B20 bei höheren Temperaturen

Gast #4524857
Hallo zusammen und frohe Ostern,

leider habe ich mal wieder ein kleines Problemchen.
Ich benutze das Projekt von Stefan Sicklinger um die Temperatur über 
einen DS18B20 einzulesen und auf einem LCD ( HD44780) auszugeben, die 
Berechnung des Ausgabewertes habe ich überarbeitet, da die ursprüngliche 
zum einen nicht funktionierte und ich diese zum anderen auch nicht 
begriffen habe. Nun habe ich bemerkt, das die ausgegebenen Werte bei 
höheren Temperaturen nicht mehr passen.

Bsp.

Ausgabe bei Raumtemperatur oder auch mehr z.B. 40C kein Problem, Werte 
passen.

Möchte ich aber nun einen Wert von um die 100C ausgeben, zeigt das 
Display nur ca. knapp 70 an.

Meine Idee zur Berechnung:

uint16_t var = (scratchpad[1]<<8) + scratchpad[0]; //Zusammensetzung der 
Temperaturbytes

         float var2; //Zusätzavariable um in Komma zu rechnen
         if (scratchpad[1]&0xF8)//Wenn die ersten 5 Bits 1 sind, dann 
negativ wert
{

var= ~ var; //umwandlung von negativen in pos. Wert mit einen bit 
zuwenig
    var= var+1; // fehlende bit hinzu
    var2 = var *0.0625; // genauigkeit, wandeln zum float
    temp=(-1)*var2; // vorzeichen drehen und in temp schreiben
}
else // wenn positve Temp
{


    var2 = var *0.0625;// genauigkeit
    temp=var2; // in temp schreiben
}


Ich bin dankbar für jede hilfe.

Gruß
#4524875
@ Socke (Gast)

>begriffen habe. Nun habe ich bemerkt, das die ausgegebenen Werte bei
>höheren Temperaturen nicht mehr passen.

Weil du immer noch einen Fehler drin hast?

>Möchte ich aber nun einen Wert von um die 100C ausgeben,

Das kann der IC gar nicht messen.

> zeigt das
>Display nur ca. knapp 70 an.

>Meine Idee zur Berechnung:

>uint16_t var = (scratchpad[1]<<8) + scratchpad[0]; //Zusammensetzung der
>Temperaturbytes

OK.


>         float var2; //Zusätzavariable um in Komma zu rechnen

Braucht man nicht, wenn man Festkommaarithmetik nutzt.

>         if (scratchpad[1]&0xF8)//Wenn die ersten 5 Bits 1 sind, dann
>negativ wert

Brauchst du auch nicht, der Wert ist schon eine echte 16 Bit Zahl incl. 
Vorzeichen!

>var= ~ var; //umwandlung von negativen in pos. Wert mit einen bit
>zuwenig

Ist falsch. ~ ist binärem bitweise Negation, nicht mathematischer 
Vorzeichenwechsel.

>    var= var+1; // fehlende bit hinzu
>    var2 = var *0.0625; // genauigkeit, wandeln zum float
>    temp=(-1)*var2; // vorzeichen drehen und in temp schreiben

Relativ unsinnig.

>Ich bin dankbar für jede hilfe.

Schon mal im Forum gesucht?

Beitrag "Re: DS18s20 Temperatur über 20Grad"
#4524908
@ Socke (Gast)

>>>Möchte ich aber nun einen Wert von um die 100C ausgeben,
>
>> Das kann der IC gar nicht messen.

>Warum nicht? Lt. Datenblatt doch bis 125C

Stimmt, hab ich mit dem -10-85°C Bereich verwechselt, wo 0,5°C 
Genauigkeit garantiert wird.
Gast #4525205
Ok, das die var2 über ist, ist mir klar, diese diente auch mehr zum 
Verständnis.
Die frage ist ob ich eventuell irgendein umrechnungsfaktor vergessen 
habe, der bei 20C nicht auffällt, aber halt bei hohen Temperaturen dafür 
sorgt das die Werte total auseinander gehen.

Gruß
Gast #4525629
Das Bauteil hat lt Datenblatt einen Messbereich bis 125C. Das Bauteil 
welches ich Verwende ist in einer Metallösen eingelassen mit fest 
angeschlossen Kabel ab Werk.

Gruß
Gast #4541570
ERLEDIGT

Habe das Problem lösen können.
Ich habe einfach zu schnell aufgeheizt, sodass der Sensor quasi nicht 
hinterher kam. Heize nun in 10 Grad schritten hoch und alles ist Super.

Aber trotzdem Danke

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.