wer nutzt hier 1w DS18B20 ?


  • Lieber Jar,
    Für parasitäre Versorgung brauchst du eine Art Treiber (Hardware) die dir den Pullup kurzfristig überbrückt, da dort sonst eine zu hohe Spannung abfällt (R=U/I etc...) und der Sensor nicht ausreichend versorgt wird. Die Ansteuerung dieses Treibers (man könnte wohl einen Transistor nehmen) ist im Kernel (essentieller Bestandteils des Betriebssystems deines RaspberryPi) nicht implementiert. 1wire wird (wenn ich mich jetzt nicht grob täusche) beim RPi über GPIO Pin 4 "simuliert". Das einfachste für dich wäre einen I2C to 1wire Baustein zu verwenden, zB den DS2482.

    lieber c-st ich sehe das nirgends das das so sein muss (ich habs nicht gefunden und auch keiner hat mir das muss gezeigt), gleichwohl weiss ich das die maximale Wandlungszeit bis 750ms sein kann. Das kann der DS schon intern puffern wenn die Erholzeit lange genug ist ! das heisst die internen Kapaziäten wieder aufgeladen wurden. Es braucht keine Überbrückung vom pullup es braucht keinen Transistor, es muss "nur" die Zeitbedingung eingehalten werden.

    Natürlich wenn mehr als ein Sensor auf dem Bus liegt und ständig Datenverkehr läuft dann sind die internen Kondensatoren irgendwann leer, weil low als Antwort heisst ja keine Versorgung. Aber das liegt ja in meiner Hand als Programmierer, wer benötigt denn zwingend bei einem Temperatursensor im Sekundentakt Daten ? ich nicht, mir reicht so wie ich es nutze Minutentakt. Das genannte Beispiel geht sogar vom 1/4 Stunden Takt aus, also Zeit genug für alle DS auf dem Bus sich über den pullup den Bauch vollzuschlagen bis zur nächsten Wandlung.

    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)

  • ich zitiere mal aus dem Datenblatt:

    Code
    POWERING THE DS18B20
    The DS18B20 can be powered by an external supply on the VDD pin, or it can operate in “parasite power” mode, which allows the DS18B20 to function without a local external supply. Parasite power is very useful for applications that require remote temperature sensing or that are very space constrained. Figure 1 shows the DS18B20’s parasite-power control circuitry, which “steals” power from the 1-Wire bus via the DQ pin when the bus is high. The stolen charge powers the DS18B20 while the bus is high, and some of the charge is stored on the parasite power capacitor (CPP) to provide power when the bus is low. When the DS18B20 is used in parasite power mode, the VDD pin must be connected to ground.
    In parasite power mode, the 1-Wire bus and CPP can provide sufficient current to the DS18B20 for most operations as long as the specified timing and voltage requirements are met (see the DC Electrical Characteristics and AC Electrical Characteristics). However, when the DS18B20 is performing temperature conversions or copying data from the scratchpad memory to EEPROM, the operating current can be as high as 1.5mA. This current can cause an unacceptable voltage drop across the weak 1-Wire pullup resistor and is more current than can be supplied by CPP. To assure that the DS18B20 has sufficient supply current, it is necessary to provide a strong pullup on the 1-Wire bus whenever temperature conversions are taking place or data is being copied from the scratchpad to EEPROM. This can be accomplished by using a MOSFET to pull the bus directly to the rail as shown in Figure 4. The 1-Wire bus must be switched to the strong pullup within 10μs (max) after a Convert T [44h] or Copy Scratchpad [48h] command is issued, and the bus must be held high by the pullup for the duration of the conversion (tCONV) or data transfer (tWR = 10ms). No other activity can take place on the 1-Wire bus while the pullup is enabled.
    The DS18B20 can also be powered by the conventional method of connecting an external power supply to the VDD pin, as shown in Figure 5. The advantage of this method is that the MOSFET pullup is not required, and the 1-Wire bus is free to carry other traffic during the temperature conversion time.
    The use of parasite power is not recommended for temperatures above +100°C since the DS18B20 may not be able to sustain communications due to the higher leakage currents that can exist at these temperatures. For applications in which such temperatures are likely, it is strongly recommended that the DS18B20 be powered by an external power supply.
    In some situations the bus master may not know whether the DS18B20s on the bus are parasite powered or powered by external supplies. The master needs this information to determine if the strong bus pullup should be used during temperature conversions. To get this information, the master can issue a Skip ROM [CCh] command followed by a Read Power Supply [B4h] command followed by a “read time slot”. During the read time slot, parasite powered DS18B20s will pull the bus low, and externally powered DS18B20s will let the bus remain high. If the bus is pulled low, the master knows that it must supply the strong pullup on the 1-Wire bus during temperature conversions.

    hier kann man lesen das strong pullup nicht immer nötig ist und wenn man den chip befragen könnte, aber was red ich, andere lesen anderes aus dem Datenblatt. Schön wäre halt wenn die 1w Module das beherzigen würden.

    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)

    Einmal editiert, zuletzt von jar (28. August 2013 um 18:23)


  • (ich habs nicht gefunden und auch keiner hat mir das muss gezeigt),

    Seite 5 im Datenblatt: it is necessary to provide a strong pullup on the 1-Wire bus whenever temperature conversions are taking place

    Noch übersetzen? Oder können wir das Thema langsam begraben?


    Zitat


    gleichwohl weiss ich das die maximale Wandlungszeit bis 750ms sein kann. Das kann der DS schon intern puffern wenn die Erholzeit lange genug ist ! das heisst die internen Kapaziäten wieder aufgeladen wurden. Es braucht keine Überbrückung vom pullup es braucht keinen Transistor, es muss "nur" die Zeitbedingung eingehalten werden.


    Kleine Rechenaufgabe: Wie groß muß der Kondensator sein, um bei 3,3 Volt Versorgung die Messung mit 1,5mA zu puffern? Und wie lange dauert es ihn dann wieder aufzuladen?


  • Seite 5 im Datenblatt: it is necessary to provide a strong pullup on the 1-Wire bus whenever temperature conversions are taking place

    unterschlägst du nicht:

    Code
    In parasite power mode, the 1-Wire bus and CPP 
    can provide sufficient current to the DS18B20 for most operations as 
    long as the specified timing and voltage requirements are met

    the 1-Wire bus and CPP can provide sufficient current to the DS18B20 for most operations as long as the specified timing and voltage requirements are met

    ich übersetze mal: "meist ausreichend anbieten", die Ausnahmen stehen oben.

    aber egal, jeder liest was er will und die Wahrheit gibt es nicht, ich biete dir ja immer noch Frieden an, es anzunehmen liegt bei dir. Mir genügt parasitäre Speisung ohne strong pullup, trotzdem wäre der Einbau in der 1w Lib wünschenswert.

    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)


  • Kleine Rechenaufgabe: Wie groß muß der Kondensator sein, um bei 3,3 Volt Versorgung die Messung mit 1,5mA zu puffern?

    habs gerechnet, das Ergebnis will aber keiner wissen :D OK du hast Recht es geht nicht, aber sag meinen DS nix davon :fies: (die wissen das ja nicht)



    Und wie lange dauert es ihn dann wieder aufzuladen?

    ist ne Fangfrage, gemäß der e-Funktion unendlich lange aber das interessiert den Techniker nicht, er weiss das der nie voll wird, aber es gibt ausreichende Ladung.

    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)

    Einmal editiert, zuletzt von jar (28. August 2013 um 19:54)


  • unterschlägst du nicht:

    Code
    In parasite power mode, the 1-Wire bus and CPP 
    can provide sufficient current to the DS18B20 for most operations as 
    long as the specified timing and voltage requirements are met

    ich übersetze mal: "meist ausreichend anbieten", die Ausnahmen stehen oben.

    Nein, Du hast falsch übersetzt. Da steht: 'Ausreichend für die meisten Operationen' und für welche nicht ist nach dem folgenden 'However' ausgeführt, hast Du ja schon zitiert.

    Aber egal, Du bekommst ne Merkbefreiung und wirst wieder ignoriert.


  • Aber egal, Du bekommst ne Merkbefreiung und wirst wieder ignoriert.

    schade wir hätten Freunde werden können aber so .....

    PS auch mal ne Frage an dich, wielange ist denn low auf dem 1w Bus maximal ? also wo der DS wirklich keinen Strom bekommt ? ;)

    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)


  • Dann halte mich bitte auf dem Laufenden bei der 3.3V Lösung. Muß natürlich simpel bleiben, sonst bleibe ich auch lieber bei 3 Drähten.

    Timingprobleme beim Zugriff sollte es eigentlich nicht geben, wird ja vom 1w Kernelmodul gemanaged. Ich lasse bei Temperaturwechsel eine Audioausgabe machen - funktioniert absolut zuverlässig.
    Allerdings hängt da auch nur ein DS18B20 an kurzem Kabel dran. Vermutlich sollte man bei mehreren Sensoren darauf achten, daß sie nacheinander (und nicht gleichzeitig) abgefragt werden. Wie das Kernelmodul sonst reagieren würde, weiß ich nicht - es müßte ja eine queue bilden, daran glaube ich mal eher nicht (ist eigentlich auch nicht die Aufgabe eines Kernelmoduls bei einem Bus wie w1).

    Gruß, mmi.

    so ich bin eine Ecke weiter,

    beide Netserver AVR NETIO und wheezyPI liefen parallel über Nacht da fiel mir auf das beide mit auf dem Mainboard bestückten Sensoren 4°C abwichen ! so eine Abweichung hatte ich bei 10 Sensoren auf einer kurzen Streifenleiterplatte 10cm nie gesehen, aber ich erinnere mich an eine Aussage das der DS18B20 nicht zu oft in zu kurzen Zeitabständen befragt werden soll, das führt zur Eigenerwärmung und verfälscht das Messergebnis.

    Nun stelle ich aber fest das in der integrierten w1 Unterstützung der Messwert automatisch aktualisiert wird in kurzen Zeitabständen, auch wenn keiner nach fragt ! Das scheint mir ist somit eine fehlerhafte Implementierung oder ich mache was anderes falsch. Mir ist noch nicht klar wie man die Aktualisierungsintervalle einstellt, habe dazu auch nix gelesen. Merkwürdig ist dabei doch das die
    /sys/devices/w1_bus_master1/28-00000400b8c4/w1_slave ihren Inhalt ändert aber nie das Änderungsdatum

    Also wenn der Aktualisierungsprozess automatisch abläuft, der Wert in diese Datei geschrieben wird, warum ist das Änderungsdatum eine Konstante, aber der Inhalt wird mit jedem Auslesen anders ?

    Ich denke ich muss wirklich schnellstens vorn der in wheezy eingebauten w1 Unterstützung weg, jedenfalls für DS Sensoren, 4°C Abweichung ich fasse es nicht, wenn aber einer was zur Lösung beitragen kann, gerne.

    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)

  • Ich habe auf mehreren Pi's den DS18B20 im Einsatz. Eine Temperaturabfrage (über das Kernelmodul) findet alle 2 Minuten statt (via cron). Jede Temperaturabweichung um mind. 1 Grad wird in einem eigenen Log protokolliert. Das sieht dann so aus:


    Warum Du so krasse Abweichungen (4 Grad) hast - keine Ahnung.

    Gruß, mmi

    P.S.: Warum z.B. am 27.8. gar kein Eintrag erfolgte: da gehe ich guten Gewissens davon aus, daß es tatsächlich durchgehend 20 Grad hatte. Das Log wird - nachdem es im RAM geführt wird - mit jedem Neustart des Pi gelöscht.


  • Ich habe auf mehreren Pi's den DS18B20 im Einsatz. Eine Temperaturabfrage (über das Kernelmodul) findet alle 2 Minuten statt (via cron). Jede Temperaturabweichung um mind. 1 Grad wird in einem eigenen Log protokolliert.

    Warum Du so krasse Abweichungen (4 Grad) hast - keine Ahnung.
    Gruß, mmi

    falsch verstanden ?
    nicht 4°C Abweichung im GPIO-w1 von Messung zu Messung sondern zu meiner Methode
    (ich gehe mal davon aus das alle deine Messungen aus dem PI kommen, also alle Sensoren gleich laufen, sich gleich selber erwärmen, du müsstest wissen ob die gemessene Temperatur passt ? Raumthermometer)

    PI GPIO-w1 32°C <-> AVR-NETIO 28°C

    wenn die Kiste fertig ist werde ich parallel eine Nacht aufzeichnen

    Sensor1 im PI Sensor2 im NETIO und dann tauschen

    nächte Nacht aufzeichnen

    Sensor2 im PI Sensor1 im NETIO

    wenn der Fehler mit wandert liegts am Sensor, wenn nicht, an der Messmethode im GPIO, aber ich weiss das Ergebnis schon, ich habe ja im Raum 28°C gemessen mit anderen Geräten


    Die Frage steht immer noch im Raum, wer stößt die Mesuungen in welchem Intervall an ? muss so oft aktualisiert werden ? kann man das einstellen / veringern ? um die Eigenerwärmung am DS zu vermeiden ?

    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)

  • Die Messungen stößt Du an (da wird nicht automatisch in einem bestimmten Intervall gemessen).
    Wenn Du im entsprechenden /sys Verzeichnis die Datei öffnest und ausliest, löst Du eine Messung aus und siehst den aktualisierten Wert. Du brauchst es ja nur sehr schnell hintereinander zu machen, dann müsste der Wert durch die steigende Eigentemperatur recht schnell ansteigen.

    Alles ausführlich in der Dokumentation zum Modul beschrieben, auch für parasitäre Speisung:

    Schönen Sonntag und Gruß, mmi


  • Die Messungen stößt Du an (da wird nicht automatisch in einem bestimmten Intervall gemessen).
    Wenn Du im entsprechenden /sys Verzeichnis die Datei öffnest und ausliest, löst Du eine Messung aus und siehst den aktualisierten Wert. Du brauchst es ja nur sehr schnell hintereinander zu machen, dann müsste der Wert durch die steigende Eigentemperatur recht schnell ansteigen.
    Schönen Sonntag und Gruß, mmi

    hmm ich habe jetzt einen anderen DS18B20 eingebaut, immer noch 4°C zu hoch, vielleicht ist was bei der Config schiefgelaufen, ich setze gerade wheezy neu auf, ist etwas fummelig welches Paket man zuerst nachinstalliert, aber ich beisse mich durch, bin schon wieder etwas schlauer.

    Es bleibt dabei, da mit dieser PI SW kein 1w möglich ist wie es bei mir schon läuft und da der PI eh keinen AD Wandler hat wird ihm ein AVR zur Seite gestellt, der macht AD für die Betriebsspannungen, 12V/5V/3.3V und kann meinen Source für die 1w auch noch mitmachen im passenden Timing.

    Da mein Freund DS immer noch nicht verraten hat wie man über den PI den AVR mit dem A-Studio programmiert werde ich erst mal einen MK2 clone über ISP auf den USB Webserver schalten wie vorher und so aus der Ferne den AVR updaten.

    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)

    Einmal editiert, zuletzt von jar (5. September 2013 um 10:12)

  • ich setz das jetzt mal auf erledigt,

    zum Ersten, ich mache das mit dem AVR (ich ärgere mich doch nicht weiter am PI das parasitäre Versorgung nicht klappt)
    zum Zweiten, nun endlich ist der Beweis da das beide richtig laufen, ein DS18B20 sitzt am AVR, ein weiterer am PI, beide DS18B20 umarmen sich mit einem gemeinsamen Kühlkörper und melden eine Differenz von akzeptablen 0,1 °C (meine ehemals gemessene Differenz von 4°C muss an der weitläufigen Einbaulage gelegen haben, deswegen jetzt der Zusammenschluß von 2 Sensoren und Befragung von 2 Seiten)

    alles wird gut......
    PS. wer wissen will was nun läuft:
    Der wheezyPI hat als Bruder den mega 328p (5V) bekommen.
    Die beiden reden über seriell miteinander, 5V zu 3,3V Anpassung mit 470 Ohm und BAT42 Dioden am GPIO nach 3,3V.
    Der mega328p macht Analogmessung 12V (vom Y-Kabel Fritzbox), 5V (KIS 3r33 zu PI), 3,33V (aus dem PI) und seine eigene 5V.
    Weiterhin macht er 1w (onewire)

    todo
    Webseite generieren, Datenbank aufbauen, grafisch aufbereiten

    das zeigt die serielle Schnitte am AVR gerade:

    und das zeigt der PI

    Code
    9f 01 4b 46 7f ff 01 10 40 : crc=40 YES
    9f 01 4b 46 7f ff 01 10 40 t=25875

    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)

    Einmal editiert, zuletzt von jar (22. November 2013 um 13:35)

Jetzt mitmachen!

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