Эмуляция сигнала ДПКВ 60-2

Во втором скетче широкий импульс опять есть перед пропущенными. Сейчас первый посмотрю.

Итак, скрин к первому скетчу твоему:

А это ко второму:

Я разницу не вижу. Если она есть - нужно выяснить с чем она связана?

Может быть действительно проблема в резисторе?
Ну тогда можно и к энкодеру перейти (код уже позволяет).

Здесь все одинаково. Этот импульс появляется не каждый раз перед пропущенным, а перепрыгивает через раз. Но стабильно . Сейчас попробую поймать. Во втором скетче.

Хорошо бы его и «поймать» и когда именно он происходит выловить.

У меня кроме резистора и ТМ1637 ничего не подключено.
Попробуй отключить для начала резистор (но мне в него не верится уже), а потом ТМ1637. Для теста.

Отключал резистор и тм 1637

. Импульс остается. Во втором скетче чередуется с нормальным.

Что значит «чередуется с нормальным»?

Вот первый (из последнего сообщения) скрин, что было?

Поясни (разверни подробнее) эту фразу.

Во втором скетче нормальный импульс есть( на втором фото) , но за ним через 58 зубов проскакивает широкий импульс перед пропущенным( на первом Фото).

Опиши как ‘поймать’ этот «пропущенный». Я делаю максимальную развертку (чтобы видеть импульсы пропущенных ещё) и потом приближаю. Как это делаешь ты?

BOOM, на моем осцил.на фото кнопка ок. Она под зеленой наклейкой. Я на нее нажимаю и экран останавливается. Развертка 0.5 мс.

BOOM, предлагаю отдохнуть)

Я, конечно же , далеко не гений (да и не пытаюсь им казаться), но я понимаю как работают код который я написал.
Увеличиваться длительность импульса в прерывании может только если её другое прерываение «прерывает». Такое возможно, но слабо верится чтобы оно на столько прерывало (хотя в ардуино и не такое может быть).

Но именно чтобы определенный импульс - такого быть, скорее всего, не может. Ты можешь исследовать не только пред импульс (что перед большими пропусками) но и все остальные?

Поддерживаю. Нужно «переварить» информацию, заодно поищу у себя 1637 (вроде где-то были).

:+1: Хороших выходных.

analogRead да и map для чисел long - выполняются довольно долго. И расположены они по времени как раз перед первыми “пробелами”. Вполне возможно, именно они и увеличивают ширину импульса перед “пробелами”.
Длительность analogRead - примерно 112 мкс, map по идее - тоже десятки (а то и вся сотня) мкс. При большой частоте это должно сказываться.
Вывод: нужно заранее измерить время выполнения блока внутри if (millis() - mill > 1000) и вычитать его из tick_delay при первом проходе цикла.
Только вот беда: по моим подсчетам минимальное значение tick_delay примерно 91, а поправка по прядку величины ~200, т.е. на высоких частотах такой алгоритм не реализуем.

PS. Вероятно, нужно этот блок (который с if) выполнять внутри первого пробела, тогда у нас будет лимит времени более 270 мкс.
То есть технология, как я вижу, такая:

  1. Заранее измеряем время выполнения внутри if, и заносим его в константу delta_delay.
  2. В нашей программе гоним общий цикл (но не до 240, а до 236), и проверку осуществляем внутри цикла по значению счетчика i.
  3. При i == 0 осуществляем проверку и настройку частоты. Задержка при этом 3*tick_delay - delta_delay.
  4. При i == 1 делаем задержку 3*tick_delay.
  5. При всех остальных i задержка tick_delay.
1 лайк

А как это сказывается на прерываниях по совпадению? Поясни пожалуйста.

В заголовке темы указано, что решение приведено в сообщении №16. Именно по нему я и готовил ответ. Там никаких прерываний нет.
Это к тому, что если ТС хочет получить адекватный совет, то следует поддерживать заголовок в актуальном состоянии.
Укажите хоть номер поста. в котором содержится обсуждаемый вариант программы. Без этого как-то непонятно, на что ориентироваться.

В заголовке в качестве ответа указан минимально модифицированный РАБОЧИЙ код от ТС (правил я).

А далее он захотел приделать к нему ТМ1637 и после этого код перестал работать. Я переписал его на работу по прерываниям (вместо первоначального - цикл с задержками в лупе). Сохранив при этом вывод на ТМ1637.
Но ТС говорит, что код работает не правильно - перед пропусками двух «зубов» у него более длинный импульс и якобы от этого остальные блоки «не переваривают» сигнал. У меня такого нет. На этом вчера и разошлись…

Тот код я выложил в сообщении #44.

Но ты, как полный педант, мог бы и прочитать тему для полного понимания (не так и много сообщений в ней). Не в твоих же правилах «прыгать по верхам», а зачем то ТС обвинил ))