Все началось с короткого видео в соцсетях, возможно многие видели брелок, который превращает нажатые точки и тире азбуки Морзе в буквы на дисплее. Фишка в том, что светодиоды там расположены в виде «дерева поиска». Длительное нажатие – загорелось тире, короткое – точка. Красивый корпус, пищалка и световая индикация в современной гонке за вниманием.
Увидев эту идею, сразу загорелся реализовать на Arduino, пишем пару циклов за 10 минут и готово, но таких программ миллион, мы привыкли прятать любую сложность за строчками кода, превращая разработку железа в банальное подключение модулей к микроконтроллеру.
Меня вдохновила мысль о создании подобного устройства на базе отдельных микросхем на которых можно выполнять даже сложные вычисления без единой строки кода. Это позволит подтянуть знания в схемотехнике, разработке устройств и просто займет некоторое время.
В этой статье я расскажу, как спроектировать на «железе» мозги устройства, таймер для отсчета времени, побороть гонку сигналов, зажечь светодиод длинным или коротким нажатием кнопки и собрать это на одной плате, не имея внутри ни одного байта программного кода.

Немного теории: Магия точек и тире
Азбука Морзе – по сути, первый в истории цифровой код, где информация передается не уровнем напряжения, а временем. Сигнал – наше физическое воздействие: короткое или длительное (в три раза длиннее) нажатие кнопки. Символ – выводимая буква в соответствии с количеством и длительностью нажатий.
Проанализируем устройство, составим план и цель к которой необходимо прийти (хотя бы приблизиться). Первое, что бросается в глаза это дисплей с символами, также элемент ввода, с которым взаимодействует человек и можно предположить некий внутренний блок для обработки и дешифрации сигналов. Получаем три блока:
Блок распознавания, входной каскад, который превращает длительность нажатия кнопки в один из двух сигналов при коротком нажатии 0 – точка, при длительном зажатии 1 – тире.
Блок навигации, принимает 0 или 1, сохраняет биты сигналов набранного кода.
Блок индикации, дешифрирует и визуализирует нажатия.
1 Блок распознавания
В блоке распознавания нам нужно превратить нажатие кнопки в один из двух цифровых сигналов: короткий импульс – точка, длинный – тире. Значит необходимо понимать сколько времени мы нажимаем на кнопку. Когда дело касается времени, сразу возникает желание использовать NE555 – популярная микросхема универсального таймера позволяющая формировать одиночные и повторяющиеся импульсы со стабильными временными характеристиками.
Под рукой была книга с пошаговым обучением электроники и примерами использования NE555 [1]. В ней описан принцип работы схемы одновибратора (Схема 29. Специализируемая схема задержки) и предоставлен график для удобства выбора компонентов регулирующих длительность получаемого импульса, который можно вычислить более точно по формуле:
где T – длительность, с; R – сопротивление, Ом; C – емкость, Ф.

Для создания временного сигнала на микросхему необходимо подать короткий импульс смещающий вывод микросхемы к земле, если использовать только кнопку, то при длительном зажатии (больше времени счета) на выходе получиться просто инвертированный сигнал. Воспользуемся дифференцирующей RC-цепочкой и подберем параметры цепи в симуляторе Proteus. Важно добавить диод, иначе схема будет генерировать в конце работы кнопки сигнал обратной полярности, что может повлиять на работу или испортить МС.

Собираем следующую часть схемы и проверяем ее работоспособность. Подаем запускающий сигнал и получаем импульс длительностью (на схеме старые значения):
В симуляции видна красная линия – заряд конденсатора до напряжения 63,2% и зеленая линия - длительность выходного сигнала. В реальности необходимо настроить с помощью переменного резистора длительность тире, как три длительности точки.

