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

 
 
 
Reply to this topicStart new topic
> Проблема с АЦП у Atmega48(V)
exert
сообщение May 1 2008, 11:16
Сообщение #1





Группа: Новичок
Сообщений: 12
Регистрация: 19-04-07
Пользователь №: 27 175



Кто-нибудь сталкивался с некорректной работой АЦП. Подаю разное напряжение на вход АЦП в том числе и стандартное 1,1V никакого результата. Подавали даже напрямую напряжение батарейки на разные входы - результат одинаковый - в регистрах ADCL,ADCH - нули или около того порядка 5-10 (dec) (скорее всего шумы). Тактовая частота 8 МГц. предделитель АЦП 1/32. Возможно программная ошибка? или всё таки аппаратная ошибка?
Go to the top of the page
 
+Quote Post
domowoj
сообщение May 1 2008, 11:39
Сообщение #2


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Без схемы и программы подсказать трудно.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
exert
сообщение May 1 2008, 13:08
Сообщение #3





Группа: Новичок
Сообщений: 12
Регистрация: 19-04-07
Пользователь №: 27 175



Часть кода отвечающая за работу АЦП. Результат работы АЦП сравнивается с Umin.


.equ Umin =500 ;миниммальное пороговое значение напряжения
;============== Ацп ==========
;Задаём кол-во измерений
ldi r16,0b11100110 ;включение Ацп и Timer/Counter1
sts PRR,r16 ;PRR
ldi r18,0b01100010 ;выбираем 2-ой канал
sts ADMUX,r16 ;ADMUX
ldi r16,0b10000111 ;настройка Ацп
sts ADCSRA,r16 ;ADCSRA
ldi r16,0b00000100
sts DIDR0,r16
;Сделаем 1-ое преобразование (его учитывать не надо, т.к. оно ложное)

ldi r16,0b11000111 ;сделаем 1-ое измерение
sts ADCSRA,r16 ;уст бит "старт преобразования"
;sbi ADCSRA,ADSC
WaitADC1: ;ждём пока выполнится преобразование
lds r16,ADCSRA
sbrs r16,4
rjmp WaitADC1
// sts ADCSRA,r16

lds ZH,ADCH
lds ZL,ADCL
;здесь отсчёт уже сделан
ldi r16,0b11000111 ;сделаем 2-ое измерение
sts ADCSRA,r16 ;уст бит "старт преобразования"
;sbi ADCSRA,ADSC
WaitADC2: ;ждём пока выполнится преобразование
lds r16,ADCSRA
sbrs r16,4
rjmp WaitADC2
// sts ADCSRA,r16
lds ZH,ADCH
lds ZL,ADCL


;=================== Сравнение напряжений =======================
;Установка Umin (YH YL)
;Сравнение напряжений ZH,ZL (U) с Umin
cpi ZH, Umin
brlo LowPower
Go to the top of the page
 
+Quote Post
ae_
сообщение May 1 2008, 13:28
Сообщение #4


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата
lds ZH,ADCH
lds ZL,ADCL
;здесь отсчёт уже сделан

When ADCL is read, the ADC Data Register is not updated until ADCH is read. Consequently, if
the result is left adjusted and no more than 8-bit precision is required, it is sufficient to read
ADCH. Otherwise, ADCL must be read first, then ADCH.
Go to the top of the page
 
+Quote Post
tazik
сообщение May 1 2008, 13:39
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691



Конструкцию вида:
ldi r16,0xAA
sts ADCSRA,r16
применять нельзя

вместо sts нужна команда out

sts адресует всю SRAM, включая 32 регистра r0-r31, out - только I/O область SRAM. Адреса регистров, перечисленные в файле ...def.inc рассчитаны на применение команд in/out, а не sts/lds

если все-таки хочется использовать команду sts, то к адресу регистра необходимо прибавлять смещение 0x20h (адреса регистров r0-r31)

Сообщение отредактировал tazik - May 1 2008, 13:52
Go to the top of the page
 
+Quote Post
exert
сообщение May 1 2008, 14:21
Сообщение #6





Группа: Новичок
Сообщений: 12
Регистрация: 19-04-07
Пользователь №: 27 175



Цитата(tazik @ May 1 2008, 17:39) *
Конструкцию вида:
ldi r16,0xAA
sts ADCSRA,r16
применять нельзя

вместо sts нужна команда out

sts адресует всю SRAM, включая 32 регистра r0-r31, out - только I/O область SRAM. Адреса регистров, перечисленные в файле ...def.inc рассчитаны на применение команд in/out, а не sts/lds

если все-таки хочется использовать команду sts, то к адресу регистра необходимо прибавлять смещение 0x20h (адреса регистров r0-r31)


регистр ADCSRA и ADMUX не относятся к I/O области. Так что sts тут к месту. Хотя я на всякий случай попробовал с out. С ним вообще программа не компилируется. AVR Studio пишет M:\2008.04\....\Proga.asm(109): error: Operand 1 out of range: 0x7c
Так что проблема не в sts. Но всё равно спасибо.
Go to the top of the page
 
+Quote Post
ae_
сообщение May 1 2008, 14:37
Сообщение #7


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитату из datasheet в посте №4 не заметили? У Вас порядок чтения ADC неверный.
Go to the top of the page
 
+Quote Post
exert
сообщение May 1 2008, 14:49
Сообщение #8





Группа: Новичок
Сообщений: 12
Регистрация: 19-04-07
Пользователь №: 27 175



Заметил smile.gif Буду проверять в железе. Спасибо. Надеюсь проблема только в этом.
Go to the top of the page
 
+Quote Post
tazik
сообщение May 1 2008, 15:02
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691



Цитата(exert @ May 1 2008, 22:21) *
регистр ADCSRA и ADMUX не относятся к I/O области. Так что sts тут к месту. Хотя я на всякий случай попробовал с out. С ним вообще программа не компилируется. AVR Studio пишет M:\2008.04\....\Proga.asm(109): error: Operand 1 out of range: 0x7c
Так что проблема не в sts. Но всё равно спасибо.


Скачал pdf на мегу 48. Да, действительно, Вы правы

Сообщение отредактировал tazik - May 1 2008, 15:15
Go to the top of the page
 
+Quote Post
domowoj
сообщение May 2 2008, 04:14
Сообщение #10


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Да, в этих моделях обращение к ряду регистров В\В ТОЛЬКО как к памяти
и в отличии от IN,OUT выполняются за 2 такта.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение May 2 2008, 05:53
Сообщение #11


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(exert @ May 1 2008, 15:16) *
Возможно программная ошибка? или всё таки аппаратная ошибка?

А Вы сами как дуиаете? У тысяч людей, использующих Меги, нет никакой "аппаратной ошибки", а вот Вы такой особенный, что именно у Вас она есть


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
domowoj
сообщение May 2 2008, 07:16
Сообщение #12


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Цитата(ae_ @ May 1 2008, 20:28) *
When ADCL is read, the ADC Data Register is not updated until ADCH is read. Consequently, if
the result is left adjusted and no more than 8-bit precision is required, it is sufficient to read
ADCH. Otherwise, ADCL must be read first, then ADCH.

Поменяли местами ADCL и ADCH, получилось?

Сообщение отредактировал domowoj - May 2 2008, 07:17


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th June 2025 - 20:16
Рейтинг@Mail.ru


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