Guten Morgen,
ich habe kürzlich drei vorkonfektionierte Temperatursensoren mit
Metallhülse und DS18B20 gekauft. Der Händler gilt als seriös, die
Sensoren sollen von Maxim sein und die ausgelesenen ROM-IDs wirken gemäß
der hier öfter erwähnten GitHub-Seite unverdächtig. Die gemessenen
Temperaturen erscheinen mir jedoch etwas zu hoch. Ich habe leider kein
kalibriertes Referenz-Thermometer, war aber etwas überrascht, dass die
Temperatur in meiner Wohnung laut Debug-Ausgabe knapp 24 Grad C betragen
soll:
1
Sensor: S01 Temperatur in °C: 23.81 Sechzehntelgrad: 381 Scratchpad: 7D014B467FFF031024
2
Sensor: S02 Temperatur in °C: 23.88 Sechzehntelgrad: 382 Scratchpad: 7E014B467FFF021025
3
Sensor: S03 Temperatur in °C: 23.94 Sechzehntelgrad: 383 Scratchpad: 7F014B467FFF011033
Die Sensoren waren während der Messung dicht zusammen und im C-Programm
wird die Temperatur wie folgt berechnet...
Wenn ich das Datenblatt richtig verstehe, bedeuten die 7F (5. Byte von
links) eine Auflösung von 12 Bit, also 1/16 Grad Auflösung.
Wäre hier jemand bereit meine Scratchpad-Daten zu überprüfen oder kann
ich die Temperaturen irgendwie selbst prüfen?
Vielen Dank...
Leon
Leon schrieb:> überrascht, dass die> Temperatur in meiner Wohnung laut Debug-Ausgabe knapp 24 Grad C betragen> soll:
Die Sensoren erwärmen sich beim Messen, ja nach Aufbau und Messfrequenz
unterschiedlich.
Wie oft misst du die Temperatur? Liegen die Sensoren frei und kann die
Luft zirkulieren?
Ein simpler Test ist ein Glas Wasser mit Eiswürfeln drin. Das hat 0°C.
Bitte gib mehr Infos zum Aufbau.
Fn schrieb im Beitrag #7261258:
> Hastdu den sensor dabei angefasst?> Hastdu den sensor dabei angehaucht?> Hastdu eine starke arbeitslampe?
3 mal Nein.
Georg G. schrieb:> Wie oft misst du die Temperatur? Liegen die Sensoren frei und kann die> Luft zirkulieren?
Alle 30 Sekunden. Die Kabel liegen auf einer Schachtel und die Sensoren
schweben ca. 10 cm über einem Tisch.
Georg G. schrieb:> Ein simpler Test ist ein Glas Wasser mit Eiswürfeln drin. Das hat 0°C.Bauform B. schrieb:> Fieberthermometer und viel! warmes Wasser...
Beides gute Ideen. Das werde ich ausprobieren.
Leon schrieb:> Wäre hier jemand bereit meine Scratchpad-Daten zu überprüfen oder kann> ich die Temperaturen irgendwie selbst prüfen?
Sollte passen. Hier eine Funktion, die ich vor Jahren mal für den 18B20
geschrieben hatte:
Leon schrieb:> war aber etwas überrascht, dass die> Temperatur in meiner Wohnung laut Debug-Ausgabe knapp 24 Grad C betragen> soll:> Sensor: S01 Temperatur in °C: 23.81 Sechzehntelgrad: 381 Scratchpad:> 7D014B467FFF031024> Sensor: S02 Temperatur in °C: 23.88 Sechzehntelgrad: 382 Scratchpad:> 7E014B467FFF021025> Sensor: S03 Temperatur in °C: 23.94 Sechzehntelgrad: 383 Scratchpad:> 7F014B467FFF011033
Geht's noch? Du hast drei Sensoren, die um +/- 1/16 sprich +/- 0,125°C
abweichen und heulst rum? Geht's noch? Die Dinger sind auf +/-0,5°C
GENAU, d.g. +/- 8/16 °C!!!
Leon schrieb:> int16_t sechzehntel_grad = (rx_byte_buffer[1]<<8) + rx_byte_buffer[0];> temperatur_sensoren[counter_sensoren].sensor_temperatur => (float)sechzehntel_grad * 0.0625f;
Fließkommarechung ist zwar einfach, braucht hier aber keiner.
Festkommaarithmetik reicht locker und spart ggf. Speicherplatz.
1
temp=sechzehntel_grad*10/16;// 0.1 °C Auflösung
2
temp=(sechzehntel_grad+8)*10/16;// 0.1 °C Auflösung, richtig runden
3
temp=sechzehntel_grad/16;// 1 °C Auflösung
4
temp=(sechzehntel_grad+8)/16;// 1 °C Auflösung, richtig runden
Falk B. schrieb:> Fließkommarechung ist zwar einfach, braucht hier aber keiner.
Warum einfach, wenn's auch umständlich geht? ;-)
Ich hatte damals noch eine Reihe anderer Sensoren im Test, u.a. SHT-21,
und anhand deren hundertstel Kelvin konntest du beispielsweise die
Richtung des Luftstroms feststellen, der über die Sensoren zog.
Wenn ich Dezimalstellen haben möchte, ist die erste Wahl, dafür
Gleitkomma zu nehmen. So viel kostet das selbst auf einem AVR nicht, von
ARM etc. ganz zu schweigen.
Lediglich, falls das Projekt dann am Ende nicht in den geplanten Flash
passt, würde ich über den Aufwand für eine Minimierung nachdenken. Davor
ist das verschwendete Lebenszeit (für den nicht genutzten Flash bekomme
ich kein Geld zurück).
Falk B. schrieb:> Geht's noch? Du hast drei Sensoren, die um +/- 1/16 sprich +/- 0,125°C> abweichen und heulst rum? Geht's noch? Die Dinger sind auf +/-0,5°C> GENAU, d.g. +/- 8/16 °C!!!
Der TO wollte lediglich wissen ob die knapp 24°C korrekt sind, da er von
einer niedrigeren Umgebungstemperatur ausgeht, die bisher jedoch nicht
anderweitig gemessen wurde. Erst Lesen, dann rumpöbeln!
Jörg W. schrieb:> Wenn ich Dezimalstellen haben möchte, ist die erste Wahl, dafür> Gleitkomma zu nehmen.
Bitte erklären.
Der Sensor hat eine Auflösung von 1/16K. Die Dynamik einer Float-Zahl
wird nicht benötigt und damit ist der Platz für den Exponenten
verschwendet.
Wolfgang schrieb:> Die Dynamik einer Float-Zahl wird nicht benötigt und damit ist der Platz> für den Exponenten verschwendet.
Also ein(!) Byte zu viel.
Georg G. schrieb:> Die Sensoren erwärmen sich beim Messen, ja nach Aufbau und Messfrequenz> unterschiedlich.
Sofern die Sensoren ja in ihrer Edelstahlumhüllung sind, und nicht
gerade unter 10 sec Rhytmus gemessen wird, sollte das nichts ausmachen.
Sind die Sensoren 'Blank', dann merkt man selbst den 10-sek. Rhytmus.
Jörg W. schrieb:> Wenn ich Dezimalstellen haben möchte, ist die erste Wahl, dafür> Gleitkomma zu nehmen. So viel kostet das selbst auf einem AVR nicht, von> ARM etc. ganz zu schweigen.>> Lediglich, falls das Projekt dann am Ende nicht in den geplanten Flash> passt, würde ich über den Aufwand für eine Minimierung nachdenken. Davor> ist das verschwendete Lebenszeit (für den nicht genutzten Flash bekomme> ich kein Geld zurück).
vgl.
https://hackernoon.com/the-rules-of-optimization-why-so-many-performance-efforts-fail-cf06aad89099
- The First Rule of Program Optimization: Don’t do it.
- The Second Rule of Program Optimization (for experts only!): Don’t do
it yet.
Meine Frau:
Neues Wohnzimmer mit Fussbodenheizung, Thermometer 21 Grad und mir ist
zu warm --> Thermometer kaputt!
Altes Wohnzimmer 24 Grad, mir ist kalt ??????
Falk B. schrieb:> Geht's noch? Du hast drei Sensoren, die um +/- 1/16 sprich +/- 0,125°C
Meine Überschlagsrechnung im Kopf kommt aber auf eine andere Zahl. Bei
1/8 komme ich auf 0,125. -> Ball flach halten!
Es wäre aber schön wenn der TO uns mitteilen würde welche Temperatur er
erwarten, wenn nicht 24°C?
Martin schrieb:> Es wäre aber schön wenn der TO uns mitteilen würde welche Temperatur er> erwarten, wenn nicht 24°C?
Leider kann ich Temperaturen nur sehr schlecht schätzen. Angesichts der
ständigen Appelle Energie zu sparen war ich jedoch erstaunt, dass ich
Raumtemperaturen haben soll, die fast schon als dekadent gelten. Zumal
es auf mich wie gesagt gar nicht übertrieben warm wirkte. Die Rohdaten
der Sensoren wollte ich gar nicht in Frage stellen.
Leon schrieb:> Leider kann ich Temperaturen nur sehr schlecht schätzen. Angesichts der> ständigen Appelle Energie zu sparen war ich jedoch erstaunt, dass ich> Raumtemperaturen haben soll, die fast schon als dekadent gelten.
Warum schätzen?
Pack die DS18B20 gemeinsam mit einem stinknormalen Zimmerthermometer in
einen Karton und vergleiche nach ca. 15 bis 30 Minuten die Thermometer.
Ich bin leider kein DS18x20 Experte, ich habe aber auch schon einige
Male zu hohe Temperaturen gemessen, einige Gründe würden ja bereits
aufgeführt. Eine einfache Kontrolle ist alles auszuschalten( am besten
weiträumig), abkühlen lassen und direkt nach dem einschalten die
Temperaturen beobachten.
Fn schrieb im Beitrag #7261750:
> Bessere variante ist sensor auf fett metallrohr zu kleben.> Das rohr saugt die eigenerwärmung ab.
Theoretisch ja... was aber, wenn der Sensor mittig in der Metallhülse
steckt und mit einem Wald und Wiesen Epox eingeklebt ist und seinerseits
im üblichen TO92 Gehäuse steckt? Edelstahl (die Vergusshülse) ist auch
kein besonders guter Wärmeleiter. Lege es mal darauf an und lies
ununterbrochen den Sensor in einem Glas Eiswasser aus. Wenn die
gemessene Temperatur über 0 Grad liegt, hast du den Beweis für meine
Theorie ;-)
Gerald B. schrieb:> Edelstahl (die Vergusshülse) ist auch> kein besonders guter Wärmeleiter.
Man muss die Wärme doch nicht der Länge nach durch die Hülse ableiten.
Das Metall ist dünn. Viel kritischer ist hier der
Wärmeübergangswiderstand.
Ich habe heute einen Test mit Eiswürfeln in kaltem Wasser gemacht. Laut
Sensor konnte ich die Flüssigkeit auf ca. 0,5 Grad C herunterkühlen,
mehr schien auch mit vielen Eiswürfeln und intensivem Umrühren nicht
möglich zu sein. Das reicht mir aber völlig aus, zumal die Sensoren sehr
wenig von einander abzuweichen scheinen:
1
Sensor: S01 Temperatur in °C: 0.44 Sechzehntelgrad: 7 Scratchpad: 07004B467FFF0910E7
2
Sensor: S02 Temperatur in °C: 0.44 Sechzehntelgrad: 7 Scratchpad: 07004B467FFF0910E7
3
Sensor: S03 Temperatur in °C: 0.50 Sechzehntelgrad: 8 Scratchpad: 08004B467FFF0810D9
Nachdem dieser Test erfolgreich war, habe ich die Sensoren an einer
knapp 30 Meter langen CAT 7 S/FTP Netzwerkleitung mit AWG26 Kupferadern
angeschlossen. Leider bekomme ich nun häufig CRC-Fehler, wobei es nicht
immer die selben Sensoren sind. Mal funktionieren alle Sensoren, mal ein
paar und mal gar keiner.
Die Sensoren hängen auf den letzten 10 Metern über 1 Meter lange
Stichleitungen am Strang und sind 3-Adrig angeschlossen, der VDD Pin der
Sensoren bekommt also permanent 3,3 Volt. Für die Datenübertragung habe
ich mich an der folgenden Schaltung aus der App Note "Using a UART to
Implement a 1-Wire Bus Master" orientiert:
https://www.maximintegrated.com/content/dam/images/design/tech-docs/214/214fig01.png
Der TX des µC ist als Push-Pull und der RX ist als OpenDrain
konfiguriert, beide ohne interne PullUp/PullDown. Mit den häufig
empfohlenen PullUps wie z.B. 4K7 funktionierte es gar nicht, erst als
ich einen 470 Ohm Widerstand einbaute, ließen sich Daten abrufen. Noch
weiter runter wollte ich aber erstmal nicht gehen.
Ich hatte nicht erwartet, dass ich bei 3 Sensoren an einem einzelnen
Strang schon bei 30 Metern Probleme bekomme. Hat jemand eine Idee, was
hier das Problem sein könnte?
Leon schrieb:> Ich hatte nicht erwartet, dass ich bei 3 Sensoren an einem einzelnen> Strang schon bei 30 Metern Probleme bekomme. Hat jemand eine Idee, was> hier das Problem sein könnte?
Die 3,3 Volt statt der 5 Volt.
Datenblätter sind das Eine- die Realität das Andere.
Leon schrieb:> Ich hatte nicht erwartet, dass ich bei 3 Sensoren an einem einzelnen> Strang schon bei 30 Metern Probleme bekomme. Hat jemand eine Idee, was> hier das Problem sein könnte?
1Wire ist für 30m spezifiziert?
Da ist ja jeder blöde der hier extra Feldbusse für solche
Sensornetzwerke benutzt.
Leon schrieb:> Ich hatte nicht erwartet, dass ich bei 3 Sensoren an einem einzelnen> Strang schon bei 30 Metern Probleme bekomme. Hat jemand eine Idee, was> hier das Problem sein könnte?
Zu lange Leitung ;-)
Kannst Du Dir die Signale auf einem Oszilloskope anzeigen lassen und
ggf. ein Foto davon zeigen?
Bei mir funktionieren die Chips problemlos über 15-20 Meter. Und da
hängen 3-4 Stück auch noch an einen Strang. Allerdings habe ich an den
Knotenpunkten/Verzweigungen 10 uF Kondis mit drauf gemacht. und auch bei
den entfernten Chips hängen zwischen +Ub und Gnd 10 uF Kondis.
Betrieben werden dies über einen USB - 1-Wire Adapter von Denkovi.
Keinerlei falsche Werte soweit.
Es ist das Eine, ins Datenblatt von Maxim zu gucken. Das Andere ist
dann, einen Chinaclon zu verbauen. Alles was nicht vom Distributor,
sondern von Ali, Amazon oder irgendwelchen Makershops kommt, ist mit an
Sicherheit grenzender Wahrscheinlichkeit ein Nachbau. Das reicht von
Leergehäusen über umgelabelte Transistoren bis "zu 99% kompatibel zum
Original" ;-)
Leon schrieb:> Ich hatte nicht erwartet, dass ich bei 3 Sensoren an einem einzelnen> Strang schon bei 30 Metern Probleme bekomme. Hat jemand eine Idee, was> hier das Problem sein könnte?
Das CAT 7-Kabel hat nicht zufällig eine Schirmung, die die kapazitive
Belastung hochtreibt?
Guck dir die Signale an, statt blind die Pull-Up Widerstände zu
verkleinern.
Leon schrieb:> Ich habe heute einen Test mit Eiswürfeln in kaltem Wasser gemacht. Laut> Sensor konnte ich die Flüssigkeit auf ca. 0,5 Grad C herunterkühlen,> mehr schien auch mit vielen Eiswürfeln und intensivem Umrühren nicht> möglich zu sein. Das reicht mir aber völlig aus, zumal die Sensoren sehr> wenig von einander abzuweichen scheinen:> Sensor: S01 Temperatur in °C: 0.44 Sechzehntelgrad: 7 Scratchpad:> 07004B467FFF0910E7> Sensor: S02 Temperatur in °C: 0.44 Sechzehntelgrad: 7 Scratchpad:> 07004B467FFF0910E7> Sensor: S03 Temperatur in °C: 0.50 Sechzehntelgrad: 8 Scratchpad:> 08004B467FFF0810D9
Mit deiner Ausgabe in Sechzentelgrad wirst du mindesten EINEN Menschen
SEHR glücklich machen. Josef G.!
Beitrag "Hexadezimaler Ziffernsatz"> Der TX des µC ist als Push-Pull und der RX ist als OpenDrain> konfiguriert, beide ohne interne PullUp/PullDown. Mit den häufig> empfohlenen PullUps wie z.B. 4K7 funktionierte es gar nicht, erst als> ich einen 470 Ohm Widerstand einbaute, ließen sich Daten abrufen.
Sinnlos. Immer fest Druff ist dämlich.
> Ich hatte nicht erwartet, dass ich bei 3 Sensoren an einem einzelnen> Strang schon bei 30 Metern Probleme bekomme. Hat jemand eine Idee, was> hier das Problem sein könnte?
Dein Signal klingelt, weil den Treiber zu schnell schaltet. Pack einen
Serienwiderstand von ca. 33-100 Ohm an den Ausgang deines Masters.
Falk B. schrieb:> Jain. Wenn man weiß was man tut, kommt man auf 100m und mehr.
Ja, manchmal gehts dann. Zuverlässig und innerhalb der Spec ist das halt
nie.
Grundsätzlich: Nur die untersten 11 Bit auswerten, die oberen 5 Bits
enthalten andere Werte.
Die Länge der Leitung ist kein Problem. Wir haben 1-Wire mit mehr als
100m in Betrieb und ca. 40 DS1820 Sensoren; auch Stichleitungen von 3m
sind kein Problem. Allerdings bei uns mit 5V Versorgungsspannung.
Leon schrieb:> ich habe kürzlich drei vorkonfektionierte Temperatursensoren mit> Metallhülse und DS18B20 gekauft. Der Händler gilt als seriös, die> Sensoren sollen von Maxim sein und die ausgelesenen ROM-IDs wirken gemäß> der hier öfter erwähnten GitHub-Seite unverdächtig.
Was hast Du für die Sensoren bezahlt? Alles unter 3€ für den nackten
TCO92 und unter 15€ für den wasserdichten in Edelstahlhülse IST
verdächtig.
Im Zweifel einen aufsägen und nachschauen...
Die bei 0°C gemessenen Werte sind noch innerhalb der Spezifikation.
Ansonsten Fehlerrechnung machen. Einmal bei 0°C und einmal bei 30°C
messen. Abweichung linearisieren und den gemessenen Wert korrigieren.
Nach meiner Erfahrung sind die Sensoren sehr wiederholgenau, haben aber
eine Grundabweichung. Wenn man möchte, dann kann man den Korrekturwert
sogar im EEPROM des Sensors speichern und später wieder auslesen.
kann es auch nicht präzise überprüfen, ich hatte aber in verschiedenen
Schaltungen Werte etwa ein Grad über dem, was mir meine anderen
(ungenauen) Raumthermometer angezeigt haben. Und auch das Gefühl dass
die Anzeige nicht zu meiner Wahrnehmung passt. Von Reichelt im TO92,
verschiedene Exemplare, mal auf Breadboard, mal auf Platine gelötet, mal
am ESP32, mal am STM32
Das Beste ist es in so einem Falle, irgendwas anderes als Vergleich zu
nehmen, nicht drei Bauteile des gleichen Typs und vielleicht auch noch
aus dem gleichen Los.
Ich hatte vor Jahren SHT-21 als außerordentlich genau heraus gefunden
(obiger Code stammt just aus diesem Vergleich). Kann sein, dass es
inzwischen da auch besseres gibt.
Auch eins der üblichen IR-Thermometer taugt gut als Vergleich. Hatte
vorgestern ein LED-Thermometer aufgebaut und justieren wollen. Ohne
IR-Thermometer wäre ich nicht auf die Idee gekommen, dass das Teil in
dem Moment nur von den Arbeiten, der Beleuchtung etc. am Arbeitsplatz
noch 26 °C warm war (der Raum ist nicht so warm, der liegt eher bei 21 …
22 °C).