(Немногим изменил схему, убрал инвертор за ненадобностью) Подключим D-триггер, на синхронизирующий вход C будем подавать сигнал с кнопки, а на вход D после NE555. Таким образом при коротком нажатии на входе D будет 1, тем самым на инверсном выходе получим 0 – точка. При длительном нажатии после окончания отсчета на входе D будет 0, что переключит выход D-триггера в 1 – тире. Синхронизирующий сигнал зависит от кнопки, чтобы избавиться от задержки при коротком нажатии.
Напишем небольшой код в Generator Mode – Easy HDL Generator Properties для реализации нажатий кнопки, 1011 (0 – 50 мс, 1 – 150 мс):
OUT = 1 //вывод логической 1 SLEEP FOR 50m //ожидание 50 мс OUT = 0 //вывод логического 0 SLEEP FOR 150m OUT = 1 SLEEP FOR 50m OUT = 0 SLEEP FOR 50m OUT = 1 SLEEP FOR 150m OUT = 0 SLEEP FOR 150m OUT = 1 SLEEP FOR 50m OUT = 0 SLEEP FOR 150m OUT = 1 END

Подаем 1 – кнопка отключена, далее подаем 150 мс – 0, так как длительность задержки NE555 137,5 мс, этот сигнал засчитывается как длинный и на выходе сохраняется 1. Ожидаем 50 мс и нажимаем на кнопку 50 мс, так как это меньше времени задержки, мы видим переключение выхода D-триггера в 0.
При создании даже этой части устройства я столкнулся с некоторыми интересными вопросами:
Сразу не подумал, что D-триггеру для сохранения сигнала необходимо переключение сигнала из 0 в 1, что составило задачку на подумать. Так же возник вопрос, какой сигнал подать на синхронизирующий вход, если с кнопки, то можно нажать слишком быстро, и если время задержки не закончится, то короткий сигнал не зарегистрируется. Или с выхода NE555, тогда при коротком нажатии сигнал загорится не сразу, а по окончании отсчета. Выбрал кнопку, так как считаю задержку после нажатия в данном устройстве не оправданной.
Как-то при пайке не отключил макетную плату от источника питания, что нарушило работу NE555, которую пришлось перепаивать и добавлять сокет для быстрой замены.
Под рукой оказались разные МС элемента НЕ: ЛН1 и ЛН2. Кажется такие одинаковые, а работают по разному. ЛН1 выдает полноценные уровни 0 и 1 (от 3,5 В), а в ЛН2 имеет выход с открытым коллектором, который может притягивать выход к земле, а 1 можно получить при помощи подтягивающего резистора. Однако обе не идеальны для работы с RC-цепями. Так же в Proteus изначально начал использовать элемент НЕ 7404 (аналог ЛН1), но из-за особенности ТТЛ при подключении на вход резистор больше нескольких кОм (я применял 15 кОм) вытекающий ток из МС создавал ложные срабатывания. Поэтому остановился на 74HC14 – инверторы с триггером Шмитта, в котором есть гистерезис. При подаче плавно нарастающего сигнал от конденсатора на выходе будет стабильный сигнал.
Блок навигации
Блок навигации, это центральная часть устройства он должен принимать сигналы точка/тире, сохранять и подготавливать их для вывода. Для сохранения всех переходов по дереву отлично подойдет МС 74HC595 с ее помощью можно реализовать сохранение пути к букве, а также всех нажатых сигналов. При использовании обычного железа (без программируемых МК) будет лучше уменьшить количество импульсов и использованных шин, поэтому будем использовать 74HC164, аналог, но без дополнительной линии сдвига из внутренней памяти в выходные регистры, что для нашего использования только усложнит и затормозит вывод.
Возможны разные способы создания и хранения размера дерева, например при каждом символе записывать разделительную 1 (те при записи точки будет записано 01), однако это усложняет процесс записи и возникают сложности синхронизации подачи сигналов 1 и сигнала необходимого символа, а также сложнее логически понять схему для дешифраторов. Наиболее простой использовать второй регистр для записи количества знаков.
Так первый регистр "Путь" и второй "Уровень" разрешат вопрос синхронизации, упростят понимание логики работы, упростят схему дешифраторов.
После подачи сигнала на D-триггер важно задержать сигнал на некоторое время, иначе регистр сохранит предыдущие символы, не дождавшись переключения D-триггера, создадим простейшую схему задержки используя инверторы и RC-цепь [2]. Для этого достаточно минимальной задержки (на схеме старые значения):

