DS1820 Temperatursensor 1-Wire

Aus Arduino Hannover
Zur Navigation springen Zur Suche springen

Temperatursensor 1-Wire DS1820

Von diesen Maxim (vormals Dallas) 1-Wire Temperatursensoren stehen gleich mehrere Versionen zur Verfügung, die sich in Genauigkeit, der maximal erreichbaren Auflösung wie auch durch die Registerzugriffe z. T. erheblich unterscheiden. Der Sensor DS1820 ist die ältere Ausgabe des DS18S20.

DS18B20.gif

Der Sensor DS18S20 enthält einen digitalen Temperatursensor mit 9-bit Auflösung, die verbesserte Version DS18B20 erreicht eine Auflösung bis zu 12-bit! Die Auflösung ist bei diesem Sensor sogar frei konfigurierbar zwischen 9- und 12-bit. Beide unterstützen außerdem noch eine Alarmfunktionen mit frei programmierbaren Schaltschwellen in einem nichtflüchtigen EEPROM Speicherbereich. Der DS18B20 ist für den Temperaturbereich von -55°C bis + 125°C mit einer Abweichung von maximal +/-0,5°C im Bereich zwischen -10°C und + 85°C konzipiert. Die Konvertierung eines 12-bit Temperaturwertes benötigt etwa 750ms. Die Zeit halbiert sich mit jedem weiteren Bit weniger und beträgt bei 9-bit nur noch 93,75ms. Die Auflösung bei 9-bit beträgt 0,5°C, bei 10-bit 0,25°C, 11-bit 0,125°C und bei 12-bit 0,0625°C. Beim Power Up ist bei allen Varianten immer die höchste Auflösung voreingestellt, zumindest sofern im EEPROM keine anderen Werte für das Konfigurationsregister Byte 4 hinterlegt sind. Die Kommunikation erfolgt bei allen Ds18xx Temperatursensoren über das standardisierte 1-Wire Protokoll. Die Versorgungsspannung kann in einem weiten Bereich zwischen 3.0V und 5.5V gewählt werden.

Für diese 1-Wire Temperatursensoren DS18xx muss vor Beginn der Programmierung zuerst einmal die hier verwendete OneWire Library von Paul Stoffregen für die Arduino IDE aus dem Internet heruntergeladen und entpackt werden. Der ausgepackte Ordner muss anschließend unter Windows 7 zum Beispiel nur noch in den Pfad Benutzer\ <Eigener Benutzername>\Arduino\libraries kopiert werden. Sollte die Arduino Entwicklungsumgebung bereits geöffnet gewesen sein, muss diese jetzt einmal neu gestartet werden, damit die neue Bibliothek auch erkannt wird und eingebunden werden kann.

Folgende 10 Kommandos werden durch die Library zur Verfügung gestellt:

OneWire myWire(pin) Ein OneWire Objekt myWire erzeugen. Für jeden benutzten Pin kann ein eigenes Objekt erzeugt werden myWire.search(addrArray) Sucht das nächste Gerät. Das addrArray wird immer mit 8 Bytes gefüllt (Seriennummer), der Rückgabewert ist 1 bzw. true, wird kein weiteres Gerät gefunden, wird 0 bzw. false zurückgegeben
OneWire Kommandos
myWire.reset_search() Die Suche nach Geräten von vorne beginnen
myWire.reset() Reset Bus
myWire.select(addrArray) Gerät anhand der spezifischen Adresse (Seriennummer) auswählen
myWire.skip() Nur bei Einzelbetrieb. Für den direkten unmittelbaren Zugriff auf das einzige Gerät, ohne vorab nach der Adresse suchen zu müssen
myWire.write(byte) Ein Byte schreiben
myWire.write(byte, 1) Ein Byte schreiben, aber Spannungsversorgung eingeschaltet lassen für den parasitären Betrieb des Sensors
myWire.read() Ein Byte lesen
myWire.crc8(dataArray, length) CRC-Check auf ein Datenarray anwenden
DS18xx Funktionskommandos
Befehl Beschreibung Wert Aktivität nach Befehlsaussendung Bem.
Temperaturbefehle
Convert T Initialisierung der Temperaturkonvertierung 44h Nur bei direkter Spannungsversorgung wird Status an Master gesendet 1
Speicherbefehle
Read Scratchpad Daten inkl. CRC Byte werden vom Scratchpad gelesen BEh Bis zu 9 Bytes werden gesendet 2
Write Scratchpad TH und TL Bytes werden ins Scratchpad geschrieben 4Eh Der Master überträgt 2 Bytes 3
Copy Scratchpad Kopiert TH und TL Bytes vom Scratchpad ins nichtflüchtige EEPROM 48h
Recall E2 TH und TL Bytes vom EEPROM ins Scratchpad B8h DS sendet Status an Master
Read Power Supply Signalisiert den DS18xx Spannungsversorgungsmodus an den Master B4h DS sendet Status an Master
  1. Bei parasitärer Spannungsversorgung wird ein niederohmiger Pullup benötigt. Eine weitere Busaktivität ist während eines Transfers nicht erlaubt!
  2. Jederzeit Unterbrechung der Übertragung durch Reset des Masters möglich!
  3. Beide Bytes müssen geschrieben werden bevor ein Reset eintrifft!

Elektrischer Anschluss Alle DS18xx 1-Wire Sensoren können versorgungstechnisch in 2 Betriebsarten betrieben werden, direkt oder auch parasitär. Bei der direkten Versorgung des Sensors werden 3 Leitungen vom Arduino zum Sensor verwendet, GND, Daten DQ sowie VDD 5V. Dieses ist die störungsunempfindlichste Verdrahtung gerade auch über Entfernungen von deutlich mehr als 5 m Länge.

Für die parasitäre Versorgung werden nur 2 Leitungen benötigt sowie ein Pullup Widerstand neben einem weiteren niederohmig geschalteten Pullup verbunden mit entsprechend verlängerten Abfragezyklen um den internen Speisekondensatoren genügend Zeit zu verschaffen sich wieder aufzuladen. Der VDD Anschluss wird in dem Fall mit GND verbunden. Weitere Informationen können hierzu auch dem Manual des jeweiligen Sensors entnommen werden.

Alle Datenleitungen bei Verwendung mehrerer Sensoren werden immer zusammen­geschlossenen und gemeinsam vom Mikrocontroller angesteuert.

Seriennummer

Jeder 1-Wire Sensor enthält eine einmalige 64-bit Seriennummer oder auch Adresse genannt, bestehend aus einer 8-bit Kennung zur Identifikation der jeweiligen Familie des Sensors, einer eindeutigen und einmaligen 48-bit Seriennummer sowie eine 8-bit CRC, mit der die Integrität der Daten sichergestellt werden soll. Nachfolgende Darstellung zeigt den schematischen Aufbau des ROM Codes dazu.

Zusammensetzung der Seriennummer
8-bit

CRC

48-bit Seriennummer 8-bit

Familiencode

entsprechend

(10h = DS18S20)

MSB - - - - - - LSB MSB - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LSB MSB - - - - - - LSB

Blockschaltbild DS18B20

< xls Blockschaltbild noch als png oder ähnliches konvertieren >

Obiges Blockschaltbild zeigt den Aufbau der einzelnen Funktionsblöcke. Das Scratchpad ist ein kombiniertes SRAM / EEPROM Speichersegment, welches von außen beschrieben und gelesen werden kann.

Memory Map DS1820