воскресенье, 7 апреля 2013 г.

Программирование аналогового компаратора в C

Аналоговый компаратор предназначен для сравнения уровней напряжений на его входах. Он очень прост в использовании. Управление осуществляется всего одним регистром, если не считать использование дополнительных входов. Аналоговый компаратор имеет внутренний ИОН 1.1 В, который мы будем использовать в данной программе.
Рекомендую ознакомиться с описанием регистров аналогового компаратора:
Кстати, если к неинвертирующему входу подключить ИОН, то его напряжение также появится на выводе AIN0 (12 ножка). К выводу AIN1 (13 ножка) подключим потенциометр и будем изменять напряжение на нем. Если напряжение на входе AIN1 превысит 1.1 В, то бит ACO (5) регистра ACSR, являющийся выходом компаратора, сбросится в 0. Используя этот бит, мы будем управлять светодиодом, подключенным к порту B0 (14 ножка).
Проще говоря, если напряжение на входе AIN1 больше 1.1 В, загорается светодиод, если меньше - гаснет.
Рисунок 1 - Схема подключения

Текст программы:

#include <avr/io.h> //подключение стандартной библиотеки ввода/вывода

int main(void)
{
//SETUP
//Comp
ACSR=0x40; //подключаем ИОН ко входу AIN0
//I/O
DDRB=0xFF; //порт B как выход
//Programm
while(1)
{
while((ACSR&0x20)==0x20) //пока выход компаратора = 1 (AIN0>AIN1), выполняем действие
{
PORTB=0x00; //гасим светодиод
}
PORTB=0xFF; //зажигаем светодиод
}
}

При вращении потенциометра, напряжение на входе AIN1 увеличивается и становится больше 1.1 В это способствует зажиганию светодиода. Если вращать потенциометр в другую сторону, светодиод погаснет.
Стоит запомнить, что бит ACO регистра ACSR принимает значения:
  • 0 - если AIN0<AIN1
  • 1 - если AIN0>AIN1