Преобразование аналогового сигнала

Обсуждаем контроллеры компании Atmel.
Ответить
sanya839
Родился
Сообщения: 6
Зарегистрирован: Вт окт 21, 2014 15:09:10

Преобразование аналогового сигнала

Сообщение sanya839 »

Всем привет :)) Начал изучать програмирование asm для avr. Пишу программу которая по нажатию кнопки выводила бы минимальный и максимальный результат преобразования АЦП. собственно вот код который я написал. Результат выводится по нажатию PD2.
Код под спойлером
Спойлер

Код: Выделить всё

.include "8535def.inc"   ;файл определений AT90S8535
.def temp = r16      ;временный регистр
.def reg_led = r19   ;регистр индикации
.org $0
   rjmp init
.org $001
   rjmp inter
.org $00E
   rjmp analog

init:
   ldi temp,low(RAMEND)   ;установка
   out SPL,temp      ; указателя стека
   ldi temp,high(RAMEND)   ; на последнюю
   out SPH,temp      ; ячейку ОЗУ
   ser temp      ;порт PC
   out DDRC,temp      ; на вывод
   out PORTC,temp       
   ldi temp,0xFB      ;инициализация 2-ого вывода
   out DDRD,temp      ; порта PD на ввод
   clr temp               ;аналоговые входы
   out DDRA, temp      ; порта PA,

   ldi temp,0x40      ;разрешение внешнего
   out GIMSK,temp      ; прерывания
   ldi temp,0x02      ;обработка прерывания INT0
   out MCUCR,temp      ; по перепаду 1/0
   ldi temp, 0x8D      ; ADEN=1, ADIE=1, Fadc=Fclk/32
   out ADCSR, temp      
   ldi temp, 0               ; Канал 0 АЦП (вход PA0)
   out ADMUX, temp
   sei                  ;разрешение прерываний   
   sbi ADCSR, ADSC   ;пуск преобразования
loop:                      ;цикл ожидания прерываний
   rjmp loop

;обработка прерывания от АЦП
analog:
   in r18, ADCL      ;считывание ADCL:ADCH   
   in r17, ADCH
   reti
; Обработка внешнего прерывания от кнопки для просмотра результатов.   
inter:
   cbi ADCSR, ADIE      ;запрет прерывания от АЦП   
   mov reg_led, r17                    ;скопируем r17 в reg_led
   com reg_led                            ;дополнение до 1
         cp r17,r18                             ;сравнение регистра
   brcs r17_less                       ;переход на метку, если установлен флаг переноса, т.е. r17 меньше
   rjmp t0                             ;переход на метку, если r18 меньше
   r17_less:
   out PORTC, reg_led         ;вывод на порт C
   reti                                   
t0:
   mov reg_led, r18               ;скопируем r18 в reg_led
   com reg_led                        ;дополнение до 1
   out PORTC, reg_led          ;вывод на порт C

    sbi ADCSR, ADIE      ;разрешение прерывания с АЦП
   sbi ADCSR, ADSC      ;пуск преобразования
   reti

В итоге всегда выводит в порт C один и тот же результат, не могу понять почему.В чем ошибка?
Собрал в протеусе схемку, но к успеху это не привело. скрин под спойлером
СпойлерИзображение
Вложения
acp.rar
Мой проект(создан в AVR Studio 4.13)
(4.98 КБ) 134 скачивания
Последний раз редактировалось sanya839 Вт фев 03, 2015 15:22:46, всего редактировалось 1 раз.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Преобразование аналогового сигнала

Сообщение ChipKiller »

для начала разобраться, как работает (и что такое) делитель напряжения
sanya839
Родился
Сообщения: 6
Зарегистрирован: Вт окт 21, 2014 15:09:10

Re: Преобразование аналогового сигнала

Сообщение sanya839 »

ChipKiller писал(а):для начала разобраться, как работает (и что такое) делитель напряжения

А что конкретно? В регистре ADCSRA 2-0 биты отвечают за предделитель.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Преобразование аналогового сигнала

Сообщение Z_h_e »

sanya839, поясню для Вас замечание ChipKiller.

Встаньте вольтметром на вход АЦП контроллера. Убедитесь, что напряжение в любом положении переменного резистора равно напряжению батареи.

Для того чтобы понять почему так, берете закон Ома и считаете какое падение напряжения на переменном резисторе. Напомню что падение напряжения прямо пропорционально силе тока и сопротивлению.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
sanya839
Родился
Сообщения: 6
Зарегистрирован: Вт окт 21, 2014 15:09:10

Re: Преобразование аналогового сигнала

Сообщение sanya839 »

Z_h_e писал(а):sanya839, поясню для Вас замечание ChipKiller.

Встаньте вольтметром на вход АЦП контроллера. Убедитесь, что напряжение в любом положении переменного резистора равно напряжению батареи.

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

опорное 5В, измеренное значение АЦП = 512, коэффициент делителя =2, АЦП 10разрядный.

(5*512*2)/1024=5В — реальное измеренное значение напряжения.
Значит надо загрузить ADCSRA последнии три бита нулями, коэф делителя будет 2.
Я праивльно понимаю?
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Преобразование аналогового сигнала

Сообщение Z_h_e »

Встаньте вольтметром на вход АЦП контроллера.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
sanya839
Родился
Сообщения: 6
Зарегистрирован: Вт окт 21, 2014 15:09:10

Re: Преобразование аналогового сигнала

Сообщение sanya839 »

ChipKiller писал(а):для начала разобраться, как работает (и что такое) делитель напряжения

Исправил схему. Теперь схема работает корретктно. Тоесть например Подаю с батареии 5 вольт, потенциометр на 50% в итоге на ножке АЦП 2.5 вольта.
А что касательно программы?почему она работает не корректно??
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Преобразование аналогового сигнала

Сообщение Z_h_e »

Если бы Вы сразу прислушались к советам, то схему бы исправили за 5 минут после первого совета , а не ночью.

Вы в какое среде прошивку пишете? Там же есть режим отладки, ставте точки останова и ищите баг. Я думаю, если это было сделано Вами, то ошибка была бы найдена лично и исправлена, конечно после исправления схемы.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Re: Преобразование аналогового сигнала

Сообщение zero648 »

Ноги AVCC и AREF подключите к питанию контроллера.
Ответить

Вернуться в «AVR»