Использование регистра ввода ввода на 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 подключен.

Какие-нибудь мысли? Заранее спасибо!

0 ответов

Другие вопросы по тегам