altos/micropeak: Switch to MS5607 sensor. Require 4m for boost. Elide dead code
authorKeith Packard <keithp@keithp.com>
Mon, 29 Oct 2012 18:47:17 +0000 (11:47 -0700)
committerKeith Packard <keithp@keithp.com>
Mon, 29 Oct 2012 18:47:17 +0000 (11:47 -0700)
Signed-off-by: Keith Packard <keithp@keithp.com>
src/micropeak/Makefile
src/micropeak/ao_micropeak.c
src/micropeak/ao_pins.h

index e0b2b80df2ede4c6772d31d701641044920ba8c9..8cf608bbdd2567eadd89e0f672fa02ed4da25e45 100644 (file)
@@ -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 \
index 6ceec3b5164aa97e559a83fe0bfac31675435007..1d11300e887040d8d834d124ccabf15f7df56d7b 100644 (file)
@@ -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;
index de9fc7f29c2b3848e7d56afb333b7a9a4e3d9f00..67de1a8e8667cfd09fe355dfaced85908b592c97 100644 (file)
@@ -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