Здравствуйте!
Помогите, пожалуйста. В даташите написано, что преобразования должно запускаться автоматически при переходе в режим sleep или idle, но почему то не запускаеться )
если перед командой sleep самому запустить преобразование, то работает нормально.
И еще один вопрос, будет ли работать ШИМ пока микроконтроллер находиться в режиме sleep или idle ?
#include <m8def.inc>
.def temp=r16
.def char=r17
.cseg
.org 0x000
rjmp start
.org adccaddr
nop
reti
start:
ldi temp, 0b00011000
out wdtcr, temp ;watchdog disabled
cbr temp, 0b00001000
out wdtcr, temp
clr temp
out ddrc, temp ;порт С на вход
out portc, temp
ldi temp, 0xff ;порт D - выход
out ddrd, temp
clr temp
out portd, temp
ldi temp, 0b10001111 ;вкл. АЦП, прерывания по завершению преобразования, скорость 128
out adcsra, temp
ldi temp, 0b00100000 ;используем АЦП0, левый сдвиг результата
out admux, temp
sei ;глобальное разрешение прерываний
ldi temp, 0b10010000 ;режим подавления шумов включен
out mcucr, temp
A1:
;sbi adcsra, adsc
sleep
in temp, adcl
in temp, adch
out portd, temp
rjmp A1
domowoj
Mar 23 2008, 16:55
Дубль Казуса?
Не надо сразу опускать крылья, нужно экспериментировать,
например поставьте вместо ;sbi adcsra, adsc - nop.
У меня в тиньках работат все по даташиту,
но все настройки регистров я делаю в шапке(начале) программы.
И правильно сделали вам замечание-
соверш. не читаема программа.
viakon
Mar 25 2008, 05:23
Цитата(OLMER @ Mar 23 2008, 15:13)

ldi temp, 0b10010000 ;режим подавления шумов включен
out mcucr, temp
Для какого контроллера эта команда? SE бит не установлен соответственно проц не засыпает.
Цитата(viakon @ Mar 25 2008, 08:23)

Для какого контроллера эта команда? SE бит не установлен соответственно проц не засыпает.
ATmaega8
MCUCR
SE |SM2 |SM1 |SM0 |ISC11 |ISC10 |ISC01 |ISC00
viakon
Mar 26 2008, 11:46
Странно, у всех попадавшихся мне мег SE бит 6-й , а у этой 7-й.
Обычно все переферийные регистры совпадают
Цитата(viakon @ Mar 26 2008, 14:46)

Странно, у всех попадавшихся мне мег SE бит 6-й , а у этой 7-й.
Обычно все переферийные регистры совпадают
Микроконтроллер засыпает. После засыпания должно автоматически запускаться считывание результата АЦП, но оно почему то не запускается, вот в этом и проблема!
Если перед уходом в спячку самому запустить считывание АЦП, то все работает нормально. Может так и нужно делать, но в даташите написано, что считывание в режиме подавления шумов АЦП, запускается автоматически после команды sleep.
domowoj
Mar 27 2008, 02:26
Да , действительно, в AVRStudio не работает.
Поставь лишнюю команду -sbi adcsra, adsc- да и все дела.
Вечеро посмотрю в протеусе, странно это.
Не уверен, однако, может надо включить режим FREERUN?
Посмотрите у меня на сайте, выкладывал пробный проект, когда разбирался с АЦП... FreeRun не использовал, но может поможет чем-нибудь...
Цыкетчик
Sep 24 2008, 13:09
Цитата(MTh @ Mar 27 2008, 09:15)

может надо включить режим FREERUN?

Не "может", а обязательно нужно включить. Иначе проц в режиме "ADC Noise Reduction" не проснётся