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

 
 
 
Reply to this topicStart new topic
> АЦП в Atmega8, Странная ситуация. Измеряет один раз, а потом выдаёт то же значение вс
AVRMan
сообщение Nov 19 2008, 16:27
Сообщение #1





Группа: Новичок
Сообщений: 9
Регистрация: 24-09-08
Пользователь №: 40 457



Пробовал так:

static inline void ADCInit(void)
{
ADCSRA |=_BV(ADPS1);
ADCSRA |=_BV(ADPS0);
ADMUX |=_BV(REFS0);
ADCSRA |=_BV(ADEN);
ADCSRA |=_BV(ADIE);
}


int main(void)
{
PortInit();
LCMInit();
TimerInit();
ADCInit();

asm("sei");

ADCSRA |=_BV(ADSC);
while(1)
{

asm("nop");
}
}

ISR(TIMER1_COMPA_vect)
{
SetCursor(0x05);
ShowNumber(Count); // Мои функция работы с ЖКД
ShowNumber(Count2);

}

ISR(ADC_vect)
{
Count=ADCH;
Count2=ADCL;
ADCSRA |=_BV(ADSC);
}

Пробовал так:

ISR(ADC_vect)
{
Count=ADCH;
Count2=ADCL;
SetCursor(0x05);
ShowNumber(Count); // Мои функция работы с ЖКД
ShowNumber(Count2);
ADCSRA |=_BV(ADSC);
}

Результат один. При включении выводится измеренное значение и не меняется. При след. включении новое. Измерения дают прав. рез-ты. Подскажите пожалуйста. В чём дело???
Go to the top of the page
 
+Quote Post
SysRq
сообщение Nov 19 2008, 16:32
Сообщение #2


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



А вы почитайте (в datasheet'е на МК) в какой последовательности необходимо считывать ADCL и ADCH, и как этот процесс происходит.
Go to the top of the page
 
+Quote Post
777777
сообщение Nov 19 2008, 16:54
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(SysRq @ Nov 19 2008, 19:32) *
А вы почитайте (в datasheet'е на МК) в какой последовательности необходимо считывать ADCL и ADCH, и как этот процесс происходит.

А еще лучше доверить это компилятору и писать:
Код
Count=ADC;

(разумеется, при условии, что Count двухбайтовый), на что он сгенерирует примерно такой код:
Код
     83a:    24 b1           in    r18, 0x04; 4
     83c:    35 b1           in    r19, 0x05; 5
     83e:    30 93 0e 01     sts    0x010E, r19
     842:    20 93 0d 01     sts    0x010D, r18
Go to the top of the page
 
+Quote Post
AVRMan
сообщение Nov 19 2008, 17:50
Сообщение #4





Группа: Новичок
Сообщений: 9
Регистрация: 24-09-08
Пользователь №: 40 457



Цитата(777777 @ Nov 19 2008, 20:54) *
А еще лучше доверить это компилятору и писать:
Код
Count=ADC;

(разумеется, при условии, что Count двухбайтовый), на что он сгенерирует примерно такой код:
Код
     83a:    24 b1           in    r18, 0x04; 4
     83c:    35 b1           in    r19, 0x05; 5
     83e:    30 93 0e 01     sts    0x010E, r19
     842:    20 93 0d 01     sts    0x010D, r18

Спасибо огромное. Помогло.
Go to the top of the page
 
+Quote Post

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

 


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


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