Как бы вы все реализовали простую задержку сигнала?

По профессии я разработчик консольных игр и не имею формального образования в области электроники/электротехники. На игровом жаргоне «нуб», если хотите. И все же у меня появилась новая страсть возиться с этим замечательным ремеслом.

На данный момент я пытаюсь учиться и развлекаться, делая игрушку «светодиод с прокруткой» для своей дочери. Моя идея для этого довольно проста, у меня есть регистр сдвига (SN74HC595) и 8 светодиодов, получающих от него входные данные. Будет две кнопки. Когда кнопка A нажата, она «вставляет» в регистр 1, а когда нажимается B, в регистр вставляется 0. При этом вы можете «запрограммировать свой светодиодный шаблон». А затем, щелкнув другим переключателем, регистр сдвига будет тактирован (используя простой нестабильный мультивибратор RC) (замыкание QH' в QA). Делаем узор для прокрутки. Достаточно просто.

Но моя проблема связана с той частью, которая выполняет «вставку» данных в реестр. Скажем, чтобы вставить 1 в регистр, когда кнопка A нажата и отпущена, я сначала должен перевести линию «SER» (данные) регистра в высокий уровень, а затем после короткого периода времени (время установки, 25 нс для таблицу данных регистра) подтяните SRCLK (часы регистра сдвига) к высокому уровню. Вот и все. Однако..

Мои кнопки переключения не дребезжат. Я узнал о дебаунсинге из этой замечательной статьи: Дебаунсинг . У меня не было никаких частей, которые могли бы помочь мне с истеризисом, поэтому мне пришлось просто игнорировать это. Но с помощью указанных там методов я смог рассчитать точные значения резисторов и цоколя, чтобы поддерживать напряжение в нужном диапазоне, пока мой переключатель лязгает и стучит сам с собой. Переключатель дергается в течение 10 мс (приобрел себе дешевый оптический прицел, китайский. Но работает), поэтому я держу его неподвижно около 20 мс. Мои расчеты и результаты моделирования с помощью Multisim.com совпали. Итак, моя кнопка устранения дребезга работает, как и ожидалось.

За исключением случаев, когда я пытаюсь использовать этот «сигнал». Я должен сделать две вещи с этим сигналом. Сначала направьте его в строку SER реестра. А затем после небольшой задержки (25 нс - несколько мс?) направьте его на линию SRCLK, чтобы синхронизировать его. Другими словами, сначала поднимите SER до высокого уровня, затем поднимите SRCLK до высокого уровня. И для введения этой "задержки" я обратился к единственному известному мне механизму задержки - сети RC. Поэтому, как только я получаю выходной сигнал с подавленным дребезгом, я заряжаю конденсатор через резистор, и этот заряженный выходной сигнал я использую для управления SRCLK.

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

Все это затруднительное положение заставляет меня задаться вопросом, правильно ли вообще использовать таймер задержки RC. Как мне подключить вход от коммутатора с отключенным дребезгом к узлу, в котором уже есть конденсатор, не испортив все мои расчеты, или, перефразируя это, как бы вы все реализовали простую задержку сигнала без использования всех причудливых микроконтроллеров и т. д. .?

Вот схема осуждения и задержки. Обратите внимание, что это касается только одной кнопки (а не A и B одновременно). SW2 на первом изображении предназначен только для отладки.

Скриншот

схематический

смоделируйте эту схему - схема, созданная с помощью CircuitLab

Почему вы собираетесь установить время установки 10 мс (100 k и 100 n)? Вы могли бы использовать 100 кОм и 1 нФ и все еще быть далеко за пределами минимального предела. Электроника - это не ремесло, кстати.
Почему я бы использовал время настройки 10 мс? Потому что я подумал, что будет безопаснее не зависать слишком близко к фактическому времени установки 25 нс, и имел эти дополнительные несколько мс в качестве запаса прочности, как я уже сказал, дилетант. Я переосмыслю это. Ваше здоровье. PS: Электроника - это не ремесло? :) отмеченный.
Для справки, миллисекунда в 1 000 000 раз длиннее наносекунды. Это огромный запас прочности.
Боже... Кхм, честно говоря, я сильно запутался. Предполагается, что m = микросекунды. Теперь я понимаю, почему Энди сказал «миль прочь». Спасибо, что указали на это, Михаил.

