I try to read temp value from MLX90614 using Arduino DUE. but I have a big problem. I receive always max value (0x7FFF).
I used this code
#define MLX90614_ADDR_1 0x5A
#define MLX90614_TOBJ1_RAM_ADDR 0x07
#define MLX90614_TOBJ2_RAM_ADDR 0x08
#define MLX90614_ENVIR_RAM_ADDR 0x06
void setup() {
Serial.begin(9600);
Wire.begin();
}
void loop() {
uint16_t data = 0;
uint8_t PEC = 0;
//Inizio comunicazione
Wire.beginTransmission(MLX90614_ADDR_1);
//dico di leggere dall'area della RAM del sensore
Wire.write(MLX90614_TOBJ1_RAM_ADDR);
//fine comunicazione senza rilascio del canale
Wire.endTransmission(false);
//richiesta di invi odati dallo slave senza rilascio del canale
Wire.requestFrom(MLX90614_ADDR_1, 3, true);
//attendo finche ci sono dati sul canale
while(Wire.available() < 3);
//leggo il primo byte
data = Wire.read();
//leggo il secondo byte
data |= (Wire.read() & 0x7F) << 8;
//leggo il PEC
PEC = Wire.read(); // PEC
//fine transazione e chiusura del canale
//Wire.endTransmission();
delay(200);
float celsius = data / 50 - 273.15; //temperatura in °C
float kelvin = data / 50; //temperatura in Kelvin
//visualizzo nel debug il valore il valore
Serial.print(data);
Serial.print(" - ");
Serial.print(PEC);
Serial.print("\n °C = ");
Serial.print(celsius);
Serial.print("\n K = ");
Serial.print(kelvin);
Serial.print("\n");
}
I've a similar problem with the same chip, but only with Arduino DUE, not with Arduino UNO. Look my message TWI START/STOP/RESTART errored ? - Arduino Due - Arduino Forum and watch the differences in the 2 attached pictures, the i2c START of Arduino DUE are bad.