/*---------------------------------------------------------------------------*/ static void adxl346_init(void) { uint8_t config[2]; config[0] = ADXL346_BW_RATE_ADDR; config[1] = (ADXL346_BW_RATE_RATE(6)); i2c_burst_send(ADXL346_ADDRESS, config, sizeof(config)); config[0] = ADXL346_DATA_FORMAT_ADDR; config[1] = (ADXL346_USER_CONFIGURATION); i2c_burst_send(ADXL346_ADDRESS, config, sizeof(config)); config[0] = ADXL346_POWER_CTL_ADDR; config[1] = (ADXL346_POWER_CTL_MEASURE); i2c_burst_send(ADXL346_ADDRESS, config, sizeof(config)); }
/*---------------------------------------------------------------------------*/ void adxl346_init(void) { uint8_t config[2]; config[0] = ADXL346_BW_RATE_ADDR; config[1] = (ADXL346_BW_RATE_RATE(11)); i2c_burst_send(ADXL346_ADDRESS, config, sizeof(config)); config[0] = ADXL346_DATA_FORMAT_ADDR; config[1] = (ADXL346_DATA_FORMAT_SELF_TEST | ADXL346_DATA_FORMAT_FULL_RES | ADXL346_DATA_FORMAT_RANGE_PM_16g); i2c_burst_send(ADXL346_ADDRESS, config, sizeof(config)); config[0] = ADXL346_POWER_CTL_ADDR; config[1] = (ADXL346_POWER_CTL_MEASURE); i2c_burst_send(ADXL346_ADDRESS, config, sizeof(config)); }
/*---------------------------------------------------------------------------*/ void bme280_arch_i2c_write_mem(uint8_t addr, uint8_t reg, uint8_t value) { uint8_t buf[2]; buf[0] = reg; buf[1] = value; i2c_master_enable(); i2c_burst_send(addr, buf, 2); }
/*---------------------------------------------------------------------------*/ static void adxl346_calibrate_offset(void) { int32_t accum_x = 0; int32_t accum_y = 0; int32_t accum_z = 0; uint8_t config[2]; int8_t offset; config[0] = ADXL346_OFSX_ADDR; config[1] = 0; i2c_burst_send(ADXL346_ADDRESS, config, sizeof(config)); config[0] = ADXL346_OFSY_ADDR; config[1] = 0; i2c_burst_send(ADXL346_ADDRESS, config, sizeof(config)); config[0] = ADXL346_OFSZ_ADDR; config[1] = 0; i2c_burst_send(ADXL346_ADDRESS, config, sizeof(config)); uint16_t i; for(i = 0; i < 100; i++) { uint16_t x, y, z; x = adxl346_read_accel(ADXL346_DATAX0_ADDR, ADXL346_DATAX1_ADDR); accum_x += x; y = adxl346_read_accel(ADXL346_DATAY0_ADDR, ADXL346_DATAY1_ADDR); accum_y += y; z = adxl346_read_accel(ADXL346_DATAZ0_ADDR, ADXL346_DATAZ1_ADDR); accum_z += z; } offset = (64 * accum_x) / 25600; config[0] = ADXL346_OFSX_ADDR; config[1] = -offset; i2c_burst_send(ADXL346_ADDRESS, config, sizeof(config)); PRINTF("ADXL346: X calibration offset is %d\n", offset); offset = (64 * accum_y) / 25600; config[0] = ADXL346_OFSY_ADDR; config[1] = -offset; i2c_burst_send(ADXL346_ADDRESS, config, sizeof(config)); PRINTF("ADXL346: Y calibration offset is %d\n", offset); offset = (64 * accum_z) / 25600; config[0] = ADXL346_OFSZ_ADDR; config[1] = -offset; i2c_burst_send(ADXL346_ADDRESS, config, sizeof(config)); PRINTF("ADXL346: Z calibration offset is %d\n", offset); }