Ответы (2)

Есть только одна проблема, используемый вами метод устранения дребезга будет делать крайне медленно нарастающие и спадающие фронты сигнала, из-за чего 74HC595 может работать некорректно. В техническом описании чипа говорится, что при напряжении питания 5 В фронты сигнала должны изменяться быстрее, чем 500 нс/В, поэтому для изменения 5 В необходимо использовать не более 2,5 мкс во время перехода (или, может быть, 1,5 мкс в диапазоне от 1,5 В до 3,5 В). )

В статье Ганссле используются резисторы и конденсаторы для фильтрации коротких всплесков в медленно меняющееся напряжение, но в ней также упоминается, что многим микросхемам не нравится, когда они запускаются с медленными фронтами, и это сводится к одному быстрому фронту с помощью логики триггера Шмитта. ворота.

Помимо этого, вы можете использовать триггер Шмитта для возведения в квадрат сигнала для ввода данных, а затем просто использовать быстрый RC-фильтр для задержки сигнала на несколько наносекунд и еще один триггер Шмитта для возведения в квадрат тактового импульса.

Спасибо за указание на это. Так что триггер Шмитта был там не просто так. Я поищу, как сделать триггер Шмитта. Ссылайтесь на ресурсы по этой теме, если они вам известны. Еще раз, ценю ваши предложения.
Для триггера Шмитта используйте последовательно два вентиля от 74hc14 (чип имеет 6 триггеров, но они инвертируются, поэтому используйте второй, чтобы вернуться к исходному сигналу). Доступны неинвертирующие триггеры Шмитта, но только либо в TTL, а не в CMOS (например, 74ls541 имеет входы Шмитта, а 74hc541 нет), либо это более современные микросхемы, которые поставляются только в корпусах для поверхностного монтажа (например, 74hc7014).

Измените схему подавления дребезга в 10 раз, т. е. уменьшите резисторы в 10 раз и увеличьте емкость конденсатора до 1 мкФ. Теперь схема «подавление дребезга» имеет (своего рода) выходной «импеданс» в диапазоне 5–10 кОм, что означает, что следующая за ней схема на 100 кОм будет иметь гораздо меньшее влияние на схему устранения дребезга. (Он будет иметь некоторые, но более управляемые). Если вам нужна еще большая задержка, вы можете следовать схеме 100k с резистором 1M и конденсатором 0,01 мкФ, потому что вы управляете входами HC CMOS, которые имеют чрезвычайно высокое входное сопротивление.

Я не буду комментировать вашу схему устранения дребезга, поскольку, судя по вашим комментариям, она у вас работает. Однако я просто скажу (и могу ошибаться), что диод в вашем дебаунсе мне кажется неправильным (наоборот). Я думаю, что «переключатель будет быстро замыкаться на землю много раз подряд», и первое «короткое замыкание на землю» разрядит конденсатор через диод (если вы перевернете его), но из-за R это требует времени чтобы конденсатор вернулся к V +, следовательно, последующие скачки очень мало делают, поскольку напряжение на крышке все еще близко к нулю. ПОМОЩЬ.

Спасибо за предложение. Понятно, что. Что касается диода, поправьте меня, если я ошибаюсь, но с этой настройкой от Vcc - к - Gnd он смещен в прямом направлении, верно? Когда переключатель замкнут, а крышка разряжается, он становится смещенным в обратном направлении, и ток не будет течь через этот узел? Это то, о чем я думал, по крайней мере. Назначение диода состояло в том, чтобы ускорить время зарядки, игнорируя R2, ​​когда кнопка разомкнута.