Thank you, David: this is what we do.
Macros are defined as:
STATUS_00_REG: 0x00
CTRL_REG1: 0x26
CTRL_REG2: 0x27
CTRL_REG3: 0x28
CTRL_REG4: 0x29
CTRL_REG5: 0x2A
PT_DATA_CFG_REG: 0x13
PDR_BIT: 0x04
REG1_SET_STANDBY: (ALT_BIT | OS2_BIT | OS0_BIT) or (0x80 | 0x20 | 0x08)
REG1_SET_OST: (ALT_BIT | OS2_BIT | OS0_BIT | OST_BIT) or (0x80 | 0x20 | 0x08 | 0x02)
CLEAR_CTRLREG2: 0x00
INT_EN_CLEAR: 0x00
INT_CFG_CLEAR: 0x00
PDEFE_BIT: 0x02
SlaveAddressIC is 0x60
Init in altitude mode (sensor should be in standby after this, 32 oversampling):
IIC_RegWrite(SlaveAddressIC, CTRL_REG1, REG1_SET_STANDBY);
IIC_RegWrite(SlaveAddressIC, CTRL_REG2, CLEAR_CTRLREG2);
IIC_RegWrite(SlaveAddressIC, CTRL_REG3, 0x00);
IIC_RegWrite(SlaveAddressIC, CTRL_REG4, INT_EN_CLEAR);
IIC_RegWrite(SlaveAddressIC, CTRL_REG5, INT_CFG_CLEAR);
IIC_RegWrite(SlaveAddressIC, PT_DATA_CFG_REG, PDEFE_BIT); // This should be 0x00, I think...
Read sensor (done once necessary, no faster than every 250 ms):
// Set active, one shot mode
IIC_RegWrite(SlaveAddressIC, CTRL_REG1, REG1_SET_OST);
do
// Read 5 bytes
IICReadRegN(SlaveAddressIC, STATUS_00_REG, 5, (unsigned char *)MyBuffer);
while (!(MyBuffer[0] & PDR_BIT));
MyBuffer elements are then used to calculate values. To get delta values we read 10 bytes instead of 5.
If we look at the content of the buffer, values of deltas are the same of sensor readings.
Thank you for looking at this!
Paolo