Тема: Частотомер ардуино
На вход D5 подается частота 2 МГц с другой платы ардуино
2 Мгц
volatile byte x;
unsigned long f;
void setup(){
DDRD = 0b00000000; // весь порт D как вход
PORTD = 0b00100000; // подтягивающий резистор на PD5 (вход T1)
Serial.begin(9600);
cli();
TCCR1A = 0;
TCCR1B = 0;
TCCR1B &= ~(1 << CS12)|(1 << CS11)|(1 << CS10); //Внешний тактовый источник на выводе T1. Тактирование по фронту
TIMSK1 |= (1 << TOIE1); // бит TOIE1 в регистре TIMSK1 взывает прерывание когда таймер переполняется
sei();
}
void loop(){
x=0; // обнулить переменную х
TCNT1 = 0; // обнулить счетный регистр
TCCR1B |= (1 << CS12)|(1 << CS11)|(1 << CS10); // разрешить прерывания
delay(993);delayMicroseconds(105); // ждем 1 секунду пока таймер считает импульсы
TCCR1B &= ~(1 << CS12)|(1 << CS11)|(1 << CS10); // запретить прерывания
f = x * 65535 + TCNT1; // подсчет частоты
Serial.println(f);
}
ISR (TIMER1_OVF_vect){x++;}// при переполнении увеличить переменную х на 1