summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-10-29 11:47:17 -0700
committerKeith Packard <keithp@keithp.com>2012-10-29 11:47:17 -0700
commite9ea0ad4024532fd6f87bb6708bf76b0c7aa1c5b (patch)
tree2d5abfae63268cd36055f996f2164c5209657b2d
parent0623bc06a77536b903da09acbd12999d0ed05360 (diff)
altos/micropeak: Switch to MS5607 sensor. Require 4m for boost. Elide dead code
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/micropeak/Makefile13
-rw-r--r--src/micropeak/ao_micropeak.c18
-rw-r--r--src/micropeak/ao_pins.h2
3 files changed, 22 insertions, 11 deletions
diff --git a/src/micropeak/Makefile b/src/micropeak/Makefile
index e0b2b80d..8cf608bb 100644
--- a/src/micropeak/Makefile
+++ b/src/micropeak/Makefile
@@ -19,6 +19,13 @@ ifndef VERSION
include ../Version
endif
+# Support for a logging EEPROM
+#
+#EEPROM_SRC=ao_async.c \
+# ao_i2c_attiny.c \
+# ao_at24c.c
+#
+
ALTOS_SRC = \
ao_micropeak.c \
ao_spi_attiny.c \
@@ -27,13 +34,11 @@ ALTOS_SRC = \
ao_ms5607.c \
ao_exti.c \
ao_convert_pa.c \
- ao_i2c_attiny.c \
- ao_at24c.c \
ao_report_tiny.c \
- ao_async.c \
ao_notask.c \
ao_eeprom_tiny.c \
- ao_panic.c
+ ao_panic.c \
+ $(EEPROM_SRC)
INC=\
ao.h \
diff --git a/src/micropeak/ao_micropeak.c b/src/micropeak/ao_micropeak.c
index 6ceec3b5..1d11300e 100644
--- a/src/micropeak/ao_micropeak.c
+++ b/src/micropeak/ao_micropeak.c
@@ -47,6 +47,12 @@ ao_pa_get(void)
#define GROUND_AVG_SHIFT 4
#define GROUND_AVG (1 << GROUND_AVG_SHIFT)
+/* Pressure change (in Pa) to detect boost */
+#define BOOST_DETECT 48 /* 4m at sea level, 4.8m at 2000m */
+
+/* Pressure change (in Pa) to detect landing */
+#define LAND_DETECT 12 /* 1m at sea level, 1.2m at 2000m */
+
static void
ao_compute_height(void)
{
@@ -122,9 +128,9 @@ main(void)
sample_count = 0;
for (;;) {
time += SAMPLE_SLEEP;
- ao_delay_until(time);
if (sample_count == 0)
ao_led_on(AO_LED_BLUE);
+ ao_delay_until(time);
ao_pa_get();
if (sample_count == 0)
ao_led_off(AO_LED_BLUE);
@@ -133,12 +139,11 @@ main(void)
if (pa_diff < 0)
pa_diff = -pa_diff;
- /* about 2 meters at sea level, more if you're higher */
- if (pa_diff > (24 << FILTER_SHIFT))
+ /* Check for a significant pressure change */
+ if (pa_diff > (BOOST_DETECT << FILTER_SHIFT))
break;
if (sample_count < GROUND_AVG * 2) {
- ao_led_off(AO_LED_BLUE);
if (sample_count < GROUND_AVG)
pa_sum += pa;
++sample_count;
@@ -178,8 +183,9 @@ main(void)
if (sample_count == (GROUND_AVG - 1)) {
pa_diff = pa_interval_max - pa_interval_min;
- /* About 1m at sea level */
- if (pa_diff < (12 << FILTER_SHIFT))
+
+ /* Check to see if the pressure is now stable */
+ if (pa_diff < (LAND_DETECT << FILTER_SHIFT))
break;
sample_count = 0;
pa_interval_min = pa_avg;
diff --git a/src/micropeak/ao_pins.h b/src/micropeak/ao_pins.h
index de9fc7f2..67de1a8e 100644
--- a/src/micropeak/ao_pins.h
+++ b/src/micropeak/ao_pins.h
@@ -29,7 +29,7 @@
#define HAS_SERIAL_1 0
#define HAS_TASK 0
#define HAS_MS5607 1
-#define HAS_MS5611 1
+#define HAS_MS5611 0
#define HAS_EEPROM 0
#define HAS_BEEP 0
#define AVR_CLOCK 8000000UL