Не использовать прерывание восходящего края для внешних часов Arduino 2650

Я возюсь с Arduino Mega2560r3 и не могу запустить таймер 4 на восходящем фронте внешних часов. Он срабатывает только на краю падения.

Я пытался

     TCCR4B = (1 << CS42) | (1 << CS41) | (1 << CS40);

и

     TCCR4B = (1 << CS42) | (1 << CS41);

... одно из которых должно сработать, но теперь я выдернул все свои волосы и обращаюсь к более широкому сообществу, чтобы увидеть то, чего я не вижу!

void setup() {
  DDRE = (1 << PE5);   //Dig pin 3 as output

  noInterrupts();
// Настройка таймера 4 (только ICP4 (вывод 49) и ICP5 (вывод 48) подключены к Arduino MEGA2560 r3)
  TCCR4A = 0;
  TCCR4B = 0;
  TCCR4B = (1 << CS42) | (1 << CS41) | (1 << CS40);    // CTC mode does not reset when using force
  TIMSK4 = (1 << ICIE4);    // enable capture interrupt
  interrupts();
}

ISR(TIMER4_CAPT_vect)
{
  PORTE ^= (1 << PE5);  // Toggle PE5
}

Выход области ниже - синий-внешние часы (да, я знаю, что это синусоидальная волна!) , а пурпурный-вывод 3

falling edge trigger output

, 👍1


1 ответ


1

Похоже, вы путаете две совершенно разные вещи.

  1. Вы можете использовать внешний сигнал для управления таймером. То есть таймер будет “отмечаться” по краям этого сигнала. В этом режиме поведение таймера можно было бы более точно описать как “счетчик”, поскольку он подсчитывает границы внешнего сигнала. Внешний сигнал должен подаваться на вывод Tn (для таймера n). Только контакты T0 (38) и T5 (47) маршрутизируются на Arduino Mega2560.

  2. Вы можете использовать таймер для отметки времени по краям внешнего сигнала. Это называется “захват ввода”. При обнаружении ребра текущее значение регистра счетчика немедленно копируется во входной регистр захвата ICRn, и может быть передано прерывание. Внешний сигнал должен подаваться на вывод ICPn (ICP4 = 49, ICP5 = 48).

Если вы хотите использовать захват ввода, вы, скорее всего, захотите синхронизировать таймер с системными часами, возможно, с помощью прескалера. И вы хотите прочитать реестр ICRn в ISR. Ребро, которое запускает захват, выбирается с помощью бита ICESn (Выбор ребра входного захвата) управляющего регистра TCRNB.

,

Спасибо за вашу помощь - я ошибочно подумал, что ICPn также является входом таймера ext. Мне придется использовать таймер 5, чтобы заставить внешние часы работать, но теперь, когда вы объяснили это, я не уверен, что будет более элегантным для этого приложения... (Я пытался поддержать ваш ответ, но я здесь слишком нуб), @DrLoopyTunes