Ðналоговый компаратор и мультиплекÑор
Материал из 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 нет, то | |
- | + | PORTB |= 0x01;//подаем на него логическую "1" и | |
- | + | status = 1;//запаминаем новое состояние; | |
} else {//если есть, то | } else {//если есть, то | ||
- | + | PORTB &= 0xfe;//подаем на вывод логический "0" и | |
- | + | status = 0;//запаминаем новое состояние; | |
- | + | }; | |
} | } | ||
Строка 21: | Строка 21: | ||
int main (void) | int main (void) | ||
{ | { | ||
- | + | DDRB = 0xff;//настраиваем выводы порта В на выход; | |
- | + | PORTB = 0x00;//без подачи напряжения; | |
- | + | DDRC = 0xff;//настраиваем выводы порта С на выход; | |
- | + | PORTC = 0x00;//без подачи напряжения; | |
- | + | ADMUX = 0x07;//выход мультиплексора модуля АЦП - вывод PC7; | |
- | + | SFIOR = _BV(ACME);//устанавливаем в качестве инвертирующего входа компаратора выход мультиплексора модуля АЦП; | |
- | + | ACSR = _BV(ACBG) | _BV(ACIE);//выбираем внутреннее опорное напряжение и разрешаем прерывания от компаратора; | |
- | + | 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;//глобальное разрешение прерываний; }