|
|
  |
ADC, нужна помощь |
|
|
|
Jul 4 2012, 10:19
|
Участник

Группа: Участник
Сообщений: 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 ;
Прошу помочь, найти ошибку в моей программе
|
|
|
|
|
Jul 4 2012, 10:52
|

Гуру
     
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Jul 4 2012, 11:03
|
Участник

Группа: Участник
Сообщений: 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.
|
|
|
|
|
Jul 4 2012, 13:53
|
Участник

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

|
Цитата(ILYAUL @ Jul 4 2012, 17:37)  Код sbr temp, 6 нет не катит- Почитайте , что делает эта команда однако вы правы)
Сообщение отредактировал MySOL - Jul 4 2012, 13:54
|
|
|
|
|
Jul 4 2012, 13:57
|

Профессионал
    
Группа: Свой
Сообщений: 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 Так всё сразу понятно, что ,где и как
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jul 4 2012, 14:19
|
Участник

Группа: Участник
Сообщений: 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 Так всё сразу понятно, что ,где и как спасибо за помощь, я так и знал, что проблема вкралась в голове)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|