altos: Report battery voltage instead of S at startup
authorKeith Packard <keithp@keithp.com>
Sat, 5 Apr 2014 07:18:57 +0000 (00:18 -0700)
committerKeith Packard <keithp@keithp.com>
Sat, 5 Apr 2014 07:22:31 +0000 (00:22 -0700)
This works on everything with a beeper except TeleMetrum v1.0 which
just doesn't have enough flash space for the code.

Signed-off-by: Keith Packard <keithp@keithp.com>
17 files changed:
src/cc1111/ao_arch.h
src/cc1111/ao_pins.h
src/easymega-v1.0/ao_pins.h
src/easymini-v1.0/Makefile
src/easymini-v1.0/ao_pins.h
src/kernel/ao_convert_volt.c
src/kernel/ao_report.c
src/lpc/ao_arch.h
src/teleballoon-v1.1/ao_pins.h
src/teleballoon-v2.0/ao_pins.h
src/telemega-v0.1/ao_pins.h
src/telemega-v1.0/ao_pins.h
src/telemetrum-v1.1/Makefile
src/telemetrum-v1.2/Makefile
src/telemetrum-v2.0/ao_pins.h
src/telemini-v2.0/Makefile
src/telemini-v2.0/ao_pins.h

index 34235b085421d3c49d2d86852d57f0ff39b335eb..fcac331be55363d3d9a6a4fffb17432acc546283 100644 (file)
@@ -326,4 +326,6 @@ void
 ao_p0_isr(void) __interrupt(13);
 #endif
 
 ao_p0_isr(void) __interrupt(13);
 #endif
 
+#define AO_ADC_MAX     32767
+
 #endif /* _AO_ARCH_H_ */
 #endif /* _AO_ARCH_H_ */
index 2f0e2884826107ba51ab49166ad3789827ca7e7c..5b1586e08b8073d70526911125a7b7b2a3795e56 100644 (file)
@@ -58,6 +58,7 @@
        #define HAS_FLIGHT              1
        #define HAS_USB                 1
        #define HAS_BEEP                1
        #define HAS_FLIGHT              1
        #define HAS_USB                 1
        #define HAS_BEEP                1
+       #define HAS_BATTERY_REPORT      1
        #define HAS_GPS                 1
        #define HAS_SERIAL_1            1
        #define HAS_ADC                 1
        #define HAS_GPS                 1
        #define HAS_SERIAL_1            1
        #define HAS_ADC                 1
@@ -94,6 +95,7 @@
        #define HAS_FLIGHT              1
        #define HAS_USB                 1
        #define HAS_BEEP                1
        #define HAS_FLIGHT              1
        #define HAS_USB                 1
        #define HAS_BEEP                1
+       #define HAS_BATTERY_REPORT      1
        #define HAS_GPS                 1
        #define HAS_SERIAL_1            1
        #define HAS_ADC                 1
        #define HAS_GPS                 1
        #define HAS_SERIAL_1            1
        #define HAS_ADC                 1
@@ -572,4 +574,21 @@ struct ao_adc {
 #endif
 };
 
 #endif
 };
 
+/*
+ * Voltage divider on ADC battery sampler
+ */
+#define AO_BATTERY_DIV_PLUS    5       /* 5k */
+#define AO_BATTERY_DIV_MINUS   10      /* 10k */
+
+/*
+ * Voltage divider on ADC igniter samplers
+ */
+#define AO_IGNITE_DIV_PLUS     100     /* 100k */
+#define AO_IGNITE_DIV_MINUS    27      /* 27k */
+
+/*
+ * ADC reference in decivolts
+ */
+#define AO_ADC_REFERENCE_DV    33
+
 #endif /* _AO_PINS_H_ */
 #endif /* _AO_PINS_H_ */
index 0b6c0f0700813d1dfe5eab91ca6469d51afce89e..fb6e05b1d45659da76675e42e7b78eae78030d15 100644 (file)
@@ -66,6 +66,7 @@
 #define USE_STORAGE_CONFIG     0
 #define HAS_USB                        1
 #define HAS_BEEP               1
 #define USE_STORAGE_CONFIG     0
 #define HAS_USB                        1
 #define HAS_BEEP               1
+#define HAS_BATTERY_REPORT     1
 #define HAS_RADIO              0
 #define HAS_TELEMETRY          0
 #define HAS_APRS               0
 #define HAS_RADIO              0
 #define HAS_TELEMETRY          0
 #define HAS_APRS               0
index 7dae26922568baa65266bd276d99ae21d1a19af2..654be22bffa539378fcb0be747b3e544ec1133f1 100644 (file)
@@ -32,6 +32,7 @@ ALTOS_SRC = \
        ao_sample.c \
        ao_data.c \
        ao_convert_pa.c \
        ao_sample.c \
        ao_data.c \
        ao_convert_pa.c \
