Главная arrow Программирование arrow AVR arrow Настройка компаратора в контроллере AVR ATMega8 Sunday, March 26 2017  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:

Настройка компаратора в контроллере AVR ATMega8 Версия для печати
Написал microsin   
23.09.2008

Материал статьи взят с http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-analogovogo-komparatora.html#more-54.

Для других моделей AVR все очень и очень похоже. Мега 8 имеет на борту компаратор, со входами AIN1 (прямой вход) и AIN0 (инверсный вход).

Чтобы компаратор заработал его выводы нужно подключить на вход (DDR=0) и отключить подтяжку до единицы (PORT=0).
Регистр конфигураций компаратора ACSR
Биты:
  • ACD включение компаратора 0 включен, 1 выключен. По дефолту там ноль, а значит при старте компаратор включен.
  • ACBG - подключение к прямому входу компаратора внутреннего источника опорного напряжения (ИОН) на 1.22+(-)0.05V. Если 0 то ИОН не подключен.
  • ACO - бит результата. Собственно, это и есть выход компаратора.
  • ACI - флаг прерывания. Я думаю, что ты уже привык к тому, что в AVR есть прерывание на каждый чих. Компаратор не исключение. Устанавливается по событию, сбрасывается после ухода на обработчик либо программно, как всегда, записью в него 1.
  • ACIE - где есть прерывание там должен быть и бит разрешения. Это он и есть. Установив в 1 мы разрешаем прерывания от компаратора. По дефолту, естественно, нуль.
  • ACIC - подключение компаратора к схеме захвата таймера1. При попадании сигнала на схему захвата текущее значение с таймера тут же тырится в специальный регистр захвата, а таймер продолжает считать дальше. А в привязке к компаратору это удобно когда нужно измерять длительности сигналов.
  • Биты ACIS1:ACIS0 определяет условие возникновения прерывания от компаратора:
    • 00 - любое изменение на входе.
    • 01 - зарезервировано для следующих поколений
    • 10 - переход с 1 на 0
    • 11 - переход с 0 на 1

В ATMegaXX есть собственный источник опорного напряжения, и им можно воспользоваться для подачи на один из входов компаратора (если нужно, то через делитель). На вывод AIN1 можно также подключить ЛЮБОЙ выход АЦП. Для того, чтобы это сделать, нужно:

  • В регистре SFIOR (регистр специальных функций) выставить бит ACME
  • Выключить АЦП, сбросив бит ADEN в регистре настроек АЦП (ADCSRA)
  • В регистре ADMUX в разрядах MUX2:MUX1:MUX0 указать номер входа АЦП.

Пример:
Напряжение с аккумулятора проходит через делитель 1.5:10 в результате на 12 вольтах у нас на выходе будет (1.5/(1.5+10))*12=1.56 и только при просадке напруги до 9.5 вольт на выходе делителя будет ниже 1.22 вольта. Использую вход PC5 (это вход ADC5), заправлю его через АЦП в компаратор, а в качестве опорного напряжения возьму встроенный ION который посажу на AIN0 изнутри. При просадке напряжения буду зажигать контрольную лампу.

Что нам нужно:
Для начала подключить ИОН - бит ACBG
Далее, бит прерывания - в обработчике прерываний я включу лампочку
Ну и выставить условие по которому будет прерывание с 0 на 1. Дело в том, что на плюс-вход компаратора идет 1.22 с ИОН, а на минус-вход пойдет 1.5 с делителя. В результате 1.22-1.5<0, следовательно на выходе 0. Ну, а как только ситуация поменяется будет 1.

; Инициализирую компаратор 
LDI R16,(1<<ACBG)|(1<<ACIE)|(1<<ACIS1)|(1<<ACIS0)
OUT ACSR,R16 ; Забрасываем в регистр

IN R16,SFIOR ; Достаем SFIOR
ORI R16,(1<<ACME) ; Выставялем в нем бит ACME
OUT SFIOR,R16

; АЦП у меня по дефолту вырублен, поэтому пока не напрягаюсь с его отключением
LDI R16,5 ; подаю напругу на 5й вход АЦП
OUT ADMUX,R16

Ну и собственно все, осталось только добавить в программу переход по вектору 
.ORG ACIaddr ; Analog Comparator
RJMP Battary_LOW

И добавить где нибудь в программе обработчик прерывания
Battary_LOW: LIGHT_ON ; Вызов макроса зажжения огня.
RETI ; Выход из прерывания.

Последнее обновление ( 23.09.2008 )
 

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2017