Arduino mit 3 DS18B20 Problem

Hi,

ich werde da nicht schlau…
Hardware:
Arduino mega 2650
Touch Display 2,8"
Relais-Modul, 2 Channel
Stromversorgung: USB oder 230->5V Wandler
3 Stück DS18B20 Onewire (3, 10, 25 m Kabel)
4,7kOhm Widerstand zwischen Signal und 5V

Software:
#include <stdint.h>
#include <SeeedTouchScreen.h>
#include <TFTv2.h>
#include <OneWire.h>
#include <DallasTemperature.h>

Wenn ich nur 2 Sensoren anschließe liefern diese meistens die richtige Temperatur.
Ab und zu kommen da -127 - also nicht alles sehr stabil
Sobald ich aber einen 3. dazugebe, liefern alle 3 immer -127.

Auch wenn sich das Display abschaltet (nach 30 Sekunden ohne Interaktion) liefern die beiden Sensoren, die zuvor ein korrektes Ergebnis geliefert haben nun -127…

Hat da jemand eine Idee?
Brauche ich einen anderen Widerstand?
Eine andere Stromquelle?

Bin für jede Hilfe dankbar…
Danke
Klaus

no sprecsnzie Deutch !

Poste bitte den kompletten Sketch in Code-Tags und dein Schaltbild, damit wir erkennen können, wo der Fehler versteckt ist.

Das ist dann wohl eine Sternverkabelung.
Da gibts wohl einen Reset.

Also wenn 3 Stück DS18B20 mit so extrem langen Kabeln ungeschirmt durch die Botanik laufen, dann darf man sich nicht über die andauernden -127 Grad ausgaben wundern. Da sollte man jedes Messkabel extra in einem Kat.07 Kabel geschirmt von Arduino bis zum Messpunkt führen. Und alle anderen Kabel auch geschirmt zu den Relais oder den anderen Sesoren führen. Die Schirme auf der Arduino Seite mit GND verbinden, und die Schirme am anderen Ende der Kabel nicht beschalten und gut Isolieren.

Kannst Du das mal begründen? OW kann weit mehr als nur ne Handvoll Meter auch ungeschirmt.

  • bei wikipedia zu finden und in den App-notes stehts wohl auch.

Danke für die Hinweise…das wusste ich nicht, dass ich geschirmte Kabel verwenden soll…klingt aber sehr logisch und werde ich versuchen…

Danke
Klaus

Was ist eine Sternverkabelung - ich habe alle 3 Kabel aller 3 Sensoren zum Arduino geführt und dort dafür einen PIN benutzt…

phu - das ist alles sehr kompliziert - ich habe da eine eigene Header Datei für den Touch gemacht und der Code ist ca. 700 Zeilen lang mit ca. 30 Funktionen…
Und eine Schaltbild wüsste ich auch nicht wie ich das mache…

Ich werde es einmal mit einem ganz einfachen Programm probieren - also ohne Touch und Relais…vielleicht bekomme ich das transparenter hin…

Nein, ist es nicht.
Komme zurück auf die einzelnen Bestandteile.
Nimm den Codeteil, der nicht das macht was Du willst, mach daraus einen kleinen Sketch und las den laufen. Macht der noch immer nicht das was Du willst, dann Aufbau → einmal als Zeichnung, einmal ggfls. als Foto Und das ganze mit dem "Kurz-"Code hier rein. Da findet sich schon was…
Es wird…

Ja, kann ich begründen. Bei nur 2 Meter hatte ich laufend diese Störung mit -127 Grad Anzeige. Dann habe ich die Kabel geschirmt, und die Störungen waren weg.

Ja, nur blöd wenn die Realität anders aussieht.

Bei mir hat geholfen den Pullup-Widerstand auf 2 KOhm zu senken.
Ich habe mir den Signalverlauf auf einem Speicheroszillioskop angeschaut bei 4,7 kOhm waren die Rechteckimpulse keine Rechteckimpulse mehr sondern schon sehr abgerundet. Und dann stimmt das Timing nicht mehr. Weil der erforderliche Mindest-Spannungspegel zu spät erreicht wird.

Mit 2 kOhm-Widerstand hatten die Impulse nur noch eine kleine abgerundete Ecke. Linienverkabelung ist besser.
Wenn die Sensoren alle in ganz verschiedene Richtungen gehen und du genügen IO-pins übrig hast könntest du die anderen beiden Sensoren auf ihren eigenen Bus klemmen. Dann hast du reinste Linienverkabelung.

vgs

1 Like

Servus Stefan,

das war die Lösung! :grinning:
Danke.

Habe 4 500Ohm Widerstände in Serie geschaltet - hatte keinen 2KOhm - und jetzt kommen die richtigen Werte sehr stabil und - so hoffe ich - auch sehr genau…

Was ist eine Linienverkabelung?

Danke
Klaus

Ne.
real passiert, was in AP-Notes und DaBla tatsächlich steht.
Die muss man aber lesen.
Ich habe in keinem DaBla zum OW / DS eine 4,7Kohm-Pflicht gelesen.
Auch wenn Du Lektüre nicht immer für sinnvoll halten möchtest:
https://www.maximintegrated.com/en/design/technical-documents/tutorials/1/148.html
Das gilt nicht nur für DS18x20

Der DS18B20 ist ein Sensor mit digitalem Interface. Da kommt entweder -127 raus oder ein vernünftiger Messwert. Das irgendwelche einzelnen Bits umfallen ist recht unwahrscheinlich. Die Werte kommen mit der Genauigkeit die - na wo steht das wohl ? … ---- ? — ?

Genau im Datenblatt angegeben sind. Beim DS18B20 ist die angegebene Genauigkeit 0,5°C. Das heißt der Hersteller gibt an, die Abweichung zwischen DS18B20-Sensormesswert und dem Messwert eines Millionen Euro teuren superspezial Temperatur-Referenz-Messgerät beträgt maximal ± 0,5°C.

Wenn du mehrere Sensoren direkt nebeneinander auf gleiche Temperatur kommen lässt sieht man das auch, dass die so ca 0,2 bis 0,5 Grad voneinander abweichen.

Die Auflösung ist sehr viel größer. Das bedeutet der DS18B20 kann ziemlich kleine Temperaturänderungen erfassen. Diese Auflösung ist einstellbar und beeinflusst auch die Messzeit.

Und wo steht das alles? - Ja Genau…

viele Grüße
Stefan

2 Likes

Bei mir waren es jedenfalls Störungen durch 12 Volt PWM Lüftermotoren, die abhängig von der gemessenen Themperatur gelaufen sind. -127 Grad war immer die Fehleranzeige. Ist wohl die Reaktion der Lib, wenn das Übertragungsergebnis keinen Sinn mehr ergibt. Ohne die Motoren keine Probleme. Mit Motoren aber auch geschirmten Leitungen zu den beiden DS18B20 auch keine Probleme mehr. OK, wenn man die 4,7 KOhm runtersetzt, kann ich mir gut vorstellen, dass das auch gegen die Störanfälligkeit auf der Leitung hilft, aber ich bleibe dabei, dass ich Leitungen zu diesen Sensoren immer abschirme. Ist ja kein Aufwand und hilft. Das runtersetzen des Widerstandes behalte ich aber auch als zusätzliche Maßnahme im Hinterkopf.