NEWS
DS18B20 mit RPi instabil
-
@gari sagte in DS18B20 mit RPi instabil:
Lösungsansätze
- ich würde mal T1 alleine testen
- das hier muss nichts heissen (ich habe diverse dieser Fakes im problemlosen Dauereinsatz), wäre aber vielleicht trotzdem interessant zu wissen: https://github.com/cpetrich/counterfeit_DS18B20
-
@gari said in DS18B20 mit RPi instabil:
Code temp_T1-T9_short.py
Wenn ich das Programm richtig verstehe, liest du zyklisch ohne jegliche Pause die Sensoren. Dabei wird jeder Sensor 2x hintereinander gelesen (mit 0,005 Sek. Pause dazwischen). Damit wird wohl der Sensor geweckt, abgefrat und dann beim zweiten Mal das Resultat der (vorherigen) Messung übertragen.
Das halte ich insbesondere bei der Leistungslänge des Außenfühlers für sehr sportlich. Hier kann es etwas dauern, bis die Spannung am Bus stabil steht.
Ich würde zwischen den Sensorabfragen eines Sensors etwas länger warten, um mögliche Probleme auf dem Bus möglichst gering zu halten.
https://forum.arduino.cc/t/ds-18b20-delay/580691/2 -
Ja, Pete, genau so ist es.
Die Snesoren T2-T4 sind ein Bus. Und untereinander sternförmig verschaltet.
Die Sensoren T5-T9 sind ein Bus. Und untereinander sternförmig verschaltet.
Wobei ich ehrlich zugeben muss, dass ich parallele und sternförmige Verschaltung an dieser Stelle für das gleiche halte und keinen Unterschied dazwischen erkenne.Der Sensor T1 hat einen separaten Bus. Und demnach einen separaten Pin.
Danke, dass ihr an dieser Stelle meine Verschaltung hinterfragt!Da T1 aber eigenen Bus hat, und auch dann nicht stabil läuft, halte ich es für eher unwahrscheinlich, dass die Ursache für die Spontanabbrüche die Verschaltung ist.
Bevor ich 3 separate Busse verwendete, lief das System auf 2 Bussen. Und ganz am Anfang auf einem. Immer erschien das gleiche Problem. Es scheint sogar, dass nun mit T1 auf einem separaten Bus das System am instabilsten ist. -
An alle @Pete0815 @JLeg @hans_999 ,
danke für eure Antworten!
Ich bin neu hier im Forum und begeistert, über euere schnelle Reaktion. Vielen, vielen Dank!
Wie ihr merkt, muss ich mich noch etwas darin üben, die Antwortoptionen richt zu nutzenZu den PullUp-Widerständen:
Mir ist bekannt, dass 4,7 kOhm im Datenblatt gelistet sind.
Wie hier bei einem ähnlichen Thema im Forum bin ich darauf gestoßen, die PullUps mit steigender Kabellänge zu reduzieren.
Folgende PullUp-Widerstände habe ich daher bereits für alle 3 Busse ausprobiert:- 2,2 KOhm
- 3,7 kOhm
- 4,7 kOhm
- 10 kOhm (auf Empfehlung eines anderen Bastlers)
Leider ohne nennenswerten Erfolg.
-
@jleg Danke für deinen Lösungsansatz: Ich werde nun als nächstes Testen, nur T1 ohne andere Sensoren zu messen.
-
@hans_999 said in DS18B20 mit RPi instabil:
liest du zyklisch ohne jegliche Pause die Sensoren
Danke hans_999, für den Hinweis! Werde ich auch mit mehr delay ausprobieren!
-
@gari Insbesondere der Aufbau mit 30m macht es notwendig sehr nah an den Specs zu arbeiten, da sonst etliche Effeckte auftreten. Viele der im Netz gezeigten Lösungen funktionieren, aber halt nicht für Aufbauten wo der OneWire Bus auch auf seine möglichen Längen genutzt wird.
Erster Punkt Dein Anschluß am RPI ist so nicht gesund für den RPI. Du versorgst die DS18B20 mit 5V und so bekommen die GPIOs auch im worst case 5V ab, wobei sie nur für 3,3V spezifiziert sind.
Den Aufbau mit 3,3V zu speisen halte ich für einen Versuch der nicht funktionieren wird, da bei 30m der Spannungsabfall schon gefährlich nah an die Grenze der 3V der DS18B20 abfällt und so ggf zusätzliche Probleme schafft.
Wenn dieser "einfache Aufbau" direkt am RPI gewählt wird, ist ggf dieser Aufbau zu testen:
oder
Wenn ich Deinen doch sehr schönen Aufbau mit Reihenklemmen etc sehe, würde ich auch hingehen und den OneWireBus mit einem richtigen OneWire Master aufbauen wie dem DS2482. Habe so einen so im Betrieb und bei Interesse schau Dir mal an wie das Module vom volkszähler projekt umgesetzt wurde.
Das dürfte hier natürlich too much sein, es gibt aber kleine Breakout Boards für den DS2482 für mehrere Stränge wie dieses. Das ist dann über 5V zu speisen und der per I2C anzukoppeln aber auch über einen LogicShifter auf 3,3V zu bringen um korrekt an den GPIOs zu arbeiten.
Vermutungsweise bringen aber bis auf die 3,3V am GPIO des RPI wenig Effekte die man sofort sieht. Entsprechend ist auch Dein Busaufbau dringenst zu überdenken bzw. derzeit so zu interpretieren, dass Du Stubs von bis zu 6m hast und davon wird nebem einem Sternförmigen Aufbau was das dann am Ende so ist, dringend abgeraten. Du hast dort doch genügend GPIOs zu Verfügung am RPI. Hänge die DS18B20 doch mal einzeln an den RPI; per GPIO nur einen DS18B20. Damit sollten wenn vorhanden Timing Probleme falls durch Wechselwirkung erzeugt werden, erledigt sein. Timing Probleme durch Leitungseffeckte(Länge) natürlich nicht.
Um Probleme durch den eigenen Code zu identifizieren kann ich mich wie gesagt nur wiederholen. Einen ESP8266 mit einer Standardsoftware wie ESPEASY oder Tasmota sollte das einfach für 2,3€ mal im Testaufbau prüfbar machen. Aber vorsicht für den ESP8266 gilt das gleiche wie für den RPI. Der verträgt auch nur 3,3V auf den GPIOs und mit 5V sollte man bei 30m schon versorgen. 2,3€ im Testaufbau finde ich immer noch sinniger als stundenlang einen eigenen Code im Revue zu besprechen, weil es verwertbare Fakten schafft.
-
@gari sagte in DS18B20 mit RPi instabil:
Wobei ich ehrlich zugeben muss, dass ich parallele und sternförmige Verschaltung an dieser Stelle für das gleiche halte und keinen Unterschied dazwischen erkenne.
naja, im Fall "OneWire" geht es natürlich um "mechanische" Sterne, nicht "elektrische". Denn elektrisch sind es ja (je Bus) Parallelschaltungen.
Als unproblematischer (stabiler) angesehen wird beim DS18B20 allgemein halt die Verdrahtung, die eher nach Art der "Weihnachtslichterketten" aufgebaut ist - Sensor B hängt eher dicht an Sensor A, und C dito an B usw. Aber das ist eigentlich alles hübsch im oben bereits genannten Link dargestellt, auch visuell... -
@gari Darf ich mich hier auch noch einschalten und fragen, weshalb du ein separates Skript verwendest und nicht einfach einen der bestehenden Adapter? Es gibt den iobroker.ds18b20 und den owfs Adapter.
-
@gari Habe eine ähnliche Hardware-Config wie Du. Bei mir sind es 10 Stück DS18B20, die ich auf einem Verteiler zusammen führe. Als Pullup-Widerstand habe ich 4K7 genommen. Allerdings habe ich auf der Betriebsspannung am Verteiler noch einen 100nF und einen 100µF Kondensator gesetzt. Läuft seit Jahren stabil bei mir.
-
ich hatte nach dem Wechsel auf den Raspi4 auch das Problem. Bei mir half in der
"/boot/config.txt" den GLIO Pin mit einzutragen.
dtoverlay=w1-gpio,gpiopin=4 -
@volbuss Jo, hab ich bereits .
-
Hey, danke euch alle für die Anregungen!
@Pete0815 Danke besonders dir, für die ausführlichen Erklärungen.
Nach dem ich die Messung allein mit T1 (Außenfühler) laufen ließ und danach mit den Fühlern T2-T9, musste ich feststellen, dass beide Varianten spontan abbrechen.Es liegt also nicht nur am Außenfühler (wie ihr ja schon befürchtet habt).
Beim Überprüfen der PulluP-Widerstände habe ich dann festgestellt, dass durch die 5,5 V die GPIOs der Busse 1 und 2 eine wegbekommen haben. Es stellte sich nämlich zwischen GPIO und dem Spannungspin, ein Widerstand von 27 kOhm ein. Bei den anderen GPIOs hingegen nur 40 MOhm.
Also habe ich nun erstmal die Busse auf neue GPIOs gelegt und teste T2-T9 über 3,3 V (Ohne Außenfühler). Alle anderen Ratschläge habe ich natürlich gelesen. Ich teste mich Stück für Stück durch. -
@josh Hey, Klingt ja interessant.
Wie lang sind deine Kabel?
Welche Art Verschaltung hast du umgesetzt?
Welche Spannung nutzt am DS18B20 als Phase bzw. am PullUp?
Wie hast du die Kondensatoren verschaltet? -
@unclesam Danke für den Tip Uncle Sam, ich kannte die Adapter noch nicht
Ich muss aber auf Jeden Fall auch die Temperaturen abspeichern können. Zur Zeit mach ich das in eine txt. Die kann ich ja dann in Excel gut weiter verarbeiten.
Des Weiteren habe ich die Überlegung (Wenn dann man die Temperaturmessung richtig klappt) ggf. auch aktive Elemente (Pumpen, Stellventile) zu schalten. Das wäre dann natürlich ein eues Vorhaben. Mein Ziel ist aber, dass mit besthendem Skript man dann daran anküpfen könnte.
Würde der Adapter sich dazu als Zwischenglied auch eignen?Nun aber erst mal eins nach dem anderen
-
@gari
klingt als kommst Du einen Schritt weiter auch wenn das Ergebnis gerade noch nicht so erfreulich klingt. Ob man die GPIOs so "durchmessen" kann k.A. Mir ist die Fummellei dort meistens mit Widerständen (Spannungsteilern) zu aufwendig und da ich eh örtlich in Abzweigkästen viel mit Dupontkabeln unterwegs bin führe ich die Sensorseite gerne voll in 5V aus und geht auf GPIOs, kommt ein Logic Shifter davor (Stückpreis 50Cent 4 Kanäle ;)).
https://de.aliexpress.com/item/32771873030.htmlViel Erfolg!
-
@gari sagte in DS18B20 mit RPi instabil:
@josh Hey, Klingt ja interessant.
Wie lang sind deine Kabel?
Welche Art Verschaltung hast du umgesetzt?
Welche Spannung nutzt am DS18B20 als Phase bzw. am PullUp?
Wie hast du die Kondensatoren verschaltet?Vom RPi bis zum Verteiler ca. 0,2m. Dann vom Verteiler sternförmig mit Kabellängen zwischen 3m und 5m. Als Kabel habe ich 3x 0,14mm² PUR-Kabel genommen. Waren halt Kabelreste von Näherungsinitiatoren.
Als Pullup habe ich einen 4K7 genommen. Spannung 3,3V. Alles an nur einem GPIO.
Beide Kondensatoren am Verteiler zwischen 3,3V und GND. Der 100µF ist zum Buffern der Betriebsspannung und der 100nF ist gegen "HF"-Störungen.
Mehr als 10 Stück DS18B20 sollte man aber nicht nehmen, weil der GPIO nicht mehr sicher versorgen könnte.
-
@gari sagte in DS18B20 mit RPi instabil:
Zur Zeit mach ich das in eine txt. Die kann ich ja dann in Excel gut weiter verarbeiten.
Dafür gibt es ja die verschiedenen "history" Adapter: ioBroker.history, ioBroker.sql und Co.
Mein Ziel ist aber, dass mit besthendem Skript man dann daran anküpfen könnte.
Ehrlich gesagt würde ich versuchen, die ganze Logik in ioBroker zu haben und nicht darum herum. Für Logik-Sachen gibt es ja den JavaScript Adapter (mit Blockly, JS/TS und Rules) oder z.B. den Node Red Adapter.
Mein Konzept ist immer:
- Adapter (und wenn nötig eigene Skripte) holen sich die rohen Daten rein
- ioBroker.javascript macht die gesamte Logik
- Adapter schalten Aktoren (Relais, GPIOs, ...)
-
@josh Top! Klingt ja wirklich ähnlich zu meinem Aufbau (ohne Außenfühler)... Eine Frage noch: die beiden Kondensatoren zwischen GND und 3,3 V parallel?
-
@gari sagte in DS18B20 mit RPi instabil:
@josh Top! Klingt ja wirklich ähnlich zu meinem Aufbau (ohne Außenfühler)... Eine Frage noch: die beiden Kondensatoren zwischen GND und 3,3 V parallel?
Ja, beide parallel zwischen 3,3V und GND. Klingt für einen Nicht-Elektrotechniker vielleicht unsinnig, aber die Elektrolytkondensatoren filtern keine bzw. kaum HF-Störungen raus. Dafür der Keramik- oder Vielschichtkondensator mit 100nF.
Sieht bei mir dann so aus (ich weiß, ist noch nicht perfekt):