проблема в том что - самые высокие значения ацп и низкие - не влияют друг на друга
влияют от ~30 до 80%
причем 4 канала на одном операционнике 4 на другом - и они влияют друг на друга в указанном диапазоне
прерывание
Код
ISR(ADC_vect)
{
adc_val= ADCL;
//shift from 8bit to 10bit*/
adc_val+= (ADCH<<8);
AI[adc_ch]=(AI[adc_ch]+adc_val)/2;
adc_ch++;
if(adc_ch>7)
adc_ch=0;
}
инит
Код
// ADC module initialization
void adc_init(void)
{
//select reference voltage
//AVCC with external capacitor
ADMUX|=(0<<REFS1)|(1<<REFS0);
//set prescaller and enable ADC
ADCSRA|=(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
adc_ch=0;
}
опрос 200раз в секунду - 8 каналов == каждый канал 25 раз в секунду
Код
// ADC single conversion routine
void adc_start_conversion(void)
{
//set ADC channel
ADMUX=(ADMUX&0xF0)|adc_ch;
//Start conversionio with Interupt after conversion
ADCSRA |= (1<<ADSC)|(1<<ADIE);
}
Сообщение отредактировал GYUR22 - Apr 9 2011, 08:10
Эскизы прикрепленных изображений