Forum: Mikrocontroller und Digitale Elektronik Ausgegebene Werte passen nicht DS18B20 bei höheren Temperaturen


von Socke (Gast)


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ß

von Falk B. (falk)


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"

von Socke (Gast)


Lesenswert?

Falk B. schrieb:
>>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

Gruß

von Falk B. (falk)


Lesenswert?

@ 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.

von Socke (Gast)


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ß

von Noch einer (Gast)


Lesenswert?

Haben die Anschlussdrähte auch 100°?

Wenn das Plastik 100° und die Anschlussdrähte 20° haben, wäre es 
denkbar, der Fühler hat 70°.

von Socke (Gast)


Lesenswert?

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ß

von (prx) A. K. (prx)


Lesenswert?

Socke schrieb:
> Meine Idee zur Berechnung:

Von hinten durch die Brust ins Auge.

Die Temperatur in 1/16 °C mit Vorzeichen:
int16_t var = (scratchpad[1]<<8) + scratchpad[0];

Wenns float sein muss, dann reicht danach
float var2 = var * 0.0625;

von (prx) A. K. (prx)


Lesenswert?

Parasitär versorgte Sensoren können bei hohen Temperaturen Probleme 
kriegen.

von Socke (Gast)


Lesenswert?

Ja, aber um genau das zu umgehen haben die Fühler eine direkte 
Spannungsversorgung.

von Socke (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.