1-wire unzuverlässig

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    ich habe ein Problem mit einem DS18B20 am 1-wire bus. Ich bin nach diesen Anleitung vorgegangen: Netzmafia

    Ich komme dazu über den Befehl

    cat /sys/bus/w1/devices/28-000005294aae/w1_slave

    die Temperatur auszulesen. Jetzt das seltsame:

    Wenn ich den Befehl ein paar mal hintereinander sende, kommt in unregelmäßigen Abständen einfach keine Antwort. Mal gehen 5 Befehl mit korrekter Ausgabe durch und dann 2 wieder nicht. Mal nur 1 und dann 3 nicht...totaler Zufall. Da ist kein Muster erkennbar. Das führt dazu, dass mein python scripts dazu oft einfach abbrechen, weil kein input erfolgt.

    Die Kabel sind sehr kurz vlt. 25 cm. Es wird eine parasitäre Schaltung verwendet. Der Raspberry ist super alt ein Model B Rev 2 mit noch 26 GPIO Pins. Pins sind folgendermaßen verbunden:

    1 auf VDD

    7 auf DQ

    9 auf GND

    1 und 7 sind über den 4,7 kOhm Widerstand verbunden. OS ist das aktuellste Raspberry OS (bullseye).

    Hat jemand eine Idee was ich falsch gemacht habe? Oder kann ein Defekt vorliegen? Kalte Lötstelle (wackeln ändert nichts). Ich bin für alle Ideen dankbar.

  • Halo viper2035,

    als wenn es in diesem Forum nicht schon genug Anleitungen zum Betrieb eines DS18B20 geben würde.

    Tip von mir: Verringere den Widerstand in kleinen Schritten, bis es immer stabil funktioniert.

    Ich mache es bei mir so, dass ich in einer Schleife erst mal die ganzen Sensoren einlesen und dann gezielt abfrage. Wenn dann welche "verloren" gehen sollten (ist bei mir noch nicht vorgekommen), dann sollte eine Verringerung des 4k7 die entsceidende Wirkung erzielen...


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Ich habe selber noch nie mit den Sensoren gearbeitet und kann deswegen nur das wiedergeben, was andere schreiben. Die Erfassung der Temperatur ist sehr träge. Auf Seite 9 des Datenblatts:


    Zu tCONF steht etwas in der Kernel-Doukentation:

    Zitat

    conv_time is used to get current conversion time (read), and adjust it (write). A temperature conversion time depends on the device type and it’s current resolution. Default conversion time is set by the driver according to the device datasheet. A conversion time for many original device clones deviate from datasheet specs. There are three options: 1) manually set the correct conversion time by writing a value in milliseconds to conv_time; 2) auto measure and set a conversion time by writing 1 to conv_time; 3) use features to enable poll for conversion completion. Options 2, 3 can’t be used in parasite power mode. To get back to the default conversion time write 0 to conv_time.

    Writing a resolution value (in bits) to w1_slave will change the precision of the sensor for the next readings. Allowed resolutions are defined by the sensor. Resolution is reset when the sensor gets power-cycled.

    Ich würde es erstmal mit der Auflösung versuchen.

    Code
    for sensor in /sys/bus/w1/devices/28-*; do echo 9 > $sensor/resolution; done

    Dann werden alle Sensoren auf 9 Bit gesetzt und die maximale "conversion time" beträgt dann ~94 ms.

  • Vielen dank für die Vorschläge.

    for sensor in /sys/bus/w1/devices/28-*; do echo 9 > $sensor/resolution; done

    Das ändern der Auflösung des Sensors hat leider keine Änderung bewirkt. Und der Befehl funktioniert so nicht. Man muss vorher durch sudo su zum root werden. Ein einfaches sudo reicht nicht. Aber ich hab wieder was gelernt.

    Tip von mir: Verringere den Widerstand in kleinen Schritten, bis es immer stabil funktioniert.

    Das schaue ich mir noch an. Bedeutet bei mir aber erstmal Widerstände kaufen und löten. Ich melde mich, wenn ich den Fehler beheben konnte.

  • Ich frage mich eh, warum man noch DS18B20 benutzt, seit dem ich die BME280 habe, möchte ich sie nicht mehr missen.

    Kein messen, kein löten und absolut zuverlässig.

    Hab ich mir gerade mal angesehen. Ist halt schon sehr sehr viel teurer. Das günstigste was ich gefunden hab, sind 10€ . Für 5€ bekomme ich 5 DS18B20. Aber ja das ist am Ende auch nicht viel Geld, wenn man nur einen Sensor braucht.

  • Ja, leider wird gerade alles teurer.

    Ich hatte noch das Glück die ersten für 3,xx € zu bekommen.

    Als ich das letzte Mal nachbestellt habe, musste ich 10 Stück für 65 € nehmen, dafür habe ich jetzt wieder ein kleines Polster.

    Edit: Geht doch noch für 6,19 € plus Versand:

    https://de.aliexpress.com/item/1005003622447376.html

    Nochmal Edit:

    Die ersten, die ich gekauft hatte, lagen sogar nur bei 2,03 € pro Stück am 01.02.2021 bestellt, also vor 13 Monaten.

    Für 5,68 € plus Versand:

    https://de.aliexpress.com/item/1005001714134207.html

  • Hi, viper2035;

    gibt es einen bestimmten Grund, warum Du die Sensoren parasitär betreibst?

    Schau Dir die zwei Schaubilder deiner verlinkten Seite an:

    Ein Kabel mehr und der Sensor wird durchgehend mit Spannung versorgt!

    Zwei Kabel mehr und die Versorgungspannung beträgt 5 Volt!

    Bei mir liegt so ein chaotisches Netz mit meterlangen Kabeln und funtioniert seit Jahren problemlos.

    (Und das mit 12-bit-Auflösung)

    rasray

    Edit:

    Sorry, mal wieder zu wenig gelesen und zu früh geschrieben. Deine Schaltung entspricht wohl der ersten Grafik; das ist aber nicht parasitär.

    Bei einem Sensor an 25 cm Kabel sollte es eigentlich zuverlässig funktionieren. Stückweise den Widerstand reduzieren kann helfen, müsste bei Dir aber eigentlich nicht nötig sein.

    Wie gut ist deine Verkabelung (Kontaktprobleme möglich?)

    Einmal editiert, zuletzt von rasray (17. März 2022 um 18:08)

  • Wenn Du das Datenblatt des DS18B20 durchliest wirst Du bemerken, dass nicht jedesmal die Auflösung neu konfiguriert werden muss, sondern sich die Auflösungs(Bits) vom Scratchpad ins ROM übertragen lassen. Dann ist der DS18B20 beim Starten bereits auf die die eingestellte Auflösung eingestellt (Factory Settings 12-Bit). Ausserdem gibt es parasite powerd Einschränkungen

    Ausserdem soll schon seit Jahren ein Modul (=Treiber) nicht mehr über modprobe geladen werden, sondern über dtoverlay= in der config.txt (Device Tree Overlay). Das, und die erforderliche Syntax steht in /boot/overlays/README und ist immer versions- und updateaktuell.

    Servus !

    RTFM = Read The Factory Manual, oder so

  • Code: https://github.com/raspberrypi/firmware/blob/master/boot/overlays/README#L56
    Modules
    =======
    
    As well as describing the hardware, Device Tree also gives enough information
    to allow suitable driver modules to be located and loaded, with the corollary
    that unneeded modules are not loaded. As a result it should be possible to
    remove lines from /etc/modules, and /etc/modprobe.d/raspi-blacklist.conf can
    have its contents deleted (or commented out).
    Code: https://github.com/raspberrypi/firmware/blob/master/boot/overlays/README#L3874
    Name:   w1-gpio
    Info:   Configures the w1-gpio Onewire interface module.
            Use this overlay if you *don't* need a GPIO to drive an external pullup.
    Load:   dtoverlay=w1-gpio,<param>=<val>
    Params: gpiopin                 GPIO for I/O (default "4")
            pullup                  Now enabled by default (ignored)

    Weiterhin gilt die Kernel-Doku für das Modul. Da durch das DTB-Overlay die Hardware beschrieben wird, wird das Kernel-Modul automatisch geladen. Man kann auch in das EEPROM schreiben:

    The write-only sysfs entry eeprom_cmd is an alternative for EEPROM operations.
    Write save to save device RAM to EEPROM. Write restore to restore EEPROM
    data in device RAM.


    Für mein Verständnis bedeutet das einmal setzen, dann von RAM nach ROM kopieren. Ist das so richtig?

  • Hallo zusammen,

    das Problem hat mir keine Ruhe gelassen, aber es ist naja gelöst? Ich habe alles neu gelötet und nochmal versucht: Fehler war weiterhin da. Dann hab ich statt meines alten Model B Rev 2 einen Raspberry 3 Model B verwendet. SD Karte rein, gebootet, und alles angeschlossen. Und siehe da, alles funktioniert ohne Probleme. Es scheint also ein Defekt an dem alten Raspberry Pi vorzuliegen.

    EDIT: Danke für die ganzen Ideen. Unabhängig davon, dass es doch eine andere Ursache hatte, hab ich viel gelernt.

    Einmal editiert, zuletzt von viper2035 (17. März 2022 um 21:52)

  • Hallo zusammen,

    1-wire unzuverlässig????

    wie bitte, läuft bei mir am AVR seit 2008 mit 72m parasitär versorgt durch alle Zimmer!

    4,7k gilt für kurzes Kabel und 5V -> 1mA , für 3,3V Raspi muss natürlich der Widerstand verkleinert werden 3,3k ~1mA und natürlich bei längeren Leitungen noch mehr um störunanfälliger zu werden.

    Logisch können Störungen auftreten, dann CRC Berechnung, Fehlerwerte 85°C 125°C rauswerfen und maximal alle 1s abfragen! Wer glaubt denn das sich Raumtemperaturen innerhalb 1s ändert ausser die Bude brennt!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!