Обновить
128K+

Программирование микроконтроллеров *

Учимся программировать микроконтроллеры

233,04
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Усреднили до нуля, или как избавиться от шума вместе с полезным сигналом

Время на прочтение18 мин
Охват и читатели7K

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

При работе над прошивкой NanoVNA на Rust мне понадобилось разобраться, как продолжать измерение после паузы (ради обслуживания экрана и USB).

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

Читать далее

Новости

Как я превратил клавиатуру от ноутбука MSI в самостоятельную USB‑клавиатуру

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели8.1K

Есть люди, которые спокойно меняют клавиатуры и через пару дней привыкают к новым. А есть моя жена. У неё есть ноутбук MSI GS75, и его клавиатура ей очень нравится. Настолько, что ни одна из других клавиатур, которые мы пробовали, не смогла её заменить.

Я перепробовал немало вариантов. Одни отличались ходом клавиш, другие — усилием нажатия, расположением кнопок или просто тактильными ощущениями. Казалось бы, выбор современных клавиатур огромен, но подходящей так и не нашлось. В какой-то момент возникла мысль: а зачем вообще искать замену, если нужная клавиатура уже существует? Осталось только научить её работать отдельно от ноутбука.

Так начался небольшой домашний проект, который постепенно превратился в исследование клавиатурной матрицы, разработку двух ревизий печатной платы на STM32, написание собственной USB HID-прошивки и борьбу с фантомными нажатиями. Сейчас у меня уже есть работающий прототип: 102 клавиши, USB Type-C, поддержка Fn и мультимедийных сочетаний, режим NKRO и собственная система диагностики.

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

Читать далее

Настройка CAN шины на китайском микроконтроллере

Уровень сложностиСложный
Время на прочтение23 мин
Охват и читатели5.3K

В каждом автомобильном микроконтроллере есть CAN шина. Образно выражаясь CAN — это труба для чисел, CAN — это нервная система автомобиля. Именно по САN передаются сигналы от датчиков и команды к исполнительным механизмам агрегатов.

CAN — это двухпроводный, дифференциальный, последовательный, полудуплексный интерфейс для передачи бинарных данных между электронными платами (PCB). В качестве кабеля чаще всего применяют одну экранированную витую пару проводов с именами: CAN_L и CAN_H.

CAN определяет два уровня модели OSI-7 (стек сетевых протоколов): физический и канальный. То есть CAN определяет также и бинарную структуру пакета в кабеле. В пакете CAN фигурируют такие переменные, как ID пакета, 8 байт данных, длина пакета, 15 битная контрольная сумма, биты подтверждения ACK, начало и конец пакета.

В данном тексте представлен перевод даташита с английского на русский того фрагмента, который посвящен CAN модулю. Также даны некоторые поясняющие комментарии.

Цель данного текста — включить CAN трансивер на микроконтроллере FC7300F8MD. Научиться отправлять и принимать CAN‑classic пакеты.

Читать далее

ModbusToolkit: 19 инструментов, чтобы понимать язык промышленных машин

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели5.6K

Любой завод, котельная или насосная скрыто разговаривает сама с собой. В шкафах стоят контроллеры, датчики, счётчики электроэнергии и преобразователи частоты, и они непрерывно переспрашивают друг друга — какая температура, сколько насосов работает, какую частоту выставить. Обмен идёт по проводам и по сети сотни раз в секунду, и всё это построено на одном стандарте — Modbus.

Я инженер и пишу для этого языка программу ModbusToolkit. В ней 19 инструментов, и она бесплатна.

Читать далее

Эмулятор Game Boy Color на MicroPython: Pokémon Crystal на конференц-бейдже с RP2350

Время на прочтение12 мин
Охват и читатели4.8K

Стив Франсиа, автор Hugo и Cobra, после эмулятора NES запустил на конференц-бейдже GitHub Universe с RP2350 эмулятор Game Boy Color — на MicroPython с генератором кода Viper. Процессор SM83 с его восемью регистрами и 512 опкодами не влез в четыре быстрые локальные переменные Viper, и декодер пришлось строить на восьмеричной раскладке опкода. Ветвления по адресу заменила таблица из 16 страниц по 4 КБ, двухмегабайтные картриджи подгружаются по банку при первом обращении, а разгон до 300 МГц вешал общую шину QSPI. Плюс три бага из реальных игр: окно диалога в Oracle of Ages, «вывернутый» Линк в режиме двойной скорости и указатель стека, который Pokémon Crystal направляет прямо в ROM.

