altos/telelco-v2.0: Display local batt voltage at startup
authorKeith Packard <keithp@keithp.com>
Mon, 28 May 2018 23:10:51 +0000 (16:10 -0700)
committerKeith Packard <keithp@keithp.com>
Mon, 28 May 2018 23:10:51 +0000 (16:10 -0700)
Show the battery voltage for a second at startup.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/telelco-v2.0/Makefile
src/telelco-v2.0/ao_lco_v2.c
src/telelco-v2.0/ao_pins.h
src/telelco-v2.0/ao_telelco.c

index 75c66abf8974c97718dce818bee5f43c44589d6b..4871993d3e7b8e3a63ab837a0ef83d80bc7f014e 100644 (file)
@@ -50,6 +50,8 @@ ALTOS_SRC = \
        ao_spi_stm.c \
        ao_beep_stm.c \
        ao_eeprom_stm.c \
+       ao_adc_single_stm.c \
+       ao_convert_volt.c \
        ao_fast_timer.c \
        ao_lcd_stm.c \
        ao_usb_stm.c \
index 45895908c7ac5dde6767962fcc9740415152d6ae..140955da859ff4ec88b47f07c0f221344f68dac3 100644 (file)
@@ -23,6 +23,7 @@
 #include <ao_quadrature.h>
 #include <ao_lco_func.h>
 #include <ao_radio_cmac.h>
+#include <ao_adc_single.h>
 
 #define DEBUG  1
 
@@ -625,6 +626,18 @@ ao_lco_arm_warn(void)
        }
 }
 
+static void
+ao_lco_batt_voltage(void)
+{
+       struct ao_adc   packet;
+       int16_t         decivolt;
+
+       ao_adc_single_get(&packet);
+       decivolt = ao_battery_decivolt(packet.v_batt);
+       ao_lco_set_voltage(decivolt);
+       ao_delay(AO_MS_TO_TICKS(1000));
+}
+
 static struct ao_task ao_lco_input_task;
 static struct ao_task ao_lco_monitor_task;
 static struct ao_task ao_lco_arm_warn_task;
@@ -636,6 +649,7 @@ ao_lco_monitor(void)
        uint16_t                delay;
        uint8_t                 box;
 
+       ao_lco_batt_voltage();
        ao_lco_search();
        ao_add_task(&ao_lco_input_task, ao_lco_input, "lco input");
        ao_add_task(&ao_lco_arm_warn_task, ao_lco_arm_warn, "lco arm warn");
index 73ce9d6c80237517c1f7d12c88faa605f62e475e..4311bac87178625eeddbbf0d30ad9a46551fecd7 100644 (file)
 #define AO_BUTTON_8_PORT       &stm_gpioe
 #define AO_BUTTON_8            13
 
+/* ADC */
+
+struct ao_adc {
+       int16_t         v_batt;
+};
+
+#define AO_ADC_DUMP(p) \
+       printf("batt: %5d\n", p.v_batt)
+
+#define HAS_ADC_TEMP           0
+#define HAS_BATTERY_REPORT     1
+
+#define AO_ADC_V_BATT          0
+#define AO_ADC_V_BATT_PORT     (&stm_gpioa)
+#define AO_ADC_V_BATT_PIN      0
+
+#define AO_ADC_RCC_AHBENR      (1 << STM_RCC_AHBENR_GPIOAEN)
+
+#define AO_ADC_PIN0_PORT       AO_ADC_V_BATT_PORT
+#define AO_ADC_PIN0_PIN                AO_ADC_V_BATT_PIN
+
+#define AO_ADC_SQ1             AO_ADC_V_BATT
+
+#define AO_NUM_ADC             1
+
+/*
+ * Voltage divider on ADC battery sampler
+ */
+#define AO_BATTERY_DIV_PLUS    15      /* 15k */
+#define AO_BATTERY_DIV_MINUS   27      /* 27k */
+
+/*
+ * ADC reference in decivolts
+ */
+#define AO_ADC_REFERENCE_DV    33
+
 #endif /* _AO_PINS_H_ */
index 7b04d386f8985d6521f9251610322bc66a1a3e9c..9693c6576cf712ace1791a50f50be69f89ebadf5 100644 (file)
@@ -30,6 +30,7 @@
 #include <ao_lco_cmd.h>
 #include <ao_radio_cmac_cmd.h>
 #include <ao_eeprom.h>
+#include <ao_adc_single.h>
 
 int
 main(void)
@@ -45,6 +46,7 @@ main(void)
        ao_spi_init();
        ao_dma_init();
        ao_exti_init();
+       ao_adc_single_init();
 
        ao_beep_init();
        ao_cmd_init();