Ansteuerung eines Feuchtesensors vom Typ SHTxx (mit PIC-Mikrocontroller, Elektronik)


zurück zu Elektronik, Homepage


3. Protokoll

Achtung: Wie schon vorher angemerkt ist das Protokoll zur Kommunikation mit dem Sensor nicht mit dem I²C-Protokoll (der Fa. Phillips) identisch.

nach oben

3.1. Start-Sequenz

Jede Kommunikation mit dem Sensor beginnt mit einer so genannten "Start-Sequenz". Diese Start-Sequenz ist wie folgt definiert:
Diese Startsequenz besteht aus einer Absenkung der Datenleitung (DATA), während die Taktleitung (SCK) high ist. Anschließend muss die Taktleitung (SCK) von high nach low und kurz darauf wieder nach high gehen. Während dieser Zeit muss aber die Datenleitung auf Low-Pegel bleiben. Sie darf erst wieder high werden, wenn auch die Taktleitung (SCK) wieder high ist. Das folgende Bild verbildlicht diese Sequenz.

Start-Sequenz

Ausnahme: Soll der Sensor zurückgesetzt werden, so erfolgt die Start-Sequenz nach der so genannten "Connection-Reset-Sequenz" (siehe Abschnitt 3.5. Rücksetzen des Sensors).

nach oben

3.2. Feuchtigkeitsmessung

Um eine Feuchtigkeitsmessung starten zu können, muss zunächst die Start-Sequenz (entsprechend Abschnitt 3.1.) erfolgen, und anschließend der Befehlscode für eine Feuchtigkeitsmessung (Binärcode: 00000101) erfolgen. Ist der Befehlscode gültig, so legt der Feuchtigkeitssensor die Datenleitung zunächst auf Low und anschließend wieder auf high (Ack). Nun muss der Mikrocontroller warten bis die Feuchtigkeitsmessung beendet ist. Diese Zeit hängt in erster Linie von der gewählten Auflösung ab. (ca. 55ms bei einer 12-Bit-Auflösung bzw. 11ms bei einer 8-Bit-Auflösung). Die Auflösung kann über das Statusregister eingestellt werden (siehe Abschnitt 3.4.).
Während der Sensor die Feuchtigkeit misst, bleibt die Datenleitung (DATA) auf High-Pegel und die Taktleitung (SCK) auf Low-Pegel. Ist der Sensor mit der Feuchtigkeitsmessung fertig, so legt er die Datenleitung auf Low-Pegel, und signalisiert somit dem Mikrocontroller, dass die Daten für die Feuchtigkeit zur Abholung bereit sind. Dazu wird zunächst das höherwertige Byte vom Mikrocontroller Bit für Bit, beginnend mit dem MSB eingelesen. (Achtung: Bei einer 12-Bit-Auflösung, sind die ersten vier Bits low, bei einer 8-Bit-Auflösung sind alle Bits low). Nun muss der Mikrocontroller den Empfang des höherwertigen Bytes bestätigen, indem er die Datenleitung auf Low-Pegel legt. Anschließend kann der Mikrocontroller das niederwertige Byte Bit für Bit (wiederbeginnend mit dem MSB) einlesen und dieses wiederum bestätigen. (Datenleitung auf Low-Pegel). Zum Schluss kann noch eine Checksumme empfangen werden. Das nach der Checksumme folgende Bestätigungsbit (Ack) beendet dann die Kommunikation. Wird die Checksumme nicht benötigt, so kann der Mikrocontroller bereits nach dem letzten Datenbit die Kommunikation mit dem Sensor beenden, indem er die Datenleitung (DATA) nach dem Bestätigungsbit (Ack) auf High legt.
Nachdem die Kommunikation beendet ist kehrt der Sensor automatisch in den "Sleep"-Modus zurück.

Das folgende Bild verbildlicht den gesamten Ablauf einer Feuchtigkeitsmessung beginnend mit der Start-Sequenz bis zur CRC-8-Checksumme

Protokoll zur Feuchtigkeitsmessung

Achtung: Damit sich der Sensor nicht um mehr als 0,1°C erwärmt, sollte der Sensor nicht länger als 15% der Zeit aktiv sein. Dies entspricht max. 3 Messungen pro Sekunde bei einer Auflösung von 12 Bit)

nach oben

3.3. Temperaturmessung