Читать далее

LLM после работы: делаю дочке интерактивную книгу с 16 концовками на ESP32-P4

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели11K

Использованием LLM сейчас никого не удивить, тем более для рабочих задач. Дома тоже: LLM поручают ведение бюджета, консультируются по вопросам здоровья, обслуживанию автомобиля, отношениям…

Поэтому логичным продолжением оказалась и следующая история:

Вечером мы с дочкой в очередной раз читали сказки, и она спросила:

- А почему Белоснежка не позвала Эльзу? Она бы заморозила Злую Королеву.

Я объяснил, что вообще-то это разные сказки. Они даже не знакомы друг с другом.

- Так давай их познакомим!

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

LLM – тут подходят просто отлично. Можно любые фантазии наболтать ChatGPT или в его конкурентов, попросить нарисовать и получить красочную картинку (правда с диснеевскими принцессами это оказалось не так просто – GPT упорно отказывается генерировать Белоснежек с гномами).

Но просто картинки сами по себе – это неинтересно. Точнее интересно, но в моменте, а хочется долгоиграющего результата.  Хочется, чтоб результат радовал, его можно было демонстрировать, а ещё чтоб это всё помогало в развитии ребенка, иначе зачем это всё?

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

Читать далее

Компьютерное зрение на микроконтроллере за $2: SIMD на ESP32-S3 ускорил FAST в 2,2 раза

Время на прочтение4 мин
Охват и читатели11K

У ESP32-S3 есть 128-битные SIMD-инструкции, но примеров кода под них почти нет: автор нашёл всего три источника. Он написал на них детектор углов FAST и упёрся в два ограничения набора инструкций. Невыровненные блоки пикселей напрямую не читаются, а сравнивать можно только знаковые байты, причём вся арифметика с насыщением, так что вычесть 128 из беззнакового пикселя обычным вычитанием нельзя. Первое обошла инструкция, которая вырезает кусок из двух склеенных регистров, второе — XOR с 0x80. Итог в тестах автора — 11,2 мегапикселя в секунду вместо 5,1: этого хватает на поток VGA при 30 кадрах в секунду.

Читать далее

Микроконтроллер Baikal-U: «Привет мир» и отладка в VS Code

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели8.9K

Цель статьи – рассказать о нашем самом первом пользовательском опыте Baikal-U, обменяться опытом с другими пользователями этого чипа и, возможно, привлечь внимание сообщества к новому МК, т. к. один из факторов, влияющий на его массовость и счастливую долгую жизнь, это спрос рынка. В рамках статьи и обсуждений “пробежимся” по “быстрому старту”, настроим отладку через связку OpenOCD + GDB + VS Code, помигаем светодиодом, оно же “Hello world” на микроконтроллерном 😉 и наметим планы на будущее. План выглядит небольшим “вошли и вышли, приключение на 20 минут”, но обо всём по порядку. Большая часть информации будет пересекаться с официальной документацией на сайте BE, но постарался из всего многообразия сделать “выжимку” и описать, как обойти “подводные камни”.

Читать далее

Ускорение и автоматизация разработки legacy‑прошивки контроллера чистых помещений фармацевтического производства

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели5.6K

1. Спагетти код без тестов. Какие решения помогли выйти из тупика и ускорить добавление фич с минимальной регрессией.

2. Автоматизация тестирования: что получилось сделать быстро, а где словили ограничения железа. Что помогло быстро разобраться с ошибками на железе: I²C шина, прерывания и производительность главного цикла.

3. Ускорение за счет использования LLM агента в Firmware DLC. Нюансы агентной разработки firmware: в чем агент был хорош, как работать с ADR и какой feedback loop выстроить

Читать далее

UICC HOTP: генерируем одноразовые пароли на SIM-карте

