Im Vergleich zu den anderen Sensoren (ausgenommen DS18S20) wird es hier nun wieder etwas länger werden. Allerdings schenkt man sich beim SHT75 dafür nahezu jeglichen Kalibrierungsaufwand. Zwischen Vcc (5V) und GND sollte ein 100nF Keramikkondensator eingefügt werden, wie man es auch schon von anderen ICs kennt.

Auch vereint dieser Sensor die Fähigkeiten zur Temperatur- sowie Feuchtigkeitsmessung in sich, womit man zwei Fliegen mit einer Klappe schlägt. Weitere Vorteile sind seine geringe Leistungsaufnahme sowie die Tatsache, dass jeglicher Kalibrierungsaufwand entfällt. Ob seine geringe Baugröße als Vor- oder Nachteil zu werten ist, mag jeder Bastler für sich selbst entscheiden, je nachdem wie seine Feinmotorik beim Löten ist.

Die Auflösung des Sensors liegt typischerweise  bei 0,03% relativer Luftfeuchte bzw. 0,01°C. Zu verdanken ist sie einem integrierten 14 Bit AD-Wandler. Die absolute Genauigkeit schwankt für den SHT75 je nach Umgebungsfeuchtigkeit und -temperatur zwischen ±3% relativer Luftfeuchte sowie ±2°C (bei Temperaturen <40°C bzw. >80°C). Genauere Informationen sind dem Datenblatt zu entnehmen.

Der exakte innere Aufbau sowie dessen Wirkungsweise soll auf dieser Seite nicht weiter abgehandelt werden.

Nun zur Arbeit mit dem Sensor. Nach dem Einschalten muss dem Sensor mindestens 11ms Zeit gegeben werden. In dieser Zeit sollten keine Befehle gesendet werden.
Zur Kommunikation wird eine Taktleitung (SCK) und eine Datenleitung (DATA) bereit gestellt. SCK wird zur Synchronisation der Kommunikation zwischen Sensor und MC verwendet. Da die Logik dafür komplett statisch gestaltet ist, gibt es keine Mindest-Taktrate. DATA (tristate Pin: logisch Low, logisch High oder hochohmig) wird verwendet, um Daten aus dem Sensor zu bekommen bzw. ihm welche zu senden. Der Pegel an Data darf sich nur nach einer fallenden Flanke an SCK ändern, übernommen werden die Daten mit der steigenden Flanke. Während einer Übertragung muss die Datenleitung konstanten Pegel haben, solange SCK H-Pegel hat. Analog zum DS18S20 darf auch hier der MC die Datenleitung nur gegen Masse ziehen. Die Bereitstellung eines H-Pegels erfolgt über einen Pull-Up Widerstand, welcher zwischen DATA und Vcc geschalten ist (bspw. 10K). Hierzu muss der Master (also der AVR) die Leitung lediglich freigeben. Dazu muss sein Pin als Eingang geschalten werden.

Das Senden von Kommandos:

Bevor eine Übertragung vom Sensor als solche erkannt werden kann, muss zunächst eine Start-Sequenz gesendet werden. Diese besteht darin, dass man während SCK H-Pegel hat, DATA gegen Masse zieht. Dann folgt ein L-Puls von SCK und nachdem SCK wieder H-Pegel hat, kann der Master die Busleitung freigeben (was zu H-Pegel über Pull-Up führt). Danach kann der eigentliche Befehl, bestehend aus drei Adress-Bits sowie fünf Befehlsbits, gesendet werden.  Der Sensor signalisiert den korrekten Empfang, indem er nach dem achten Takt an SCK die Datenleitung DATA gegen Masse (L-Pegel) zieht. Nach der fallenden Flanke des neunten Taktes gibt er sie wieder frei (H-Pegel).

Als Adresse ist im Moment nur 000 zulässig, Sensirion scheint da noch am entwickeln zu sein. Als Befehle gibt es die folgenden:

Befehl Bitfolge
reserviert 0000x
Temperaturmessung 00011
Luftfeuchtigkeitsmessung 00101
Lese Status-Register 00111
Schreibe Status-Register 00110
Reserviert 0101x-1110x
Soft-Reset (setzt Status Register zurück,
11ms Pause müssen eingehalten werden)
11110

