Homepage Wiki Forum Buy

1-Wire

Aus GNUBLIN

Schwierigkeitsgrad Voraussetzung Gnublin Familie
Gnublin logo advanced.png 1-Wire Wissen, Baustein anschliessen, Kernel Treiber laden Alle


In diesem Artikel wird erklärt, wie man einen 1-Wire Temperatursensor (DS18B20) und einen 1-Wire Seriennummernchip (DS2401) über eine I2C-1-Wire-Bridge (DS2482) am GNUBLIN anschließt.


Inhaltsverzeichnis

Vorbereitungen

Bevor man starten kann, muss man die Hardware korrekt verschalten. Im nachfolgenden Diagram ist die Beschaltung des Gnublins mit den 3 Komponenten (DS2401, DS2482, DS18B20) dargestellt.

1-wire.jpeg

  1. Das Datenblatt zu der I2C-1-Wire-Bridge DS2482 findet man hier
  2. Das Datenblatt zu dem Temperatursensor DS18B20 findet man hier
  3. Das Datenblatt zu dem Seriennummernchip DS2401 findet man hier


Die Schnittstellen der einzelnen GNUBLIN Bauformen und deren Position können hier angesehen werden.

Für Anfänger mit Gnublin Distribution

Die Kernelmodule sind in der neuesten Gnublin Distribution als Module vorhanden.

Module laden

Zuerst werden die benötigten Module geladen.

modprobe ds2482
modprobe w1_therm (Für Temperatursensoren z.B. DS1820)
modprobe w1_smem (Für Seriennummernchip z.B. DS2401)


Anschließend muss die I2C-1-Wire-Bridge am I2C-Bus registreiert werden. Wenn alles nach dem Schaltplan oben verschaltet wurde, ist die I2C-Adresse des DS2482 0x18 und das nachfolgende Kommando registriert den Chip am I2C-Bus:

echo ds2482 0x18 > /sys/bus/i2c/devices/i2c-1/new_device

Der DS2482 Treiber sucht alle 10 Sekunden nach angeschlossener Hardware am 1-Wire Bus und fügt für jedes gefundene Device einen Eintrag im Verzeichnis /sys/bus/w1/devices/w1 bus master an.

Am Besten man wechselt mit folgendem Befehl in das Verzeichnis /sys/bus/w1/devices/w1 bus master:

cd /sys/bus/w1/devices/w1\ bus\ master

Mit dem Befehl ls kann man nun den Inhalt des Verzeichnis anzeigen lassen:

01-000008e78344 w1_master_add w1_master_remove 28-000001fece78 w1_master_attempts w1_master_search driver w1_master_max_slave_count w1_master_slave_count power w1_master_name w1_master_slaves subsystem w1_master_pointer w1_master_timeout uevent w1_master_pullup

Hier kann man sehen, dass der Treiber zwei 1-Wire Teilnehmer gefunden hat (01-000008e78344 , 28-000001fece78) und ein Verzeichnis für jeden der Teilnehmer angelegt hat.

Temperatur/Seriennummer auslesen

Die Seriennummer des DS2401 ist relativ leicht auszulesen, Sie entspricht lediglich der Zahlenfolge des Erstellten Verzeichnis ohne die "01-" am Anfang.

Also hätte unser Chip zum Beispiel die Seriennummer 000008e78344


Nun wollen wir die Temperatur des DS18B20 auslesen, hierfür müssen wir den folgenden Befehl eintippen, wenn wir uns im Verzeichnis /sys/bus/w1/devices/w1 bus master in dem Terminal befinden (Die Zahlenfolge 28-000001fece78 muss durch die des eigenen devices ersetzt werden):

cat 28-000001fece78/w1_slave

Als Ausgabe erschient dann folgendes:

46 01 4b 46 7f ff 0a 10 85 : crc=85 YES
46 01 4b 46 7f ff 0a 10 85 t=20375

Hier kann man dann die Temperatur nach dem "t=" ablesen.


Für Fortgeschrittene

Benötigte Treiber:

      <*> Dallas's 1-wire support  --->                                         
                  1-wire Bus Masters  --->
                       <M> Maxim DS2482 I2C to 1-Wire bridge
                  1-wire Slaves  ---> 
                       <M> Thermal family implementation                               <--- Für Temperatursensoren z.B DS1820 
                       <M> Simple 64bit memory family implementation                   <--- Für 1-wire Seriennummernchip z.B. DS2401


1. Treiber im Kernel aktivieren. Module und zImage bauen und auf SD-Karte kopieren.

2. Hardware verschalten. (siehe #Vorbereitungen

3. Board booten.


4. Module laden:


modprobe ds2482
modprobe w1_therm (Für Temperatursensoren z.B. DS1820)
modprobe w1_smem (Für Seriennummernchip z.B. DS2401)


5. Device am I2C Bus registrieren:

echo ds2482 0x18 > /sys/bus/i2c/devices/i2c-1/new_device


Der DS2482 Treiber sucht alle 10 Sekunden nach angeschlossener Hardware am 1-Wire Bus und fügt für jedes gefundene Device einen Eintrag im Verzeichnis /sys/bus/w1/devices/w1 bus master an.

cd /sys/bus/w1/devices/w1\ bus\ master
ls

liefert folgende Ausgabe:

01-000008e78344 w1_master_add w1_master_remove
28-000001fece78 w1_master_attempts w1_master_search
driver w1_master_max_slave_count w1_master_slave_count
power w1_master_name w1_master_slaves
subsystem w1_master_pointer w1_master_timeout
uevent w1_master_pullup

Die Seriennummer des DS2401 ist relativ leicht auszulesen, Sie entspricht lediglich der Zahlenfolge des Erstellten Verzeichnis ohne die "01-" am Anfang.

Also hätte unser Chip zum Beispiel die Seriennummer 000008e78344

Die Temperatur kann man mit folgendem Befehl auslesen (Die Zahlenfolge 28-000001fece78 muss durch die des eigenen devices ersetzt werden) :

cat 28-000001fece78/w1_slave

Als Ausgabe erscheint folgendes:

46 01 4b 46 7f ff 0a 10 85 : crc=85 YES
46 01 4b 46 7f ff 0a 10 85 t=20375
In anderen Sprachen