Аналоговый компаратор и мультиплексор

Материал из Automata.

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: #include <stdint.h> #include <avr/io.h> #include <avr/interrupt.h> //логическая переменная состояния РС7; static volatile uint8_t status = 0; //о...)
м (Правки Kern (обсуждение) откачены к версии Mrsnaut)
 
(4 промежуточные версии не показаны)
Строка 9: Строка 9:
ISR (ANA_COMP_vect)
ISR (ANA_COMP_vect)
{
{
-
if (status == 0) {//если напряжения на выводе PC7 нет, то
+
if (status == 0) {//если напряжения на выводе PC7 нет, то
-
PORTB |= 0x01;//подаем на него логическую "1" и
+
PORTB |= 0x01;//подаем на него логическую "1" и
-
status = 1;//запаминаем новое состояние;
+
status = 1;//запаминаем новое состояние;
} else {//если есть, то
} else {//если есть, то
-
PORTB &= 0xfe;//подаем на вывод логический "0" и
+
PORTB &= 0xfe;//подаем на вывод логический "0" и
-
status = 0;//запаминаем новое состояние;
+
status = 0;//запаминаем новое состояние;
-
};
+
};
}
}
Строка 21: Строка 21:
int main (void)
int main (void)
{
{
-
DDRB = 0xff;//настраиваем выводы порта В на выход;
+
DDRB = 0xff;//настраиваем выводы порта В на выход;
-
PORTB = 0x00;//без подачи напряжения;
+
PORTB = 0x00;//без подачи напряжения;
-
DDRC = 0xff;//настраиваем выводы порта С на выход;
+
DDRC = 0xff;//настраиваем выводы порта С на выход;
-
PORTC = 0x00;//без подачи напряжения;
+
PORTC = 0x00;//без подачи напряжения;
-
ADMUX = 0x07;//выход мультиплексора модуля АЦП - вывод PC7;
+
ADMUX = 0x07;//выход мультиплексора модуля АЦП - вывод PC7;
-
SFIOR = _BV(ACME);//устанавливаем в качестве инвертирующего входа компаратора выход мультиплексора модуля АЦП;
+
SFIOR = _BV(ACME);//устанавливаем в качестве инвертирующего входа компаратора выход мультиплексора модуля АЦП;
-
ACSR = _BV(ACBG) | _BV(ACIE);//выбираем внутреннее опорное напряжение и разрешаем прерывания от компаратора;
+
ACSR = _BV(ACBG) | _BV(ACIE);//выбираем внутреннее опорное напряжение и разрешаем прерывания от компаратора;
-
SREG = 0x80;//глобальное разрешение прерываний;
+
SREG = 0x80;//глобальное разрешение прерываний;
}
}

Текущая версия

#include <stdint.h>
#include <avr/io.h>
#include <avr/interrupt.h>
//логическая переменная состояния РС7;
static volatile uint8_t status = 0;
//обработчик прерывания от компаратора;
ISR (ANA_COMP_vect)
{
        if (status == 0) {//если напряжения на выводе PC7 нет, то
                PORTB |= 0x01;//подаем на него логическую "1" и
                status = 1;//запаминаем новое состояние;
        } else {//если есть, то
                PORTB &= 0xfe;//подаем на вывод логический "0" и 
                status = 0;//запаминаем новое состояние;
        };
}
//главная функция;
int main (void) 
{
        DDRB = 0xff;//настраиваем выводы порта В на выход;
        PORTB = 0x00;//без подачи напряжения;
        DDRC = 0xff;//настраиваем выводы порта С на выход;
        PORTC = 0x00;//без подачи напряжения;
        ADMUX = 0x07;//выход мультиплексора модуля АЦП - вывод PC7;
        SFIOR = _BV(ACME);//устанавливаем в качестве инвертирующего входа компаратора выход мультиплексора модуля АЦП;
        ACSR = _BV(ACBG) | _BV(ACIE);//выбираем внутреннее опорное напряжение и разрешаем прерывания от компаратора;
        SREG = 0x80;//глобальное разрешение прерываний;
}
Личные инструменты
Микроконтроллеры