cancel
Showing results for 
Search instead for 
Did you mean: 

LSM303AGR temperature measurement

fab04
Associate II

Hi everybody,

I'm using a LSM303AGR and I got some difficulties to read the temperature.

My I2c functions, because I can read "who am I" registers, and I tried to write then to read some registers.

 

I did the following steps :

 

 

 

 

 

LSM303_IO_Write_one_byte(ACC_I2C_ADDRESS,LSM303AGR_CTRL_REG4_A,0x80);
for (idx = 0;idx < 50000; idx++) {} 
LSM303_IO_Write_one_byte(ACC_I2C_ADDRESS,LSM303AGR_TEMP_CFG_REG_A,0xC0);
for (idx = 0;idx < 50000; idx++) {}    
LSM303_IO_Write_one_byte(ACC_I2C_ADDRESS,LSM303AGR_CTRL_REG1_A,0x27);

 

 

 

 

First, I set BDU, then I set TEMP_EN[1.0], and I configure (HR / normal / low power mode (10Hz)

To read the register, I'm waiting for change on TDA bit :

 

 

 

 

 

 if((LSM303_IO_Read_one_byte(ACC_I2C_ADDRESS,LSM303AGR_STATUS_REG_AUX_A) & 0x04) == 0x04) {
        LSM303_IO_Read_multiple_bytes(ACC_I2C_ADDRESS,LSM303AGR_OUT_TEMP_L_A,2,(uint8_t *)data_temp);
        temp = (int8_t)data_temp[1] + 25;
    }

 

 

 

 

 

But I've always 0.

When I display the I2C signals, it seems to be correct :

LSM303.png

 

If you have some suggestions, I'll be very happy.

Thank you.

 

 

1 REPLY 1
Federica Bossi
ST Employee

Hi @fab04 ,

Did you set the TEMP_EN[1:0] bits to 1 in the TEMP_CFG_REG_A (1Fh) register?

You could also take a look at our PID examples on Github.

You will find how to read the temperature sensor output and how to implement it:

FedericaBossi_0-1711016730040.png

 

In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question.