Der Zyklus für eine Temperaturmessung ist prinzipiell gleich wie jener für die Feuchtigkeitsmessung: Zuerst erfolgt die Start-Sequenz (entsprechend Abschnitt 3.1.). Anschließend der Befehlscode für eine Temperaturmessung (Binärcode: 00000011). Ist der Befehlscode gültig, so legt der Feuchtigkeitssensor die Datenleitung zunächst auf Low und anschließend wieder auf high (Ack). Nun muss der Mikrocontroller warten bis die Temperaturmessung beendet ist. Diese Zeit hängt in erster Linie von der gewählten Auflösung ab. (ca. 210ms bei einer 14-Bit-Auflösung bzw. 55ms bei einer 12-Bit-Auflösung). Auch hier kann die Auflösung über das Statusregister eingestellt werden (siehe Abschnitt 3.4.).
Während der Sensor die Temperatur misst, bleibt die Datenleitung (DATA) auf High-Pegel und die Taktleitung (SCK) auf Low-Pegel. Ist der Sensor mit der Temperaturmessung fertig, so legt er die Datenleitung auf Low-Pegel, und signalisiert somit dem Mikrocontroller, dass die Daten für die Temperatur zur Abholung bereit sind. Dazu wird zunächst das höherwertige Byte vom Mikrocontroller Bit für Bit, beginnend mit dem MSB eingelesen. (Achtung: Bei einer 12-Bit-Auflösung, sind die ersten vier Bits low). Nun muss der Mikrocontroller den Empfang des höherwertigen Bytes bestätigen, indem er die Datenleitung auf Low-Pegel legt. Anschließend kann der Mikrocontroller das niederwertige Byte Bit für Bit (wieder beginnend mit dem MSB) einlesen und dieses wiederum bestätigen. (Datenleitung auf Low-Pegel). Zum Schluss kann noch eine Checksumme empfangen werden. Das nach der Checksumme folgende Bestätigungsbit (Ack) beendet dann die Kommunikation. Wird die Checksumme nicht benötigt, so kann der Mikrocontroller bereits nach dem letzten Datenbit die Kommunikation mit dem Sensor beenden, indem er die Datenleitung (DATA) nach dem Bestätigungsbit (Ack) auf High legt.
Nachdem die Kommunikation beendet ist kehrt der Sensor automatisch in den "Sleep"-Modus zurück.

Das folgende Bild verbildlicht den gesamten Ablauf einer Temperaturmessung beginnend mit der Start-Sequenz bis zur CRC-8-Checksumme Protokoll zur Temperaturmessung

Achtung: Auch bei der Temperaturmessung gilt: Damit sich der Sensor nicht um mehr als 0,1°C erwärmt, sollte der Sensor nicht länger als 15% der Zeit aktiv sein. Dies entspricht max. 3 Messungen pro Sekunde bei einer Auflösung von 12 Bit.

nach oben

3.4. Sensor-Statusregister lesen bzw. beschreiben

3.4.1. Allgemeines zum Statusregister

Das 8-Bit-Statusregister dient zur Einstellung der zusätzlichen Funktionen und ist laut folgender Tabelle aufgebaut.


    Bit  Type  Beschreibung                                     Defaultwert
    7          reserviert                                       0
    6    R     End of Battery (Geringe Betriebsspannung)        x             Kein default, Bit wird
               ‚0’ für Vdd > 2.47V                                            nur nach Messung
               ‚1’ für Vdd < 2.47V                                            upgedated
    5          reserviert                                       0
    4          reserviert                                       0
    3          Nicht verwendet, nur für Testzwecke              0
    2    R/W   Heizung                                          0             aus
    1    R/W   Nicht vom OTP laden                              0             Reload
    0    R/W   ‚1’ – 8 bit rF / 12 bit Temperatur Auflösung     0             12 bit rF
               ‚0’ – 12 bit rF / 14 bit Temperatur Auflösung                  14 bit Temperatur
    

Für den Anwender sind nur die Bits 0,1,2 und 6 interessant, wobei die Bits 0,1 und 2 sowohl von der Auswerteelektronik (z.B. ein Mikrocontroller) gelesen als auch beschrieben werden können. Bit 6 gibt an, ob die Versorgungsspannung des Sensors im erlaubten Bereich ist. Dieses Bit wird vom Sensor automatisch gesetzt oder gelöscht, und kann daher von der Auswerteelektronik nur gelesen werden.

