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

 
 
 
Reply to this topicStart new topic
> АЦП на Atmega
shemmer
сообщение Sep 23 2007, 09:55
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 23-09-07
Из: Томск
Пользователь №: 30 759



Добрый день

Вот решил сделать блок питания с управлением на МК
Возникли проблемы с АЦП, а именно:
Не могу настроить его так чтобы он мерил многократно, а не 1 раз
Работаю в CVAVR, симулирую в ПРОТЕУСЕ

Делаю так:
interrupt [ADC_INT] void adc_isr(void){
Vizm=ADCW;
Vpr = (float) Vizm; //переводим формат данных из целочисленно в фиксированную арифметику
Vpr = Vpr * 0.03128; //умножаем на множитель масштаба(измерение до 32В)
Vdec = (int) Vpr; //выделяем целую часть;
Vpr = Vpr - (float) Vdec;//выделяем милливольты
Vpr = Vpr * 1000; //избавляемся от целой части
Vmili = (int) Vpr; //переводим милливольты в вольты
}
Дальше преобразовываю в BCD и вывожу на LED.(ADCSRA=0b11011111;
ADMUX=0b11000000

Но он делает преобразование 1 раз и останавливается.
Если установить ADFR=1, то в протеусе на индикаторе кракозябры
(может на железе будет нормально?)
Как заставить делать преобразование многократно?
Go to the top of the page
 
+Quote Post
WEST128
сообщение Sep 23 2007, 10:17
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 468
Регистрация: 13-10-06
Из: Россия, Томск
Пользователь №: 21 291



Тут надо приводить не ваш код обработки данных с АЦП, а то, как вы инициализируете его регистры. Там есть несколько режимов работы, если вы не хотите сами запускать АЦП, то настройте его в режиме непрерывного преобразования (FreeRunning). По поводу используемого вами симулятора можно сказать, что он бывает ошибается, проверять всегда лучше на железке. Неплохо бы привести тип вышего контроллера.
Go to the top of the page
 
+Quote Post
shemmer
сообщение Sep 23 2007, 11:41
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 23-09-07
Из: Томск
Пользователь №: 30 759



МК Atmega8
что-бы настроить Free runing нужно, как я понимаю ADFR установить в 1.
Но при этом на индикаторе всякая всячина.
Т.е все работает когда ADCSRA=0b11011111 ADMUX=0b11000000 и
interrupt [ADC_INT] void adc_isr(void){
Vizm=ADCW;
Vpr = (float) Vizm;
Vpr = Vpr * 0.03128;
Vdec = (int) Vpr;
Vpr = Vpr - (float) Vdec;
Vpr = Vpr * 1000;
Vmili = (int) Vpr;

}
как только я делаю ADCSRA=0b11111111 или выношу из прерывания перевод в формат float
на индикаторе не весть что
В чем может быть причина?
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 23 2007, 15:45
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Для непрерывного режима АЦП, в 1 устанавливается бит ADATE и для первого запуска бит ADSC. В старых МК бит ADATE мог называться ADFR. (всё это находится в регистре ADSRA). После переключения канала необходимо чтобы прошло не менее 26 циклов АЦП.

Ну и ещё некоторые советы. Вы их вольны не использовать.
В прерывании, обычно, не делают никаких "приведений" результатов. Только усреднение либо фильтрация. И работают с непосредственно снимаемыми данными либо с данными после усреднения. Если требуется численное значение на дисплее, то преобразование осуществляют непосредственно перед выводом. Причина проста. Измерение осуществляется сотни/тысячи раз в секунду. Вывод на дисплей - единицы раз в секунду.
Go to the top of the page
 
+Quote Post
bodja74
сообщение Sep 23 2007, 17:44
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Динамика в протеусе работает кривовато ,точнее с ней нужно поигратся ,чтобы отображало корректно,
заюзайте реальный девайс ,будет проще.

Еще ,проще думаю сделать опорник от 5вольт и результат сдвинуть влево ,делитель на входе 1\10,сможете и 50в мерять и не париться с коэфициентами.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 11:31
Рейтинг@Mail.ru


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