err_t adxl345GetDataRate(adxl345_dataRate_t *dataRate) { uint8_t results; ASSERT_STATUS(adxl345Read8(ADXL345_REG_BW_RATE, &results)); *dataRate = (adxl345_dataRate_t)(results & 0x0F); return ERROR_NONE; }
err_t adxl345GetRange(adxl345_range_t *range) { uint8_t results; ASSERT_STATUS(adxl345Read8(ADXL345_REG_DATA_FORMAT, &results)); *range = (adxl345_range_t)(results & 0x03); return ERROR_NONE; }
error_t adxl345SetRange(adxl345_range_t range) { uint8_t format; /* Red the data format register to preserve bits */ ASSERT_STATUS(adxl345Read8(ADXL345_REG_DATA_FORMAT, &format)); /* Update the data rate */ format &= ~0x0F; format |= range; /* Write the register back to the IC */ ASSERT_STATUS(adxl345Write8(ADXL345_REG_DATA_FORMAT, format)); return ERROR_NONE; }
err_t adxl345SetRange(adxl345_range_t range) { uint8_t format; /* Red the data format register to preserve bits */ ASSERT_STATUS(adxl345Read8(ADXL345_REG_DATA_FORMAT, &format)); /* Update the data rate */ format &= ~0x0F; format |= range; /* Make sure that the FULL-RES bit is enabled for range scaling */ format |= 0x08; /* Write the register back to the IC */ ASSERT_STATUS(adxl345Write8(ADXL345_REG_DATA_FORMAT, format)); return ERROR_NONE; }
err_t adxl345Init(void) { uint8_t devid = 0x00; /* Initialise I2C */ i2cInit(I2CMASTER); /* Ping the I2C device first to see if it exists! */ ASSERT(i2cCheckAddress(ADXL345_ADDRESS), ERROR_I2C_DEVICENOTFOUND); /* Check device ID register to see if everything is properly connected */ ASSERT_STATUS(adxl345Read8(ADXL345_REG_DEVID, &devid)); if (devid != 0xE5) { return ERROR_I2C_DEVICENOTFOUND; } /* Enable measurements */ ASSERT_STATUS(adxl345Write8(ADXL345_REG_POWER_CTL, 0x08)); _adxl345Initialised = true; return ERROR_NONE; }