+       ao_convert_volt.c \
        ao_task.c \
        ao_log.c \
        ao_log_mini.c \
        ao_task.c \
        ao_log.c \
        ao_log_mini.c \
index 6757047f44ec734fdda09b410ae164da334aacf8..0edde5a2315d755bd89176e599052c89b783889c 100644 (file)
@@ -15,7 +15,8 @@
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
-#define HAS_BEEP       1
+#define HAS_BEEP               1
+#define HAS_BATTERY_REPORT     1
 
 #define AO_STACK_SIZE  384
 
 
 #define AO_STACK_SIZE  384
 
@@ -133,3 +134,20 @@ struct ao_adc {
 #define AO_ADC_DUMP(p) \
        printf("tick: %5u apogee: %5d main: %5d batt: %5d\n", \
               (p)->tick, (p)->adc.sense_a, (p)->adc.sense_m, (p)->adc.v_batt)
 #define AO_ADC_DUMP(p) \
        printf("tick: %5u apogee: %5d main: %5d batt: %5d\n", \
               (p)->tick, (p)->adc.sense_a, (p)->adc.sense_m, (p)->adc.v_batt)
+
+/*
+ * Voltage divider on ADC battery sampler
+ */
+#define AO_BATTERY_DIV_PLUS    100     /* 100k */
+#define AO_BATTERY_DIV_MINUS   27      /* 27k */
+
+/*
+ * Voltage divider on ADC igniter samplers
+ */
+#define AO_IGNITE_DIV_PLUS     100     /* 100k */
+#define AO_IGNITE_DIV_MINUS    27      /* 27k */
+
+/*
+ * ADC reference in decivolts
+ */
+#define AO_ADC_REFERENCE_DV    33
index 8556d423c453545bd75def9e6192e31e91dbdf70..7afc34bfab2bf45ebc9efa3b5a446eff9f82b92c 100644 (file)
 
 #include "ao.h"
 
 
 #include "ao.h"
 
-#define scale(v,p,m)   ((int32_t) (v) * (AO_ADC_REFERENCE_DV * ((p) + (m))) / (AO_ADC_MAX * (m)))
+#define MUL(p,m)       ((int32_t) AO_ADC_REFERENCE_DV * ((p) + (m)))
+#define ADD(p,m)       (MUL(p,m)/2)
+#define DIV(p,m)       ((int32_t) AO_ADC_MAX * (m))
+#define scale(v,p,m)   (((int32_t) (v) * MUL(p,m) + ADD(p,m)) / DIV(p,m))
 
 
+#if HAS_APRS || HAS_BATTERY_REPORT
 int16_t
 ao_battery_decivolt(int16_t adc)
 {
        return scale(adc, AO_BATTERY_DIV_PLUS, AO_BATTERY_DIV_MINUS);
 }
 int16_t
 ao_battery_decivolt(int16_t adc)
 {
        return scale(adc, AO_BATTERY_DIV_PLUS, AO_BATTERY_DIV_MINUS);
 }
+#endif
 
 
+#if HAS_APRS
 int16_t
 ao_ignite_decivolt(int16_t adc)
 {
        return scale(adc, AO_IGNITE_DIV_PLUS, AO_IGNITE_DIV_MINUS);
 }
 int16_t
 ao_ignite_decivolt(int16_t adc)
 {
        return scale(adc, AO_IGNITE_DIV_PLUS, AO_IGNITE_DIV_MINUS);
 }
-
+#endif
index 1104cd82532ff8173334591ee06c534b968e1f42..1a0e9e166f959a576378c7eb82ced20e159e4319 100644 (file)
@@ -87,19 +87,18 @@ ao_report_digit(uint8_t digit) __reentrant
 }
 
 static void
 }
 
 static void
-ao_report_altitude(void)
+ao_report_number(int16_t n)
 {
 {
-       __pdata int16_t agl = ao_max_height;
        __xdata uint8_t digits[10];
        __pdata uint8_t ndigits, i;
 
        __xdata uint8_t digits[10];
        __pdata uint8_t ndigits, i;
 
-       if (agl < 0)
-               agl = 0;
+       if (n < 0)
+               n = 0;
        ndigits = 0;
        do {
        ndigits = 0;
        do {
-               digits[ndigits++] = agl % 10;
-               agl /= 10;
-       } while (agl);
+               digits[ndigits++] = n % 10;
+               n /= 10;
+       } while (n);
 
        i = ndigits;
        do
 
        i = ndigits;
        do
@@ -107,6 +106,27 @@ ao_report_altitude(void)
        while (i != 0);
 }
 
        while (i != 0);
 }
 
