Forum: Mikrocontroller und Digitale Elektronik DS18S20 One Wire Temperatur Sensor mit 16 Bit -> ich brauch aber nur 10 Bit


von Paul (Gast)


Lesenswert?

Hallo Forengemeinde,

ich kann mir aktuell die erweiterte 16 Bit Auflösung des DS18S20 
anschauen. Das funktioniert soweit.

Was mir nicht gefällt ist die 16 Bit Auflösung. Ich bin vom Thermometer 
aber 10 Bit gewöhnt.

Aktuell bekomme ich also folgende Nachkommastellen (vielfache von 
0,0625):

0,0625
0,125
0,1875
0,25
0,3125
0,375
0,4375
0,5
0,5625
0,625
0,6875
0,75
0,8125
0,875
0,9375
1

Ich steh irgendwie auf dem Schlauch wie ich das in 10 Bit Auflösung (0,1 
0,2  0,3  ....)umrechnen kann.

Hat jemand einen Tipp?

Gruß Paul

von Martin (Gast)


Lesenswert?

Hallo,

ich würds einfach um 6 bit nach rechts shiften, z.B.

Temp >>= 6;

oder ausführlicher:

Temp = Temp >> 6;

Grüße,
Martin

von Sven B. (scummos)


Lesenswert?

10 Bit hat mit 0.1, 0.2, 0.3 relativ wenig zu tun ... dafür sollte man 
den Wert eher runden:
temp = ((int)(temp*10)) / 10

von Paul (Gast)


Lesenswert?

Ist (temp *10) / 10 nicht wieder temp?
Kannst Du genauer sagen was bei dieser Rechnung passiert?

von Tom (Gast)


Lesenswert?

Sven B. schrieb:
> 10 Bit hat mit 0.1, 0.2, 0.3 relativ wenig zu tun ... dafür sollte man
> den Wert eher runden:
> temp = ((int)(temp*10)) / 10

Der DS18B20 gibt die Werte als Integer in Einheiten von 1/16°C raus.

Paul schrieb:
> Aktuell bekomme ich also folgende Nachkommastellen (vielfache von
> 0,0625):

Die Zahlenwerte mit den Nachkommastellen werden von deiner (uns 
unbekannten) Software erzeugt.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Also vielfache von 0,1
statt vielfache von 0,0625.

Richtig?

@Martin:
Temp >>= 6; // ergibt Vielfache von 40°

@Paul: Integer mit 0,1-Faktor oder Fließkomma?

Integer mit 0,1-Faktor heißt:

1 entspricht 0,1
2 entspricht 0,2
3 entspricht 0,3
…

von Paul (Gast)


Lesenswert?

@ Torsten:
genau, ein vielfaches von 0,1 wäre schön.

Aktuell nutz ich Fließkomma, Integer würde aber auch gehen

von Paul (Gast)


Lesenswert?

ach, es gibt "round" in C - gerade erst gefunden, war mir nicht klar. 
Damit gehts.

von Torsten C. (torsten_c) Benutzerseite


Angehängte Dateien:

Lesenswert?

Paul schrieb:
> Ist (temp *10) / 10 nicht wieder temp?

Ja, aber das (int) macht aus Float ein Int ohne Nachkomma-Ziffern.

Paul schrieb:
> ach, es gibt "round" in C

Ist sogar noch schöner als int, aber man kann auch int nehmen und vorher 
0,5 addieren.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Paul schrieb:
> Aktuell bekomme ich also folgende Nachkommastellen (vielfache von
> 0,0625):

 Soviel ich weiß, hat der DS18S20 eine Genauigkeit von +/- 0.5C und
 eine Auflösung von 0.5C bei 9bit (bit 0).
 Genauer als 0.5C kann es also nicht sein, alles andere ist Blödsinn,
 selbst wenn man mit 1600 bit, anstatt mit 16 bit rechnet.

von (prx) A. K. (prx)


Lesenswert?

Marc V. schrieb:
>  Soviel ich weiß, hat der DS18S20 eine Genauigkeit von +/- 0.5C und
>  eine Auflösung von 0.5C bei 9bit (bit 0).

Es gibt noch einen Rest in einem weiteren Byte, mit dem man auf 1/16 
Auflösung kommt. Der Unterschied zum 18B20 ist nur die Art, wie man an 
diese Auflösung kommt.

>  Genauer als 0.5C kann es also nicht sein, alles andere ist Blödsinn,

Genauer als 0,5°C wird es zwar nicht, aber grad bei 
Innen/Aussentemperaturen ist eine höhere Auflösung zwecks Tendenzanzeige 
durchaus nützlich.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

A. K. schrieb:
> Es gibt noch einen Rest in einem weiteren Byte, mit dem man auf 1/16
> Auflösung kommt.
 Das ist mir bekannt, aber diese Auflösung ist nutzlos wenn die
 Genauigkeit selbst dafür nicht reicht.

