DS1820 Temperatursensor 1-Wire: Unterschied zwischen den Versionen

Aus Arduino Hannover
Zur Navigation springen Zur Suche springen
(Tabelle DS18xx Funktionskommandos ergänzt)
Zeile 41: Zeile 41:
 
|CRC-Check auf ein Datenarray anwenden
 
|CRC-Check auf ein Datenarray anwenden
 
|}
 
|}
 +
 +
{| class="wikitable"
 +
|+ DS18xx Funktionskommandos
 +
|-
 +
! scope="col"|Befehl
 +
! scope="col"|Beschreibung
 +
! scope="col"|Wert
 +
! scope="col"|Aktivität nach Befehlsaussendung
 +
! scope="col"|Bem.
 +
|-
 +
|
 +
!Temperaturbefehle
 +
|
 +
|
 +
|
 +
|-
 +
|Convert T
 +
|Initialisierung der Temperaturkonvertierung
 +
!style="color:red;"|44h
 +
|Nur bei direkter Spannungsversorgung wird Status an Master gesendet
 +
|1
 +
|-
 +
|
 +
!Speicherbefehle
 +
|
 +
|
 +
|
 +
|-
 +
|Read Scratchpad
 +
|Daten inkl. CRC Byte werden vom Scratchpad gelesen
 +
!style="color:red;"|BEh
 +
|Bis zu 9 Bytes werden gesendet
 +
|2
 +
|-
 +
|Write Scratchpad
 +
|TH und TL Bytes werden ins Scratchpad geschrieben
 +
!style="color: red;"|4Eh
 +
|Der Master überträgt 2 Bytes
 +
|3
 +
|-
 +
|Copy Scratchpad
 +
|Kopiert TH und TL Bytes vom Scratchpad ins nichtflüchtige EEPROM
 +
!style="color: red;"|48h
 +
|
 +
|
 +
|-
 +
|Recall E2
 +
|TH und TL Bytes vom EEPROM ins Scratchpad
 +
!style="color: red;"|B8h
 +
|DS sendet Status an Master
 +
|
 +
|-
 +
|Read Power Supply
 +
|Signalisiert den DS18xx Spannungsversorgungsmodus an den Master
 +
!style="color: red;"|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!

Version vom 22. November 2015, 20:45 Uhr

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!