+static void
+ao_report_altitude(void)
+{
+       ao_report_number(ao_max_height);
+}
+
+#if HAS_BATTERY_REPORT
+static void
+ao_report_battery(void)
+{
+       __xdata struct ao_data packet;
+       for (;;) {
+               ao_data_get(&packet);
+               if (packet.adc.v_batt != 0)
+                       break;
+               ao_sleep(DATA_TO_XDATA(&ao_sample_data));
+       }
+       ao_report_number(ao_battery_decivolt(packet.adc.v_batt));
+}
+#endif
+
 #if HAS_IGNITE_REPORT
 static uint8_t
 ao_report_igniter_ready(enum ao_igniter igniter)
 #if HAS_IGNITE_REPORT
 static uint8_t
 ao_report_igniter_ready(enum ao_igniter igniter)
@@ -163,7 +183,12 @@ ao_report(void)
 {
        ao_report_state = ao_flight_state;
        for(;;) {
 {
        ao_report_state = ao_flight_state;
        for(;;) {
-               ao_report_beep();
+#if HAS_BATTERY_REPORT
+               if (ao_flight_state == ao_flight_startup)
+                       ao_report_battery();
+               else
+#endif
+                       ao_report_beep();
                if (ao_flight_state == ao_flight_landed) {
                        ao_report_altitude();
 #if HAS_FLIGHT
                if (ao_flight_state == ao_flight_landed) {
                        ao_report_altitude();
 #if HAS_FLIGHT
index 9dcfadc03031e162d699d9a4a6ce11d4b7b01ff3..dd0debd449925fab5da90df2fbe5d634adc67f7f 100644 (file)
@@ -143,4 +143,8 @@ ao_serial_init(void);
 #define AO_BOOT_LOADER_BASE            ((uint32_t *) 0x00000000)
 #define HAS_BOOT_LOADER                        1
 
 #define AO_BOOT_LOADER_BASE            ((uint32_t *) 0x00000000)
 #define HAS_BOOT_LOADER                        1
 
+/* ADC definitions */
+
+#define AO_ADC_MAX     32767
+
 #endif /* _AO_ARCH_H_ */
 #endif /* _AO_ARCH_H_ */
index 7ba48c96e0bd1d3648d1b6c24e2a68ebfc333ff2..4c23ca88f1bb6c3ab005f11a1128dd435235d8ca 100644 (file)
@@ -28,6 +28,7 @@
        #define HAS_FLIGHT              1
        #define HAS_USB                 1
        #define HAS_BEEP                1
        #define HAS_FLIGHT              1
        #define HAS_USB                 1
        #define HAS_BEEP                1
+       #define HAS_BATTERY_REPORT      1
        #define HAS_GPS                 1
        #define HAS_SERIAL_1            1
        #define HAS_ADC                 1
        #define HAS_GPS                 1
        #define HAS_SERIAL_1            1
        #define HAS_ADC                 1
index 22551d9e2d03b17d6e7806178afececd43a999bf..f25155212ff150dd0d3eb8e716e500ecdf55010a 100644 (file)
@@ -66,6 +66,7 @@
 #define USE_STORAGE_CONFIG     0
 #define HAS_USB                        1
 #define HAS_BEEP               1
 #define USE_STORAGE_CONFIG     0
 #define HAS_USB                        1
 #define HAS_BEEP               1
+#define HAS_BATTERY_REPORT     1
 #define BEEPER_CHANNEL         4
 #define HAS_RADIO              1
 #define HAS_TELEMETRY          1
 #define BEEPER_CHANNEL         4
 #define HAS_RADIO              1
 #define HAS_TELEMETRY          1
index db397c669927630357a2103837df52f9627f84ba..a63c76a003795879e67d7f69c8a87fd59f5b43bd 100644 (file)
@@ -71,6 +71,7 @@
 #define USE_STORAGE_CONFIG     0
 #define HAS_USB                        1
 #define HAS_BEEP               1
 #define USE_STORAGE_CONFIG     0
 #define HAS_USB                        1
 #define HAS_BEEP               1
+#define HAS_BATTERY_REPORT     1
 #define HAS_RADIO              1
 #define HAS_TELEMETRY          1
 #define HAS_APRS               1
 #define HAS_RADIO              1
 #define HAS_TELEMETRY          1
 #define HAS_APRS               1
index fe97c684114f947cc6fab805298cb4b223013d17..7f0b1f948de4a544614dd6d55da4034f78186aec 100644 (file)
@@ -71,6 +71,7 @@
 #define USE_STORAGE_CONFIG     0
 #define HAS_USB                        1
 #define HAS_BEEP               1
 #define USE_STORAGE_CONFIG     0
 #define HAS_USB                        1
 #define HAS_BEEP               1
+#define HAS_BATTERY_REPORT     1
 #define HAS_RADIO              1
 #define HAS_TELEMETRY          1
 #define HAS_APRS               1
 #define HAS_RADIO              1
 #define HAS_TELEMETRY          1
 #define HAS_APRS               1
index e44be7f9ae5c9bfde8b180a857a28fd42ecaabf4..61e9273b118399b23afd1a1c118157584d14b904 100644 (file)
@@ -12,6 +12,7 @@ TM_SRC = \
        ao_companion.c \
        ao_gps_skytraq.c \
        ao_gps_show.c \
        ao_companion.c \
        ao_gps_skytraq.c \
        ao_gps_show.c \
+       ao_convert_volt.c \
        ao_m25.c
 
 include ../product/Makefile.telemetrum
        ao_m25.c
 
 include ../product/Makefile.telemetrum
index f2285fbed52b0c3c5f21f39fd9e13133715dd3da..38ba6d49c59f9dd71addf01522c078f254b1d800 100644 (file)
@@ -12,6 +12,7 @@ TM_SRC = \
        ao_companion.c \
        ao_gps_skytraq.c \
        ao_gps_show.c \
        ao_companion.c \
        ao_gps_skytraq.c \
        ao_gps_show.c \
+       ao_convert_volt.c \
        ao_m25.c
 
 include ../product/Makefile.telemetrum
        ao_m25.c
 
 include ../product/Makefile.telemetrum
index 1b5cedc743607418fbef6e5a6d2d6ef60f895f8e..2ccac628658e848e319cf2a3b305fce7df73f9bc 100644 (file)
@@ -66,6 +66,7 @@
 #define USE_STORAGE_CONFIG     0
 #define HAS_USB                        1
 #define HAS_BEEP               1
 #define USE_STORAGE_CONFIG     0
 #define HAS_USB                        1
 #define HAS_BEEP               1
+#define HAS_BATTERY_REPORT     1
 #define BEEPER_CHANNEL         4
 #define HAS_RADIO              1
 #define HAS_TELEMETRY          1
 #define BEEPER_CHANNEL         4
 #define HAS_RADIO              1
 #define HAS_TELEMETRY          1
index 606b4f3bee7d98d64d286460f53af2ac401256b9..34f35cd9b9d54f543525eea646178bd7b2fabb9a 100644 (file)
@@ -59,6 +59,7 @@ CC1111_SRC = \
        ao_spi.c \
        ao_usb.c \
        ao_convert_pa.c \
        ao_spi.c \
        ao_usb.c \
        ao_convert_pa.c \
+       ao_convert_volt.c \
        ao_beep.c \
        ao_timer.c \
        ao_exti.c \
        ao_beep.c \
        ao_timer.c \
        ao_exti.c \
index c4681ee28a90eb9049f3bfd38dfe7282435de8cd..dc18aff7df94e80b319ae82dacfe066e18c31958 100644 (file)
@@ -24,6 +24,7 @@
 #define HAS_USB                        1
 #define USB_FORCE_FLIGHT_IDLE  1
 #define HAS_BEEP               1
 #define HAS_USB                        1
 #define USB_FORCE_FLIGHT_IDLE  1
 #define HAS_BEEP               1
+#define HAS_BATTERY_REPORT     1
 #define HAS_GPS                        0
 #define HAS_SERIAL_1           0
 #define HAS_EEPROM             1
 #define HAS_GPS                        0
 #define HAS_SERIAL_1           0
 #define HAS_EEPROM             1
@@ -158,4 +159,21 @@ struct ao_adc {
                ao_data_ring[ao_data_head].ms5607_raw.temp = ao_ms5607_current.temp; \
        } while (0)
 
                ao_data_ring[ao_data_head].ms5607_raw.temp = ao_ms5607_current.temp; \
        } while (0)
 
+/*
+ * Voltage divider on ADC battery sampler
+ */
+#define AO_BATTERY_DIV_PLUS    100     /* 100k */
+#define AO_BATTERY_DIV_MINUS   27      /* 27k */
+
+/*
+ * Voltage divider on ADC igniter samplers
+ */
+#define AO_IGNITE_DIV_PLUS     100     /* 100k */
+#define AO_IGNITE_DIV_MINUS    27      /* 27k */
+
+/*
+ * ADC reference in decivolts
+ */
+#define AO_ADC_REFERENCE_DV    33
+
 #endif /* _AO_PINS_H_ */
 #endif /* _AO_PINS_H_ */