projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
[fw/altos]
/
src
/
drivers
/
ao_adxl375.c
diff --git
a/src/drivers/ao_adxl375.c
b/src/drivers/ao_adxl375.c
index 778c214b6e49b637a0ebd0be74b65c5de1120b68..70bf92a5f1fb72e6a44d0f711de58623a711a222 100644
(file)
--- a/
src/drivers/ao_adxl375.c
+++ b/
src/drivers/ao_adxl375.c
@@
-21,11
+21,13
@@
#define DEBUG 0
#if DEBUG
#define DEBUG 0
#if DEBUG
-#define PRINTD(l, ...) do { if (DEBUG & (l)) { printf ("\r%5u %s: ", ao_tick_count, __func__); printf(__VA_ARGS__); flush(); } } while(0)
+#define PRINTD(l, ...) do { if (DEBUG & (l)) { printf ("\r%5
l
u %s: ", ao_tick_count, __func__); printf(__VA_ARGS__); flush(); } } while(0)
#else
#define PRINTD(l,...)
#endif
#else
#define PRINTD(l,...)
#endif
+#define AO_ADXL375_SPI_SPEED ao_spi_speed(AO_ADXL375_SPI_INDEX, 5000000)
+
struct ao_adxl375_sample ao_adxl375_current;
static void
struct ao_adxl375_sample ao_adxl375_current;
static void
@@
-53,7
+55,7
@@
ao_adxl375_reg_read(uint8_t addr)
ao_spi_duplex(d, d, 2, AO_ADXL375_SPI_INDEX);
ao_adxl375_stop();
ao_spi_duplex(d, d, 2, AO_ADXL375_SPI_INDEX);
ao_adxl375_stop();
- PRINTD(DEBUG_LOW, "read %x = %x\n", addr, d);
+ PRINTD(DEBUG_LOW, "read %x = %x\n", addr, d
[1]
);
return d[1];
}
return d[1];
}
@@
-71,7
+73,7
@@
ao_adxl375_reg_write(uint8_t addr, uint8_t value)
ao_adxl375_stop();
#if DEBUG & DEBUG_LOW
ao_adxl375_stop();
#if DEBUG & DEBUG_LOW
- d[0] = addr | AO_ADXL375_READ
+ d[0] = addr | AO_ADXL375_READ
;
d[1] = 0;
ao_adxl375_start();
ao_spi_duplex(d, d, 2, AO_ADXL375_SPI_INDEX);
d[1] = 0;
ao_adxl375_start();
ao_spi_duplex(d, d, 2, AO_ADXL375_SPI_INDEX);
@@
-103,7
+105,7
@@
struct ao_adxl375_total {
#define MIN_LSB_G 18.4
#define MAX_LSB_G 22.6
#define MIN_LSB_G 18.4
#define MAX_LSB_G 22.6
-#define SELF_TEST_MIN_G
6
.0
+#define SELF_TEST_MIN_G
5
.0
#define SELF_TEST_MAX_G 6.8
#define MIN_SELF_TEST ((int32_t) (MIN_LSB_G * SELF_TEST_MIN_G * AO_ADXL375_SELF_TEST_SAMPLES + 0.5))
#define SELF_TEST_MAX_G 6.8
#define MIN_SELF_TEST ((int32_t) (MIN_LSB_G * SELF_TEST_MIN_G * AO_ADXL375_SELF_TEST_SAMPLES + 0.5))
@@
-127,7
+129,7
@@
ao_adxl375_total_value(struct ao_adxl375_total *total, int samples)
#define AO_ADXL375_DATA_FORMAT_SETTINGS(self_test) ( \
AO_ADXL375_DATA_FORMAT_FIXED | \
(self_test << AO_ADXL375_DATA_FORMAT_SELF_TEST) | \
#define AO_ADXL375_DATA_FORMAT_SETTINGS(self_test) ( \
AO_ADXL375_DATA_FORMAT_FIXED | \
(self_test << AO_ADXL375_DATA_FORMAT_SELF_TEST) | \
- (AO_ADXL375_DATA_FORMAT_SPI_4_WIRE << AO_ADXL375_DATA_FORMAT_SPI
_4_WIRE
) | \
+ (AO_ADXL375_DATA_FORMAT_SPI_4_WIRE << AO_ADXL375_DATA_FORMAT_SPI) | \
(0 << AO_ADXL375_DATA_FORMAT_INT_INVERT) | \
(0 << AO_ADXL375_DATA_FORMAT_JUSTIFY))
(0 << AO_ADXL375_DATA_FORMAT_INT_INVERT) | \
(0 << AO_ADXL375_DATA_FORMAT_JUSTIFY))
@@
-143,7
+145,7
@@
ao_adxl375_setup(void)
uint8_t devid = ao_adxl375_reg_read(AO_ADXL375_DEVID);
if (devid != AO_ADXL375_DEVID_ID)
uint8_t devid = ao_adxl375_reg_read(AO_ADXL375_DEVID);
if (devid != AO_ADXL375_DEVID_ID)
-
ao_sensor_errors = 1
;
+
AO_SENSOR_ERROR(AO_DATA_ADXL375)
;
/* Set the data rate */
ao_adxl375_reg_write(AO_ADXL375_BW_RATE,
/* Set the data rate */
ao_adxl375_reg_write(AO_ADXL375_BW_RATE,
@@
-172,7
+174,6
@@
ao_adxl375_setup(void)
(0 << AO_ADXL375_POWER_CTL_SLEEP) |
(AO_ADXL375_POWER_CTL_WAKEUP_8 << AO_ADXL375_POWER_CTL_WAKEUP));
(0 << AO_ADXL375_POWER_CTL_SLEEP) |
(AO_ADXL375_POWER_CTL_WAKEUP_8 << AO_ADXL375_POWER_CTL_WAKEUP));
- (void) ao_adxl375_total_value;
/* Perform self-test */
struct ao_adxl375_total self_test_off, self_test_on;
/* Perform self-test */
struct ao_adxl375_total self_test_off, self_test_on;
@@
-204,8
+205,15
@@
ao_adxl375_setup(void)
self_test_value = z_change;
self_test_value = z_change;
- if (z_change < MIN_SELF_TEST || MAX_SELF_TEST < z_change)
- ao_sensor_errors = 1;
+ 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)
+ 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);
/* Discard some samples to let it settle down */
ao_adxl375_total_value(&self_test_off, AO_ADXL375_SELF_TEST_SETTLE);
@@
-229,13
+237,13
@@
static struct ao_task ao_adxl375_task;
static void
ao_adxl375_dump(void)
{
static void
ao_adxl375_dump(void)
{
- printf ("ADXL375 value %d %d %d self test %
d min %d max %
d\n",
+ printf ("ADXL375 value %d %d %d self test %
ld min %ld max %l
d\n",
ao_adxl375_current.x,
ao_adxl375_current.y,
ao_adxl375_current.z,
ao_adxl375_current.x,
ao_adxl375_current.y,
ao_adxl375_current.z,
- self_test_value,
- MIN_SELF_TEST,
- MAX_SELF_TEST);
+
(long)
self_test_value,
+
(long)
MIN_SELF_TEST,
+
(long)
MAX_SELF_TEST);
}
const struct ao_cmds ao_adxl375_cmds[] = {
}
const struct ao_cmds ao_adxl375_cmds[] = {