> Innen/Aussentemperaturen ist eine höhere Auflösung zwecks Tendenzanzeige
> durchaus nützlich.
 Ja, aber das ändert nichts an der Genauigkeit, somit ist die Tendenz
 nur auf +/- 0,5C genau. Durch diese 0,5C Ungenauigkeit kann es dann
 sehr wohl eine zackige Kurve geben, obwohl die Temperatur linear
 ansteigt oder sogar gar nicht verändert wird.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Marc V. schrieb:
>  Ja, aber das ändert nichts an der Genauigkeit, somit ist die Tendenz
>  nur auf +/- 0,5C genau.

Zeitliche Stabilität und Linearität sind de fakto deutlich besser als 
die garantierte absolute Genauigkeit. Deshalb ist eine Tendenzanzeige 
mit 1/16 °C Schritten durchaus zu gebrauchen, auch wenn die absolute 
Genauigkeit nicht mithält.

Schau dir so ein Teil mal im praktischen Betrieb an. Die theoretisch 
erlaubte zackige Kurve tritt zumindest bei mir in der Praxis eben nicht 
auf. Alle 5 Sensoren, die ich grad in Beobachtung habe, schwanken 
maximal in der letzten Stelle. Meist nicht einmal dies.

: Bearbeitet durch User
von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Marc V. schrieb:
>  somit ist die Tendenz nur auf +/- 0,5C genau.

Aber die "Tendenz" bezieht man immer auf die vorher gemessenen Werte, 
und die Abweichung zwischen "realer" und "gemessener" Temperatur ändert 
sich nicht Sprunghaft.

Der "differentielle Teil" (AC-Anteil) ist also quasi vom DC-Fehler 
befreit, wenn diese Formulierung hilft.

@A. K.: Wie Du schon sagtest, nur anders formuliert. Hoffentlich 
versteht er es nun.

@Paul: Problem gelöst? Thread für Debatten freigegeben?

: Bearbeitet durch User
von Tom (Gast)


Lesenswert?

A. K. schrieb:
> Zeitliche Stabilität und Linearität sind de fakto deutlich besser als
> die garantierte absolute Genauigkeit. Deshalb ist eine Tendenzanzeige
> mit 1/16 °C Schritten durchaus zu gebrauchen, auch wenn die absolute
> Genauigkeit nicht mithält.

Leider ist die Rauschamplitude des Analogteils vom DS18B20 nicht groß 
genug, so dass man auch bei Mittelung nicht über die Auflösung von 1/16 
Grad hinaus kommt.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Tom schrieb:
> so dass man auch bei Mittelung nicht über die Auflösung von 1/16
> Grad hinaus kommt

Was erwartest Du? Maxim/Dallas wird die ADC-Auflösung schon sinnvoll an 
das Rauschen angepasst haben, darin sind die gut!

Aber 1/16 Grad Auflösung bei 1/2 Grad Genauigkeit für 60 Cent sind doch 
schon genial. Ich habe viel gesucht und nichts besseres gefunden.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Torsten C. schrieb:
> @A. K.: Wie Du schon sagtest, nur anders formuliert. Hoffentlich
> versteht er es nun.
 Mir scheint, du versteht es nicht.
 Ob der Fehler bei einem bestimmten Exemplar größer oder kleiner ist,
 tut nichts zur Sache. Garantiert ist nur +/- 0,5C und damit hats.

> Der "differentielle Teil" (AC-Anteil) ist also quasi vom DC-Fehler
> befreit, wenn diese Formulierung hilft.
 Nein, tut es nicht. Quasi vom Fehler befreit ist eben nur "quasi".
 Wenn er 4 hintereinanderfolgende differentiele Messungen durchführen
 würde, dann könte das sogar stimmen. Aber hier ist jede Messung fur
 sich und hat mit vorhergehenden genau nichts zu tun.
 Hoffentlich verstehst du es nun.

 P.S.
 Und lerne "Auflösung" und "Genauigket" auseinander zu halten.
 Bestes Beispiel ist GPS.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Marc V. schrieb:
>  Ob der Fehler bei einem bestimmten Exemplar größer oder kleiner ist,
>  tut nichts zur Sache.

Wenn ein Sensor bei langsamer realer Temperaturabsenkung über zig 
Messungen hinweg allenfalls in der letzten Stelle schwankt und darüber 
hinaus nur sinkende Werte liefert, dann ist das eine praktisch gut 
brauchbare Tendenzanzeige. Weil man das dann auch umdrehen kann, d.h. 
wenn die Anzeige steigt, dann ziemlich sicher auch die reale Temperatur.

