Anzeige:

I2C Sensor HYT-939 richtig auslesen!? HILFE!

Hier finden sie die archivierten Beiträge des alten PHPBB Forums von www.loetstelle.net

I2C Sensor HYT-939 richtig auslesen!? HILFE!

Von felixatwork88 am 22.04.2013 13:27

Hallo!
Ich hoffe ich bin hier in der richtigen Rubrik. Ich baue zur Zeit gerade dein Projekt für die Schule. Ich besitze einen Raspberry PI und möchte mit ihm den I2C -Sensor HYT-939 auslesen. Ich hab allerdings keine Ahnung wie ich das machen soll. Ich finde auch in den Datenblättern außer die Adresse des Bausteins keinerlei Angaben. Ich kann ihn ansprechen und den Bus auslesen und sehe den Sensor auch auf der Adresse 0x28. Aber wie lese ich ihn jetzt aus und welche Bitstelle steht jetzt für Temperatur und welche für die Feuchtigkeit, welche ist für die Nachkommastelle zuständig....
Fragen über Fragen und ich komme einfach nicht voran. Es wäre richtig super wenn mir hier jemand helfen könnte. Freu mich über jede Antwort.
Im Vorraus schonmal mal Danke.
MfG

Von BellaD am 22.04.2013 14:29

Beim Hersteller wird man doch meistens etwas finden Wink

http://www.hygrochip.com/fileadmin/user_upload/Produkte/Sensorelemente/Digitale_Feuchtesensoren/HYT_I2C_Protokollbeschreibung_D.pdf

mfg

Von loetadmin am 23.04.2013 12:15

Ich habe zwar einen funktionierenden Code für den HYT, aber der ist für Anfänger erstmal nicht geeignet, da ich da einige wilde Skalierungen und Integer-Rechentricks anwende, um die Werte passend auf einen 1-Minuten Gleitenden Durchschnitt umzurechnen.

Das Prinzip ist aber folgendes:

Um eine Wandlung zu starten, erstmal den Sensor mit einem Leeren I2C Write Befehl ansteuern.

Code:

 twi_start(HYT939_ADDR+TWI_WRITE);
    twi_stop();


Nach einer Wartezeit (steht im Datenblatt), dann 4 Datenbytes in einen Puffer einlesen. Man kann aber auch über ein Bit im ersten Datenbyte feststellen, ob die Wandlung abgeschlossen ist.

Code:

twi_start(HYT939_ADDR+ TWI_READ);
    hyt939_buffer[0]= twi_read_ack();
    hyt939_buffer[1]= twi_read_ack();
    hyt939_buffer[2]= twi_read_ack();
    hyt939_buffer[3]= twi_read_nack();
    twi_stop();


Danach aus den 4 Puffer-Bytes die Rohdaten für T und H extrahieren

Code:

uint16_t hyt939_temp(void) {

   uint16_t traw;

   traw=hyt939_buffer[2]*256+hyt939_buffer[3];


   traw>>=2;

   return traw;

}

uint16_t hyt939_hum(void) {

   uint16_t hraw;

     hraw=hyt939_buffer[0]*256+hyt939_buffer[1];


   hraw&=0x3fff;

      return hraw;




}


Die Rohdaten dann nach Formel im Datenblatt verrechnen.

Good Luck!

Anzeige: