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

Увидев эту идею, сразу загорелся реализовать на Arduino, пишем пару циклов за 10 минут и готово, но таких программ миллион, мы привыкли прятать любую сложность за строчками кода, превращая разработку железа в банальное подключение модулей к микроконтроллеру.

Меня вдохновила мысль о создании подобного устройства на базе отдельных микросхем на которых можно выполнять даже сложные вычисления без единой строки кода. Это позволит подтянуть знания в схемотехнике, разработке устройств и просто займет некоторое время.

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

Устройство из интернета
Устройство из интернета

Немного теории: Магия точек и тире

Азбука Морзе – по сути, первый в истории цифровой код, где информация передается не уровнем напряжения, а временем. Сигнал – наше физическое воздействие: короткое или длительное (в три раза длиннее) нажатие кнопки. Символ – выводимая буква в соответствии с количеством и длительностью нажатий.

Проанализируем устройство, составим план и цель к которой необходимо прийти (хотя бы приблизиться). Первое, что бросается в глаза это дисплей с символами, также элемент ввода, с которым взаимодействует человек и можно предположить некий внутренний блок для обработки и дешифрации сигналов. Получаем три блока:

  1. Блок распознавания, входной каскад, который превращает длительность нажатия кнопки в один из двух сигналов при коротком нажатии 0 – точка, при длительном зажатии 1 – тире.

  2. Блок навигации, принимает 0 или 1, сохраняет биты сигналов набранного кода.

  3. Блок индикации, дешифрирует и визуализирует нажатия.

1 Блок распознавания

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

Под рукой была книга с пошаговым обучением электроники и примерами использования NE555 [1]. В ней описан принцип работы схемы одновибратора (Схема 29. Специализируемая схема задержки) и предоставлен график для удобства выбора компонентов регулирующих длительность получаемого импульса, который можно вычислить более точно по формуле:

T = 1,1*R*C

где T – длительность, с; R – сопротивление, Ом; C – емкость, Ф.

Схема задержки на МС 555 и номограмма для изменения периода
Схема задержки на МС 555 и номограмма для изменения периода

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

Моделирование работы RC-цепи
Моделирование работы RC-цепи

Собираем следующую часть схемы и проверяем ее работоспособность. Подаем запускающий сигнал и получаем импульс длительностью (на схеме старые значения):

Т=1,1*R*C=1,1*51*10^3*4,7*10^{-6}=264мс

В симуляции видна красная линия – заряд конденсатора до напряжения 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
 BTN - кнопка, NE555 - выход 555, D-trig - выход D-триггера
BTN - кнопка, NE555 - выход 555, D-trig - выход D-триггера

Подаем 1 – кнопка отключена, далее подаем 150 мс – 0, так как длительность задержки NE555 137,5 мс, этот сигнал засчитывается как длинный и на выходе сохраняется 1. Ожидаем 50 мс и нажимаем на кнопку 50 мс, так как это меньше времени задержки, мы видим переключение выхода D-триггера в 0.

При создании даже этой части устройства я столкнулся с некоторыми интересными вопросами:

  1. Сразу не подумал, что D-триггеру для сохранения сигнала необходимо переключение сигнала из 0 в 1, что составило задачку на подумать. Так же возник вопрос, какой сигнал подать на синхронизирующий вход, если с кнопки, то можно нажать слишком быстро, и если время задержки не закончится, то короткий сигнал не зарегистрируется. Или с выхода NE555, тогда при коротком нажатии сигнал загорится не сразу, а по окончании отсчета. Выбрал кнопку, так как считаю задержку после нажатия в данном устройстве не оправданной.

  2. Как-то при пайке не отключил макетную плату от источника питания, что нарушило работу NE555, которую пришлось перепаивать и добавлять сокет для быстрой замены.

  3. Под рукой оказались разные МС элемента НЕ: ЛН1 и ЛН2. Кажется такие одинаковые, а работают по разному. ЛН1 выдает полноценные уровни 0 и 1 (от 3,5 В), а в ЛН2 имеет выход с открытым коллектором, который может притягивать выход к земле, а 1 можно получить при помощи подтягивающего резистора. Однако обе не идеальны для работы с RC-цепями. Так же в Proteus изначально начал использовать элемент НЕ 7404 (аналог ЛН1), но из-за особенности ТТЛ при подключении на вход резистор больше нескольких кОм (я применял 15 кОм) вытекающий ток из МС создавал ложные срабатывания. Поэтому остановился на 74HC14 – инверторы с триггером Шмитта, в котором есть гистерезис. При подаче плавно нарастающего сигнал от конденсатора на выходе будет стабильный сигнал.

