Использование регистра ввода ввода на Timer1 ATmega328 для определения частоты сигнала
Я пытаюсь получить Arduino UNO для чтения 64cpr квадратурного энкодера. Я специально хочу использовать Timer1 для измерения частоты (и, следовательно, скорости) одного из сигналов датчика.
В конечном итоге я хочу сохранить 10 измерений в массиве для вычисления фильтра скользящего среднего, но по одной вещи за раз. Сначала мне нужно измерить тактовые циклы между двумя нарастающими фронтами.
Вот что у меня так далеко. Любая помощь или комментарии приветствуются:
#include <avr/io.h>
#include <avr/interrupt.h>
const int inputCapture = 8;
void setup(){
sei();
TCNT1 = 0;
TCCR1B = (1<<CS10)|(1<<ICES1); // No prescaling
TIFR1 = 1<<ICF1;
pinMode(inputCapture, INPUT);
Serial.begin(9600);
}
ISR(TIMER1_CAPT1_vect){
thisStep = ICR1;
TCNT1 = 0;
}
void loop(){
Serial.println(thisStep);
}
Прямо сейчас я даже не прыгаю в ISR, который я не понимаю. Я думаю, что все настроил правильно. Прерывания включены. ICES1 должен по умолчанию установить значение 0 или триггер спадающего фронта, что нормально (просто нужно измерить один период). Я выбираю контакт на порт B, чтобы получить (входной) сигнал, который должен быть в порядке. Из документации Atmel я думаю, что Timer1 подключен.
Какие-нибудь мысли? Заранее спасибо!