Период пакета - не менее 300 мс
Нужно ловить первый перепад, выдавать сигнал на выход,
игнорировать следующие в пакете и воспринимать новый перепад только после 280...290 мс
Код: Выделить всё
#define F_CPU 9600000UL // не обязательно
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h> // тоже не нужно
int main(void)
{
DDRB |= (1 << PB3); // выход
TIMSK0 = (1<<TOIE0); // разрешить прерывание по переполнению таймера счетчика Т0
TCNT0 = 0x00; // обнулить счетный регистр
sei();
ACSR|=(0<<ACIE); // прерывание по компаратору вЫкл
ACSR|=(0<<ACIS1) | (1<<ACIS0);
while(1)
{
if(ACSR&(1<<ACO)) // по каждому переходу компаратора
{
PORTB &= ~(1<<PB3); // выход в 0
TCCR0B = (1<<CS00) | (1<<CS02); // запуск таймера без перезапуска
// с предделителем 1024(CLK = 1200000 Гц / 1024/256 = 4 Гц, 250 мс)
}
}
}
ISR(TIM0_OVF_vect) {
TCCR0B = 0x00; // остановка таймера
TCNT0 = 0x00; // обнуление счетного регистра
PORTB |= (1<<PB3); // выход в 1
}
- Вложения
-
- пакет.jpg
- (9.85 КБ) 213 скачиваний


