X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fdrivers%2Fao_adxl375.c;h=c95bf9e32bc02776c31b25aa2eec055d79080230;hb=HEAD;hp=84c5f871aa0ac28c3d664f725b3c433844615297;hpb=c6a7ea9168f1669840eef0fb080759968f4a2f97;p=fw%2Faltos diff --git a/src/drivers/ao_adxl375.c b/src/drivers/ao_adxl375.c index 84c5f871..4366e302 100644 --- a/src/drivers/ao_adxl375.c +++ b/src/drivers/ao_adxl375.c @@ -26,7 +26,7 @@ #define PRINTD(l,...) #endif -#define AO_ADXL375_SPI_SPEED ao_spi_speed(5000000) +#define AO_ADXL375_SPI_SPEED ao_spi_speed(AO_ADXL375_SPI_INDEX, 5000000) struct ao_adxl375_sample ao_adxl375_current; @@ -102,11 +102,14 @@ struct ao_adxl375_total { #define AO_ADXL375_SELF_TEST_SAMPLES 10 #define AO_ADXL375_SELF_TEST_SETTLE 4 +#define AO_ADXL375_SELF_TEST_DELAY AO_MS_TO_TICKS(10) #define MIN_LSB_G 18.4 #define MAX_LSB_G 22.6 -#define SELF_TEST_MIN_G 5.0 -#define SELF_TEST_MAX_G 6.8 + +/* The self test value can vary within a rather wide range */ +#define SELF_TEST_MIN_G 4.0 +#define SELF_TEST_MAX_G 12.0 #define MIN_SELF_TEST ((int32_t) (MIN_LSB_G * SELF_TEST_MIN_G * AO_ADXL375_SELF_TEST_SAMPLES + 0.5)) #define MAX_SELF_TEST ((int32_t) (MAX_LSB_G * SELF_TEST_MAX_G * AO_ADXL375_SELF_TEST_SAMPLES + 0.5)) @@ -122,7 +125,7 @@ ao_adxl375_total_value(struct ao_adxl375_total *total, int samples) total->x += value.x; total->y += value.y; total->z += value.z; - ao_delay(AO_MS_TO_TICKS(10)); + ao_delay(AO_ADXL375_SELF_TEST_DELAY); } } @@ -174,6 +177,11 @@ ao_adxl375_setup(void) (0 << AO_ADXL375_POWER_CTL_SLEEP) | (AO_ADXL375_POWER_CTL_WAKEUP_8 << AO_ADXL375_POWER_CTL_WAKEUP)); + /* Set to normal mode */ + + ao_adxl375_reg_write(AO_ADXL375_DATA_FORMAT, + AO_ADXL375_DATA_FORMAT_SETTINGS(0)); + /* Perform self-test */ struct ao_adxl375_total self_test_off, self_test_on; @@ -208,13 +216,9 @@ ao_adxl375_setup(void) if (z_change < MIN_SELF_TEST) AO_SENSOR_ERROR(AO_DATA_ADXL375); - /* This check is commented out as maximum self test is unreliable - - if (z_change > MAX_SELF_TEST) + if (z_change > MAX_SELF_TEST) AO_SENSOR_ERROR(AO_DATA_ADXL375); - */ - /* Discard some samples to let it settle down */ ao_adxl375_total_value(&self_test_off, AO_ADXL375_SELF_TEST_SETTLE); } @@ -222,7 +226,6 @@ ao_adxl375_setup(void) static void ao_adxl375(void) { - ao_delay(AO_SEC_TO_TICKS(5)); ao_adxl375_setup(); for (;;) { ao_adxl375_value(&ao_adxl375_current);