Ausgegebene Werte passen nicht DS18B20 bei höheren Temperaturen

Gast #4524857
Lesenswert?

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
Lesenswert?

@ 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"
Gast #4525205
Lesenswert?

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 #4541570
Lesenswert?

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

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