Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ADC
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
MySOL
Господа знатоки, снова прошу вашей помощи. На сей раз столкнулся с неразберихой при изучении АЦП в AVR. Собственно суть дела такова:
Решил собрать простенькую схему. На вывод PC0 подаётся напряжение, которое мы измеряем ( в качестве опорного - внутренний ИОН), затем полученное значение из ADCH выводим на светодиоды, подключённые к выводам PD0..7 . Проблема заключается в том, что регистр ADCH оказывается пустой, как и ADCL ( его я так же проверял). Опять же искал различные решения в интернете, но так ничего путного не нашёл. Возможно проблема вкралась в мозг. Вот код и схема
Код
.def temp=r16

rjmp Init

;=======Инициализация=======;
Init:
ser temp                        ; PD0..7 выходы
out DDRD, temp             ;
clr temp                         ; На всякий пожарный
out PortD, temp              ;

ldi temp, 0b11111110      ; PC0 - вход, остальные выходы
out DDRC, temp

ldi temp, 0b11100000      ; Муха настроена на внутренний ЙОН на 1.1V
sts ADMUX, temp            ; с внешним кондёром на AREF, старшие биты в ADCH, сигнал снимается с ADC0 (PC0)

ldi temp, 0b10000111      ; Включил АЦП, одиночное преобразование, все что связанно с прерываниями обрубил,
sts ADCSRA, temp          ; частота 1МГц/128~8кГц
;=======Основная программа========;
Start:

lds temp, ADCSRA          ; Врубаем одиночное измерение    
sbr temp, 6                    ;
sts ADCSRA, temp          ;

Check:
lds temp, ADCSRA          ; Ждём окончания преобразования
sbrc temp, 6                   ;
rjmp Check                    ;

lds temp, ADCH              ; Выводим значение  
out PortD, temp              ;
rjmp Start                      ;

Нажмите для просмотра прикрепленного файла
Прошу помочь, найти ошибку в моей программе
Палыч
Цитата(MySOL @ Jul 4 2012, 14:19) *
Код
Check:
lds temp, ADCSRA         ; Ждём окончания преобразования
sbrc temp, 6                  ;
rjmp Check                ;


Цитата из DS
Цитата
ADCSRA – ADC control and status register A
• Bit 4 – ADIF: ADC interrupt flag
This bit is set when an ADC conversion completes and the Data Registers are updated.
MySOL
Цитата(Палыч @ Jul 4 2012, 14:52) *
Цитата из DS


А разве не имеет значения, что проверять по ADIF, что по ADSC, ибо
Цитата из DS
Цитата
ADSC will read as one as long as a conversion is in progress. When the conversion is complete,
it returns to zero.
ILYAUL
Код
sbr temp, 6
нет не катит- Почитайте , что делает эта команда
MySOL
Цитата(ILYAUL @ Jul 4 2012, 17:37) *
Код
sbr temp, 6
нет не катит- Почитайте , что делает эта команда

однако вы правы)
ILYAUL
Код
sbr temp,1<<6

но лучше так
Код
ldi temp,1<<ADEN|1<<ADSC|1<<ADIE|1<<ADPS2|1<<ADPS1|1<<ADPS0

Так всё сразу понятно, что ,где и как
_Артём_
Цитата(ILYAUL @ Jul 4 2012, 16:57) *
Код
ldi temp,1<<ADEN|1<<ADSC|1<<ADIE|1<<ADPS2|1<<ADPS1|1<<ADPS0


1<<ADIE лишняя, если прерывание не используется.
MySOL
Цитата(ILYAUL @ Jul 4 2012, 17:57) *
Код
sbr temp,1<<6

но лучше так
Код
ldi temp,1<<ADEN|1<<ADSC|1<<ADIE|1<<ADPS2|1<<ADPS1|1<<ADPS0

Так всё сразу понятно, что ,где и как

спасибо за помощь, я так и знал, что проблема вкралась в голове)
ILYAUL
Цитата(_Артём_ @ Jul 4 2012, 18:13) *
1<<ADIE лишняя, если прерывание не используется.

Я просто из своего проекта копировал , как образец . Люблю я прерывания biggrin.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.