CUNO und 1-wire
Einleitung
Der CUNO ist der Nachfolger des CUN von busware.de. Zusätzlich zu den Eigenschaften des CUN ist beim CUNO der Anschluss von 1-Wire-Komponenten möglich (CUN-O, O für Onewire). Im CUNO ist ein DS2482 Busmaster-Chip verbaut, der über den internen I2C-Bus des CUNO angesteuert wird.
Dafür gibt es zwei Möglichkeiten:
- In der Firmware des CUNO ist eine Möglichkeit enthalten, die 1-Wire-Temperatursensoren DS18S20 in das Homematic-Protokoll zu mappen. 1-Wire Temperatursensoren am CUNO werden dann von FHEM automatisch als HMS-T eingebunden. Andere 1-Wire Sensoren oder Aktoren werden von der Firmware nicht ausgewertet.
- Das Modul 00_OWX.pm (unter contrib/1-Wire) kann mit dem CUNO kommunizieren und ermöglicht dadurch die Verwendung von allen anderen 1-Wire Devices am CUNO. Achtung: Derzeit (November 2012) erzeugt die Abfrage des CUNO durch das Modul 00_OWX.pm so viel Overhead, dass bei mehr als vier gleichzeitig betriebenen 1-Wire Devices Instabilitäten auftreten können.
In der Standardversion der CUNO-Firmware ist außerdem eine Einschränkung enthalten, welche die Erkennung von 1-Wire-Devices durch die Firmware auf 10 beschränkt, s. unten.
Hardware
Der CUNO wird leider mit einer 4-poligen RJ10-Anschlussbuchse ausgeliefert (sog. Western-Stecker), die mit keinem sonstigen 1-Wire-System kompatibel ist. Darüber hinaus sind darin die beiden mittleren Adern zusammengelegt, im Anschlussbild aber unterschiedlich benannt (1-Wire bzw. 1-Wire Return). Deshalb muss man entweder
- einen entsprechenden RJ10-Stecker mitbestellen und selbst an ein Kabel ancrimpen,
- ein RJ10-Kabelende z.B. aus einem ausgeschlachteten Telefon verwenden oder
- die RJ10-Anschlussbuchse im CUNO selbst ersetzen. Das ist glücklicherweise leicht möglich, und bei CUNO vor Version 2.4 noch aus einem anderen Grund sinnvoll, siehe unten
In der nebenstehenden Fotografie ist zu sehen, dass die RJ10-Buchse durch eine 3.5 mm Klinkenbuchse ersetzt wurde, das schwarze und das rote Kabel liefern die Pegel GND und 5 V, sowie das blaue Kabel die 1-Wire-Signale. Datei:/w/images/thumb/4/46/CUNO.JPG/400px-CUNO.JPG
Alternativ kann man auch Molex-Winkelstecker verwenden. Links wurde die RJ45 Buchse abgelötet und durch einen 4-poligen Molex Winkelstecker ersetzt. Vorteil dieser Lösung ist, das (von oben nach unten) 5V, 3,3V, 1-Wire Data und GND sauber heraus geführt sind. Auf der rechten Seite wurde ein 5 Pol Molex Stecker an die vorhandenen Kontaktpunkte angelötet, um eine 5V Spannungsversorgung mit einem handelsüblichen 5V Netzteil zu ermöglichen. Mit "PWR" ist auf der Platine der 5V Anschluss bezeichnet (Pin 5 des Molex Steckers). An Pin 3 ist GND angeschlossen.
Es empfiehlt sich die beiden Stecker noch mit Heisskleber (o.ä.) im Gehäuse zu fixieren, um zu hohe mechanische Kräfte beim Ein- und Ausstecken von den empfindlichen Kontakten auf der Platine fern zu halten.
Datei:/w/images/thumb/5/52/CUNO Mod.jpg/400px-CUNO Mod.jpg Das Ganze sieht dann am Ende so aus:
Datei:/w/images/thumb/3/36/CUNO Mod2.jpg/400px-CUNO Mod2.jpg Datei:/w/images/thumb/0/04/CUNO Mod3.jpg/400px-CUNO Mod3.jpg
Level-Shifter vor Version 2.4
Im CUNO vor Version 2.4 (ausgeliefert bis ca. Anfang Oktober 2012) wird der 1-Wire-Bus durch den CUNO nur mit einer Spannung von 3.3 V versorgt - diese Spannung liegt auch an der RJ10-Buchse an. Ein Signalpegel von 3.3 V auf der Datenleitung des 1-Wire Bus ist aber zu gering, um die angeschlossenen Sensoren parasitär mit Energie zu versorgen - sie müssen deshalb an den unmodifzierten CUNO tatsächlich mit drei Adern (3.3 V, GND und 1-Wire) angeschlossen werden. Im CUNO selbst stehen aber auch 5V zur Verfügung, wenn er durch ein USB-Kabel mit Spannung versorgt wird. Diese lassen sich sehr leicht "abgreifen" und an die (evtl. ersetzte) 1-Wire Anschlussbuchse führen.
Das ist allerdings nur eine "halbe" Lösung, weil der interne Busmaster Chip DS2482 immer noch mit 3,3 V betrieben wird. Dagegen kann ein einfacher Levelshifter helfen (insbesondere beim gleichzeitigen Umbau der Anschlussbuchse !), der auch die Datensignale auf dem Bus nach 5V umsetzt. Dabei handelt es sich um eine seit vielen Jahren in der Elektronik verwendete Standardschaltung [1]. Im Beispiel wird sie mit einem N-Kanal MOSFET und drei Widerständen realisiert, alternativ zum 2N7000 kann man auch einen BS170 verwenden.
Datei:/w/images/thumb/a/ad/Levelshifter.png/400px-Levelshifter.png
Datei:/w/images/thumb/0/0a/1WLS V3.PNG/350px-1WLS V3.PNG
Software
Der 1-Wire-Bus wird durch eine Anzahl von Kommandos gesteuert, die in der Beschreibung der CUNO-Firmware nachzulesen sind, siehe [1]
In dieser Firmware ist sowohl der 1-Wire Suchalgorithmus implementiert, als auch das Lesen und Schreiben von einzelnen Bits und Bytes auf den 1-Wire Bus. Mit diesen Low-Level Kommunikationsfunktionen lassen sich bei Verwendung des Modul 00_OWX.pm (siehe contrib/1-Wire) alle 1-Wire Komponenten ansteuern.
In der Firmware ist auch noch eine High-Level Komponente eingebaut, welche die Signale von Temperatursensoren (und nur diese !) auf das HomeMatic - System abbildet.
In der Standardversion der CUNO-Firmware ist eine Einschränkung enthalten, welche die Erkennung von 1-Wire-Devices auf 10 beschränkt. Will man dies erhöhen, muss in der Datei board.h die folgende Zeile mit einem Wert > 10 geändert und die Firmware neu übersetzt und geflasht werden.
'#define HAS_ONEWIRE 10 // OneWire Device Buffer, RAM: 10 * 8 Byte'
Allerdings ist eine beliebige Erhöhung nicht möglich, das der CUNO relativ wenig Speicherplatz hat. Berichtet wurde, dass schon ab einem Wert von 30 Schwierigkeiten auftreten, indem die 1-Wire Devices nicht alle erkannt werden.
Literatur
[1] Siehe z.B. Hilberg, W.: Skriptum zur Vorlesung Datentechnik an der TU Darmstadt, WS 1987/88