Код: Выделить всё
ISR (ADC_vect)
{
adc[n]=ADCW;
switch(n) // преобразование согласно номера канала, переход к 0 каналу после 4-го
{
case 0x00: fbin[n]=adc[n]*1000/1024; n++; ADMUX=ADMUX+1; break;
case 0x01: fbin[n]=adc[n]*1000/1024; n++; ADMUX=ADMUX+1; break;
case 0x02: fbin[n]=adc[n]*100*5/1024;n++; ADMUX=ADMUX+1; break;
case 0x03: fbin[n]=adc[n]*10*5*6/1024;n=0;ADMUX=0b01000000; break;
default: break;
}
ADCSRA=0xFF;
}
Код: Выделить всё
ISR (ADC_vect){
static uint8_t n = 0; // номер канала
adc[n] = ADC;
fbin[n] = adc[n] * koefficient[n]; // коэффициенты по каналам в отдельном массиве
if(++n >= 4) n = 0; // выбор следующего номера канала
ADMUX = REFS | n; // включение канала. REFS - константа выбора опорника
ADCSRA |= _BV(ADSC); // запуск очередного измерения
}короче, разберитесь с формой, а потом поговорим о содержании. обычно протеус достаточно качественно работает с подобными простыми алгоритмами, так что скорее всего ваш код неверен - и неудивительно: алгоритм вы четко не продумали, и явно где-то плюха.