DS18B20 parasitärer Modus

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • DS18B20 parasitärer Modus

      Hat mal jemand an Bascom einen DS18B20 im echten Zweidrahtmodus bzw papasitären Modus betrieben? Geht das ohne irgend eine Änderung? Alle Beispiele die ich finde gehen mit 3 Draht (GND-SIgnal-VCC). Hab noch soviel coax leitung, die währe ideal für den parasitären Modus.Laut Datenblatt muss man ja nach anforderung der Messung das Signal oben (1) lassen damit der Chip Ernergie zum messen bekommt.

      Tobias
    • Ausgang ist ja die 3 Leiter Schaltung, diese funktioniert ja, daher auch die ursprungsfrage ob es ohne code/HW änderungen geht.
      Klassische beschaltung GND-Signal (mit 4,7K Pullup)-5V

      Die hab ich laut Datenblatt geändert: Am IC GND und 5V anschluss zusammengelegt, der 4,7K pullup auf der Platine bleibt.

      Ich muss dazu sagen ich hab zwei 1 Wire Busse am AVR, beide aber gleich beschaltet, im Dreileiterbetrieb funktionierts:

      Quellcode

      1. datensammler:
      2. disable interrupts
      3. print "1w start"
      4. 1wreset pind ,3
      5. 1wwrite &HCC ,1,pind ,3 ' Überspringe Rombefehl Seriennummer weglassen
      6. 1wwrite &H44 ,1,pind ,3 'messen
      7. 1wreset pind ,6
      8. 1wwrite &HCC ,1,pind ,6 ' Überspringe Rombefehl Seriennummer weglassen
      9. 1wwrite &H44 ,1,pind ,6 'messen
      10. Waitms 1000
      11. 1wreset pind ,3
      12. 1wwrite &HCC ,1,pind ,3
      13. 1wwrite &HBE ,1,pind ,3 ' Start Daten lesen
      14. Sc1(1) = 1wread(9, pind , 3 ) ' Gelesene Daten ins Array
      15. 1wreset pind ,6
      16. 1wwrite &HCC ,1,pind ,6
      17. 1wwrite &HBE ,1,pind ,6 ' Start Daten lesen
      18. Sc2(1) = 1wread(9, pind , 6 ) ' Gelesene Daten ins Array
      Alles anzeigen
      Tobias
    • Hallo Tobias,

      wie ich schrieb, Parasite Power Mode ist nicht nur Störanfälliger sondern auch langsamer(Cpp).
      Bei 12bit Auflösung sollten 750ms pro Messung ausreichen. Aber warum noch eine zusätzliche Verzögerung mit zweiten Bus verstehe ich nicht. Kannst doch ein paar 1000 DS18b20 auf Bus legen. Vorrausgesetzt man hat genügend Zeit. Sind auch meine bevorzugten Sensoren wenn Zeit genug. Deren Nachteil ist, erst mit Aufruf beginnt eine neue Messung und mit Beendigung dieser wird aktualisiert.
      Ja dies muss alles im Code beachtet werden (meine vielen Test ( 28 DS am Bus) ergab mit 100ms Startsignalabstand ist alles noch okay.
      Erlaube mir mal meinen alten Test-Code in Anhang zu legen.
      Diesen habe ich so optimiert bis alle Sensoren, verschiedenen Typen, zuverlässig die Werte liefern. Schau im Code auf Start alle Sensoren damit konnte ich die Laufzeit stark reduzieren. Vorab auch noch eine Prüfung „was auf dem Bus los ist“
      Schlussfolgerung:
      Michael hat schon Recht es geht.
      Aber nur annäherte Zuverlässigkeit mit Zweileiterbetrieb erreicht, wenn Sensor direkt am Controller waren.

      Mit freundlichen Grüßen
      Dateien
    • Schraubbaer schrieb:

      Ausgang ist ja die 3 Leiter Schaltung, diese funktioniert ja, daher auch die ursprungsfrage ob es ohne code/HW änderungen geht.
      Klassische beschaltung GND-Signal (mit 4,7K Pullup)-5V
      Das Datenblatt sagt doch das ein starker Pullup mittels Transistor während der Temperaturmessung zugeschaltet werden muss. Der Sensor zieht in der Zeit bis 1,5 mA, dafür ist nur der Widerstand als Pullup zu klein. Der Transistor ist somit keine Option sondern ein muss für den parasitären Betrieb.
    • six1 schrieb:

      Ich kann das keinesfalls bestätigen, dass der parasitäre Betrieb eine störanfällige Lösung sei.
      In meinem "kleiner Boardcomputer" Projekt habe ich drei DS1820 im Einsatz und die arbeiten 1a.
      Den Pullup habe ich auf 3K3 festgelegt.
      Sag ich doch. Bei optimalen parasitäre Betrieb ist es okay. Aber meine Test ergaben, mit 1m Leitung war Schluss mit 1a wobei mit Dreileiter erst ab 20m Störungen kamen.
      Nagut den Pullup kann man noch weiter verkleinern damit die Flanken steiler werden aber mehr erreicht man nicht.
      Dein Sensor mit 9 Bit Temperatur-Register ist auch nicht so empfindlich wie der mit 12 Bit(DS18B20).

      Holli schrieb:

      Das Datenblatt sagt doch das ein starker Pullup mittels Transistor während der Temperaturmessung zugeschaltet werden muss. Der Sensor zieht in der Zeit bis 1,5 mA, dafür ist nur der Widerstand als Pullup zu klein. Der Transistor ist somit keine Option sondern ein muss für den parasitären Betrieb.
      Muss ich wiedersprechen. Transistor verbessert die Stabilität ist aber kein muss. Der Transistor zieht in der Messzeit knallhart auf H. Somit muss diese Zeit auch im Code einen hohen Stellenwert bekommen. Ansonsten geht der Schuss nach hinten los.

      MfG
    • six1 schrieb:

      ich habe ca. 3m zweiadriges Kabel ohne Schirm im Fahrzeug verwendet, ohne Probleme.
      Das Freud mich.

      Wie gesagt sind nur meine Erfahrungen also unverbindlich.
      Somit mein großes Interesse an andere Erfahrungen.
      Frage:
      1. Welchen DS Typ verwendest Du 9 oder 12 Bit
      2. Wie oft Temperaturumwandlungen
      3. Was für ein MOSFET wird verwendet oder kommst Du ohne aus
      Kann mir nicht vorstellen das bei der Kabellänge der Versorgungsstrom intern von Cpp(interne Spannungsversorgung) genügend liefert(k-Last). War auch der Hinweis von @Holli
      Könnte ja sein wenn Du die Sensoren sehr, sehr viel Zeit gibst um Cpp wieder zu laden. Ladeschiene ist ja Datenleitung.
      Dies habe ich natürlich nicht getestet.

      Vorab mein Dank
    • So, nachdem ich fast den ganzen Tag nach meiner Tischplatte gesucht hab ...auch bekannt als aufräumen...hab ich mal den Logicanalyser und das Oszi angeworfen.
      Sah alles so aus wie es sollte, auch die Datenleitung ist zwischen den Zyklen auf High.
      Mal durch den code durchgegraben und dann den Fehler bei weiterem nachdenken gefunden a_169_53178177 :
      Hiermit funktionierts, die Wartezeit war zu kurz, mit 750ms klappts. Keine ahnung warum 500ms im Dreidrahtmodus funktionierte:

      Quellcode

      1. disable interrupts
      2. print "1w start"
      3. 1wreset pind ,3
      4. 1wwrite &HCC ,1,pind ,3 ' Überspringe Rombefehl Seriennummer weglassen
      5. 1wwrite &H44 ,1,pind ,3 'messen
      6. 1wreset pind ,6
      7. 1wwrite &HCC ,1,pind ,6 ' Überspringe Rombefehl Seriennummer weglassen
      8. 1wwrite &H44 ,1,pind ,6 'messen
      9. Waitms 750
      10. 1wreset pind ,3
      11. 1wwrite &HCC ,1,pind ,3
      12. 1wwrite &HBE ,1,pind ,3 ' Start Daten lesen
      13. Sc1(1) = 1wread(9, pind , 3 ) ' Gelesene Daten ins Array
      14. 1wreset pind ,6
      15. 1wwrite &HCC ,1,pind ,6
      16. 1wwrite &HBE ,1,pind ,6 ' Start Daten lesen
      17. Sc2(1) = 1wread(9, pind , 6 ) ' Gelesene Daten ins Array
      Alles anzeigen
      Funktioniert bei Orginalen DS18B20 und dem China zwilling vom 7Q mit 4,7K, nur ein Sensor an jedem Bus.

      Heute kam das Kabel, der eine Sensor bekommt trotz das es jetzt funktioniert Dreiadrig. Warum? Im Datenbaltt steht das parasitär nur bis 100grad empfohlen wird. Der Sensor ist für nen Kollegen, der braut Bier und will kein Plastik im Getränk, da gehts beim Kochen nah an 100grad ran. Ausserdem macht er nur Arduino und Raspi, keine Ahnung wie die mit zweidrahtmodus drauf sind.
      Der Sensor kommt hier rein:
      IMG_08651.JPG
      Sind Laborglas Röhren, die kann man grad noch mit nem Propanbrenner schmelzen und somit auf einer seite verschliessen, 50cm länge sollten für den Brautopf reichen, der kurze ist für mein Ätzbad, denn die Edelstahlkappen mögen auf Dauer kein Natriumpersulfat.

      Tobias
    • Das Programm ist lange noch nicht fertig, der Datenlogger war mal schnell hingebastelt. Ich weiss das das wait unschön ist. Bis die Schaltung fertig war hatte ich schon die bessere Version im Kopf.
      Nutz es halt weils das einzige ist das momentan "aus der Kiste raus" die 18B20 Sensoren liest.
      Und für die Akten: Hab eben 25m 3x0,14 LIYCY als Zweidraht am Sensor (Schirm ist nicht angeschlossen) uns das Funktioniert einwandfrei.

      Tobias
    • Nun sitze ich wohl im „Faradayscher Käfig“. Die vielen Störungen kommen nicht raus, aber ein Geistesblitz auch nicht rein.
      Anfangscode war „Wartezeit“ für Temperaturumwandlungen Waitms 1000 die ich nicht als diese betrachte.
      Nun sind es Waitms 750 wohl auch ohne MOSFET. Sehe auch im aktuellem Code nicht eine Ansteuerung dessen.
      Nun steht es 1:1 ich konnte nicht helfen und habe auch keine praktischen Neuigkeiten erfahren.

      Mein Spruch „Ende Gut alles Gut“
      Gruß