Nach dem Senden eines Mess-Befehls muss der MC auf den Abschluss der Messung warten. Die zu wartende Zeitspanne hängt von der gewünschten Auflösung ab. Sie beträgt etwa 11/55/210ms für 8/12/14 Bit Auflösung. Diese Zeit können je nach Sensor um 15% schwanken. Um den Abschluss einer Messung zu signalisieren zieht der Sensor DATA gegen Masse. Der MC muss auf dieses Signal warten und kann danach durch erzeugen von Taktzyklen an SCK mit dem Auslesen der Daten beginnen. Die Daten werden nach Abschluss der Messung im Sensor gespeichert, es spielt also keine Rolle, wann der MC diese ausliest. Er kann somit nebenbei noch andere Aufgaben erfüllen.

Beim Auslesen werden 2 Bytes Messdaten sowie ein Byte CRC Checksumme übertragen. Die MC muss den Empfang jedes Bytes durch ein ziehen der Datenleitung gegen Masse bestätigen (ACK). Die Übertragung endet spätestens mit einem ACK des Mastes nach dem CRC-Byte. Falls dieses nicht verwendet werden soll, kann der MC die Kommunikation auch einfach dadurch beenden, dass er DATA auf H-Pegel belässt. Der Sensor begibt sich danach sofort in einen Energiesparmodus.

Um eine Verfälschung des Messergebnisses gering zu halten, sollte der Sensor nicht mehr als 10% der Zeit aktiv sein, also maximal 2 Messungen je Sekunden durchführen.

Um das serielle Interface des Sensors zurück zu setzen (bei Kommunikationsstörungen o.ä.) muss folgende Sequenz erzeugt werden: Während die Datenleitung H-Pegel hat, muss der Master mindestens 9 Takte (also steigende Flanken) an SCK erzeugen. Danach kann wieder die Start-Sequenz gesendet werden und eine neue Messung vorgenommen werden. Das Statusregister wird bei dieser Aktion nicht gelöscht.

Das Status Register

Da für mich die Funktionen des Status-Register relativ uninteressant sind, erfolgt hier nur eine kurze Beschreibung. Es stellt die folgenden Funktionen zur Verfügung:

Interessanter sind die im Datenblatt angegebenen Timing-Daten. Diesen kann entnommen werden, dass der maximale Takt auf der SCK Leitung 10MHz beträgt.  Die High- bzw. Low-Zeiten von SCK müssen somit mindestens 100ns betragen. Die typische Zeit, die ein Bit auf der Datenleitung liegt beträgt somit etwa 250ns.

Da in dem Sinne kein Zeitdruck für den Sensor in meiner Applikation entsteht, werde ich durch kurze delays (Pausen) den Takt entsprechend verlangsamen, um gar nicht erst in Schwierigkeiten mit dem Timing zu kommen.

Stellt sich nun nur noch die Frage, wie man aus den seriell ausgelesenen Daten zu der korrespondierenden Luftfeuchtigkeit bzw. Temperatur kommt.

Für die relativ Luftfeuchte sieht das Datenblatt die folgende Formel vor:

RHlinear = C1 + C2 * SORH + C3 * SORH2

Hierbei sind C1 = -4, C2 = 0,0405 und C3 = -2,8*10-6. Diese Angaben beziehen sich auf eine Messauflösung von 12 Bit. Wem das zu rechenintensiv ist, der kann sich vom Hersteller eine Application-Note mit anderen Vorschlägen herunterladen.
Bei Temperaturen, die sich stark von 25°C unterscheiden, muss zudem der Einfluss der Temperatur auf die relative Luftfeuchte berücksichtigt werden.

RHtrue = (T°C - 25) * (t1 + t2 * SORH) + RHlinear

Wobei t1 mit 0,01 und t2 mit 0,00008 anzusetzen sind.

Für die Temperatur gilt die folgende Formel:

Temperatur = d1 + d2 * SOT

Für 14 Bit Auflösung bei 5V Betriebsspannung sind d1 mit -40,00 und d2 mit 0,01 gegeben.

Das der SHT75 die Messung der relativen Luftfeuchte sowie der Temperatur auf einem Chip vornimmt, sind sehr gute Taupunktbestimmungen möglich. Die Vorgehensweise zur Bestimmung desselben kann der entsprechenden Funktion im Programm entnommen werden. Sie stammt aus einer Application Note des Herstellers.

Ein paar erste Routinen können hier oder unter der Rubrik Programme herunter geladen werden.

 

Zurück zur Startseite.