//#define NUM_ADCS ZERO_ADC
#define NUM_ADCS 2
-volatile static unsigned char current_adc;;
-volatile unsigned char need_battery_adc;
+volatile static unsigned char current_adc;
+volatile unsigned char adc_enabled;
+volatile unsigned char need_battery_adc, need_pwmled_adc;
static uint16_t adc_sum, read_zero, drop_count, read_count, n_reads_log;
volatile uint16_t jiffies;
drop_count = 1;
read_count = 1;
n_reads_log = 0;
- } else {
+ } else if (need_pwmled_adc) {
current_adc = 0;
read_zero = 0;
drop_count = 1;
read_count = 1 << PWMLED_ADC_SHIFT;
n_reads_log = PWMLED_ADC_SHIFT;
+ } else {
+ ADCSRA &= ~_BV(ADEN);
+ power_adc_disable();
+ adc_enabled = 0;
+ return;
+ }
+ if (!adc_enabled) {
+ power_adc_enable();
+ ADCSRA |= _BV(ADEN);
+ adc_enabled = 1;
}
adc_sum = 0;
void init_adc()
{
need_battery_adc = 0;
+ need_pwmled_adc = 0;
current_adc = 0;
+ adc_enabled = 1;
power_adc_enable();
ACSR |= _BV(ACD); // but disable the analog comparator
{
ADCSRA = 0;
DIDR0 = 0;
+ power_adc_disable();
+ adc_enabled = 0;
}
ISR(ADC_vect) { // IRQ handler