Erläuterung zu Bit 0:
Die voreingestellte Mess-Auflösung ist 14Bit (Temperatur) und 12Bit (Feuchtigkeit). Diese Einstellung kann auf 12Bit (Temperatur) und 8Bit (Feuchtigkeit) herabgesetzt werden. Dies ist besonders bei Anwendung nützlich, die schnelle Messungen oder eine niedrige Leistungsaufnahme erfordern.

Erläuterung zu Bit 2:
Auf dem Sensor befindet sich ein Heizelement, welches eingeschaltet (Bit 2 = 1) oder ausgeschaltet (Bit 2 = 0) werden kann. Das eingeschaltet Heizelement kann die Temperatur des Sensorchips um ca. 5°C erhöhen. Die Leistungszunahme beträgt dabei ca. 8mA (bei 5-V-Betriebsspannung).

Anwendung des Heizelements:

Achtung:
Während der Sensor geheizt wird zeigt der Sensor höhere Temperaturen und niedrigere Feuchtigkeitswerte an.

Erläuterung zu Bit 6:
Die "End of Battery"-Funktion prüft auf geringe Versorgungsspannung (<2.47V) bei einer Genauigkeit von +/- 0.05V.

nach oben

3.4.2. Statusregister des Sensors lesen

Zuerst erfolgt die Start-Sequenz (entsprechend Abschnitt 3.1.). Anschließend der Befehlscode für das Lesen des Statusregisters (Binärcode: 00000111). Ist der Befehlscode gültig, so legt der Feuchtigkeitssensor die Datenleitung auf Low (Ack). Nun kann der Mikrocontroller das 8-Bit-Statusregister Bit für Bit, beginnend mit dem MSB einlesen, und muss es anschließend bestätigen, indem er die Datenleitung auf Low-Pegel legt. Zum Schluss kann noch eine Checksumme empfangen werden. Das nach der Checksumme folgende Bestätigungsbit (Ack) beendet dann die Kommunikation. Wird die Checksumme nicht benötigt, so kann der Mikrocontroller bereits nach dem letzten Bit des Statusregisters die Kommunikation mit dem Sensor beenden, indem er die Datenleitung (DATA) nach dem Bestätigungsbit (Ack) auf High legt.
Nachdem die Kommunikation beendet ist kehrt der Sensor automatisch in den "Sleep"-Modus zurück.

Das folgende Bild verbildlicht den gesamten Ablauf beginnend mit der Start-Sequenz bis zur CRC-8-Checksumme Protokoll zum Lesen des Statusregisters

nach oben

3.4.3. Statusregister des Sensors beschreiben

Zuerst erfolgt die Start-Sequenz (entsprechend Abschnitt 3.1.). Anschließend der Befehlscode für das Beschreiben des Statusregisters (Binärcode: 00000110). Ist der Befehlscode gültig, so legt der Feuchtigkeitssensor die Datenleitung auf Low (Ack). Nun kann der Mikrocontroller das 8-Bit-Statusregister Bit für Bit beginnend mit dem MSB an den Sensor übertragen. Ist das übertragene Statusregister gültig, so legt der Feuchtigkeitssensor die Datenleitung auf Low (Ack). Abschließend kehrt der Sensor automatisch in den "Sleep"-Modus zurück.

Das folgende Bild verbildlicht den gesamten Ablauf beginnend mit der Start-Sequenz bis zur CRC-8-Checksumme Protokoll zum Beschreiben des Statusregisters

nach oben

3.5. Rücksetzen des Sensors

Wird die Kommunikation mit dem Sensor unterbrochen, so kann die serielle Schnittstelle des Sensors mit der folgenden Sequenz zurückgesetzt werden:

Neun oder mehr Taktimpulse während die Datenleitung (DATA) high ist. Gefolgt von einer Startsequenz entsprechend Abschnitt 3.1..
Das folgende Bild verbildlicht diese Sequenz.

Connection-Reset-Sequenz
nach oben

3.6. Zeitdiagramm

Zeitdiagramm
nach oben


zurück zu Elektronik, Homepage

Autor: Buchgeher Stefan
Erstellt: 14. Dezember 2004
Letzte Änderung: 23. Februar 2011