Forum: Mikrocontroller und Digitale Elektronik DS18S20 hohe Auflösung berechnen


von Ich (Gast)


Lesenswert?

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.

von Lehrmann M. (ubimbo)


Lesenswert?

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ß

von Ich (Gast)


Lesenswert?

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?

von Visitor (Gast)


Lesenswert?


von Ich (Gast)


Lesenswert?

Danke jetzt hab ichs verstanden.
http://frank.bol.ucla.edu/2313Temper8.htm

von eProfi (Gast)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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.

von Ich (Gast)


Lesenswert?

Okay danke, bei negativen wirds dann wohl genauso gehen -> ausprobieren.

von Olaf (Gast)


Lesenswert?

> 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

von Ich (Gast)


Lesenswert?

Wie heißen denn diese alten Temperatursensoren?

von eProfi (Gast)


Angehängte Dateien:

Lesenswert?

DS1620, DS1621, DS1623, DS1625, DS1820, DS1821, DS2434, DS2435

die genauen Hintergründe stehen in der schwer zu findenden (und deshalb 
hier angehängten) Application Note 105 app105.pdf (08.11.1999)
High Resolution Temperature Measurement
With Dallas Direct-to-Digital Temperature Sensors

habe ich 2004 schon beschrieben:
Beitrag "Re: 2 Dallas ds18s20 haben 3 Grad Unterschied"

von eProfi (Gast)


Lesenswert?

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 DS18
DS2434 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).

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.