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

 
 
 
Reply to this topicStart new topic
> АЦП на ATtiny13, работает не так как хочется
DuMA
сообщение Nov 15 2006, 08:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 14-04-06
Пользователь №: 16 105



есть простая задача, с определенным периодом запускать АЦП и по завершению преобразования записывать результат в регистр (например 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 постоянно меняется при изменении аналогового сигнала на входе АЦП.

Как по другому решить поставленную задачу прошу не предлагать, и сам знаю. Мне интересно почему это работает не так как надо.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Nov 15 2006, 16:06
Сообщение #2


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(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сли не поможет, попробуйте читать АЦП без прерывания.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Dopler
сообщение Nov 21 2006, 23:43
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Все должно работать, скорее всего где-то ошибка в коде.
Go to the top of the page
 
+Quote Post

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

 


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


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