diff options
-rw-r--r-- | src/avr/ao_adc_avr.c | 5 | ||||
-rw-r--r-- | src/avr/ao_pwmin.h | 1 | ||||
-rw-r--r-- | src/core/ao_data.h | 10 | ||||
-rw-r--r-- | src/core/ao_telemetry.c | 6 | ||||
-rw-r--r-- | src/megametrum-v0.1/ao_pins.h | 7 |
5 files changed, 25 insertions, 4 deletions
diff --git a/src/avr/ao_adc_avr.c b/src/avr/ao_adc_avr.c index 3a262977..4896b015 100644 --- a/src/avr/ao_adc_avr.c +++ b/src/avr/ao_adc_avr.c @@ -16,6 +16,7 @@ */ #include "ao.h" +#include "ao_pwmin.h" volatile __xdata struct ao_data ao_data_ring[AO_DATA_RING]; volatile __data uint8_t ao_data_head; @@ -93,9 +94,11 @@ ISR(ADC_vect) value = ADCL; value |= (ADCH << 8); ao_data_ring[ao_data_head].adc.adc[ao_adc_channel] = value; - if (++ao_adc_channel < NUM_ADC) + if (++ao_adc_channel < NUM_ADC - 1) ao_adc_start(); else { + /* steal last adc channel for pwm input */ + ao_data_ring[ao_data_head].adc.adc[ao_adc_channel] = ao_icp3_count; ADCSRA = ADCSRA_INIT; ao_data_ring[ao_data_head].tick = ao_time(); ao_data_head = ao_data_ring_next(ao_data_head); diff --git a/src/avr/ao_pwmin.h b/src/avr/ao_pwmin.h index bbab4ddc..14741201 100644 --- a/src/avr/ao_pwmin.h +++ b/src/avr/ao_pwmin.h @@ -16,3 +16,4 @@ */ void ao_pwmin_init(void); +extern volatile __data uint16_t ao_icp3_count; diff --git a/src/core/ao_data.h b/src/core/ao_data.h index fdc49ca2..3944edac 100644 --- a/src/core/ao_data.h +++ b/src/core/ao_data.h @@ -91,9 +91,13 @@ typedef int16_t alt_t; typedef int16_t accel_t; /* MPU6000 is hooked up so that positive y is positive acceleration */ -#define ao_data_accel(packet) ((packet)->mpu6000.accel_y) -#define ao_data_accel_cook(packet) (-(packet)->mpu6000.accel_y) -#define ao_data_set_accel(packet, accel) ((packet)->mpu6000.accel_y = (accel)) +#ifndef ao_accel_axis +#define ao_accel_axis accel_y +#endif + +#define ao_data_accel(packet) ((packet)->mpu6000.ao_accel_axis) +#define ao_data_accel_cook(packet) (-(packet)->mpu6000.ao_accel_axis) +#define ao_data_set_accel(packet, accel) ((packet)->mpu6000.ao_accel_axis = (accel)) #define ao_data_accel_invert(a) (-(a)) #else /* HAS_MPU6000 && !HAS_HIGHG_ACCEL */ diff --git a/src/core/ao_telemetry.c b/src/core/ao_telemetry.c index 52ac9489..5a1b3d1d 100644 --- a/src/core/ao_telemetry.c +++ b/src/core/ao_telemetry.c @@ -283,6 +283,12 @@ ao_telemetry(void) while (!ao_flight_number) ao_sleep(&ao_flight_number); +#if RADIO_DELAY_AFTER_BOOST + while (ao_flight_state < ao_flight_boost) + ao_sleep(&ao_flight_state); + ao_delay(AO_SEC_TO_TICKS(RADIO_DELAY_AFTER_BOOST)); +#endif + telemetry.generic.serial = ao_serial_number; for (;;) { while (ao_telemetry_interval == 0) diff --git a/src/megametrum-v0.1/ao_pins.h b/src/megametrum-v0.1/ao_pins.h index 6b0f9832..47091b62 100644 --- a/src/megametrum-v0.1/ao_pins.h +++ b/src/megametrum-v0.1/ao_pins.h @@ -331,4 +331,11 @@ struct ao_adc { #define AO_PROFILE 0 #endif +/* + * Custom changes for ULA payload + */ + +#define ao_accel_axis accel_z +#define RADIO_DELAY_AFTER_BOOST 40 + #endif /* _AO_PINS_H_ */ |