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ß
@ 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"
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ß
@ 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.
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ß
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°.
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ß
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;
Parasitär versorgte Sensoren können bei hohen Temperaturen Probleme kriegen.
Ja, aber um genau das zu umgehen haben die Fühler eine direkte Spannungsversorgung.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.