In diesem Artikel wird ein generell universelles OneWire Gateway vorgestellt.
Zur Zeit ist allerdings nur die Verwendung von DS18x20 (also z.B. DS18B20) Temperatursensoren implementiert.
Die Applikationssoftware ist allerdings bereits darauf ausgelegt auch andere Sensortypen relativ einfach zu implementieren.
Grundlagen
Der OneWire Bus ist ein Eindraht-Bus, der aber insgesamt in der vollen Ausbaustufe 3 Leiter besitzt.
Es wird mindestens eine Ground Verbindung und die Busleitung benötigt. Über die Busleitung können die OneWire Geräte parasitär mit Energie versorgt werden. Die OneWire Geräte haben zur Energieversorgung aber auch einen separaten Anschluss, an den dann der dritte Leiter als +5V angeschlossen werden kann.
Ich habe bei mir im Haus in einigen Zimmern einen DS18B20 verbaut und die Zimmer per Telefonleitung (J-Y(ST) 2x2x0,6) verbunden. In einem Stockwerk sind es insgesamt 7 Sensoren.
Leider gab es Probleme, die Sensoren alle an einen OneWire Bus Kanal anzuschließen. Die Verbindung kam nicht zustande und es konnte keine Kommunikation mit den Sensoren aufgebaut werden.
Somit nahm ich eine Änderung vor und schloss nur 3 bzw. 4 Sensoren pro OneWire Kanal an. Dieses läuft bisher einwandfrei.
Da ich zuerst ein 2 kanaliges Gerät geplant und auch gebaut hatte (Obergeschoss und Erdgeschoss), aber nun 2 Kanäle bereits für das Erdgeschoss verbraucht hatte, habe ich noch eine Hardware für 4 Kanäle erstellt.
Der Hauptgrund dafür waren die hochpreisigen Bauteile, die pro OneWire Gateway nur einmal benötigt werden.
Hardware
Die beiden Hardware Versionen (2- und 4- Kanäle) sind grundsätzlich identisch aufgebaut.
Intern ist ein Selfbus ARM Controller per I2C Bus mit mehreren DS2482 OneWire Controllern verbunden. Dazwischen ist noch ein ADUM1250 (digitaler Isolator) für die galvanische Trennung verbaut. Je nachdem ob es das 2- oder 4- Kanal OneWire Gateway ist, sind jeweils 2 oder 4 DS2482 Chips verbaut.
Zum Schutz vor ESD aus der OneWire Leitung ist noch ein IP4220CZ6 verbaut, der unverträgliche Spannungen ableiten soll.
Die Spannungsversorgung der OneWire Geräte kann über den KNX Bus erfolgen. Dann wird ein DC/DC Wandler von KNX Busspannung auf 5V verbaut. Der DC/DC Wandler ist Sekundärseitig bereits kurzschlussfest und somit wird für den Kurzschlussfall keine besondere Absicherung benötigt.
Die Versorgung der OneWire Geräte kann auch von extern erfolgen, dazu ist ein Anschluss für 5V externe Spannung vorgesehen. In dem Fall wird der DC/DC Wandler nicht bestückt.
Ich habe mit 7 DS18B20 OneWire Sensoren an einem 4 Kanal OneWire Gateway eine Stromaufnahme (vom KNX Bus) des gesamten OneWire Gateways von ca. 5mA festgestellt.
Software
Die Software ist für beide Hardwareversionen gleich, es muss lediglich in der config.h das define NUMBER_OF_ONEWIRE_CHANNELS zwischen 2 und 4 gewechselt werden.
Da das Gerät aktuell auf maximal 20 OneWire Geräte ausgelegt ist, muss zusätzlich noch in der config.h das define MAX_NUMBER_OF_ONEWIRE_DEVICES zwischen 5 und 10 gewechselt werden, ebenso wie in der DS18x20 lib das define MAX_DS_DEVICES gleich sein muss.
Durch diese 3 define Änderungen ist die Software zwischen den 2- und dem 4- kanaligem Gerät gewechselt.
Funktion
Das Gateway sucht alle 10 Sekunden alle OneWire Kanäle nach Geräten ab. Wenn ein neues Gerät gefunden wurde, wird die unbekannte OneWire Adresse an dem entsprechenden Kommunikationsobjekt ausgegeben (einmalig). Wenn die Funktion des zyklischen Sendens der unbekannten Adresse aktiviert wurde, wird die unbekannte Adresse alle 10 Sekunden versendet.
Sollten mehrere unbekannte Adressen auf dem Bus zu finden sein, wird die zufällig erste gefundene Adresse auf dem Kommunikationsobjekt versendet.
Die unbekannte Adresse wird zu einer bekannten Adresse, indem Sie in ein Adressfeld eines OneWire Kanals eingetragen wird.
Ab dieser Konfiguration wird der OneWire Sensor zyklisch ausgelesen und der Wert an dem entsprechenden Kommunikationsobjekt versendet. Je nach Einstellung wird der Wert zyklisch und/oder nach Änderung des Messwertes versendet.
Wenn der Messwert nach Änderung versendet werden soll, wird zu Beginn immer der erste Messwert versendet, da dieser nachfolgend als Referenz für die Änderung verwendet wird.
Produktdatenbanken
Es sind 2 Produktdatenbanken für die 2 Geräteversionen verfügbar. Die Produktdatenbanken sind beide für 20 OneWire Geräte anlegt. Die Produktdatenbank für das 2 kanalige Gerät kann für jeden Kanal jeweils 10 OneWire Geräte aufnehmen, die Produktdatenbank für das 4 kanalige Gerät kann für jeden Kanal jeweils 5 OneWire Geräte aufnehmen.
Im Reiter "Allgemeine Einstellungen" kann für jeden Kanal die parasitäre Versorgung eingeschaltet werden. Wenn dieses aktiviert wurde, wird keine separate Spannungsversorgung zu den OneWire Geräten benötigt. Zusätzlich kann hier die Einstellung pro Kanal getroffen, werden, ob unbekannte Adressen zyklisch (alle 10 Sekunden) versendet werden sollen.
Im folgenden gibt es dann für jedes OneWire Gerät einen eigenen Reiter. In solch einem Reiter muss die OneWire Geät Adresse eingetragen werden. Das Format ist hexadezimal einzutragen (z.B. 28FFAF1652163320).
Der Gerätetyp ist bereits für die Veränderung des Sensortyps vorbereitet, aber noch kein weiterer Gerätetyp implementiert.
Weiterhin kann ausgewählt werden, ob der Messwert zyklisch und/oder nach Änderung versendet werden soll.
Die Wertänderung kann auf ein Zehntel aufgelöst eingestellt werden und wird mit einem Komma als Dezimaltrennzeichen eingetragen (z.B. 0,5)
Zusätzlich kann ein Korrekturwert für den Messwert eingegeben werden. Der Korrekturwert hat die gleiche Auflösung und das gleiche Format wie die Wertänderung.
Die Kommunikationsobjekte für unbekannte Adressen gibt es je nach Variante in 2- oder 4-facher Ausführung. Hier sollte eine Gruppenadresse vergeben werden, da sonst keine Versendung und Abfrage von unbekannten Adressen erfolgen.
Für jedes OneWire Gerät gibt es dann ein eigenes Kommunikationsobjekt, welches nach Belegung der Kanäle mit einer Gruppenadresse belegt werden muss. Die Kommunikationsobjekte sind auch lesbar, sodass auch ohne die zyklische Versendung und Versendung nach Änderung des Wertes die aktuellen Messwerte abgefragt werden können.
Aufbau der Geräte
Für das 2 kanalige Gerät musste der 2TE ARM Controller leicht verändert werden, da die I2C Pins des Controllers nicht herausgeführt waren.
Das Gerät mit 2 Kanälen passt in ein 2TE Hutschienengehäuse. Der 2TE Controller wird mittels Stapelleiste mit der Applikationsplatine verbunden.
Das 4 kanalige Gerät nutzt den 4TE ARM Controller, der mittels Flachbandkabel mit der Applikationsplatine verbunden wird. Hier sind die benötigten PINs bereits herausgeführt, sodass keine Änderung der Controllerplatine notwendig war.