Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: АЦП на ATtiny13
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
DuMA
есть простая задача, с определенным периодом запускать АЦП и по завершению преобразования записывать результат в регистр (например r19), АЦП решил запускать по прерывания от WATCHDOG

вот что а наваял:

. . .
ldi r16,(1<<REFS0)|(1<<ADLAR)
out ADMUX,r16
ldir 16,(1<<ADEN)|(1<<ADPS2)|(1<<ADPS0)
out ADCSRA,r16
. . .
sbi ADCSRA,ADIE
. . .
ldi r16,(1<<WDCE)
out WDTCR,r16
ldi r16,(1<<WDTIE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0)
out WDTCR,r16
. . .
ADCC: ;обработка прерывания ADC
in r19,ADCH
reti

WATCHDOG:
sbi ADCSRA,ADSC
reti

я так понимаю если я не установил бит ADATE в ADCSRA, то АЦП должен работать в режиме одиночного преобразования, но на практике преобразование запускается постоянно, даже если полностью выкинуть WATCHDOG, а бит запуска преобразования устанавливается только там, значение r19 постоянно меняется при изменении аналогового сигнала на входе АЦП.

Как по другому решить поставленную задачу прошу не предлагать, и сам знаю. Мне интересно почему это работает не так как надо.
=GM=
Цитата(DuMA @ Nov 15 2006, 08:41) *
есть простая задача, с определенным периодом запускать АЦП и по завершению преобразования записывать результат в регистр (например r19), АЦП решил запускать по прерывания от WATCHDOG

вот что а наваял:

. . .
ldi r16,(1<<REFS0)|(1<<ADLAR)
out ADMUX,r16
ldir 16,(1<<ADEN)|(1<<ADPS2)|(1<<ADPS0)
out ADCSRA,r16
. . .
sbi ADCSRA,ADIE
. . .
ldi r16,(1<<WDCE)
out WDTCR,r16
ldi r16,(1<<WDTIE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0)
out WDTCR,r16
. . .
ADCC: ;обработка прерывания ADC
in r19,ADCH
reti

WATCHDOG:
sbi ADCSRA,ADSC
reti

я так понимаю если я не установил бит ADATE в ADCSRA, то АЦП должен работать в режиме одиночного преобразования, но на практике преобразование запускается постоянно, даже если полностью выкинуть WATCHDOG, а бит запуска преобразования устанавливается только там, значение r19 постоянно меняется при изменении аналогового сигнала на входе АЦП.

Как по другому решить поставленную задачу прошу не предлагать, и сам знаю. Мне интересно почему это работает не так как надо.

Надо выявить источник запуска преобразования. Прежде всего, попробуйте изменить источник прерывания, скажем, ADTS=101, ну и явно ADATE=0. Eсли не поможет, попробуйте читать АЦП без прерывания.
Dopler
Все должно работать, скорее всего где-то ошибка в коде.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.