Dass man auf dieser Basis keine formelle Präzision bekommt ist klar. 
Ebenso, dass man das nicht einklagen kann. Aber darum geht es meist 
nicht. Ich will wissen ob es tendentiell wärmer oder kälter wird. Und 
dafür reicht es faktisch aus.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

A. K. schrieb:
> Dass man auf dieser Basis keine formelle Präzision bekommt ist klar.
> Ebenso, dass man das nicht einklagen kann. Aber darum geht es meist
> nicht. Ich will wissen ob es tendentiell wärmer oder kälter wird. Und
> dafür reicht es faktisch aus.

 Stimme ich voll zu.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

@Vescomp: Schade, dann hilft wohl nur,
was A. K. schrieb:
> Schau dir so ein Teil mal im praktischen Betrieb an.

Wir haben das Kapitel hinter uns.

Marc V. schrieb:
> Stimme ich voll zu.

PS: Ach, nun doch? Dann sind wir uns ja einig. Schön!

: Bearbeitet durch User
von _Gast_ (Gast)


Lesenswert?

Faktisch rechnen sich die Bastler immer alles schön. Da sind die 
Grundlagen der Messtechnik halt weit weg.
Aber solange die Tendenz stimmt ist man glücklich (und stolz)...

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Torsten C. schrieb:
> Wir haben das Kapitel hinter uns.
 Wer ist wir ?


> PS: Ach, nun doch? Dann sind wir uns ja einig. Schön!
 Nein, sind wir nicht, da die Erklärung anscheinend zu kompliziert für
 dich war.

 Hier geht es etwas einfacher nur fur dich:
 Ich habe auch einen chinesichen Multimeter, da ist die Auflösung im
 mV-Bereich 0,1mV, aber der Fehler liegt bei 2%, das ist 4mV.
 Dieser Fehler ist eine Konstante über den gesamten Messbereich.

 Ob der jetzt 99.8mV oder 99.9mV anzeigt, dürfte mir ziemlich egal
 sein, ich kann mich nur darauf verlassen, dass der gemessene Wert
 zwischen 95.9mV und 103.9mV liegt.

 Hoffe, sogar du hast es endlich verstanden.

: Bearbeitet durch User
von Tom (Gast)


Angehängte Dateien:

Lesenswert?

Torsten C. schrieb:
> Was erwartest Du? Maxim/Dallas wird die ADC-Auflösung schon sinnvoll an
> das Rauschen angepasst haben, darin sind die gut!

Ich erwarte, dass ich bei Mittelung über viele Messungen einen 
Mittelwert bekomme, der beliebig nahe am realen Wert liegt. Das 
funktioniert aber nur, wenn das Rauschen deutlich größer als die 
Quantisierungsstufen ist. Beim DS18B20 ist das nicht der Fall, so dass 
sich durch Mittelung keine höhere Auflösung ergibt.

Trotz Mittelung über viele Werte ergibt sich bei gleichmäßigem, 
langsamen Temperaturanstieg kein gleichmäßig langsam steigender 
gleitender Mittelwert, sondern es sind Stufen mit der Auflösung des 
Digitalsignals vorhanden.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Tom schrieb:
> Trotz Mittelung über viele Werte ergibt sich bei gleichmäßigem,
> langsamen Temperaturanstieg kein gleichmäßig langsam steigender
> gleitender Mittelwert, sondern es sind Stufen mit der Auflösung des
> Digitalsignals vorhanden.

 Solche Messreihen habe ich nur bei Sensoren die draussen angebracht
 waren, gekriegt.
 Innentemperatur ist zwar auch ziemlich zackig, aber nicht so.

 War dein Sensor draussen ?

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Tom schrieb:
> Das funktioniert aber nur, wenn das Rauschen deutlich größer als die
> Quantisierungsstufen ist.

Eben! Sag ich ja.

Marc V. schrieb:
> etwas einfacher

Einfach ist Gut.
Ein Multimeter hat Offset und Rauschen. Das ist beim DS18B20 genau so.

Offset und Rauschen sind zwei verschiedene Dinge, egal ob mit oder ohne 
Polemik.

von Tom (Gast)


Lesenswert?

Marc V. schrieb:
> War dein Sensor draussen ?

Hast du auf meine Skalierung geachtet?
Draußen rauscht die Lufttemperatur wesentlich stärker. Die gezeigten 
Messungen stammen von einem im Raum montierten Sensor, der thermisch gut 
an eine große Metallmasse angekoppelt ist und dadurch thermisch sehr 
träge ist.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Tom schrieb:
> Hast du auf meine Skalierung geachtet?

 LOL.
 Nein, aber jetzt wo du meine Nase daraufgestossen hast...

 OK, passt.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Tom schrieb:
> sondern es sind Stufen mit der Auflösung des
> Digitalsignals vorhanden

