Ergänzungen / Deine Gedanken
Hallo Markus, habe der DS1820 ist nicht mehr lieferbar, daher bin ich auf den nicht ganz kompatiblen DS18B20 ausgewichen. Daher laufen auch die Beispiele mit dem 1820 nicht (andere Werte)
Also, zur Frage:
Bist Du sicher, dass Du die Temperatur richtig aus dem DS ausliest und umrechnest? Ich meine, bist Du sicher, dass das was Dir der Sensor anzeigt richtig ist?
Du machst aus LSB und MSB einen Integer, multiplizierst diesen mit 10 und teils durch 16. Hmmmmmmm, meiner Meinung nach dürften so nur falsche Ergebnisse raus kommen.
Die Werte sind mit einem Vergleichstermometer identisch, der Sensor reagiert auch auf berühren mit Temp Anstieg und anschliessendem Auskühlen. Mit den 1820 Codes von anderen Beispielen habe ich nur Fantasietemparaturen z.B. 174 Grad erhalten.
Mit Deinen Fragen weiter unten habe ich leider Mühe, das ist mir im Moment zu hoch, so weit bin ich noch nicht.Sorry. Vielleicht kann da jemand anders helfen, der den von mir übernommenen Code weiter "auskommentieren kann"
Mit dem "Fusing" habe ich mich noch nie beschäftigt, diesen Parameter muss ich noch studieren.
Gedankengänge:
1. Der Sensor liefert zwar MSB und LSB, Du hast aber real nur 9 Bit. Das MSB ist das im Prinzip ja nur das "Vorzeichen" bzw. wenn Du die gesamten zwei Byte betrachtest das vorzeichenkorrigierte Zweierkomplement was wiederum der Darstellung von negativen ganzen Zahle in der Digitaltechnik entspricht.
Soweit ist das Kind noch nicht in den Brunnen gefallen.
2. Jedes Bit repräsentiert die Wertigkeit 0,5! Ich habe nicht verstanden warum *10 und /16?!?!?
Ein Beispiel: Wenn Du 0032h aus dem DS ausliest so weist dies nur MSB=0 zunächst darauf hin, dass es eine positive Zahl ist. 32h entpsricht 50. 50 * 0,5 sind 25°C.
Nach Deiner Rechnung bekomme ich 31,25 raus. Oder?
3. Ich habe zwar noch keine Zeile Code für den DS geschrieben da ich bisher erst die HW in Betrieb nehme, siehe auch
http://www.avr-praxis.de/forum/showthread.php?p=2046#post2046
aber im Kopf habe ich den Sensor bereits
Ich würde aber den Ansatz so gehen:
A) aus MSB und LSB einen Integer machen. (das hast du ja bereits)
B) eine Signle-Variable deklarieren und den Integer in einen Single casten (in BASCOM zuweisen. So: SINGLEVAR = INTEGERVAR
C) und dann die Single Variable mit 0,5 multiplizieren. So: SINGLEVAR = SINGLEVAR * 0,5
Achtung: BASCOM hat Probleme beim Casten mit SINGLEVAR = INTEGERVAR * 0,5. Da bekommst Du nur ganze Zahlen aber keine Kommastellen.
Mit Fusing(SINGLEVAR , "#.#") kannst Du Dir dann in BASCOM einen schönen String mit einer nachkommastellen zusammenbauen und auf dem LCD ausgeben.
So sollte es auch funktionieren. Aber vielleicht sehe ich vor lauter Bäumen den Wald nicht und Deine Lösung mit *10 und /16 ist viel einfacher. Ich habs nur noch nicht begriffen.
Was meinst Du?
Grüße,
Markus
PS: Es gibt übrigens noch einen 2. Weg genauer und mit Werten größer 9Bit die Temperatur zu berechnen. Er ist aber aufwändiger![/QUOTE]