From 5d0ab95bb20a304693c1e0ec6c7900b7090d03e2 Mon Sep 17 00:00:00 2001 From: "Jan \"Yenya\" Kasprzak" Date: Mon, 3 Jun 2013 14:11:23 +0200 Subject: [PATCH] adc.c: reorder ADC channels - those which need to be measured more frequently, put at the beginning. --- firmware/adc.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/firmware/adc.c b/firmware/adc.c index ef71477..c6b113d 100644 --- a/firmware/adc.c +++ b/firmware/adc.c @@ -3,11 +3,12 @@ #include "lights.h" -#define AMBIENT_ADC N_PWMLEDS -#define BATTERY_ADC (N_PWMLEDS + 1) -#define ADC1_GAIN20 (N_PWMLEDS + 2) -#define BUTTON_ADC (N_PWMLEDS + 3) -#define ZERO_ADC (N_PWMLEDS + 4) +// pwmleds are measured continuously (when active) +#define AMBIENT_ADC N_PWMLEDS // measured every jiffy (16 Hz) +#define BUTTON_ADC (N_PWMLEDS + 1) // measured every jiffy (16 Hz) +#define BATTERY_ADC (N_PWMLEDS + 2) // once per second +#define ADC1_GAIN20 (N_PWMLEDS + 3) // once per second +#define ZERO_ADC (N_PWMLEDS + 4) // must be last #define NUM_ADCS ZERO_ADC @@ -20,9 +21,9 @@ struct { { 0, 1, PWMLED_ADC_SHIFT }, // pwmled 2 { 0, 1, PWMLED_ADC_SHIFT }, // pwmled 3 { 0, 1, AMBIENT_ADC_SHIFT }, // ambient + { 0, 1, 0 }, // buttons { 0, 1, 0 }, // battery { 0, 1, 0 }, // gain20 - { 0, 1, 0 }, // buttons }; volatile static unsigned char current_adc, current_slow_adc; @@ -47,16 +48,16 @@ static void setup_mux(unsigned char n) case AMBIENT_ADC: // ambient light: 1.1V, ADC5 (PA6), single-ended ADMUX = _BV(REFS1) | _BV(MUX2) | _BV(MUX0); break; + case BUTTON_ADC: // buttons: 1.1V, ADC3, single-ended + PORTA |= _BV(PA3); // +5V to the voltage splitter + ADMUX = _BV(REFS1) | _BV(MUX1) | _BV(MUX0); + break; case BATTERY_ADC: // batt voltage: 1.1V, ADC6 (PA7), single-ended ADMUX = _BV(REFS1) | _BV(MUX2) | _BV(MUX1); break; case ADC1_GAIN20: // gain stage offset: 1.1V, ADC1,1, gain 20 ADMUX = _BV(REFS1) | _BV(MUX3) | _BV(MUX2) | _BV(MUX0); break; - case BUTTON_ADC: // buttons: 1.1V, ADC3, single-ended - PORTA |= _BV(PA3); // +5V to the voltage splitter - ADMUX = _BV(REFS1) | _BV(MUX1) | _BV(MUX0); - break; case ZERO_ADC: // zero: 1.1V, ADC1 (PA1), single-ended ADMUX = _BV(REFS1) | _BV(MUX0); break; @@ -240,12 +241,12 @@ ISR(ADC_vect) { // IRQ handler case AMBIENT_ADC: ambient_adc(adc_sum); break; - case BATTERY_ADC: - battery_adc(adc_sum); - break; case BUTTON_ADC: button_adc(adc_sum); break; + case BATTERY_ADC: + battery_adc(adc_sum); + break; case ADC1_GAIN20: adc1_gain20_adc(adcval); break; -- 2.39.3