Не использовать прерывание восходящего края для внешних часов 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
@DrLoopyTunes, 👍1
1 ответ
Похоже, вы путаете две совершенно разные вещи.
Вы можете использовать внешний сигнал для управления таймером. То есть таймер будет “отмечаться” по краям этого сигнала. В этом режиме поведение таймера можно было бы более точно описать как “счетчик”, поскольку он подсчитывает границы внешнего сигнала. Внешний сигнал должен подаваться на вывод Tn (для таймера n). Только контакты T0 (38) и T5 (47) маршрутизируются на Arduino Mega2560.
Вы можете использовать таймер для отметки времени по краям внешнего сигнала. Это называется “захват ввода”. При обнаружении ребра текущее значение регистра счетчика немедленно копируется во входной регистр захвата ICRn, и может быть передано прерывание. Внешний сигнал должен подаваться на вывод ICPn (ICP4 = 49, ICP5 = 48).
Если вы хотите использовать захват ввода, вы, скорее всего, захотите синхронизировать таймер с системными часами, возможно, с помощью прескалера. И вы хотите прочитать реестр ICRn в ISR. Ребро, которое запускает захват, выбирается с помощью бита ICESn (Выбор ребра входного захвата) управляющего регистра TCRNB.
- Выводы прерываний Arduino Mega 2560 и отображение портов с помощью поворотного энкодера
- Эквивалент PORTB в Arduino Mega 2560
- Допустимые параметры выходного порта на Mega 2560
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
Спасибо за вашу помощь - я ошибочно подумал, что ICPn также является входом таймера ext. Мне придется использовать таймер 5, чтобы заставить внешние часы работать, но теперь, когда вы объяснили это, я не уверен, что будет более элегантным для этого приложения... (Я пытался поддержать ваш ответ, но я здесь слишком нуб), @DrLoopyTunes