/* ADC numbering: PWM LEDs first, then ambient light sensor, battery sensor */
static unsigned char adc_mux[] = { // pwmleds should be first
- // 0: pwmled 0: 1.1V, ADC3 (PA4), single-ended
- _BV(REFS1) | _BV(MUX1) | _BV(MUX0),
- // 1: pwmled 1: 1.1V, ADC0,1 (PA0,1), gain 1 or 8
- _BV(REFS1) | _BV(MUX3) | _BV(MUX2),
- // 2: pwmled 2: 1.1V, ADC2,1 (PA2,1), gain 20 or 32
+ // 0: pwmled 1: 1.1V, ADC0,1 (PA0,1), gain 20
+ _BV(REFS1) | _BV(MUX3) | _BV(MUX1) | _BV(MUX0),
+ // 1: pwmled 2: 1.1V, ADC2,1 (PA2,1), gain 20
_BV(REFS1) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1),
- // 3: ambient light: 1.1V, ADC4 (PA5), single-ended
- _BV(REFS1) | _BV(MUX2),
- // 4: batt voltage: 1.1V, ADC5 (PA6), single-ended
+ // 2: pwmled 3: 1.1V, ADC4 (PA5), single-ended
+ // _BV(REFS1) | _BV(MUX2),
+ // 2: for testing the same as 1
+ _BV(REFS1) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1),
+ // 3: ambient light: 1.1V, ADC5 (PA6), single-ended
_BV(REFS1) | _BV(MUX2) | _BV(MUX0),
+ // 4: batt voltage: 1.1V, ADC6 (PA7), single-ended
+ _BV(REFS1) | _BV(MUX2) | _BV(MUX1),
};
#define AMBIENT_ADC N_PWMLEDS
// all ADCs have been handled
current_adc = LAST_ADC;
+ // TODO: kick the watchdog here.
return;
found:
- // ADCSRB |= _BV(GSEL); // gain 8 or 32
ADMUX = adc_mux[current_adc]; // set up mux, start one-shot conversion
adc_ignore = 1; // ignore first reading after mux change
ADCSRA |= _BV(ADSC);
| _BV(ADPS1) | _BV(ADPS0) // CLK/8 = 125 kHz
// | _BV(ADPS2) // CLK/16 = 62.5 kHz
;
- ADCSRB |= _BV(GSEL); // gain 8 or 32
+ // ADCSRB |= _BV(GSEL); // gain 8 or 32
// Disable digital input on all bits used by ADC
- DIDR0 = _BV(ADC0D) | _BV(ADC1D) | _BV(ADC2D) | _BV(ADC3D)
- | _BV(ADC4D) | _BV(ADC5D);
+ DIDR0 = _BV(ADC0D) | _BV(ADC1D) | _BV(ADC2D)
+ | _BV(ADC4D) | _BV(ADC5D) | _BV(ADC6D);
ADCSRA |= _BV(ADSC);