Прерывание таймера Arduino: почему при включении прерывания я получаю небольшой неожиданный импульс? ⇐ C++
Прерывание таймера Arduino: почему при включении прерывания я получаю небольшой неожиданный импульс?
Я написал простой код для создания двух выходных линий с одинаковой частотой (например, 100 Гц).
Как только я нажал кнопку (тактильный переключатель), 1-я выходная линия должна начать выдавать импульс, а 2-я должна отставать на 25% от периода 1-й.
Хотя я получаю желаемую частоту, наблюдая за выходным сигналом с помощью осциллографа, я заметил небольшой импульс сразу после активации прерывания.
Изображение непрерывного чтения Изображение начала чтения
Это шум? или просто нормальное поведение? Есть ли способ избавиться от этого?
Я попробовал масштабировать и измерил это и получил ширину импульса 1,8125 мкс при 4,75 В. Увеличенное изображение и измерения
Я беспокоюсь, что если, например, я попытаюсь использовать это для чувствительного устройства подсчета пульса, это может привести к неточности подсчета.
Я подумал, что это может быть просто шум, вызванный тактильным переключателем, который я использую.
В качестве быстрой настройки я попробовал установить задержку в 1 секунду перед активацией прерывания после нажатия кнопки. Но проблема все еще остается.
Возможно, я упускаю здесь что-то фундаментальное?
Кстати, я использую Arduino Mega 2560. У меня есть 2 штуки, я пробовал обе, но поведение у них одинаковое.
Это код, который я использовал (задержка в 1 секунду все еще не применяется):
интервал начального времени = 0; двойная частота = 100; //устанавливаем желаемую частоту двойной период = 0, timerTicks = 0; двойная пошлина = 0,5; //устанавливаем рабочий цикл на 50% двойной импульсный разрыв = 0,25; //смещаем второй импульс на 25% недействительная настройка() { pinMode(22, ВХОД); //устанавливаем цифровой контакт 22 как ВХОД (тактильный переключатель) нетПрерывания(); DDRE |= (1
Я написал простой код для создания двух выходных линий с одинаковой частотой (например, 100 Гц).
Как только я нажал кнопку (тактильный переключатель), 1-я выходная линия должна начать выдавать импульс, а 2-я должна отставать на 25% от периода 1-й.
Хотя я получаю желаемую частоту, наблюдая за выходным сигналом с помощью осциллографа, я заметил небольшой импульс сразу после активации прерывания.
Изображение непрерывного чтения Изображение начала чтения
Это шум? или просто нормальное поведение? Есть ли способ избавиться от этого?
Я попробовал масштабировать и измерил это и получил ширину импульса 1,8125 мкс при 4,75 В. Увеличенное изображение и измерения
Я беспокоюсь, что если, например, я попытаюсь использовать это для чувствительного устройства подсчета пульса, это может привести к неточности подсчета.
Я подумал, что это может быть просто шум, вызванный тактильным переключателем, который я использую.
В качестве быстрой настройки я попробовал установить задержку в 1 секунду перед активацией прерывания после нажатия кнопки. Но проблема все еще остается.
Возможно, я упускаю здесь что-то фундаментальное?
Кстати, я использую Arduino Mega 2560. У меня есть 2 штуки, я пробовал обе, но поведение у них одинаковое.
Это код, который я использовал (задержка в 1 секунду все еще не применяется):
интервал начального времени = 0; двойная частота = 100; //устанавливаем желаемую частоту двойной период = 0, timerTicks = 0; двойная пошлина = 0,5; //устанавливаем рабочий цикл на 50% двойной импульсный разрыв = 0,25; //смещаем второй импульс на 25% недействительная настройка() { pinMode(22, ВХОД); //устанавливаем цифровой контакт 22 как ВХОД (тактильный переключатель) нетПрерывания(); DDRE |= (1
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Отладка VSCode C++ — прерывание во время выполнения кода (прерывание всего)
Anonymous » » в форуме C++ - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Отладка VSCode C++ — прерывание во время выполнения кода (прерывание всего)
Anonymous » » в форуме C++ - 0 Ответы
- 35 Просмотры
-
Последнее сообщение Anonymous
-