1-Wire Bus

1-Wire ist eine von der Firma Dallas entwickelte Technik, um viele sehr günstige Sensoren einfach zu verbinden. Ich habe selbst 1-Wire an verschiedenen Stellen im Einsatz, z.B. EAC 1Wire/S0-Stick. Diese Seite beschreibt ein paar Sensoren und Gateways für PCs.

Einführung zu 1-Wire

ich möchte hier nicht noch mal alle Details aufführen, zumal es im Internet sehr viele sehr gute Beschreibungen gibt. Es ist aber eine sehr einfache elektrische Lösung um viele Sensoren zu verbinden und von einem Master auslesen zu lassen.

iButton: 1-Wire Public Domain Kit
http://www.maximintegrated.com/products/ibutton/software/1wire/wirekit.cfm
Programmierbeispiele des Herstellers Maxim.

Wenn man die Masseleitung nicht mitzählt, ist ein einzelner Verbindungsdraht ausreichend um die Sensoren mit Strom zu versorgen, Befehle hin zu senden und zu empfangen. Ein Master steuert die Kommunikation. für einen Administrator oder Bastler ist besonders interessant, dass die sehr günstigen Sensoren ganz einfach zu verkabeln sind. Wer also in einem Rack oder Serverraum nicht nur ein Thermometer an die Wand schrauben will, sondern an mehreren Stellen im Raum die Wärme erfassen will, kann einfach ein zwei (oder drei)-adriges Kabel durch die Racks und den Raum ziehen und an den gewünschten Stellen einfach einen Sensor (<2€) anschließen.

Nur wenn man sehr viele Sensoren hat, dann sollte man nicht mehr den Strom von der einen Datenleitung abzapfen, sondern eine eigene Leitung für eine 5 Volt-Versorgung bereit stellen. Dann wäre es zusammen mit der Masse (GND) ein dreiadriges Kabel. Das schaffen selbst gestandene Microsoft Administratoren noch ohne Probleme.

Wer sich vor Schrauben, Lüsterklemmen etc. fürchtet, kann auch gerne "fertige" Steckmodule einsetzen. z.B. iButtonLink

Die 20€ für den Temperatursensor erscheint hoch, aber wenn Sie das Gehäuse, die 2x RJ45-Buchsen und das ganze zusammenbauen rechnen, relativiert sich das alles.

Verbindung zur IT - der 1-Wire Master

Um die Sensoren auslesen zu können benötigen wir natürlich auch eine Schnittstelle, die als Master die Kontrolle übernimmt. Hier gibt es eine ganze Menge Lösungsansätze. Da es "nur" ein Pin ist, der zwischen 0 und 5V pendelt und vom Sensor ebenfalls auf Masse gezogen werden kann, reicht ein generische I/O-Pin der meisten Controller aus. Entsprechend gibt es 1-Wire Libriares für Arduino, RasperryPI und andere Module, die einfach über einen PIN die Datenleitung schalten und Lesen. Da dies aber "zeitkritisch" ist, darf der Host in der Zeit am besten nichts anderes machen und sich nur der Aufgabe widmen. Einige Libraries halten sogar die weitere Verarbeitung an, bis die Daten per 1-Wire gelesen wurden. Der Einsatz ist möglich, aber eher für erste Bastelversuche geeignet. Hier dennoch ein paar Links dieser "direkten" Anbindungen:

Es gibt aber von Dallas natürlich auch fertige "Master", die komplett das 1-Wire-Protokoll steuern und auf der anderen Seite mit klassischen bekannten Schnittstellen arbeiten.

Auf diesen Chips bauen die meisten verschiedenen Adapter auf, die es fertig zu kaufen gibt:

Diese Liste ist sicher nicht vollständig, nicht repräsentativ und soll nicht als Produktempfehlung verstanden werden.

Anschluss Links

Seriell

USB

Zum DS9490R habe ich weiter unten noch ein eigenes Kapitel

Ethernet

RasPi Erweiterung

Loxone

KNX

Sicher gibt es noch einige weiter Module und Aufsätze.

Sensoren (Slaves)

