SHT.C2 V1.0 - Hilfe


Beschreibung

Einfügen als Gemeinsames Modul

Beispielprogramme

Funktionen:

init()
setDataPort()
start()
Write()
Readbyte()
Readint()
setRegister()
getRegister()
Reset()
setHeater()
getTemp()
getHyg()


Beschreibung   Nach oben

Das Modul sht.c2 erlaubt die einfache Auswertung der kombinierten
Feuchte-und Temperatursensoren der SHT-Reihe des Herstellers Sensirion.
Der Sensor wird im High-Resolution-Mode betrieben. (14Bit Temperatur / 12Bit Feuchtigkeit)
Die Rückgabe der relativen Luftfeuchtigkeit erfolgt Temperaturkompensiert.
Es werden zum Anschluß zwei beliebige I/O-Ports benötigt.
Wichtig: An der Datenleitung des Sensors muß ein Pull-Up-Widerstand (z.B. 10k)
angebracht werden !
Sollen mehrere Sensoren betrieben werden, so wird für jeden weiteren 
Sensor ein weiterer I/O-Port für die Datenleitung des Sensors benötigt.
Dabei werden die Clock-Leitungen aller Sensoren zusammengefasst.

Einfügen als Gemeinsames Modul   Nach oben

Die Datei sht.c2 in das Verzeichnis .\CControl2\UserLib kopieren und in der Datei modules.txt
die Zeile sht.c2 einfügen.
Ein zusätzliches Ausrufezeichen unmittelbar nach einem Modulnamen in modules.txt bestimmt,
daß das Modul in jedem neuen Projekt von Anfang an aktiviert wird.


Funktionen:

Initialisierung   Nach oben

    function init(byte clock, byte data)

Die Funtkion init initialisiert die für die Datenübertragung benutzten Ports.
Beim Betrieb mehrere Sensoren muß Init für jeden Sensor einmal
aufgerufen werden. Das wechseln der Sensoren geschieht mit setDataPort().
clock I/O-Port 0 …15
data I/O-Port 0 …15
 

Daten-Port / Sensor auswählen   Nach oben

    function setDataPort(byte data)

Mit der Funktion setDataPort wird bei einem Mehrsensorbetrieb der jeweilige
Datenport des Sensors ausgewählt, der gerade angesprochen werden soll.

data I/O-Port 0 …15
 

Startbedingung senden   Nach oben

    function start()

Mit dieser Funktion wird die Startbedingung gesendet. Diese wird von den Schreib- und 
Lesefunktionen benötigt.

Byte senden   Nach oben

    function Write (byte data) returns int

Die Funktion Write sendet ein Byte zum Sensor. Es wird das Acknowledge zurückgegeben.

data Datenbyte


Byte lesen   Nach oben

    function Readbyte(int ack) returns byte

Diese Funktion liest ein einzelnes Byte vom Sensor. Sie wird z.B. beim 
auslesendes Konfigurationsregisters benötigt.
Sollen Sensordaten mit dieser Funktion ausgelesen werden, so muß nach
dem Kommando-Byte, z.B. mittels wait not(Data);, auf Sendebereitschaft des Sensors
gewartet werden.

ack 0=kein Acknowledge senden
ungleich 0 = Acknowledge senden


Integer lesen   Nach oben

    function Readint (int ack) returns int

Mit der Funktion Readint werden zwei Byte als Integer vom Sensor gelesen
und zurückgegeben. Es wird dabei auf Sendebereitschadt des Sensors geprüft.
Reagiert dieser nicht innerhalb einer Sekunde, wird die Funktion mit
dem Rückgabewert 0xF000 abgebrochen.

ack 0=kein Acknowledge nach letzem Byte senden
ungleich 0 = Acknowledge senden
 

Status-Register schreiben   Nach oben

    function setRegister(byte reg) returns int

Mit dieser Funtkion kann das Status-Register des Sensors beschrieben werden.
Es wird das Acknowledge des Sensors zurückgegeben.

reg Statusregister:
Bit0: Auflösung 0=12/14Bit(Standard), 1=8/12Bit
Bit1: kein Reload vom OTP(=1), Standard=0
Bit2: Heizung 0=aus(standard), 1=ein
Bit3: Testbit, nicht benutzen ! (Standard=0)
Bit4: reserved (Standard=0)
Bit5: reserved (Standard=0)
Bit6: End of Life (low voltage detection) Nur lesen !
Bit7: reserved (Standard=0)
 