Уровень сложностиСложный
Время на прочтение16 мин
Охват и читатели6.8K

Всем привет!
В прошлых статьях речь шла о возможностях смарт-карты, которые не получают должного освещения в публикациях, а именно: работа с ISD, создание своего SSD, сторонние библиотеки и криптография. Эти темы лишь часть огромного массива, который можно исследовать до самой китайской пасхи, а ведь хочется идти дальше, посмотреть, что еще интересного таит "Вселенная Java Card".

По этой причине я решил долго здесь не задерживаться и идти к новым горизонтам. Итак, встречайте - UICC HOTP!

Читать далее

Декларативный подход к текстовым протоколам в Embedded на Си. Фреймворк TACT

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели6.7K

Я занимаюсь разработкой встраиваемых систем уже несколько лет и не раз сталкивался с проблемой, когда было необходимо написать UART драйвер или систему для работы с каким-либо внешним модулем, используя текстовый протокол, будь то протокол AT-команд или что-то подобное. Чаще всего это модули GNSS, модуль GSM, ESP или т.п. Набор управляющих команд для таких модулей бесконечно огромен, и каждая из них часто требует отдельной обработки. Итогом получается нужно писать свой обработчик и парсер под каждую команду, через колбэки или некую машину состояний их последовательно вызывать и пытаться как-то организовать цепочку выполнения, а про обработку ошибок я вообще молчу.

Да, существуют библиотеки и готовые решения в рамках какой-либо операционной системы или набора SDK под конкретный чип. Но что делать, когда на столе лежит микроконтроллер с 20кб свободной RAM, где тебе надо не только команды эти обрабатывать, но еще и весь остальной функционал устройства реализовывать? Нужно что-то универсальное, независимое от платформы.....

Читать далее

Голос по LoRa: как плата для Meshtastic превращается в рацию без интернета

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели11K

Meshtastic передаёт текст, а мы заставили ту же плату Heltec говорить голосом: Codec2, пакет на 39 байт каждые 80 мс, шифрование и честные замеры дальности.
В статье — как устроен пакет, почему голос нельзя пустить по mesh‑сети, во что обходится шифрование, когда на счету каждый байт, какую ошибку нашли только в поле и сколько километров получается на самом деле, а не на бумаге.

Смотреть, как это работает

Выбираю платформу для встраиваемого AI

Уровень сложностиСложный
Время на прочтение12 мин
Охват и читатели6.8K

При выборе встраиваемой платформы даташитов мало. Многое не разглядеть даже между строк: частота и ширина шины там есть, а как поведёт себя связка процессора, нейропроцессора и внешней памяти под реальной нагрузкой - нет.
Раньше такое знание добывалось долгими экспериментами и нередко заканчивалось отказом от части намеченных целей и лишними схемотехническими решениями.
Сегодня такой набор тестов создаётся молниеносно. Я прогнал на шести отладочных платах Renesas, ST и NXP, с нейропроцессорами и без.
Насколько чтение внешней flash медленнее SDRAM? Что быстрее: 16-битная PSRAM или 32-битная SDRAM? Так ли необходим нейропроцессор?  
Спойлер: два ответа из трёх оказались не такими, как я ожидал.

Читать далее

Ближайшие события

Как я заставил ESP8266 рисовать 3 D, стрелять и летать: полный технический разбор кода

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели15K

Привет, Хабр!

В первой части я рассказал про железо, сборку корпуса и немного затронул программную реализацию. Сегодня — самое вкусное. Мы заглянем в исходники проекта и разберем математику, алгоритмы и оптимизацию под слабое железо.

Код написан на C++ в Arduino IDE, весь проект живет в одном файле. У нас три игры

(но в исходнике их уже пять), которые переключаются конечным автоматом через gameState.

Блок 1: Raycast — 3D на коленке

Сердце движка — DDA-алгоритм (Digital Differential Analyzer). Мы не рендерим 3D-полигоны, мы пускаем 320 лучей из точки игрока и смотрим, где они пересекают сетку 32x32.

Читать далее

Изучаем многозадачность FreeRTOS на примере создания логгера для STM32

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели15K

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

Из всех возможных вариантов самым удобным, с моей точки зрения, является UART, хотя это не самый быстрый вариант.