An den 1-Wire Bus können eine Vielzahl von "Slaves" angeschlossen werden, bei denen jeder eine eindeutige 64bit-Kennung hat, bei der die ersten 8 Byte die "Family-ID" kennzeichnet. Über die kann der Typ des Slave ermittelt werden. Hier ein paar Beispiele

Family ID (hex) Device

10

DS18S20 hochgenauer Thermometer-Fühler

26

DS2438 Batterie-Management Smart Battery Monitor

Wird häufig auch zweckentfremdet für andere Messaufgaben (Luftdruck, Feuchtigkeit)

1D

DS2423 1-Wire 4x 32bit Zählerbaustein (Wird wohl leider nicht produziert)

Nachbildung eines 2423 mittels AVR
http://www.tm3d.de/index.php/1-wire-device-mit-avr

20

DS2450 1-Wire 4-Channel Analog Input
http://owfs.org/uploads/DS2450.html

28

DS18B20 1-Wire Temp-Sensor

3A

DS2413 1-Wire Dual I/O Chip
http://owfs.org/uploads/DS2413.html

FC

BAE0910
http://owfs.org/index.php?page=bae910

Für die ersten Gehversuche würde ich immer einen DS18S20 Temperatursensor einsetzen, da er einfach direkt an die Kabel geklemmt werden kann. Basierend auf diesen Basissensoren gibt es natürlich sehr viele Hersteller von kleinen Platinen, auf denen die Sensoren und eventuell sinnvolle Zusatzkomponenten schon fertig montiert sind.

Temperaturen müssen

Der mit Abstand am meisten genutzte Sensor dürfte einer der DS18x20x"Serie sein, die für meist unter 2€ Temperaturen zwischen -55 und -125 Grad Celsius mit 9 oder 13 Bit Genauigkeit müssen. Allerdings sind nicht alles Sensoren gleich und unterscheiden sich nicht nur in der Auflösung sondern auch in der Geschwindigkeit, mit der Sie die Messung durchführen. Einige schaffen es in 10ms und andere brauchen geschlagene 1000ms dafür. Entsprechend muss auch die Auswertelogik darauf Rücksicht nehmen. Hier eine Tabelle der Daten, die ich aus anderen Quellen, Datenblättern und eigenen Messungen zusammengesetzt habe.

Chip

Family ID

Bits

Bereich
(ºC)

Time
(ms)

Versorgung
über Data

DS18S20
http://pdfserv.maxim-ic.com/en/ds/DS18S20.pdf

10

9

-55 bis125

750

Ja

DS18B20
http://pdfserv.maxim-ic.com/en/ds/DS18B20.pdf

01

9-12

-55 bis 125

750

Ja

DS1822
http://pdfserv.maxim-ic.com/en/ds/DS1822.pdf

22

9-12

-55 bis 125

750

Ja

DS1825
http://pdfserv.maxim-ic.com/en/ds/DS1825.pdf

3B

12

-55 bis 125

750

Ja

DS2436 Smart Battery Monitor
http://pdfserv.maxim-ic.com/en/ds/DS2436.pdf

1B

13

-40 bis 85

 

Ja

DS2438 (Smart Battery Monitor)
http://pdfserv.maxim-ic.com/en/ds/DS2438.pdf

26

13

-40 bis 85

 

Ja

DS1921H (iButton)
DS1921Z (iButton)

21

 

+15bis+46
-5bis+26

 

 

DS28EA00

42

9-13

-40 bis 85

 

 

DS18B20 DS1825 DS28EA00

 

 

 

 

 

DS2756 DS276X
http://pdfserv.maxim-ic.com/en/ds/DS2755.pdf
http://pdfserv.maxim-ic.com/en/ds/DS2756.pdf

35

10

-127 bis +127

220ms

 

DS278X

 

 

 

 

 

Die "Temperaturmessung" ist oft auch eine Funktion, die in anderen Chips nebenbei enthalten ist. So misst der "DS2438 Batterie-Management Smart Battery Monitor" auch die Temperatur. Allerdings benötigen die dann doch eine konstante Versorgungsspannung um über einen Wiederstand auch eine sinnvoll messbare Spannung zu erhalten.

Verkabelung

