]> www.fi.muni.cz Git - tinyboard.git/commitdiff
adc.c: for one pwmled only
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Mon, 29 Apr 2013 16:12:30 +0000 (18:12 +0200)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Mon, 29 Apr 2013 16:12:30 +0000 (18:12 +0200)
projects/step-up/adc.c

index 6309c41abae65ed0604bdbfa452051f77be35915..d7679d30b09cff20d7038629cca4d334b8a04b06 100644 (file)
@@ -4,32 +4,13 @@
 
 #include "lights.h"
 
-#define BATTERY_ADC (N_PWMLEDS + 0)
-#define BUTTON_ADC  (N_PWMLEDS + 1)
-#define ZERO_ADC    (N_PWMLEDS + 2)
+#define ZERO_ADC    1
 
 //#define NUM_ADCS     ZERO_ADC
 #define NUM_ADCS       1
 
-struct {
-       unsigned char read_zero_log : 2;
-       unsigned char read_drop_log : 2;
-       unsigned char read_keep_log : 4;
-} adc_params[NUM_ADCS] = {
-       { 0, 1, PWMLED_ADC_SHIFT },     // pwmled 1
-#if 0
-       { 0, 1, PWMLED_ADC_SHIFT },     // pwmled 2
-       { 0, 1, PWMLED_ADC_SHIFT },     // pwmled 3
-       { 0, 1, AMBIENT_ADC_SHIFT },    // ambient
-       { 0, 1, 0 },                    // battery
-       { 0, 1, 0 },                    // gain20
-       { 0, 1, 0 },                    // buttons
-#endif
-};
-
 volatile static unsigned char current_adc, current_slow_adc;
-static uint16_t adc_sum, zero_count, drop_count, read_count, n_reads_log;
-
+static uint16_t adc_sum, read_zero, drop_count, read_count, n_reads_log;
 
 static void setup_mux(unsigned char n)
 {
@@ -72,23 +53,14 @@ void start_next_adc()
 #endif
 
        adc_sum = 0;
-       // we use the last iteration of zero_count to set up the MUX
-       // to its final destination, hence the "1 +" below:
-       if (adc_params[current_adc].read_zero_log)
-               zero_count = 1 + (1 << (adc_params[current_adc].read_zero_log-1));
-       else
-               zero_count = 1;
-
-       if (adc_params[current_adc].read_drop_log)
-               drop_count = 1 << (adc_params[current_adc].read_drop_log - 1);
-       else
-               drop_count = 0;
+       read_zero = 0;
+       drop_count = 1;
 
-       read_count = 1 << adc_params[current_adc].read_keep_log;
-       n_reads_log = adc_params[current_adc].read_keep_log;
+       read_count = 1 << PWMLED_ADC_SHIFT;
+       n_reads_log = PWMLED_ADC_SHIFT;
 
        // set up mux, start one-shot conversion
-       if (zero_count > 1)
+       if (read_zero)
                setup_mux(ZERO_ADC);
        else
                setup_mux(current_adc);
@@ -96,6 +68,7 @@ void start_next_adc()
        ADCSRA |= _BV(ADSC);
 }
 
+#if 0
 void timer_start_slow_adcs()
 {
        if (current_slow_adc > N_PWMLEDS) { // Don't start if in progress
@@ -105,6 +78,7 @@ void timer_start_slow_adcs()
                // TODO: kick the watchdog here
        }
 }
+#endif
 
 /*
  * Single synchronous ADC conversion.
@@ -128,7 +102,6 @@ static uint16_t read_adc_sync()
 
 void init_adc()
 {
-       unsigned char i;
        current_slow_adc = NUM_ADCS;
        current_adc = 0;
 
@@ -170,16 +143,11 @@ static void adc1_gain20_adc(uint16_t adcsum)
 ISR(ADC_vect) { // IRQ handler
        uint16_t adcval = ADCW;
 
-       if (zero_count) {
-               if (zero_count > 1) {
-                       ADCSRA |= _BV(ADSC);
-                       zero_count--;
-                       return;
-               } else {
-                       setup_mux(current_adc);
-                       zero_count = 0;
-                       /* fall through */
-               }
+       if (read_zero) {
+               setup_mux(current_adc);
+               read_zero = 0;
+               ADCSRA |= _BV(ADSC); // drop this one, start the next
+               return;
        }
 
        if (drop_count) {
@@ -189,7 +157,7 @@ ISR(ADC_vect) { // IRQ handler
        }
 
        if (read_count) {
-               ADCSRA |= _BV(ADSC);
+               ADCSRA |= _BV(ADSC); // immediately start the next conversion
                adc_sum += adcval;
                read_count--;
                return;