Wechseln zu: Navigation, Suche

TemperaturmessungOneWire

Temperaturmessung mit OneWire

1-Wire Beschreibung

Unter 1-Wire versteht man ein sogenanntes 1-Draht-Bussystem. Es gibt nur eine Datenleitung (DQ) die für Sende/Empfangsbetrieb verwendet wird. Zusätzlich dazu benötigt man die Versorgungsspannung (VCC) und Ground (Gnd). Am 1-Wire Bus können mehrere Sensoren parallel angeschlossen werden. Die Sensoren werden durch eine interne 64 Bit Adresse (fix im ROM programmiert) angesprochen und unterschieden.

Mehr Informationen zum 1-Wire Bus bei Wikipedia.

Dallas 1-Wire Temperatursensoren

Dallas/Maxim bietet verschiedene 1-Wire Temperatursensoren an. Der Anschluss an den 1-Wire Bus funktioniert völlig einfach:

DS1820-anschlussplan.gif

Ein Pullup Widerstand von typ. 4,7kOhm ist laut Datenblatt nötig. Diesen Widerstand muss man natürlich nur einmal in den Bus schalten, auch wenn mehrere Sensoren am Bus aktiv sind.

Dieser Sensor misst Temperaturen im Bereich -55°C bis +125°C auf 0.5°C genau. Die Übertragung funktioniert digital über den 1-Wire Bus. Der Sensor ist zB bei Pollin für Euro 2,50 zu haben.

Mehr Informationen zu verschiedenen Sensoren gibts noch auf mikrocontroller.net

OpenMCP und 1-Wire Temperatursensoren

Wenn in der Datei <HARDWARE>.config.h die Variable ONEWIRE definiert wurde (#define ONEWIRE) dann findet man im Webinterface (sofern dies nicht in der config deaktiviert wurde) im Punkt IO-Ports / 1-Wire eine Liste der gefundenen Geräte am Bus. Die Liste sieht beispielsweise so aus:


Onewire-openmcp-ausgabe.gif


OpenMCP erkennt den Sensortyp, die interne Adresse und ergänzt die aktuelle Temperatur.

Temperatur in einer eigenen C Routine abfragen

In eigenen Routinen kann man zum Beispiel die Temperatur folgendermassen abfragen:


#include "system/sensor/temp.h"
printf_P( PSTR( "<br>Temp: %.2f °C <br>"), TEMP_readtempstr("ONEWIRE;10:0D:C6:FF:01:08:00:39;Temp1") / 256.0);


TEMP_readtempstr(char *) gibt die Temperatur als 16-bit Integer Wert zurück. Am Besten dividiert man diesen Wert durch 256.0 um die Temperatur in Grad Celsius als float Wert zu erhalten.

Der zu übergebene String ist selbsterklärend: ONEWIRE gibt den Bus an, nach dem Strichpunkt kommt die Adresse (welche man am besten mit dem Webinterface sucht), nach einem weiteren Strichpunkt folgt ein Name für den Sensor (spielt in diesem Fall keine Rolle).

Anschluss an die AVR-NET-IO Platine von Pollin

Der Jumper J11 wird entfernt. Der Widerstand R13 muss mit einer Drahtbrücke überbrückt werden. Den Anschluss J11 verwendet man nun wie im Bild zu sehen ist als 1-Wire Bus:

AVR-NET-IO-Anschluss-1Wire.jpg


Um mehrere Sensoren am Bus bequem anschließen zu können habe ich mir von Pollin einen simplen 5-fach ISDN Verteiler gekauft.

1-wire-netzwerk-verteiler.jpg


Oben links sieht man den 5-fach Verteiler. Links unten sieht man den 3poligen Anschluss welcher mit J11 verbunden wird. Den 4k7 Widerstand habe ich zwischen DQ und +5V im 5-fach Verteiler eingelötet. Das Kabel ist ein 8-poliges Netzwerkkabel (Patchkabel).

Rechts unten sind 2 verbundene Sensoren zu sehen. Ich habe hier ein 10m Patchkabel in der Mitte getrennt und die 3 Pins des Sensors entsprechend verbunden. Danach habe ich alles mit Schrumpfschlauch ordentlich geschützt. Die Sensor-ID habe ich auf dem Kabel angebracht um die Sensoren unterscheiden zu können.

Mit diesem Verteiler kann man nun völlig einfach weitere Sensoren mit verschiedenen Kabellängen ergänzen oder austauschen.

Achtung: der ISDN Verteiler hatte zwei interne 100 Ohm Widerstände eingelötet welche ich zuerst entfernen musste. Diese störten anfangs das 1-Wire Netzwerk!