Status-Register lesen   Nach oben

    function getRegister() returns byte

Die Funktion getRegister liest das Statusregister aus und gibt dieses als Byte-Wert zurück.

Reset   Nach oben

    function Reset() returns int

Die Funktion Reset löst einen Softwarereset am Sensor aus.
Es wird das Acknowledge zurückgegeben

Heizung schalten   Nach oben

    function setHeater(int state) returns int

Mit dieser Funktion kann man die Heizung des Sensors schalten.
Die Heizung benötigt ca. 8mA und erwärmt den Sensor um ca. 5K.
Sie kann benutzt werden, um den Sensor z.B. zu testen oder
Kondensation zu vermweiden.
Wichtig: Der Sensor gibt bei eingeschaltetter Heitung keine korrekten Werte wieder.

state 0= Heizung aus, ungleich 0= Heizung ein
 

Temperatur messen   Nach oben

    function getTemp() returns int

Mit getTemp wird die Temperatur ausgelesen. Diese wird als Festkomma-Integer
mit zwei Nachkommastellen zurückgegeben. (z.B. -2715 entspricht -27,15°C)
Reagiert der Sensor nicht, so wird im Fehlerfall der Wert: -8096 zurückgegeben.(-80,96°C)

state 0= Heizung aus, ungleich 0= Heizung ein

 

rel. Luftfeuchte messen   Nach oben

    function getTemp(int temp) returns int

Mit getHyg wird die relative Luftfeuchte ausgelesen, anschließend liniearisiert und
temperaturkompensiert. Dazu muß die Temperatur als Festkomma-Integer mit zwei
Nachkommastellen übergeben werden. Wird keine Temperaturkompensation benötigt,
so muß eine Temperatur von 25°C angegeben werden (Wert: 2500).
Die rel.Luftfeuchte wird als Festkomma-Integer mit zwei Nachkommastellen
zurückgegeben. (z.B. 48,79 entspricht 48,79 % rel.)
Reagiert der Sensor nicht, so wird im Fehlerfall der Wert: -1 zurückgegeben.(-0,01 %rel.)

temp Temperatur als Festkommainteger mit 2 Nachkommastellen.
z.B. 2854 für 28,54°C

 


Beispiele   Nach oben

Diese Beispiele können sowohl mit der Unit und der Station ausgeführt werden.
Bei der Station sollten hierfür die neuesten alternativen Stationtreiber
(lcdext.c2, stport.c2, stkey.c2) verwendet werden.


Einzelner Sensor: (Port P1H.0 = Clock, Port P1H.1=Data)
thread main
{int x;
 lcdext.init();
 sht.init(8,9);
 sht.Reset();sleep 11;
 loop
 {
  x=sht.getTemp();
  lcdext.line(1);
  lcdext.zahl5n2(x);
  lcdext.put(0x20);lcdext.put(0xDF);lcdext.put('C');
  x=sht.getHyg(x);
  lcdext.line(2);
  lcdext.zahl5n2(x);
  lcdext.print(" %relH");
 }
}

Zwei Sensoren: (Port P1H.0 = Clock, Port P1H.1=Data1, Port P1H.2=Data2)
thread main
{int x;
 lcdext.init();
 sht.init(8,9);
 sht.Reset();sleep 11;
 sht.init(8,10);
 sht.Reset();sleep 11;
 loop
 {
  sht.setDataPort(9); // Sensor 1
  x=sht.getTemp();
  lcdext.line(1);
  lcdext.zahl5n2(x);
  lcdext.put(0xDF);lcdext.put('C');
  x=sht.getHyg(x);
  lcdext.zahl5n2(x);
  lcdext.print("%relH");
  sht.setDataPort(10); // Sensor 2
  x=sht.getTemp();
  lcdext.line(2);
  lcdext.zahl5n2(x);
  lcdext.put(0xDF);lcdext.put('C');
  x=sht.getHyg(x);
  lcdext.zahl5n2(x);
  lcdext.print("%relH");
 }
}

 


Autor: André Helbig    Mail: andre.h@cc2net.de    Erstellt: 20.07.2003