обработчик прерывания написан так:
Код
#define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR)) //AREF - reference
#define ADMUX_0 (ADC_VREF_TYPE|0)
#define ADMUX_7 (ADC_VREF_TYPE|7)
DIDR0 = (0<<ADC5D)|(0<<ADC4D)|(0<<ADC3D)|(0<<ADC2D)|(0<<ADC1D)|(0<<ADC0D);
ADMUX = ADMUX_0; //AREF pin
ADCSRA = (1<<ADEN) |(1<<ADSC) |(1<<ADATE)|(0<<ADIF) |(1<<ADIE) |(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
ADCSRB = (0<<ADTS2)|(0<<ADTS1)|(0<<ADTS0);// отказываемся от источника запуска преобразования
ISR(ADC_vect)
{
static u08 i = 0;
adcData[i] = ADCW;// Read the AD conversion result
switch(i)
{
case 0:
{
ADMUX = ADMUX_7; //res
i = 1;
}break;
case 1:
{
ADMUX = ADMUX_0; //m_s
i = 0;
}break;
}
_delay_us(10);// Delay needed for the stabilization of the ADC input voltage
ADCSRA|=(1<<ADSC);
}
#define ADMUX_0 (ADC_VREF_TYPE|0)
#define ADMUX_7 (ADC_VREF_TYPE|7)
DIDR0 = (0<<ADC5D)|(0<<ADC4D)|(0<<ADC3D)|(0<<ADC2D)|(0<<ADC1D)|(0<<ADC0D);
ADMUX = ADMUX_0; //AREF pin
ADCSRA = (1<<ADEN) |(1<<ADSC) |(1<<ADATE)|(0<<ADIF) |(1<<ADIE) |(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
ADCSRB = (0<<ADTS2)|(0<<ADTS1)|(0<<ADTS0);// отказываемся от источника запуска преобразования
ISR(ADC_vect)
{
static u08 i = 0;
adcData[i] = ADCW;// Read the AD conversion result
switch(i)
{
case 0:
{
ADMUX = ADMUX_7; //res
i = 1;
}break;
case 1:
{
ADMUX = ADMUX_0; //m_s
i = 0;
}break;
}
_delay_us(10);// Delay needed for the stabilization of the ADC input voltage
ADCSRA|=(1<<ADSC);
}
проблема в том, что adcData[0] оцифровывает значение с канала ADC7, а adcData[1] с канала ADC0, т.е наоборот...В чем косяк понять не могу, ведь я могу сменить вход adc только при окончании текущего преобразования и до запуска слудующего. Попав в обработчик я полагаю, что текущее преобразование уже закончено и новое не запустится, пока не взведу флаг ADSC.