|
АЦП и ATmega48, как работать с несколькими каналами |
|
|
|
May 27 2006, 22:37
|
Частый гость
 
Группа: Участник
Сообщений: 110
Регистрация: 28-02-06
Из: Россия г. Омск
Пользователь №: 14 784

|
Вообщем не могу понять как работать с несколькими каналами АЦП. Юзаю 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"); }
} но он матюгается на этот код, а как сделать правильней?
--------------------
|
|
|
|
|
 |
Ответов
|
May 29 2006, 04:19
|
Частый гость
 
Группа: Участник
Сообщений: 110
Регистрация: 28-02-06
Из: Россия г. Омск
Пользователь №: 14 784

|
Цитата(haker_fox @ May 29 2006, 10:55)  Первое, что бы я пожелал: оформляйте код в специальных тегах, вот так: ... Ну я понял, что вы изменили, спасибо, но вопрос другой, это оптимальный вариант работы с АЦП (именно в моем случае с двумя каналами), или можно найти другие пути, обязательно наличие следящей переменной adc_chan?
Сообщение отредактировал Дмитрий_Мигачев - May 29 2006, 04:22
--------------------
|
|
|
|
Сообщений в этой теме
Дмитрий_Мигачев АЦП и ATmega48 May 27 2006, 22:37 Дмитрий_Мигачев Вопрос конешно я задал довольно не понятно, но изв... May 27 2006, 22:53 defunct пишем функцию
Код#define MUX_STATE (0 <... May 27 2006, 23:32 Laksus Я не вникал в суть кода, но, по моему после первой... May 28 2006, 11:29 Laksus И еще парочка мыслей по "косметике".
1-... May 28 2006, 11:59 Дмитрий_Мигачев Всем спасибо за ответы, более или менее разобрался... May 29 2006, 03:21  haker_fox Цитата(Дмитрий_Мигачев @ May 29 2006, 13... May 29 2006, 04:38  SasaVitebsk Цитата(Дмитрий_Мигачев @ May 29 2006, 07... May 29 2006, 09:50   Дмитрий_Мигачев Вообще я хотел сделать так, чтобы оцифровка канало... May 29 2006, 14:26    defunct Цитата(Дмитрий_Мигачев @ May 29 2006, 17... May 29 2006, 14:43    SasaVitebsk Цитата(Дмитрий_Мигачев @ May 29 2006, 17... May 29 2006, 15:56 Дмитрий_Мигачев Вообще это часть моей задачи. Я хочу сделать ради... May 29 2006, 14:48 defunct Цитата(Дмитрий_Мигачев @ May 29 2006, 17... May 29 2006, 15:12
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|