Nicht jeder ist zum "High Perfomance Bastler" geeignet und mit Lötkolben 3D-Drucker, Metallverarbeitung etc. beschlagen. Um sich aber einen 1-Wire-Bus aufzubauen, der flexibel ist, braucht man natürlich ein paar Steckverbinder, Kabel und AnschlussMöglichkeiten. Ein Aufbau mit Lüsterklemmen und Klingeldraht ist natürlich nur für die ersten Schreibtischexperimente geeignet. Sobald Sie die Sensoren in Racks, um Heizungskeller o.ä. verbauen will, sollten Sie das etwas professioneller angehen.

Ich habe etwas herum geschaut und im ISDN/TK-Bereich ein paar interessante Komponenten gefunden, die günstig sind und sich problemlos zweckentfremden lassen. Der ISDN-Bus kann von der Struktur mit einem 1-Wire-Bus verglichen werden und dort gibt es schon entsprechende Verteiler, Buchsen, Stecker etc. Wichtig ist dabei natürlich, dass Sie Komponenten ohne Endwiderstände nehmen oder die ISDN-Abschlusswiderstände (2x 100Ohm) entfernen können. Hier mal eine kurze Momentaufnahme:

Über die Verteiler können Sie quasi den Sternmittelpunkt aufbauen. Der kleine 3-fach Verteiler könnte einfach mit einem Sensor ausgestattet werden und so als Teil in der Kette fungieren. Wer es noch kleiner haben will, kann ja einen 2-fach Verteiler zweckentfremden, indem man den Stecker abschneidet und dort direkt den Sensor anlötet oder anschaubt.

gerade in IT-Umgebungen ist der Einsatz von RJ45 natürlich optimal, da auch Patchfelder für LAN diese Dosen verwenden und daher normale Patchkabel und Rangiereinheiten genutzt werden können. Allerdings ist ein 100m Patchkabel für Ethernet problemlos erlaubt, aber mit 1-Wire sollte man die Längen im Auge behalten.

Die meisten RJ-45 Kabel (Ethernet und ISDN) verschalten die mittleren Abschlüsse als Paare 3-6  und 4-5, so dass hier eine Durchgängigkeit vorhanden ist. Ein ISDN-Kabel ist natürlich nicht abgeschirmt und verbindet selten das Paar 1-6, so dass ein ISDN-Kabel kein Netzwerkkabel sein kann. für 1-Wire ist das aber nicht weiter relevant. Interessant ist hier eher, welche Master-Adapter für 1-Wire schon mit RJ-45 ausgestattet sind und wie die Pins dort belegt sind. Leider gibt es da wohl gar keinen Standard, wie ein Blick auf die Webseite http://owfs.org/index.php?page=wiring-standards belegt.

Pin RJ45 Pin RJ11 Belegung

1

 

 

2

1

NC oder 5V

3

2

Oft GND

4

3

Data

5

4

GND

6

5

Oft 5V

7

6

NC oder Power

8

nc

 

Relativ "sicher" ist also nur die Belegung der beiden mittleren Port mit DATA und GND, was aber für einen parasitären 1-Wire-betrieb vollkommen ausreichend ist. Hier sollten Sie also "flexibel" sein oder sich auf die Anschlussbelegung ihres Masters festlegen und ggfls. beim einem Wechsel des Masters einen Konverter vorsehen.

1-Wire "Filesystem"

Die Ansteuerung der verschiedenen Master erfolgt meist über serielle Schnittstellen. Da muss man dann natürlich die passenden Befehle können. Einen anderen Ansatz geht hier das "OneWireFileSystem", welches unter Unix verfügbar ist.

Interessant ist dabei, dass der 1-Wire-Bus dann wie ein Verzeichnisbaum im Dateisystem erscheint, in dem jedes Gerät auf dem Bus quasi ein "unterverzeichnis" ist, welche Dateien enthält, die über normale Datei-I/O-Operationen zugegriffen werden können.

Kleincomputer mit 1-Wire

