Sensor an der I2C Schnittstelle

Hallo zusammen

Wollte die ID aus einem Sensor auslesen habe dafür ein Datasheet gekriegt wo drin steht wie es gehen soll
doch irgendwie begreiffe ich das nicht...
Kann mir jemand helfen wie ich die Command richtig an den Sensor sende damit der auch mir antwortet.

Danke das wäre super,
Andi

CommandMode.pdf (106 KB)

Hallo GekoCH,

zu wenig Input, wie bitte soll Dir jemand helfen können? Wie wäre es wenigstens einmal mit der Bezeichnung des Sensors und/oder dem Datenblatt?

Nimm dir einfach das Beispiel eines ähnlichen Sensors mit Acknoledgements und ändere das Programm nach den Reihen des Datenblattes ab. Das mit den ein- und auslesen der Daten ist nicht ganz trivial.

mime:
Hallo GekoCH,

zu wenig Input, wie bitte soll Dir jemand helfen können? Wie wäre es wenigstens einmal mit der Bezeichnung des Sensors und/oder dem Datenblatt?

Habe das Dokument doch angefügt, es sit wohl nur sichtbar wenn ihr eingeloggt seit.

Gruss

Bei bestimmten Gelegenheiten gefällt mir minimalismus aber beim Antworten-wollen auf minimalistische Fragen definitiv nicht.

Du kannst den Sensor mittels Arduino resettieren? Ansonsten hast Du keine Möglichkeit ihn in den Command Mode zu versetzen.

Grüße Uwe

Hmm naja ich weiss im Moment nicht wie ich den Snesor reseten kann um dann direkt in den Command mode zu gelangen....
Kann ein Reset auch per Command genügen denn anders kann ich es mir nich vorstellen....

Ich weiß es nicht und die anderen wissen es auch sicher nicht, da niemend von uns weiß welchen Sensor Du benutzt.
Grüße Uwe

oops habe das Falsche Dokument hochgeladen dort steht es nicht drinn... sorry

Es ist ein HYT 271 (DIGITALER FEUCHTESENSOR)

Sorry GekoCH, ich habe wirklich kein Datenblatt gesehen.
Den Sensor habe ich auch, der ist wirklich gut.
Resetten kannst Du den nicht wirklich, aber im Datenblatt heisst es ja auch "Power-On Reset" - leg seinen Vdd-Pin auf einen Digitalen I/O, dann kannst Du ihn über diesen Pin an- und ausschalten.
Dann muss innerhalb von 10ms nach power-up "Start Command-Mode" (0xA0 0x00 0x00) gesendet werden um in den Kommando-Modus zu kommen, danach kannst Du die ID lesen oder z.B. eine neue I2C-Adresse schreiben.

Das ist eine gute Idee, hat irgendwie auch funktioniert denn im Command Mode kann man ja keine Feuchte und Temp auslesen was mir zeigt dass ich im Command Mode drinn bin aber das Auslesen klappt nicht sprich ich verstehe nicht wie ich nun an die Adresse komme.
Hier wäre der Code den ich verwende...

//Sensor starten
  digitalWrite(13, HIGH);
  delay(2);

  //in Command Mode
  Wire.beginTransmission(adress);
  Wire.send(0xA0);
  Wire.send(0x00);
  Wire.send(0x00);
  Wire.endTransmission();
  delay(100);

  //Adress anfragen
  Wire.beginTransmission(adress);
  Wire.send(0x1C);
  Wire.send(0x00);
  Wire.send(0x00);
  Wire.endTransmission();
  delay(100);

  //Adresse auslesen
  Wire.requestFrom(adress, 3);
  if(Wire.available() > 2){
    int b1 = Wire.receive();
    int b2 = Wire.receive();
    int b3 = Wire.receive();
    Serial.println((b1));
    Serial.println((b2));
    Serial.println((b3));

    int i2cAdress = b2 << 8 | b3; 
    Serial.println((i2cAdress));
  }

uuppps Ich !?# ok so ich habs :slight_smile:

byte decToBcd(byte val){
  return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val){
  return ( (val/16*10) + (val%16) );
}


void adresseAendern(){
  //Sensor starten
  digitalWrite(13, HIGH);
  delay(2);

  //in Command Mode
  Wire.beginTransmission(adress);
  Wire.send(0xA0);
  Wire.send(0x00);
  Wire.send(0x00);
  Wire.endTransmission();
  delay(100);

  //Adress anfragen
  Wire.beginTransmission(adress);
  Wire.send(0x1C);
  Wire.send(0x00);
  Wire.send(0x00);
  Wire.endTransmission();
  delay(100);

  //Adresse auslesen
  Wire.requestFrom(adress, 3);
  if(Wire.available() > 2){
    byte b1 = bcdToDec(Wire.receive());
    byte b2 = bcdToDec(Wire.receive());
    byte b3 = bcdToDec(Wire.receive());
    /*
    Serial.println((b1), DEC);
     Serial.println((b2), DEC);
     Serial.println((b3), DEC);
     */
    int i2cAdress = b2 << 8 | b3; 
    Serial.println((i2cAdress));
  }
  

  //Adress neu setzten
  Wire.beginTransmission(adress);
  Wire.send(0x5C);
  Wire.send(0x00);
  Wire.send(adressNew);
  Wire.endTransmission();
  delay(100);


  //normal Mode
  digitalWrite(13, LOW);
  delay(100);

}