[an error occurred while processing this directive] [an error occurred while processing this directive]
Внутренний АЦП в AVR'е? (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Loafer 01 ноября 2001 г. 16:29

Господа! Никогда не поверю, чтобы никто из присутствующих не работал с внутренним АЦП в AVR'е. Смею вас заверить, что прежде чем отнять ваше драгоценное время, я действительно прочитал мануэль и перепробовал все мыслимые и немыслимые комбинации.

Кроме шуток, у меня не получается заставить работать сабж в АТмеге103. Я пробовал режим однократного преобразования. Здесь есть два пути: с использованием прерывания и без него.

Если не использовать прерывание, то в мануэле написано, что преобразование начинается с установки бита ADSC в "1". А когда преобразование заканчивается, этот бит сбрасывается аппаратно. Исходя из этого я пишу:

SBI ADCSR ,ADEN ; АЦП разрешен
SBI ADCSR ,ADSC ; Вкл. АЦП
CLR TEMP
OUT ADMUX ,TEMP ; Переключение MUX'a ADC на накал 0

M: SBIC ADCSR,ADSC
RJMP M ; Ждем, пока не кончится преобразование

И в этом цикле все виснет. Преобразование не заканчивается, флаг не сбрасывается.

Если использовать прерывание, читаем в мануэле, что при окончании преобразования устанавливается флаг ADIF, а по окончании выполнения соответствующего обработчика он сбрасывается аппаратно. Пробую писать так:

.ORG $2A
RETI ; ADC Conversion Complete
{....}

SBI ADCSR ,ADEN ; АЦП разрешен
SBI ADCSR ,ADSC ; Вкл. АЦП
CLR TEMP
OUT ADMUX ,TEMP ; Переключение MUX'a ADC на накал 0

M: SBIC ADCSR,ADIF
RJMP M ; Ждем, пока не кончится преобразование

В этом цикле все так же виснет. Преобразование не заканчивается, прерывание не возникает, флаг не сбрасывается.

Кстати, на сколько я понял, по окончанию преобразования флаг ADSC сбрасывается, а флаг ADIF устанавливается независимо от того, разрешено прерывание от АЦП или нет. Тем не менее, АЦП не хочет ничего измерять. Может я чего недопонимаю?

Ну что еще добавить...
На АЦП я выставил опору все-таки 5,12В, и делитель 32 при кварце 4096МГц.

Подскажите, как заставить сабж работать. А то на родном atmel.com на него примера нет, и в AVR-Studio он не симулируется.

Заранее спасибо!

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru