Вообщем не могу понять как работать с несколькими каналами АЦП. Юзаю VMLab, он меня всем удовлетворяет, сейчас пишу тут одну вещь и встал...Дело в том что есть какой то пульт управления, и результаты с рычагов должны оцифровываться 50 раз в секунду, вообщем как я думал, по переполнению таймера счетчика, мы уходим в прерывание, где тама, тама производим необходимую настройку ацп, далее разрешаем прерывание по завершению АЦП и так с двумя каналами. Я думал что бы работать с двумя каналами необходимо завести переменную, к примеру в начеле она равна нулю, после первого АЦП она инкрементируется, и далее производиться обработка второго канала, но компилятор выдает ошибком, вообщем мне кажется что я выбрал не правильный путь, подскажите как сделать правильней Для понятливости того, что я написал приведу пример своего кода: ************************* ************************* unsigned char adc_chan, b; unsigned short kanal1, kanal2; SIGNAL(SIG_OVERFLOW1){ asm("nop"); TCNT1=0xFFEB; if (adc_chan==0) { ADCSRA=_BV(ADEN)+_BV(ADIF)+_BV(ADIE)+_BV(ADPS0); ADMUX=0; //ADC0 ADCSRA|=_BV(ADSC); asm("sei"); if (adc_chan==1) { ADCSRA=_BV(ADEN)+_BV(ADIF)+_BV(ADIE)+_BV(ADPS0); ADMUX=_BV(MUX2)+_BV(MUX1)+_BV(MUX0);//ADC7 ADCSRA|=_BV(ADSC); asm("sei"); } } SIGNAL(SIG_ADC){ if (adc_chan==0){ b=ADCL; kanal1=(ADCH<<8)+b; adc_chan++; } if (adc_chan==1){ b=ADCL; kanal2=(ADCH<<8)+b; adc_chan=0; } } void idle_init(void) { SMCR=_BV(SE); asm("sei"); } void timer1_init(void) { TCCR1B=_BV(CS12)+_BV(CS10);//CLK/1024 TCNT1=0xFFEB; TIMSK1=_BV(TOIE1); } // *********************************************************** // Main program // int main(void) { idle_init(); timer1_init(); adc_chan=0; while(1) { asm("sleep"); }
} но он матюгается на этот код, а как сделать правильней?
--------------------
|