From: Keith Packard Date: Mon, 7 Mar 2011 16:03:11 +0000 (-0800) Subject: altos: Switch pins around for TeleMini X-Git-Tag: 0.9.3~142 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=ddd7485f05d0cad8f5b3e1ee9b9a4d2812ea1837 altos: Switch pins around for TeleMini TeleMini has fewer sensors and uses P0 for igniters instead of P2. Signed-off-by: Keith Packard --- diff --git a/src/ao_adc.c b/src/ao_adc.c index 9990a1fd..ce935716 100644 --- a/src/ao_adc.c +++ b/src/ao_adc.c @@ -48,6 +48,8 @@ ao_adc_isr(void) __interrupt 1 uint8_t __xdata *a; sequence = (ADCCON2 & ADCCON2_SCH_MASK) >> ADCCON2_SCH_SHIFT; +#if IGNITE_ON_P2 + /* TeleMetrum readings */ #if HAS_ACCEL_REF if (sequence == 2) { a = (uint8_t __xdata *) (&ao_accel_ref[ao_adc_head]); @@ -71,7 +73,47 @@ ao_adc_isr(void) __interrupt 1 else #endif ADCCON3 = ADCCON3_EREF_VDD | ADCCON3_EDIV_512 | sequence; - } else { + } +#endif + +#if IGNITE_ON_P0 + /* TeleMini readings */ + a = (uint8_t __xdata *) (&ao_adc_ring[ao_adc_head].pres); + switch (sequence) { + case 0: + /* pressure */ + a += 0; + sequence = ADCCON3_EREF_VDD | ADCCON3_EDIV_512 | 1; + break; + case 1: + /* drogue sense */ + a += 6; + sequence = ADCCON3_EREF_VDD | ADCCON3_EDIV_512 | 2; + break; + case 2: + /* main sense */ + a += 8; + sequence = ADCCON3_EREF_VDD | ADCCON3_EDIV_512 | 3; + break; + case 3: + /* battery */ + a += 4; + sequence = ADCCON3_EREF_1_25 | ADCCON3_EDIV_512 | ADCCON3_ECH_TEMP; + break; + case ADCCON3_ECH_TEMP: + a += 2; + sequence = 0; + break; + } + a[0] = ADCL; + a[1] = ADCH; + if (sequence) { + /* Start next conversion */ + ADCCON3 = sequence; + } +#endif + + else { /* record this conversion series */ ao_adc_ring[ao_adc_head].tick = ao_time(); ao_adc_head = ao_adc_ring_next(ao_adc_head); @@ -97,6 +139,8 @@ __code struct ao_cmds ao_adc_cmds[] = { void ao_adc_init(void) { +#if IGNITE_ON_P2 + /* TeleMetrum configuration */ ADCCFG = ((1 << 0) | /* acceleration */ (1 << 1) | /* pressure */ #if HAS_EXTERNAL_TEMP @@ -105,6 +149,15 @@ ao_adc_init(void) (1 << 3) | /* battery voltage */ (1 << 4) | /* drogue sense */ (1 << 5)); /* main sense */ +#endif + +#if IGNITE_ON_P0 + /* TeleMini configuration */ + ADCCFG = ((1 << 0) | /* pressure */ + (1 << 1) | /* drogue sense */ + (1 << 2) | /* main sense */ + (1 << 3)); /* battery voltage */ +#endif /* enable interrupts */ ADCIF = 0; diff --git a/src/ao_ignite.c b/src/ao_ignite.c index 798ba9b4..7874ee01 100644 --- a/src/ao_ignite.c +++ b/src/ao_ignite.c @@ -17,11 +17,21 @@ #include "ao.h" +#if IGNITE_ON_P2 #define AO_IGNITER_DROGUE P2_3 #define AO_IGNITER_MAIN P2_4 #define AO_IGNITER_DIR P2DIR #define AO_IGNITER_DROGUE_BIT (1 << 3) #define AO_IGNITER_MAIN_BIT (1 << 4) +#endif + +#if IGNITE_ON_P0 +#define AO_IGNITER_DROGUE P0_5 +#define AO_IGNITER_MAIN P0_4 +#define AO_IGNITER_DIR P0DIR +#define AO_IGNITER_DROGUE_BIT (1 << 5) +#define AO_IGNITER_MAIN_BIT (1 << 4) +#endif /* test these values with real igniters */ #define AO_IGNITER_OPEN 1000 diff --git a/src/ao_pins.h b/src/ao_pins.h index 8e07be86..0de39970 100644 --- a/src/ao_pins.h +++ b/src/ao_pins.h @@ -29,6 +29,8 @@ #define HAS_DBG 1 #define DBG_ON_P1 1 #define DBG_ON_P0 0 + #define IGNITE_ON_P2 1 + #define IGNITE_ON_P0 0 #define PACKET_HAS_MASTER 0 #define PACKET_HAS_SLAVE 1 @@ -50,6 +52,8 @@ #define HAS_DBG 1 #define DBG_ON_P1 1 #define DBG_ON_P0 0 + #define IGNITE_ON_P2 1 + #define IGNITE_ON_P0 0 #define PACKET_HAS_MASTER 0 #define PACKET_HAS_SLAVE 1 @@ -74,6 +78,8 @@ #define HAS_EEPROM 0 #define DBG_ON_P1 1 #define DBG_ON_P0 0 + #define IGNITE_ON_P2 0 + #define IGNITE_ON_P0 0 #define PACKET_HAS_MASTER 1 #define PACKET_HAS_SLAVE 0 #define AO_LED_RED 1 @@ -92,6 +98,8 @@ #define HAS_ADC 1 #define HAS_EEPROM 1 #define HAS_DBG 0 + #define IGNITE_ON_P2 0 + #define IGNITE_ON_P0 1 #define PACKET_HAS_MASTER 0 #define PACKET_HAS_SLAVE 1 @@ -113,6 +121,8 @@ #define HAS_EEPROM 1 #define DBG_ON_P1 0 #define DBG_ON_P0 1 + #define IGNITE_ON_P2 1 + #define IGNITE_ON_P0 0 #define PACKET_HAS_MASTER 0 #define PACKET_HAS_SLAVE 1 #define AO_LED_RED 2 @@ -135,6 +145,8 @@ #define HAS_EEPROM 0 #define DBG_ON_P1 0 #define DBG_ON_P0 1 + #define IGNITE_ON_P2 0 + #define IGNITE_ON_P0 0 #define PACKET_HAS_MASTER 1 #define PACKET_HAS_SLAVE 0 #define AO_LED_RED 2 @@ -154,6 +166,8 @@ #define HAS_EEPROM 0 #define DBG_ON_P1 0 #define DBG_ON_P0 1 + #define IGNITE_ON_P2 0 + #define IGNITE_ON_P0 0 #define PACKET_HAS_MASTER 1 #define PACKET_HAS_SLAVE 0 #define AO_LED_RED 2 @@ -210,6 +224,14 @@ #define SPI_CS_DIR P0DIR #endif +#ifndef IGNITE_ON_P2 +#error Please define IGNITE_ON_P2 +#endif + +#ifndef IGNITE_ON_P0 +#error Please define IGNITE_ON_P0 +#endif + #ifndef HAS_SERIAL_1 #error Please define HAS_SERIAL_1 #endif