Прерывание таймера Arduino: почему при включении прерывания я получаю небольшой неожиданный импульс?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Прерывание таймера Arduino: почему при включении прерывания я получаю небольшой неожиданный импульс?

Сообщение Anonymous »

Я написал простой код для создания двух выходных линий с одинаковой частотой (например, 100 Гц).
Как только я нажал кнопку (тактильный переключатель), первая выходная линия должна начать генерировать импульс, а вторая должна отставать на 25% от периода первой.
Пока я получаю нужную частоту, наблюдая за выходным сигналом с помощью осциллографа, я заметил небольшой импульс сразу после активации прерывания.
Изображение непрерывного чтения
Изображение начала чтения
Это шум? или просто нормальное поведение? Есть ли способ избавиться от этого?
Я попробовал масштабировать и измерить это и получил ширину импульса 1,8125 мкс при 4,75 В.
Увеличенное изображение и измерение
Я беспокоюсь, что если, например, я попытаюсь использовать это с чувствительным устройством подсчета импульсов, это может привести к неточности подсчета.
Я подумал, что это может быть просто шум, вызванный тактильным переключателем Я использую.
В качестве быстрой настройки я попробовал поставить задержку в 1 секунду перед активацией прерывания после нажатия кнопки. Но проблема все еще сохраняется.
Возможно, я здесь упускаю что-то фундаментальное?
Кстати, я использую Arduino Mega 2560. У меня есть 2 ПК, я пробовал на обоих, но они ведут себя одинаково.
Это код, который я использовал (задержка в 1 секунду все еще не применяется):

int initialTime = 0;
double frequency = 100; //set my desired frequency
double period = 0, timerTicks = 0;
double duty = 0.5; //set duty cycle to 50%
double pulseGap = 0.25; //offset 2nd pulse by 25%

void setup() {
pinMode(22, INPUT); //set digitalpin 22 as INPUT (tactile switch)

noInterrupts();
DDRE |= (1

Подробнее здесь: https://stackoverflow.com/questions/777 ... n-enabling
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»