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);
}