Блок навигации

Блок навигации, это центральная часть устройства он должен принимать сигналы точка/тире, сохранять и подготавливать их для вывода. Для сохранения всех переходов по дереву отлично подойдет МС 74HC595 с ее помощью можно реализовать сохранение пути к букве, а также всех нажатых сигналов. При использовании обычного железа (без программируемых МК) будет лучше уменьшить количество импульсов и использованных шин, поэтому будем использовать 74HC164, аналог, но без дополнительной линии сдвига из внутренней памяти в выходные регистры, что для нашего использования только усложнит и затормозит вывод.

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

Так первый регистр "Путь" и второй "Уровень" разрешат вопрос синхронизации, упростят понимание логики работы, упростят схему дешифраторов.

После подачи сигнала на D-триггер важно задержать сигнал на некоторое время, иначе регистр сохранит предыдущие символы, не дождавшись переключения D-триггера, создадим простейшую схему задержки используя инверторы и RC-цепь [2]. Для этого достаточно минимальной задержки (на схеме старые значения):

T=R*C=10*10^{3}*10*10^{-9}=0,1мс
Моделирование работы блока навигации
Моделирование работы блока навигации

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

T=R*C=240*10^{3}*4,7*10^{-6}=1,128с
Моделирование работы шины Reset
Моделирование работы шины Reset

Блок индикации

Блок состоит из дешифраторов 74HC138, имеющие 3 входа и 8 выходов, а также два инверсных и один прямой разрешающие входы, которые позволяют активировать необходимую букву при определенном вводе сигналов.

Для разработки схемы соединений дешифраторов буквы необходимо объединить в группы различающиеся по количеству введенных символов и первому символу, который разделяет дерево на правую и левую часть:

  1. Буквы по одному или двум сигналам (6: E, T, I, A, N, M). В данном случае для дешифрирования используется первые два вывода регистра "Путь", а для различия, например, E=0 и I=00 к третьему входу подключена вторая нога регистра "Уровень". Первая нога "Уровень" – разрешение на работу, 3 и 4 – запрет.

  2. Удачно сложилась (или это было продуманно при создании азбуки) группа состоящая из трех сигналов имеет восемь символов (8: R, S, W, U, O, G, D, K). Связь самая простая, три первых вывода регистра "Путь", Третья "Уровень" – разрешение, 4 – запрет.

  3. и 4. Разделяют буквы (6 и 6: V, F, L, P, J, H и Q, Z, B, X, Y, C), состоящие из четырех сигналов, для разрешения работы подключаем четвертый вывод "Путь" к прямому одного и инверсному другого входу дешифратора для разделения дешифраторов на условно "правый" и "левый" (первый сигнал 0 или 1), разрешение работы осуществляется с помощью четвертого вывода "Уровень", подключаем в свободные входы, так как один свободный вход инверсный используем элемент НЕ.

Схема Блока индикации в программе Proteus
Схема Блока индикации в программе Proteus

Финальные доработки

Для отключения работы кнопки при четвертом нажатии подключим четвертый вывод регистра "Уровень" к кнопке вместо земли. Если вывод не активен на нем 0, он управляет NE555, после четырех нажатий на кнопке 1 – она блокируется и не взаимодействует с NE555.

Выбрано напряжение 3 В от батареи CR2032, хочется создать наиболее компактный вариант, в случае нехватки мощности можно использовать элементы ААА. В связи с этим применяется TLC555 – более экономична и работает от 2В.

Добавил пищалку и двойной переключатель на четыре вывода для отключения устройства, включения и отключения пищалки. Так как активные пищалки настроены на частоты более 2 кГц я решил использовать свой генератор – симметричный мультивибратор на паре транзисторов разной проводимости.

Схема выключателя и пищалки
Схема выключателя и пищалки

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

Разработка печатной платы

Разработка печатных плат в Proteus не самое удобное занятие, поэтому пришлось перенести схему в EasyEDA. Размеры выбрал в формате карты, шелкографией обозначил символы.