Stufen mit der Auflösung sind klar. Das geht ja auch nicht anders. 
Digital ist halt nicht analog.

Plateaus im Abstand der Genauigkeit sind natürlich das anderes.
Ob diese "Plateaus" von Dallas/Maxim so gewollt sind? Pfiffig!
https://www.mikrocontroller.net/attachment/262456/DS18B20_gemittelt.png

: Bearbeitet durch User
von Tom (Gast)


Lesenswert?

Torsten C. schrieb:
> Stufen mit der Auflösung sind klar. Das geht ja auch nicht anders.
> Digital ist halt nicht analog.

Warum sind die klar? Es geht hier nicht um Einzelwerte, sondern um 
Mittelwerte.

Wenn im Vergleich zu den Quantisierungsstufen genügend Rauschen (oder 
ein Dithersignal) auf dem Analogsignal des Sensors liegt, muss sich 
statistisch betrachtet der genaue Mittelwert des Analogsignals in der 
Häufigkeit des Auftretens der benachbarten Quantisierungsstufen wieder 
finden. Und dann verschwinden in einem gleitenden Mittelwerte über das 
Digitalsignal die Quantisierungsstufen. In meinen Beispieldaten sieht 
man, dass es nur für ein Intervall von etwa 30% der Höhe der 
Quantisierungsstufen klappt, weil das Rauschen/Dither nicht groß genug 
ist. Dazwischen "klebt" der Mittelwert an einer Quantisierungsstufe.

von Torsten C. (torsten_c) Benutzerseite


Angehängte Dateien:

Lesenswert?

Tom schrieb:
> Es geht hier nicht um Einzelwerte, sondern um
> Mittelwerte.

Ah, ich habe mal horizontale Linien rein gemalt und verstehe jetzt erst, 
was Du meinst.

Vielleicht funktioniert Deine Mittelwertbildung nicht richtig. Zeig mal 
die Roh-Werte vor Deiner Glättung, sonst kann ich Dir auch nicht 
helfen.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Torsten C. schrieb:
> Vielleicht funktioniert Deine Mittelwertbildung nicht richtig. Zeig mal
> die Roh-Werte vor Deiner Glättung, sonst kann ich Dir auch nicht
> helfen.

 Haha.
 Habe nicht gelesen, dass er dich um Hilfe gebeten hat, mal abgesehen
 davon, dass er weiss wovon er redet, im Gegensatz zu... ?

 Ja, genau.

von Tom (Gast)


Lesenswert?

Torsten C. schrieb:
> Vielleicht funktioniert Deine Mittelwertbildung nicht richtig.

Die funktioniert prima. Was ich für die Erhöhung der Auflösung auswerte, 
ist das (mittlere) Tastverhältnis, vom Wackeln des untersten Bits.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Tom schrieb:
> Die funktioniert prima.

Wenn Du meinst …

Dann ist der Sensor schuld und die Erde ist eine Scheibe.

Falls Du mit dem Ergebnis DS18B20_gemittelt.png^^ unzufrieden bist, 
hätte man ja versuchen können, Dir zu helfen.

Marc V. schrieb:
> Habe nicht gelesen, dass er dich um Hilfe gebeten hat

Stimmt. Dann hat sich das ja eh erledigt.

von Peter D. (peda)


Lesenswert?

Tom schrieb:
> Wenn im Vergleich zu den Quantisierungsstufen genügend Rauschen (oder
> ein Dithersignal) auf dem Analogsignal des Sensors liegt

Genau das ist der Knackpunkt, Dein ADC-Wert muß wackeln wie ein 
Lämmerschwanz.
Gute ADCs liefern Dir aber auf ein LSB stabile Werte und da kannst Du 
kein einziges Bit mehr Auflösung rauskitzeln.

von Tom (Gast)


Lesenswert?

Peter D. schrieb:
> Genau das ist der Knackpunkt, Dein ADC-Wert muß wackeln wie ein
> Lämmerschwanz.

Selbst bei Spiegelgalvanometern hat man ein Dithersignal überlagert, um 
die Reibung zu überwinden. Ich nenne die Quantisierungsstufen jetzt 
einfach mal "digitale Haftreibung" ...

> Gute ADCs liefern Dir aber auf ein LSB stabile Werte und da kannst Du
> kein einziges Bit mehr Auflösung rauskitzeln.

Es kommt immer drauf an, was man mit dem digitalen Ausgangssignal vor 
hat. Jeder Class-D Verstärker und jeder DC/DC-Schaltwandler erhebt das 
Wackeln des einen Bits zum Grundprinzip ;-)

Aber paßt schon - ich beklage mich doch gar nicht ernsthaft. Für einen 
busfähigen Sensor, der weniger als 1€ kostet, bin ich mit der Auflösung 
ganz zufrieden.

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.