Lecture température DS1621

Bonjour,
je souhaite faire fonctionne un capteur de température DS1621 sur mon ESP32.
Mais j'ai quelques difficultés.
J'ai trouvé cette librairie : GitHub - martinhansdk/DS1621-temperature-probe-library-for-Arduino: Make it easy to use one or more DS1621s in your Arduino projects.
mais quand je la test mon programme m'affiche ceci en boucle :
image

le code :

#include <Wire.h>


#define DEV_ID 0x90 >> 1 // shift required by wire.h

void setup()
{
Serial.begin(9600);

Wire.begin();
Wire.beginTransmission(DEV_ID); // connect to DS1621 (#0)
Wire.write(0xAC); // Access Config
Wire.write(0x02); // set for continuous conversion
Wire.beginTransmission(DEV_ID); // restart
Wire.write(0xEE); // start conversions
Wire.endTransmission();
}

void loop()
{
int tempC = 0;
int tempF = 0;

delay(1000); // give time for measurement
Wire.beginTransmission(DEV_ID);
Wire.write(0xAA); // read temperature
Wire.endTransmission();
Wire.requestFrom(DEV_ID, 1); // request one byte from DS1621
tempC = Wire.read(); // get whole degrees reading
tempF = tempC * 9 / 5 + 32; // convert to Fahrenheit

Serial.print(tempC);
Serial.print(" / ");
Serial.println(tempF);
}```

J'ai fait un scran i2c, j'ai trouvé ox4A j'ai changé l'adresse mais rien ne change

J'ai repris un vieux programme qu'on avait fait en cours avec un DS1624 et ça fonctionne merci

// lecture de temperature sur DS1621

// definition de l'adresse du circuit DS1621
// adresse I2C DS1621 : 1001 A2 A1 A0
#define Tint 0x4A // avec A2=0 A1=0 et A0=0
//#define Text 0x49 // avec A2=0 A1=0 et A0=1
// etc 


// librairie arduino pour l'I2C
#include <Wire.h>


void setup() {
  // put your setup code here, to run once:
  // liaison série pour visualisation le moniteur série 
  delay(5000);
  Serial.begin(115200); // 
  delay(1000);
  Serial.println("Hello world");  
  delay(1000);
  
  Serial.println("Mesure de température sur circuit DS1621 ( communication en I2C)");
  Serial.println("Configuration du circuit ... ");
  Wire.begin(); //ouverture liaison I2C
  Wire.beginTransmission(Tint); // adresse - control Byte
  Wire.write(0xAC);// command protocol : acces config
  Wire.write(0x00);// data byte write : mode continu
  Wire.endTransmission();
  delay(20); // attente ( temps d'ecriture en non volatile E2 : 10ms )

  Serial.println("Lancement de la mesure ...");
  Wire.beginTransmission(Tint); // adresse - control Byte
  Wire.write(0xEE);// command protocol : acces config
  Wire.endTransmission();
  delay(15);
  delay(1000);

}

void loop() {
  uint8_t tmsb,tlsb;

  //mesure de temperature Tint

  Serial.println("envoi d'ordre d'arret de la mesure...");
  Wire.beginTransmission(Tint); // adresse - control Byte
  Wire.write(0x22);// command protocol : acces config
  Wire.endTransmission(true); //true
  delay(15);

  Serial.println("Lecture de la temperature si donnée disponible...");
  Wire.beginTransmission(Tint); // adresse - control Byte
  Wire.write(0xAA);// command protocol : acces config
  Wire.endTransmission();
  //delay(15);
  Wire.requestFrom(Tint,2);
  delayMicroseconds(100);
  if(Wire.available()==2 )
      { 
      tmsb = Wire.read();
      tlsb = Wire.read();
      }
     else
     { 
     Serial.println("probleme lecture temperature");
   }


  delay(1000);
  Serial.println( "affichage des données brutes récupérées en binaire   ");
  Serial.print(" MSB : ");
  Serial.print(tmsb,BIN);
  Serial.print("    LSB : ");
  Serial.println(tlsb,BIN);
  delay(1000);
  
  Serial.println("traitement/calcul sur les données pour disposer de la température sous la forme d'un nombre décimal signé...");
      int16_t t = (((int16_t)tmsb)<<8) +((int16_t)tlsb);
      float temperature = (float(t))/256;
      Serial.println("... et affichage de la température sur le moniteur série");
      Serial.print("     temperature mesurée : ");
      Serial.println(temperature,2);
      delay(1000);

Serial.println("relance de la mesure de température");
  Wire.beginTransmission(Tint); // adresse - control Byte
  Wire.write(0xEE);// command protocol : acces config
  Wire.endTransmission(true);
  delay(2000);
  
 }

Bonjour oasixm

Je pense qu'il fallait enlever le >> 1 et écrire

#define DEV_ID 0x4A 

Cordialement
jpbbricole

1 Like