реклама на сайте
подробности

 
 
> АЦП и ATmega48, как работать с несколькими каналами
Дмитрий_Мигачев
сообщение May 27 2006, 22:37
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 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");
}

}
но он матюгается на этот код, а как сделать правильней?


--------------------
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Дмитрий_Мигачев   АЦП и 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, 03:55
|- - Дмитрий_Мигачев   Цитата(haker_fox @ May 29 2006, 10:55) Пе...   May 29 2006, 04:19
|- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 10:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01388 секунд с 7
ELECTRONIX ©2004-2016