3D вид печатной платы
3D вид печатной платы

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

Работоспособность схемы подтверждена циклом симуляций в среде Proteus с оптимизацией параметров для работы в реальном времени. Создана печатная плата, произведен подбор компонентов.

Литература:

  1. Трейстер Р. – Радиолюбительские схемы на ИС типа 555: Пер. с англ. – М.: Мир, 1988. – 263 с.

  2. https://www.skilldiagram.com/gl1-13.html

Хотел бы получить отзывы, что можно исправить, как оптимизировать. Схемотехникой и печатными платами занимался не много, но есть образование и цель изучать новое.

Комментарии (6)


  1. pvvv
    10.05.2026 18:34

    После приёма каждого символа U5 сбрасывается отключением пиитания?

    Вместо ne555, инверторов и триггера вроде можно было просто одной RC цепочкой с диодом обойтись, между клоком единственного сдвигового регистра и его входом, в качестве дискриминатора длинный/короткий (кнопка на землю с подтяжкой)

    Ну и декодеры - читерство. Без карт Карно и оптимизации логики подключенных по столбцам/строкам встречнопараллельных светодиодов - низачод :)


    1. nokravchenko Автор
      10.05.2026 18:34

      1. Нет, после нажатия начинается отсчёт 1,128 секунд до сброса, если повторно нажать до этого времени сброса не будет.

      2. МС более стабильна, предсказуема при настройках, выдает четкие логические сигналы.

        Триггер действительно вроде как и не нужен, почему то на тот момент я посчитал переключение и сохранение положения необходимой функцией.

      3. Конечно дешифраторы - упрощение, иначе пришлось бы использовать Минимум 26 логических элементов, это уже 5 микросхем (в действительности число будет ближе к 7). Мне приходила такая мысль, но пожалел микросхемы )


      1. da-nie
        10.05.2026 18:34

        Конечно дешифраторы - упрощение,

        А вы ПЗУ возьмите. :)

        Для аутентичности вот такое:


  1. Grox
    10.05.2026 18:34

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


  1. lazarus_net
    10.05.2026 18:34

    А как, вы товарищи паузы обрабатываете?

    Вообще-то код Морзе вроде как без обработки пауз не идентифицируется

    А : . -

    Е: .

    Т: -

    С: . . .

    О: - - -

    У вас последовательность:

    . - . - - - . . . -

    Это что будет?

    Плюс передача шифрограмм идёт группами по 5 символов, если не ошибаюсь:

    ххххх ххххх ххххх

    Как будете интерпретировать?

    Как вы могла догодаться - пробела в азбуке Морзе нет и он не предается.

    В качестве упражнения можете попробовать интерпретировать принятую последовательность (пишу без пробелов, как раз в кодовую группу укладывается :)

    ДЕКРС

    Иногда передают как ДЕКРСДЛБ

    Чтобы сделать жизнь ещё веселее:

    Скорость передачи может варьироваться. Обычно 10-12 групп в минуту , если не ошибаюсь вроде как могут до 20 групп в минуту передавать.


    1. Astroscope
      10.05.2026 18:34

      ДЕКРСДЛБ

      ДЛБ это советский (русский) служебный знак, передаваемый между операторами-телеграфистами, а не часть шифрограммы или открытого текста. В международной практике не используется, аналогов не имеет. Ну, почти.

      Скорость передачи может варьироваться.

      На этом часто ломается машинный прием передаваемого от руки текста, хотя на машинной же передаче прием может приближаться к 100% точности.

      Обычно 10-12 групп в минуту , если не ошибаюсь вроде как могут до 20 групп в минуту передавать.

      Я не знаю, каковы рекорды, но повседневно опытные телеграфисты могут работать со скоростью порядка 35WPM, измеренных по системе PARIS.

      Как вы могла догодаться - пробела в азбуке Морзе нет и он не предается.

      Пробел передается паузами. Это самая что ни на есть PCM (родственник PWM), где все задается длительностью сигналов и паузами между ними. Нормированы паузы внутри знака, нормированы паузы между знаками и нормированы паузы между словами, будь то открытый текст со словами произвольной длины или будь то шифрограмма, нередко передаваемая блоками по пять знаков.