LIS3DH- wrong data

Hello,


ive encounter a strange problem, when i try read data from lis3dh that are Y_L X_L Z_L they seem all right. buffer[0] buffer[2] buffer[4]


but when it comes to X_H Y_H Z_H data they are only multiplies of 64. buffer[1] buffer[3] buffer[5]


void read_from_sensor_multiple(uint8_t adres, twim_config_t *twim)
{
    uint8_t adres_multiple = adres | 0x80;
    uint8_t write_buff[1] = {adres_multiple};
    uint8_t buffer[6];
    nrfx_twim_xfer_desc_t twim_xfer_desc = NRFX_TWIM_XFER_DESC_TXRX(LIS3DH_DEFAULT_ADDRESS, // BME280 I2C
                                                                    write_buff,             // Buffer z adresem rejestru TX
                                                                    6,                      // Amount
                                                                    buffer,               // RX buffer
                                                                    6      // Amount
    );
    nrfx_twim_xfer(&twim->instance, &twim_xfer_desc, NRFX_TWIM_FLAG_REPEATED_XFER | NRFX_TWIM_FLAG_TX_POSTINC);

 x = buffer[0];
  x |= ((uint16_t)buffer[1]) << 8;
   y = buffer[2];
  y |= ((uint16_t)buffer[3]) << 8;
  z = buffer[4];
  z |= ((uint16_t)buffer[5]) << 8;

 

  
  uint8_t lsb_value = 4;
 
 float x_g = lsb_value * ((float)x / LIS3DH_LSB16_TO_KILO_LSB10);
 float y_g = lsb_value * ((float)y / LIS3DH_LSB16_TO_KILO_LSB10);
 float z_g = lsb_value * ((float)z / LIS3DH_LSB16_TO_KILO_LSB10);
 LOG_INF("X: %d Y: %d Z: %d\n", buffer[1],buffer[3], buffer[5]);
    
   
}


that's my function. Should my data output act like this? If not what's wrong with this. Assuming i get right data from 0 2 4 buff places, whats wrong with 1 3 5

  • Hi 

    Looking over the LIS3DH datasheet it seems the default resolution of the ADC is 10-bits, and that the data is left justified. As such I will assume that it is the most significant 2 bits of the high registers that are used, and not the 2 least significant bits as you might assume. 

    To test this theory you could try to simply shift the H registers 2 bits to the left rather than 8. Then the end result should be correct. 

    Best regards
    Torbjørn

Related