Если у вас не отладочная плата Nucleo или Discovery, необходимо обзавестись UART-USB адаптером или программатором, который содержит в себе USB-UART адаптер. Оригинальные адаптеры содержат в себе этот интерфейс, но из китайских клонов можно использовать или Weact ST-Link или J-Link.

Читать далее

Куда движется российская EDA: итоги «Микроэлектроники 2026» в Сириусе от команды, которая сама пишет верификатор

Время на прочтение4 мин
Охват и читатели5.5K

Привет, Хабр!

Мы маленькая команда, которая делает Vulkan EDA: коммерческий инструмент физической верификации микросхем (DRC, LVS, PEX, antenna, STA) плюс наработки по RTL и синтезу. Да, мы в курсе, что существует Calibre. Да, мы в курсе, что три компании контролируют 90% мирового рынка EDA. Мы всё равно делаем, и вот почему у нас это получается, расскажем ниже.

В конце сентября мы съездили в Сочи на «Микроэлектронику 2026», главный отраслевой форум страны, и привезли не только значки с логотипами, но и картину рынка, которой хотим поделиться. Спойлер: отечественная EDA перестала быть анекдотом и превратилась в стройку. А ещё там очень вкусно кормили, но это уже не для Хабра.

Читать далее

Свой CAM для фрезеровки плат: Windows 7, станок без API и карта высот самой фрезой

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели10K

Когда односторонняя плата нужна сегодня, а не через две недели заводского цикла, и под рукой есть фрезерный станок, её можно изготовить за один вечер. Я отладил старый станок так, чтобы он делал платы с дорожками шириной 0,2 мм, зазорами 0,2 мм и отверстиями. Сразу обозначу ограничения: метод рассчитан на один слой меди, не поддерживает переходные отверстия.

Читать далее

Шифровать нельзя доверять: как защитить биометрию вен ладони на пути от сенсора до сервера СКУД

Время на прочтение37 мин
Охват и читатели10K

Мы не будем рассматривать, как строится вектор вен ладони и как работают алгоритмы компьютерного зрения. Не будет ни слова про длины волн ИК излучения, ни про обработку liveness. Статья про информационную безопасность. Мы возьмем упрощённую, но актуальную модель угроз для биометрических систем контроля и управления доступом (СКУД) и спроектируем сквозную защиту данных на пути от оптического сенсора до сервера. Решение должно выстоять даже в том случае, если сам терминал окажется в руках зловреда. Сразу рассмотрим худшие случаи: нарушитель с физическим доступом к считывателю и инсайдер, который сидит прямо в корпоративной сети потребителя или на предприятии-изготовителе.

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

Отдельно разберём заблуждение «повесим TLS и всё безопасно».

Читать далее

Text‑to‑image на ESP32: диффузионный трансформер в микроконтроллере

Уровень сложностиСложный
Время на прочтение14 мин
Охват и читатели21K

Stable Diffusion хочет видеокарту с 4–8 ГБ памяти. Flux хочет 12 ГБ, а лучше 24. А у меня на столе лежит ESP32-S3 — микроконтроллер, отладочная плата с которым стоит несколько сотен рублей, у которого 512 КБ оперативной памяти, два ядра по 240 МГц и ни одного тензорного ядра.

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

Спойлер: можно. Пишешь «улыбающаяся девушка со светлыми волосами», и через 5,4 секунды ESP32 выдаёт лицо 64×64. Внутри латентная диффузия с трансформером (DiT), int8-квантование, ассемблер под векторные инструкции S3 и некоторое количество грязных трюков. В общем — всё, как вы любите.

Читать далее

Заводим C++ корутины на микроконтроллере

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели12K

Мне давно было интересно попробовать запустить корутины на микроконтроллере, но стандарт С++ совершенно не учитывает мир embedded с его ограничениями и не даёт возможности создать корутину в статической памяти.

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

И тут я понял - чего бы не попробовать сделать своё расширение для clang с корутинами, которые гарантированно не используют аллокации и поверх этого реализовать небольшую операционную систему на корутинах для микроконтроллера.

Читать далее
1
23 ...