Hallo zusammen,
ich habe hier einen DS18S20, funktioniert an sich problemlos.
Nur verstehe ich nicht, wie man die 1/16°C-Auflösung berechnet.
Die Formel im Datenblatt habe ich gesehen, aber:
- Wie gehen diese 0,5°C, die bei der Temperatur selbst dabei stehen,
in die Berechnung mit ein?
- Welche Werte kann das Register count_remain annehmen?
- Wie funktioniert die Formel für negative Temperaturen?
Ich hoffe, ihr versteht mein Problem und ich bekomme hilfreiche
Antworten.
Hast du das Datenblatt mal genauer angeschaut?: =)
http://www.mikrocontroller.net/part/DS18S20
Seite 3 und Anfang Seite 4
Steht alles da - sogar mit Beispielen binary vs. Temperatur
Ich schrieb:> - Wie gehen diese 0,5°C, die bei der Temperatur selbst dabei stehen,> in die Berechnung mit ein?
Geht aus der Formel hervor.
Ich schrieb:> - Welche Werte kann das Register count_remain annehmen?
Auf Seite 7 ist es als Byte gekennzeichnet.
Ich schrieb:> - Wie funktioniert die Formel für negative Temperaturen?
So wie für positive Temperaturen. Man lese hierzu (wenn man es noch
nicht verstanden hat) die Tabelle mit den Beispieltemperaturen.
Gruß
Also ich schneide das 0,5°C Bit immer zuerst ab.
Bei count_remain == 0 --> Temperatur += 0,75°C
Bei count_remain == 16 --> Temperatur -= 0,25°C
Bei count_remain == 12 verhält es sich neutral.
Oder kann das count_remain auch über 16 gehen (ist ja in Byte
prinzipiell möglich).
Bei negativen Temperaturen einfach das Zweierkomplement auflösen und
dann berechnen.
Ist das richtig so?
Aus dem Stegreif ohne Gewähr (ist schon Jahre her):
Beim Berechnen der hohen Auflösung geht das 0,5°-Bit gar nicht mit ein.
Beim DS18B20 ist die Berechnung mit den Count_Remain nur ein
überbleibsel aus alten Tagen, in denen die Temp-Digitalwandler noch mit
zwei Oszillatoren mit unterschiedlichem Temperaturgang funktionierten.
Damals war es so, dass das CountPerDegree aus einem Eprom ausgelesen
wurde, das die individuelle Korrektur/Kalibrier-Linearisierungstabelle
darstellt des jeweiligen Sensors darstellt. Der Wert war für jedes Grad
anders (im Bereich 50-150, wenn ich mich recht erinnere), was bedeutet,
das auch die Auflösung im milli-Grad-Bereich war.
Das Ganze habe ich schon 2006 hier beschrieben:
Beitrag "Re: Temperatur 0,1°C Auflösung"Beitrag "Re: Temperatur 0,1°C Auflösung"
Bei den Moderneren ist das nur noch emuliert, deshalb ist Count_Modulo
CountPerDegree (oder wie es heißt) immer 16 und Count_Remain geht von
0-15.
D.h. es sind effektiv 1/16 °C, d.h. ein LSB ist 0,0625°C.
Bei negativen Temperaturen ist das ein bisschen verzwickt, aber es sind
doch Beispiele angegeben.
Ich kann mich allerdings an einen Thread hier erinnern, in dem behauptet
(und auch zu beweisen versucht) wurde, die Formel sei (für negative
Temperaturen?) falsch. Ob da was Wahres dran war? Ich habe es nicht
verifiziert.
eProfi schrieb:> Beim DS18B20 ist die Berechnung mit den Count_Remain nur ein> überbleibsel aus alten Tagen,
Der B20 liefert fix und fertig in 1/16°C. Es ist der S20, der zunächst
in 1/2°C liefert und bei dem man den Rest für 1/16°C selber reinrechnen
kann.
> Bei den Moderneren ist das nur noch emuliert, deshalb ist Count_Modulo> CountPerDegree (oder wie es heißt) immer 16 und Count_Remain geht von> 0-15.> D.h. es sind effektiv 1/16 °C, d.h. ein LSB ist 0,0625°C.
Und das ist leider sehr schade, weil die alten Sensoren noch eine
relative Genauigkeit von 1/100 Grad hatten. Und das war auch wirklich
nutzbar. Ich habe damit mal einen Peltierregler gebaut der etwa auf
1-2/100 Grad kam. Mit den neuen Teilen ist man leider eine
Groessenordnung schlechter.
Olaf
Der DS1624 ist auch noch ein "direct to digital"-Wandler.
Die Liste hatte ich vorschnell aus dem pdf (siehe related products)
kopiert, da sind aber Unstimmigkeiten:
DS1820: nur der 1820, nicht jedoch DS18S20 und DS18DS2434 ist ein veralteter Battery ID/Monitor Chip
DS2435 ist bei Maxim überhaupt nicht (mehr?) als Bauteil gelistet
Hinweis: ein paar der Sensoren können als stand-alone-Thermostaten
verwendet werden:
DS75 i2c fixed 75/80°C
DS1620 3w digi:5,90
DS1621 2w digi:3,90
DS1626 3w 3 outputs 8µSOP digi06:--
DS1629 2w digi:6,57 can be set to begin measuring after power up, but
no word of "stand alone"
DS1631A 2w digi06:-- only A starts after power on
DS1720 3w standalone thermostat
DS1726 3w 3 outputs 8µSOP standalone digi06:--
DS1731A gibt es nicht
DS1775 i2c fixed 75/80°C digi06:--
DS1821 1w digi:4,87
Eine sehr kompakte Auswertung der neueren emulierten Bandgap-Sensoren
(16 counts per degree) findet ihr hier:
Beitrag "Re: DS18S20 - extended resolution bei Temperaturen um 0°C"
Auszug aus dem DS1624-Datenblatt:
The slope accumulator is used to compensate for the nonlinear behavior
of the oscillators over temperature, yielding a high resolution
temperature measurement. This is done by changing the number of counts
necessary for the counter to go through for each incremental degree in
temperature.
Hat schon mal jemand eine Liste erstellt, bei welcher Temperatur welcher
counts-per-degree-Wert zugeordnet ist. Dazu schweigen sie sich nämlich
aus, ob der berechnet wird, oder wie ich oben schrieb (vermutete), aus
einem internen Eeprom stammt. Wenn letzteres, ob und wie man darauf
zugreifen kann.
Bei einem DS1620 weiß ich zwei Werte noch (s. o.g. 2004-Link):
> Die Auflösung ist temperaturabhängig!> bei 0°C ist sie 1/125°> bei 125°C ist sie 1/195°
Das sind 15+ Bit Auflösung (8 Vorkomma- und 7 Nachkommabits).