惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy & Cybersecurity Law Blog
SecWiki News
SecWiki News
T
Troy Hunt's Blog
Y
Y Combinator Blog
V
V2EX
美团技术团队
Last Week in AI
Last Week in AI
S
Security @ Cisco Blogs
IT之家
IT之家
博客园_首页
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
阮一峰的网络日志
阮一峰的网络日志
AI
AI
罗磊的独立博客
人人都是产品经理
人人都是产品经理
H
Hacker News: Front Page
N
News and Events Feed by Topic
P
Privacy International News Feed
V2EX - 技术
V2EX - 技术
Recent Commits to openclaw:main
Recent Commits to openclaw:main
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
GbyAI
GbyAI
L
LINUX DO - 热门话题
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Azure Blog
Microsoft Azure Blog
Martin Fowler
Martin Fowler
月光博客
月光博客
WordPress大学
WordPress大学
Latest news
Latest news
Google DeepMind News
Google DeepMind News
S
Schneier on Security
N
Netflix TechBlog - Medium
腾讯CDC
T
Tailwind CSS Blog
TaoSecurity Blog
TaoSecurity Blog
S
Secure Thoughts
L
LINUX DO - 最新话题
Project Zero
Project Zero
Cyberwarzone
Cyberwarzone
D
DataBreaches.Net
Webroot Blog
Webroot Blog
B
Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
SegmentFault 最新的问题
The GitHub Blog
The GitHub Blog
H
Help Net Security
L
LangChain Blog
A
Arctic Wolf
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
How it's made. Карта Морзе
nokravchenko · 2026-05-10 · via Все публикации подряд на Хабре

Средний

9 мин

21K

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

Увидев эту идею, сразу загорелся реализовать на 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

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