diff --git a/src/adxl345.c b/src/adxl345.c index dbbc39b..8858a71 100644 --- a/src/adxl345.c +++ b/src/adxl345.c @@ -79,12 +79,15 @@ int8_t adxl345_setup(adxl345_dev *dev, adxl345_init_param adxl345_params) { dev->resolution = adxl345_params.resolution; dev->scale = adxl345_params.scale; - ret |= adxl345_set_measure_mode(&dev, ADXL345_STANDBY_MODE); - ret |= adxl345_set_power_mode(&dev, dev->power_mode); - ret |= adxl345_set_odr(&dev, dev->odr); - ret |= adxl345_set_scale(&dev, dev->scale); - ret |= adxl345_set_resolution(&dev, dev->resolution); - ret |= adxl345_set_measure_mode(&dev, ADXL345_MEASURE_MODE); + ret |= adxl345_set_measure_mode(dev, ADXL345_STANDBY_MODE); + ret |= adxl345_set_power_mode(dev, dev->power_mode); + ret |= adxl345_set_odr(dev, dev->odr); + ret |= adxl345_set_scale(dev, dev->scale); + ret |= adxl345_set_resolution(dev, dev->resolution); + ret |= adxl345_set_interrupt_enable(dev, ADXL345_INT_DATA_READY, 1); + ret |= adxl345_set_interrupt_enable(dev, ADXL345_INT_WATERMARK, 1); + ret |= adxl345_set_interrupt_enable(dev, ADXL345_INT_OVERRUNY, 1); + ret |= adxl345_set_measure_mode(dev, ADXL345_MEASURE_MODE); if (ret == ADXL345_STATUS_SUCCESS) { dev->is_Setup = true; @@ -557,10 +560,23 @@ int8_t adxl345_get_axes_data_x(adxl345_dev *device, adxl345_axes_data *data) { } if (device->resolution == ADXL345_RES_10BIT){ - data->x = ((val_h << 8) | val_l) >> 6; + data->x = ((val_h << 8) | val_l) >> ADXL345_RES_10BIT_MASK; } else { - data->x = (val_h << 8) | val_l; + switch (device->scale){ + case ADXL345_SCALE_2G: + data->x = ((val_h << 8) | val_l) >> ADXL345_RES_10BIT_MASK; + break; + case ADXL345_SCALE_4G: + data->x = ((val_h << 8) | val_l) >> ADXL345_RES_11BIT_MASK; + break; + case ADXL345_SCALE_8G: + data->x = ((val_h << 8) | val_l) >> ADXL345_RES_12BIT_MASK; + break; + case ADXL345_SCALE_16G: + data->x = ((val_h << 8) | val_l) >> ADXL345_RES_13BIT_MASK; + break; + } } return ADXL345_STATUS_SUCCESS; @@ -581,10 +597,23 @@ int8_t adxl345_get_axes_data_y(adxl345_dev *device, adxl345_axes_data *data) { } if (device->resolution == ADXL345_RES_10BIT){ - data->y = ((val_h << 8) | val_l) >> 6; + data->y = ((val_h << 8) | val_l) >> ADXL345_RES_10BIT_MASK; } else { - data->y = (val_h << 8) | val_l; + switch (device->scale){ + case ADXL345_SCALE_2G: + data->y = ((val_h << 8) | val_l) >> ADXL345_RES_10BIT_MASK; + break; + case ADXL345_SCALE_4G: + data->y = ((val_h << 8) | val_l) >> ADXL345_RES_11BIT_MASK; + break; + case ADXL345_SCALE_8G: + data->y = ((val_h << 8) | val_l) >> ADXL345_RES_12BIT_MASK; + break; + case ADXL345_SCALE_16G: + data->y = ((val_h << 8) | val_l) >> ADXL345_RES_13BIT_MASK; + break; + } } return ADXL345_STATUS_SUCCESS; @@ -605,10 +634,23 @@ int8_t adxl345_get_axes_data_z(adxl345_dev *device, adxl345_axes_data *data) { } if (device->resolution == ADXL345_RES_10BIT){ - data->z = ((val_h << 8) | val_l) >> 6; + data->z = ((val_h << 8) | val_l) >> ADXL345_RES_10BIT_MASK; } else { - data->z = (val_h << 8) | val_l; + switch (device->scale){ + case ADXL345_SCALE_2G: + data->z = ((val_h << 8) | val_l) >> ADXL345_RES_10BIT_MASK; + break; + case ADXL345_SCALE_4G: + data->z = ((val_h << 8) | val_l) >> ADXL345_RES_11BIT_MASK; + break; + case ADXL345_SCALE_8G: + data->z = ((val_h << 8) | val_l) >> ADXL345_RES_12BIT_MASK; + break; + case ADXL345_SCALE_16G: + data->z = ((val_h << 8) | val_l) >> ADXL345_RES_13BIT_MASK; + break; + } } return ADXL345_STATUS_SUCCESS; diff --git a/src/adxl345.h b/src/adxl345.h index fe0deb2..66e704b 100644 --- a/src/adxl345.h +++ b/src/adxl345.h @@ -66,6 +66,11 @@ typedef enum { #define ADXL345_INT_WATERMARK 0x01 #define ADXL345_INT_OVERRUNY 0x00 +#define ADXL345_RES_10BIT_MASK 0x06 +#define ADXL345_RES_11BIT_MASK 0x05 +#define ADXL345_RES_12BIT_MASK 0x04 +#define ADXL345_RES_13BIT_MASK 0x03 + #define ADXL345_INT1_PIN 0x00 #define ADXL345_INT2_PIN 0x01 @@ -142,7 +147,7 @@ typedef enum { typedef enum { ADXL345_RES_10BIT = 0x00, - ADXL345_RES_16BIT = 0x01, + ADXL345_RES_FULL = 0x01, } adxl345_resolution; typedef enum { diff --git a/test/test_adxl345.c b/test/test_adxl345.c index 5d54593..84ee75f 100644 --- a/test/test_adxl345.c +++ b/test/test_adxl345.c @@ -10,8 +10,6 @@ static adxl345_dev dev; static adxl345_init_param init_param; void test_adxl345_setup(void) { - i2c_init_ExpectAndReturn(true); - TEST_ASSERT_EQUAL(ADXL345_STATUS_SUCCESS, adxl345_setup(&dev, init_param)); } void test_adxl345_online(void) { @@ -110,8 +108,8 @@ void test_adxl345_set_resolution(void) { i2c_write_bytes_IgnoreArg_data_buffer(); TEST_ASSERT_EQUAL(ADXL345_STATUS_SUCCESS, - adxl345_set_resolution(&dev, ADXL345_RES_16BIT)); - TEST_ASSERT_EQUAL(dev.resolution, ADXL345_RES_16BIT); + adxl345_set_resolution(&dev, ADXL345_RES_FULL)); + TEST_ASSERT_EQUAL(dev.resolution, ADXL345_RES_FULL); } void test_adxl345_set_tap_threshold(void) {