Forum: Mikrocontroller und Digitale Elektronik Problem mit dem Sensor HYT 221 und Arduino


von Florian T. (florian_t)


Lesenswert?

Hallo liebes Forum,
ich habe gerade so meine liebe Not mit dem HYT 221 und den Arduino 
(Leonardo)

Hier das Datenblatt vom Sensor: 
http://www.hygrochip.com/fileadmin/user_upload/Produkte/Sensorelemente/Digitale_Feuchtesensoren/HYT_221/IST_221/EN_HYT221_201109.pdf

Ich habe den Sensor mit 5,6K Pullups an SDA und SCL (an 5V) 
angeschlossen und den Sensor mit den passenden Pins am Leonardo 
verbunden: 2 (SDA), 3 (SCL)

Nun das Problem:
Ich kann den Sensor über die Wire.h lib nicht ansprechen. Ich bekomme 
einfach keine Daten.

mein Code sieht so aus:
1
#include <Wire.h>   // include Wire library for I2C
2
#define HYT221_ADDR 0x28
3
4
void setup() {
5
  Wire.begin();   // start Wire library as I2C-Bus Master
6
  Serial.begin(9600);
7
}
8
9
void loop() {
10
  double Humidity;
11
  double Temperature;
12
  Wire.beginTransmission(HYT221_ADDR);
13
  Wire.write(0);
14
  int av1 = Wire.available();
15
  int Ack = Wire.read(); // receive a byte
16
  Serial.print("ack: ");
17
  Serial.println(Ack);
18
  Serial.print("available preinit: ");
19
  Serial.println(av1);
20
  byte firstStatus = Wire.endTransmission();
21
  Serial.print("status preinit: ");
22
  Serial.println(firstStatus);  
23
  delay(100);
24
  
25
  // READ DATA from here on
26
  Wire.beginTransmission(1);
27
  Wire.requestFrom(HYT221_ADDR, 4);  //Reade 1 byte
28
  Wire.available();
29
  unsigned int b1 = Wire.read(); // receive a byte
30
  unsigned int b2 = Wire.read(); // receive a byte
31
  unsigned int b3 = Wire.read(); // receive a byte
32
  unsigned int b4 = Wire.read(); // receive a byte
33
  Wire.write(0); //NACK
34
  
35
  Serial.print("b1: ");
36
  Serial.println(b1);
37
  Serial.print("b2: ");
38
  Serial.println(b2);
39
  Serial.print("b3: ");
40
  Serial.println(b3);
41
  Serial.print("b4: ");
42
  Serial.println(b4);
43
  
44
  int RawHumidBin = b1 << 8 | b2;
45
  // compound bitwise to get 14 bit measurement first two bits
46
  // are status/stall bit (see intro text)
47
  RawHumidBin =  (RawHumidBin &= 0x3FFF); 
48
  Humidity = 100.0/pow(2,14)*RawHumidBin;
49
  
50
  b4 = (b4 &= 0x3F); //Mask away 2 least sign. bits see HYT 221 doc
51
  int RawTempBin = b3 << 6 | b4;
52
  Temperature = 165.0/pow(2,14)*RawTempBin-40;
53
  Wire.endTransmission();
54
  delay(1000);              // wait for a second
55
  Serial.print(Humidity);
56
  Serial.print("% - temp: ");
57
  Serial.println(Temperature);
58
}

Die Serielle ausgabe liefert das hier:
1
ack: -1
2
available preinit: 0
3
status preinit: 2
4
b1: 65535
5
b2: 65535
6
b3: 65535
7
b4: 65535
8
99.99% - temp: -40.01


So wie ich das sehe akzeptiert der Sensor die Adresse nicht, da ein NACK 
bei der übermittlung der Adresse kommt.

Ich hab schon mittels eines anderen Sample codes am Bus nach den 
verfügbaren adressen gesucht und der Sensor wird an 0x28 gemeldet. Jetzt 
bin ich mir nur nicht sicher, ob ich den Sensor wirklich richtig 
adressiere. Ich habe schon versucht die adresse um 1 Bit nach rechts 
oder nach links zu schieben, hat aber beides keinen Erfolg gebracht.

Nun frage ich in meiner Ideenlosigkeit euch, ob Ihr mir hier vielleicht 
helfen könnt.

Für Eure Unterstützung danke ich auf jeden Fall schon jetzt einmal.

von Florian T. (florian_t)


Lesenswert?

Hat niemand eine Idee? (Nur um das Thema wieder hochzukramen)

von WS (Gast)


Lesenswert?

Hallo Florian,

bei Hygrosens gibt es ein Beispiel in Bascom zu diesem Sensor:
http://www.hygrochip.com/fileadmin/user_upload/Produkte/Sensorelemente/Digitale_Feuchtesensoren/BascomHytRev2.bas

Ausserdem gibt es hier im Forum eine Beschreibung zu den HYT-Sensoren:
http://www.mikrocontroller.net/attachment/110234/HYT-xxx.pdf

WS

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.