Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

OneWire Treiber mit DS18B20

Anonymous
2016-01-08
2017-01-15
  • Anonymous - 2016-01-08

    Originally created by: PI-Beginner

    Hallo,

    bin gerade dabei meine OneWire Sensoren ans laufen zu kriegen, habe aber das Problem dass der OnewireMaster nicht läuft.

    Nach Überprüfung des Treiberpfad '/sys/devices/w1_bus_master1/' musste ich feststellen dass es diesen gar nicht auf dem RPi gibt.
    Liegt der Treiber mittlerweile in einem anderen Pfad?

    Ist der GPIO4 der richtige Pin für OneWire oder kann ich einen anderen GPIO verwenden?

    Gruß

    Jan

     
  • eschwellinger

    eschwellinger - 2016-01-08

    Hi,

    GPIO4 passt...

    du musst in mit
    sudo raspi-config
    DeviceTree einschalten (unter advanced)
    kannst auch gleich SPI, und I2C einschalten für Onewire musst du dann noch per

    sudo nano /boot/config.txt
    dtoverlay=w1-gpio-pullup,pullup=1

    onwire einschalten

    Grüße
    Edwin

    IMG: DeviceTree.jpg

     
  • Anonymous - 2016-01-08

    Originally created by: PI-Beginner

    Hallo Edwin,

    eigentlich logisch den OneWire in der config einzuschalten.
    Das dtoverlay habe ich auch mit "w1-gpio-pullup,pullup=1" überschrieben.

    Allerdings läuft der Master immer noch nicht.

    Kann es noch dem Teiber Pfand liegen?
    Wie kann man überprüfen ob die Einstellungen in der config laufen?

    Gruß

    Jan

     
  • eschwellinger

    eschwellinger - 2016-01-09

    Hi,

    du musst erst mall das ganze unter Linux testen ...
    Nimm mal folgenden Link:

    http://images.google.de/imgres?imgurl=h ... CD4Q9QEwAw

    denke es liegt an nicht geladenen Kernelmodulen für onewire:

    Using the 1-Wire thermometers has been made very simple on the Raspberry Pi. All you need to do is make sure 2 kernel modules are loaded and then you can read a special file to get the temperature.
    Here we go. Type sudo nano /etc/modules and add the following lines at the end of the file:
    w1-gpio
    w1-therm

    /sys/bus/w1/devices
    cat 10-000800575c8b/w1_slave

    And you will see something like this:
    30 00 4b 46 ff ff 0f 10 b8 : crc=b8 YES
    30 00 4b 46 ff ff 0f 10 b8 t=23812

    Wenn du sowas über ssh oder direkt in der console lesen kannst wird auch mit CODESYS funktionieren.
    Unter CODESYS musst du dann noch beachten das du Onwire in eine eigene Task legst da die sensoren paar Sekunden brauchen
    und wenn man es nicht macht dein PLC_PRG Task blockieren werden.

    Grüße
    Edwin

    IMG: OneWireTask.png

     
  • Anonymous - 2016-01-10

    Originally created by: PI-Beginner

    Hallo Edwin,

    super, jetzt hats geklappt. Danke.

    Der Knackpunkt waren die nicht geladenen Kernelmodulen, mit der Anleitung von sbprojects ging es dann.
    jetzt ist mir auch klar warum ich den Pfad bzw. die Dateien nicht gefunden habe.

    Nachdem ich die Adresse des Sensors in Codesys eingetragen habe wurde die Variable rTemp mit der Temperatur gefüllt.
    Nur das mit Adress-Tabelle aus dem Beispiel funktioniert noch nicht.

    Wie kann ich mehrere Sensoren verwenden und diese einzelnen Variablen Mappen?
    Oder muss ich für jeden Sensor ein "Gerät" an den OneWire-Master hängen und jedem Gerät eine Adresse und Variable zuweisen?

    Grüße

    Jan

     
  • eschwellinger

    eschwellinger - 2016-01-11

    Hallo,

    ja du musst für jeden Sensor einen Slave einhängen im Gerätebaum.

    Grüße
    Edwin

     
  • eschwellinger

    eschwellinger - 2016-01-11

    Hi,
    Beispiel wie man das in einer eigenen Task macht.

    Grüße

    IMG: OneWireTask_.jpg

    Onewire.project [72.16 KiB]

     
  • Anonymous - 2016-01-13

    Originally created by: PI-Beginner

    Hallo Edwin,

    habe jetzt den Task analog zu dem Beispiel aufgebaut.
    Was würdest du an Priorität und Intervall für den Task empfehlen?

    In der Bibliothek gibt es einen Funktionsbaustein "SetIDFromString" hast du den schon mal verwendet bzw. was kann man mit dem machen?

    Gruß

    Jan

    IMG: Intervall.GIF

     
  • eschwellinger

    eschwellinger - 2016-01-13

    Hi,

    Prio: zwischen 10 und 30
    Zyklus: reicht 500ms... das ist alles ziemlich langsam und bei Temperatur ja völlig unkritisch.

    Was willst du machen?
    Wenn du dir das Projekt runterlädst.
    Darin ist ja enthalten wie man aus IEC den Sensor Parameter ändern kann
    OnwireSensorName.ID:=
    in dem Beispiel:
    DS18B20.ID := Onewire_master.pasScannedDevices^[ui-1];

    Grüße
    Edwin

     
  • grauerwolf - 2016-01-20

    Hallo Edwin
    bin gerade über dem Basteln mit 2 bzw. mehreren DS18B20. Habe dazu das Eaxmple-Porgramm genommen. Das kann ja nur einen Sensor bedienen. Das ist nicht weiter schlimm. Nur komme ich mit dem Scannen nicht zurecht. Was der Onewire.Master einmal gescannt hat, das behält er.
    ich habe nun versucht:

    a) alle 10 s einen Scan anzuschieben, in der Hoffnung, das er nur vorhandene Sensoren scannt.
    b) die maximalzahl der gescannten Sensoren aus dem Onewire.master anders herauszuholen >> mit Onewire_master.GetNumberOfSlaves

    a) ist wirkunslos, da ich nur wiederholt die ID'S vom Master auslese.
    b) da komme ich an die Grenzen meiner objektorientierten Progarmmierfähigkeiten. Obwohl ich im Bibliotheksverwalter den Rückgabewert der "Methode" mit UINT genannt bekomme, will der Compiler dies nicht im PLC_PRG.

    Könntest Du mir da mal auf die Sprünge helfen. Oder überhaupt: wie kann man das scannen definiert erneut starten??
    Geht das überhaupt, oder nur nach "rebbot" ??

    Vielen Dank
    Thomas
    PS. nach einem reboot ist alles gut - also bleibt nur die Frage, wie man den Master zu erneutem Scannen "zwingen" kann.

    IMG: Onewire_Scan_1.jpg

    IMG: Onewire_Scan_0.jpg

     
  • akneer - 2017-01-11

    Hallo,

    Habe das selbe Problem mit dem scannen der "Neuen" Sensoren.

    Desweiteren habe ich im Netz gelesen, dass man irgendwie die Datenrate der DS18B20 reduzieren kann um dadurch eine geringere Zykluszeit erreichen zu können.

    Weiss jemand über diese Dinge Rat ?

     
  • akneer - 2017-01-14

    Hi,

    Perfekt. Danke Edwin.

    Nun noch zu meiner 2ten Frage:

    Desweiteren habe ich im Netz gelesen, dass man irgendwie die Datenrate der DS18B20 reduzieren kann um dadurch eine geringere Zykluszeit erreichen zu können.

    Ist da im Codesys was möglich ??

     
  • eschwellinger

    eschwellinger - 2017-01-15

    Hallo,

    es ist so das wir für CODESYS, das auslesen der Onewire Sensoren das Linux Kernelmdul das mit Debian mitkommt verwenden.
    Das heißt ich denke du müsstest die Frage im RaspberryPi.org forum stellen.
    d.h man müsste das KernelModul "pimpen" und neu complieren gegen die Kernel version die du verwendest.

    Grüße
    Edwin

     

Log in to post a comment.