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

 
 
 
Reply to this topicStart new topic
> ADC, нужна помощь
MySOL
сообщение Jul 4 2012, 10:19
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 17-06-12
Пользователь №: 72 370



Господа знатоки, снова прошу вашей помощи. На сей раз столкнулся с неразберихой при изучении АЦП в 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                      ;

Прикрепленное изображение

Прошу помочь, найти ошибку в моей программе
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 4 2012, 10:52
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(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.
Go to the top of the page
 
+Quote Post
MySOL
сообщение Jul 4 2012, 11:03
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 17-06-12
Пользователь №: 72 370



Цитата(Палыч @ 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.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 4 2012, 13:37
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Код
sbr temp, 6
нет не катит- Почитайте , что делает эта команда


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MySOL
сообщение Jul 4 2012, 13:53
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 17-06-12
Пользователь №: 72 370



Цитата(ILYAUL @ Jul 4 2012, 17:37) *
Код
sbr temp, 6
нет не катит- Почитайте , что делает эта команда

однако вы правы)

Сообщение отредактировал MySOL - Jul 4 2012, 13:54
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 4 2012, 13:57
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Код
sbr temp,1<<6

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

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


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 4 2012, 14:13
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ILYAUL @ Jul 4 2012, 16:57) *
Код
ldi temp,1<<ADEN|1<<ADSC|1<<ADIE|1<<ADPS2|1<<ADPS1|1<<ADPS0


1<<ADIE лишняя, если прерывание не используется.
Go to the top of the page
 
+Quote Post
MySOL
сообщение Jul 4 2012, 14:19
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 17-06-12
Пользователь №: 72 370



Цитата(ILYAUL @ Jul 4 2012, 17:57) *
Код
sbr temp,1<<6

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

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

спасибо за помощь, я так и знал, что проблема вкралась в голове)
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 4 2012, 14:54
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



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

Я просто из своего проекта копировал , как образец . Люблю я прерывания biggrin.gif


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:47
Рейтинг@Mail.ru


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