При длительном бездействии устройство должно возвращаться в начальное положение – перезапускаться, создадим RC-цепь для ожидания времени после нажатия кнопки, через диод конденсатор заряжается и начинает постепенно разряжаться через резистор, спустя 1,128 с обнуляются регистры и запись начинается заново.

Блок индикации
Блок состоит из дешифраторов 74HC138, имеющие 3 входа и 8 выходов, а также два инверсных и один прямой разрешающие входы, которые позволяют активировать необходимую букву при определенном вводе сигналов.
Для разработки схемы соединений дешифраторов буквы необходимо объединить в группы различающиеся по количеству введенных символов и первому символу, который разделяет дерево на правую и левую часть:
Буквы по одному или двум сигналам (6: E, T, I, A, N, M). В данном случае для дешифрирования используется первые два вывода регистра "Путь", а для различия, например, E=0 и I=00 к третьему входу подключена вторая нога регистра "Уровень". Первая нога "Уровень" – разрешение на работу, 3 и 4 – запрет.
Удачно сложилась (или это было продуманно при создании азбуки) группа состоящая из трех сигналов имеет восемь символов (8: R, S, W, U, O, G, D, K). Связь самая простая, три первых вывода регистра "Путь", Третья "Уровень" – разрешение, 4 – запрет.
и 4. Разделяют буквы (6 и 6: V, F, L, P, J, H и Q, Z, B, X, Y, C), состоящие из четырех сигналов, для разрешения работы подключаем четвертый вывод "Путь" к прямому одного и инверсному другого входу дешифратора для разделения дешифраторов на условно "правый" и "левый" (первый сигнал 0 или 1), разрешение работы осуществляется с помощью четвертого вывода "Уровень", подключаем в свободные входы, так как один свободный вход инверсный используем элемент НЕ.

Финальные доработки
Для отключения работы кнопки при четвертом нажатии подключим четвертый вывод регистра "Уровень" к кнопке вместо земли. Если вывод не активен на нем 0, он управляет NE555, после четырех нажатий на кнопке 1 – она блокируется и не взаимодействует с NE555.
Выбрано напряжение 3 В от батареи CR2032, хочется создать наиболее компактный вариант, в случае нехватки мощности можно использовать элементы ААА. В связи с этим применяется TLC555 – более экономична и работает от 2В.
Добавил пищалку и двойной переключатель на четыре вывода для отключения устройства, включения и отключения пищалки. Так как активные пищалки настроены на частоты более 2 кГц я решил использовать свой генератор – симметричный мультивибратор на паре транзисторов разной проводимости.

Добавил конденсаторы по питанию МС для исключения скачков при переключении внутренних каскадов, и защиты от шумов RC-цепей. Подправил время работы RC генераторов.
Разработка печатной платы
Разработка печатных плат в Proteus не самое удобное занятие, поэтому пришлось перенести схему в EasyEDA. Размеры выбрал в формате карты, шелкографией обозначил символы.

Выводы: В ходе проекта было спроектировано и реализовано устройство дешифрации азбуки Морзе на базе жесткой логики. Разработан входной каскад распознавания на базе таймера TLC555 и D-триггера, реализована схема измерения длительности импульса с помощью RC-цепей. Блок стабильно дифференцирует «точку» и «тире», преобразуя их в логические уровни 0 и 1. Спроектирован блок навигации и памяти, с помощью каскада сдвиговых регистров 74HC164 организовано хранение 4-битного кода символа и отслеживание глубины дерева поиска (до 4-х уровней). Реализована аппаратная дешифрация на базе четырех дешифраторов 74HC138 выстроено интерактивное дихотомическое дерево на плате. Решена проблема избыточного ввода: логика автоблокировки на выходе Q4, предотвращающая ошибки при попытке ввода более чем 4-х символов в одной последовательности и создана шина Reset. Оптимизировано энергопотребление, используется CMOS-серии микросхем, запитано устройство напрямую от одного элемента CR2032, сохранив при этом компактный форм-фактор.
Работоспособность схемы подтверждена циклом симуляций в среде Proteus с оптимизацией параметров для работы в реальном времени. Создана печатная плата, произведен подбор компонентов.
Литература:
Трейстер Р. – Радиолюбительские схемы на ИС типа 555: Пер. с англ. – М.: Мир, 1988. – 263 с.
Хотел бы получить отзывы, что можно исправить, как оптимизировать. Схемотехникой и печатными платами занимался не много, но есть образование и цель изучать новое.
Комментарии (6)

