summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/avr/ao_adc_avr.c5
-rw-r--r--src/avr/ao_pwmin.h1
-rw-r--r--src/core/ao_data.h10
-rw-r--r--src/core/ao_telemetry.c6
-rw-r--r--src/megametrum-v0.1/ao_pins.h7
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_ */