Achtung: Wie schon vorher angemerkt ist das Protokoll zur Kommunikation mit dem Sensor nicht mit dem I²C-Protokoll (der Fa. Phillips) identisch.
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.
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).
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
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)
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
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.
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.
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
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
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.