Das Auslesen von Daten per 1-Wire ist einfach und auch per USB von einem PC möglich. Aber permanent einen PC laufen lassen nur um regelmäßig Daten zu erfassen ist nicht gerade "Green-IT". Interessanter ist hier schon der Einsatz eines Minicomputers, der nur wenig Strom braucht und die Daten erfasst und protokolliert. Optional kann er ja gerne noch einen Ethernet-Anschluss haben.

Speziell die kleinen Systeme mit Ethernet sind natürlich interessante Alternativen zu den kommerziellen 1-Wire auf Ethernet Gateways, die relativ teuer erscheinen.

DS9490R -Stick

Mit dem EAC 1Wire/S0-Stick habe ich schon einen 1-Wire-Adapter für einen PC beschrieben, der aber neben den 2 Zählereingängen eine vereinfachte 1-Wire Unterstützung hat, er kann sehr einfach die Temperatursensoren DS18x20x einlesen. Aber eine volle 1-Wire Unterstützung ist damit nicht möglich.

Der DS9490R basiert aber auf dem gleichnamigen USB zu 1-Wire Chip und erlaubt eine vollständige Kontrolle des 1-Wire Bus. Allerdings benötigen Sie ein paar Treiber unter Windows, denn es ist kein generischer serieller Port. Also zuerst die Treiber bei Maxim herunter laden.

Windows 7/8
x32 http://files.maximintegrated.com/sia_bu/licensed/install_1_wire_drivers_x86_v403.msi
x64 http://files.maximintegrated.com/sia_bu/licensed/install_1_wire_drivers_x64_v403.msi

Erst nach der Installation dürfen Sie dann den Stick einstecken, der dann erkannt wird.

Im Gerätemanager erscheint der Stick nicht als virtuelle COM-Port, sondern als eigenes 1-Wire Device

Mit der Installation des Treibers kommt auch eine API mit auf den PC. Als Entwickler ist die 32bit oder 64it Version einer DLL der Einstiegspunkt.

C:\Windows\System32\IBFS64.dll

Das ist leider eine native Win32 DLL und mit Depends.exe hat man zwar ein paar Funktionen gesehen, aber richtig weiter geholfen hat das erst mal nicht. Die Funktionen sind hier aufgelistet

Wer mag, kann gerne das SDK dazu weiter verwenden. Ich für mich werde diesen Stick erst mal nicht weiter betrachten.

LinkUSBi, DS9097u, DS2480B

Interessanter ist hier natürlich ein Device, welches am COM-Port (DS9097u) angeschlossen wird oder direkt als COM-Port unter Windows (LinkUSBi) erkannt wird und man damit keinerlei Probleme mit Treibern o.ä. zu erwarten hat. für den Anschluss an einen RASPI oder Arduino hingegen ist eine 5V Variante interessanter, die als DS2480B verfügbar ist.

Da ich aber bislang nur mit 1-Wire Thermometer gearbeitet habe, reicht mir der einfach EAC 1Wire/S0-Stick aus. Vielleicht finde ich später mal die Zeit ein PowerShell-Modul dafür zu schreiben.

Der eigene 1-Wire Slave

Dallas/Maxim produzieren eine ganze Menge von Sensoren für unterschiedlichste Dinge. Allerdings sind natürlich viele Temperatursensoren, Eprom-Speicher, Seriennummern-Chips und Klimaüberwacher dabei. Früher gab es noch einen "Zählerbaustein" der sehr interessant z.B. für die Messung von Energieverbrauch (S0-Zähler) wäre. Der wurde aber wohl wieder eingestellt.

Allerdings gibt es ja durchaus andere Mikroprozessoren, die für wenig Geld sehr reduzierten Code abliefern können und so gibt es einige Seiten und Libraries, mit der z.B. PIC-Prozessoren aber auch ein Arduino als 1-Wire Slave eingesetzt werden können. Sie hängen also wie die offiziellen 1-Wire Sensoren mit am Bus uns lassen sich abfragen.

Das ist aber sicher etwas für die ambitionierteren Bastler.

2-Wire (I2C)/EIB/Zigbee

Es gibt noch weitere Bus-Systeme, die in der Steuerung und Erfassung vorzufinden sind, und nicht mit 1-Wire kompatibel sind. Hier ein paar Links zu Seiten, die damit etwas gemacht haben.

Weitere Links