Grox
10.05.2026 18:34А думали сделать вариант с QWERTY раскладкой светодиодов? Насколько это сложнее?

lazarus_net
10.05.2026 18:34А как, вы товарищи паузы обрабатываете?
Вообще-то код Морзе вроде как без обработки пауз не идентифицируется
А : . -
Е: .
Т: -
С: . . .
О: - - -
У вас последовательность:
. - . - - - . . . -
Это что будет?
Плюс передача шифрограмм идёт группами по 5 символов, если не ошибаюсь:
ххххх ххххх ххххх
Как будете интерпретировать?
Как вы могла догодаться - пробела в азбуке Морзе нет и он не предается.
В качестве упражнения можете попробовать интерпретировать принятую последовательность (пишу без пробелов, как раз в кодовую группу укладывается :)
ДЕКРС
Иногда передают как ДЕКРСДЛБ
Чтобы сделать жизнь ещё веселее:
Скорость передачи может варьироваться. Обычно 10-12 групп в минуту , если не ошибаюсь вроде как могут до 20 групп в минуту передавать.

Astroscope
10.05.2026 18:34ДЕКРСДЛБ
ДЛБ это советский (русский) служебный знак, передаваемый между операторами-телеграфистами, а не часть шифрограммы или открытого текста. В международной практике не используется, аналогов не имеет. Ну, почти.
Скорость передачи может варьироваться.
На этом часто ломается машинный прием передаваемого от руки текста, хотя на машинной же передаче прием может приближаться к 100% точности.
Обычно 10-12 групп в минуту , если не ошибаюсь вроде как могут до 20 групп в минуту передавать.
Я не знаю, каковы рекорды, но повседневно опытные телеграфисты могут работать со скоростью порядка 35WPM, измеренных по системе PARIS.
Как вы могла догодаться - пробела в азбуке Морзе нет и он не предается.
Пробел передается паузами. Это самая что ни на есть PCM (родственник PWM), где все задается длительностью сигналов и паузами между ними. Нормированы паузы внутри знака, нормированы паузы между знаками и нормированы паузы между словами, будь то открытый текст со словами произвольной длины или будь то шифрограмма, нередко передаваемая блоками по пять знаков.
pvvv
После приёма каждого символа U5 сбрасывается отключением пиитания?
Вместо ne555, инверторов и триггера вроде можно было просто одной RC цепочкой с диодом обойтись, между клоком единственного сдвигового регистра и его входом, в качестве дискриминатора длинный/короткий (кнопка на землю с подтяжкой)
Ну и декодеры - читерство. Без карт Карно и оптимизации логики подключенных по столбцам/строкам встречнопараллельных светодиодов - низачод :)
nokravchenko Автор
Нет, после нажатия начинается отсчёт 1,128 секунд до сброса, если повторно нажать до этого времени сброса не будет.
МС более стабильна, предсказуема при настройках, выдает четкие логические сигналы.
Триггер действительно вроде как и не нужен, почему то на тот момент я посчитал переключение и сохранение положения необходимой функцией.
Конечно дешифраторы - упрощение, иначе пришлось бы использовать Минимум 26 логических элементов, это уже 5 микросхем (в действительности число будет ближе к 7). Мне приходила такая мысль, но пожалел микросхемы )
da-nie
А вы ПЗУ возьмите. :)
Для аутентичности вот такое: