Обновить
128K+

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

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

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

История одного бага

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

В последние 5 лет, мы разрабатываем устройства с уровнем функциональной безпосности SIL3 (в части встроенного ПО). Это накаладывает кучу ограничений, например, абсолютно запрет на использование не сертифицированных по функциональной безопасности средст, типа Cube, или компилятров GNU и Clang, только сертифицированные средства типа IAR Workbench Function Safety.

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

Читать далее

Новости

Улучшения Embedded Swift, грядущие в Swift 6.4

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

Embedded Swift — это подмножество Swift, предназначенное для работы с низким потреблением ресурсов, что позволяет ему работать в ограниченных средах, таких как микроконтроллеры. Используя специальный режим компиляции, Embedded Swift создает значительно меньшие исполняемые файлы по сравнению с обычным Swift. Хотя это и подмножество полного языка, подавляющее большинство возможностей Swift работает в Embedded Swift точно так же. Дополнительная информация описана в документе «Видение Embedded Swift».

Embedded Swift быстро развивается. После наших обновлений об улучшениях Embedded Swift в Swift 6.3 в конце прошлого года, этот пост описывает ряд дополнительных улучшений, сделанных в предстоящем выпуске Swift 6.4. Вы можете опробовать их уже сегодня, используя снапшот разработки Swift.

Улучшения языка

Embedded Swift продолжает расширять свое подмножество языка, включая все больше аспектов «полного» Swift, что упрощает обеспечение совместимости существующих кодовых баз Swift с Embedded Swift. Многие из этих функций имеют динамический аспект, что означает их влияние на производительность во время выполнения (например, из-за косвенных вызовов) и размер кода (из-за необходимости дополнительных метаданных). Однако это влияние проявляется только там, где эти динамические функции языка действительно используются: код, критически важный к размеру и производительности, может избегать их, например, включив предупреждения в группе диагностики PerformanceHints.

Обобщенная поддержка экзистенциальных (any) типов

Читать далее

Структуры данных на практике. Глава 19: Управление памятью в прошивках

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

«Управление сложностью — сама суть программирования компьютеров.» — Брайан Керниган

Стадия финального тестирования

Мы находились на этапе финального тестирования проекта IoT‑датчика — устройства для умного дома с 128 КБ ОЗУ, которое отслеживает температуру, влажность и качество воздуха. Прошивка прошла все функциональные тесты. Юнит‑тесты: зелёные. Интеграционные тесты: зелёные. Энергопотребление: в пределах спецификации.

Последним требованием был тест непрерывной эксплуатации в течение 72 часов. Мы подготовили в лаборатории двенадцать устройств, настроив их на отправку данных датчиков каждую секунду, и оставили их работать.

Спустя три дня я пришёл в лабораторию, ожидая собрать логи тестирования и завершить проект.

Но вместо этого выяснилось, что все двенадцать устройств аварийно выключились.

В консоли последовательного порта на каждом устройстве была одна и та же ошибка:

[72:14:23] malloc failed: out of memory
[72:14:23] Fragmentation: 45%
[72:14:23] System halted

У меня cкрутило желудок. Проект планировалось выпустить через две недели. Я в точности знал, что произошло, и понимал, что решать проблему будет очень трудоёмко.

Читать далее

Гайд по сборке простого Wi-Fi «радара»

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

Полный гайд по сборке радара для мониторинга присутствия в помещении человека и даже просто его дыхания.

Общий механизм выглядит так: ESP32-S3 измеряет параметры канала Wi-Fi 100 раз/сек, а Raspberry Pi их анализирует, в реальном времени выводя результат в браузере. Эта система обнаруживает абсолютно неподвижно сидящего человека по одному только движению его грудной клетки во время дыхания — без каких-либо камер, датчиков PIR или носимых устройств.

Читать далее

От Цифровой Логики к Процессору через ПЛИС. Программа годового курса для школьников физматшкол

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

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

Читать далее

Как я прошил наушники soundcore, портировал на них кастомную прошивку и DOOM. Часть 2

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

Продолжение первой части, в котором я рассказываю, как прошивать наушники на SoC Bestechnic (soundcore, Nothing, CMF) по воздуху, раскрываю секрет загадочного сервиса BESOTA и показываю процесс портирования DOOM на soundcore Life Q35.

Узнать секреты бесоты и демонов...

BlocklyKlik — автономный редактор кода с компилятором

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

Редактор BlocklyKlik разрабатывается для помощи программирования микроконтроллеров на базе Arduino и ESP32 (эту функцию добавим в будущем) с применением блочного функционала создания кода.

Возможно, вы зададите вопрос: "Так есть же Scratch, mBlock, PictoBlox, да и Arduino ide".

Всё верно, они есть, но в ходе последних лет их использования возникли ряд серьёзных проблем:

Читать далее

Засовываем VLA на гуманоида: как выбрать платформу, модель и планировщик

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

Год назад на проекте гуманоида с Jetson Orin на борту меня регулярно спрашивали одно и то же. “Можно ли гонять нашу VLA локально, без сети?” VLA это модель. Она берёт кадр и текст и выдаёт команды на приводы.

Я листал документацию, тикеты PyTorch и чужие статьи, а когда разобрался, ответил пересчётом. “Теоретически да, но от кадра до движения выходит 0,84 с. Робот за это время успеет упасть, а пользователь решит, что он завис.”

После того гуманоида ко мне не раз приходили за помощью в проектировании. Чаще это была детекция на 30 FPS на плате за $10 или передовая LLM на устройстве.

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

Читать далее

Load‑detect в hi‑side ключах

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

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

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

Читать далее

Оптимизация кода под космос (и у меня уже опускаются руки запускать новые спутники)

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

На фото: один из пользовательских снимков

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

К счастью, у нас есть резервный спутник! Из материнского контейнера он вышел чуть позже и выше. Думаю, у него ещё неделя. Так-то мы рассчитывали на несколько месяцев.

И это далеко не всё, что случилось в этой истории.

Вообще, тут две истории, которые сплелись в небольшой ад. Первая — это ожидание и реальность от софта и связи с наземным гридом. Нам пришлось переписывать стек протоколов, потому что в сыром SSH могла дойти половина команды. Например, мы отправляем rm -rf /home/pi/tmp/cache, а приходит rm -rf /home/pi. Это было бы очень забавно.

Очень много приколов с оптимизацией: например, чтобы сделать фотографию не чёрного экрана, надо как-то попасть в Землю. Спутник неуправляемо вращается, двигателя у него нет — поэтому надо дождаться, пока в кадр попадёт планета, и снимать. Так вот, код там прямо из 90-х — камера делает серию из 5 снимков с паузами, а затем основным считается тот JPG, который больше весит. Это значит, что в нём больше значимых пикселей, и это, вероятно, планета.

А, да, и потом американский NORAD перестал давать нам данные о положении спутника, и пришлось стучать в МГУ за матмоделью орбитальных расчётов, которые корректировались по тому, где мы последний раз видели спутник и куда он ушёл.

Итак, наш первый спутник год назад вышел на орбиту и вещал оттуда веб-страницу по радиоканалу. Этот новый спутник, уже с мини-сервером на борту и с доступом по SSH, должен был стать первым полноценным VDS в космосе.

Естественно, всё, что могло пойти не так, пошло не так!

Читать далее

ZBFun: архитектура для ZigBee без обязательного облака на Python

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

Меня зовут ZolAnd, я - независимый инженер-разработчик embedded-систем в основном для дома и сельской усадьбы. В какой-то момент мне захотелось собрать под одной крышей разношёрстный парк ZigBee-устройств от разных производителей, работать с ним локально, без обязательной привязки к облаку, и при этом иметь возможность не только интегрировать чужие устройства, но и проектировать свои. Так появился проект ZBFun. Эта статья — про то, с какими вызовами я столкнулся, какие решения уже существуют и почему они мне не подошли, и про архитектуру, к которой я в итоге пришёл.

С чего всё началось

Задача звучала просто: хочу python-библиотеку для ZigBee на ESP32-C6. Готовой не нашлось — есть отличный esp-zigbee-lib от Espressif на C, но ничего сопоставимого на Python или MicroPython для этой платформы не было. Значит, писать самому. И тут выяснилась вторая, более фундаментальная проблема. Чтобы написать библиотеку, нужно понимать, что такое ZigBee Cluster Library (ZCL) — стандарт, который описывает, из чего вообще состоит ZigBee-устройство: кластеры, атрибуты, команды, типы данных, зависимости между ними. Официальный документ Alliance — 1213 страниц PDF, написанный для инженеров, имплементирующих стек с нуля, без какой-либо машиночитаемой версии. Ни JSON, ни XML — только текст, рассчитанный на то, что человек прочитает и перепечатает нужное руками. Дальше — хуже. Когда я стал сверять этот текст с реальными SDK и реальными устройствами, обнаружились расхождения. Причём не косметические, а такие, из-за которых устройство просто не будет работать правильно.

Читать далее

Драйвер шагового двигателя с векторным управлением

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

В рамках этой статьи я детально расскажу о разработке драйвера шагового двигателя. Я уже много лет держал в голове этот проект и хотел им заняться. Наконец такая возможность появилась: этот проект стал моей дипломной работой.

Вращать магнитное поле

Ретранслятор LoRa своими руками: увеличиваем дальность связи без лишней мощности

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

В предыдущей статье я рассказывал о том, как предоставить удалённый доступ к данным измерений метеостанции с помощью модулей Heltec Automation HTIT-WB32LAF V3, объединяющих микроконтроллер ESP32-S3FN8 с LoRa-чипом SX1262. При правильной установке антенн и хороших условиях распространения радиоволн возможна передача данных на километры.

Но что, если нужно передавать данные ещё дальше, а возможности антенн с большим коэффициентом усиления исчерпаны и мощность передатчика повышать нельзя? 

Читать далее

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

Нельзя просто взять и прочитать 64-битный SysTick на CH32V203

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

Когда я начал работать с CH32V203G6U6 и обнаружил, что там есть 64-битный аппаратный таймер, то подумал: ух, это же отлично, раз таймер аппаратный, то и о чтении/записи заботится сам микроконтроллер. И какое-то время это не вызывало вопросов. А потом…

Читать далее

Итоги сезона DIY: луноход, бинарные часы и стоп‑сигнал в котельной

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

Сделай сам — покажи другим, как надо. На старте сезона DIY Лемана Тех и Хабр пришли с таким запросом к сообществу авторов, и они не подвели. В рамках сезона вышло множество статей о самых разнообразных проектах, сочетающих работу с железом и софтом. Участники соревновались в том, кто лучше всех владеет отвёрткой, 3D‑принтером, различными языками программирования, у кого самая необычная идея и кто способен максимально хардкорно её воплотить.

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

Читать далее

Tymbal — нейросинтезатор на одном чипе

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

Инструмент называется Tymbal.

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

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

Слово к тому же приходит оттуда же, откуда «тембр». Merriam‑Webster выводит tymbal как изменённое от более раннего timbal (литавра), а timbre — от греческого tympanon, барабана: в старофранцузском это ещё барабан, в среднефранцузском — колокол под молоточком, и лишь потом слово стало означать окраску звука. Имя инструмента и слово «тембр» — родня по барабану.

Первый вариант я написал через i, как в литавре. Пришлось переименовывать: у цикады это tymbal, через y.

N6 ниже по тексту — рабочий индекс по имени чипа, он остался в названиях файлов и веток.

Читать далее

Спутник как VPS: честная история про космический SSH, TinySat и TriSat

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

Космический аппарат не обязательно должен весить сотни килограммов и стоить как небольшой завод. Иногда достаточно платы размером с ладонь, Raspberry Pi, радиоканала и команды, которая готова несколько месяцев отлаживать термостабилизацию, прошивку и связь с орбиты.

В июле прошлого года я рассказывал, что мы готовим к запуску спутник с бортовым компьютером, к которому можно будет подключаться по SSH. Прямо как к нашему VPS, только он летит над головой со скоростью 7,8 км/с. Звучало как фантастика, но мы это сделали.

Сейчас расскажу, что из этого вышло на самом деле, почему мы ушли от предыдущего форм-фактора и что такое TriSat — платформа, которую мы выбрали для нашего космического эксперимента.

Читать далее

Пульт красивый, но непонятный. Вскрываем BLE протокол

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

Иногда новый проект начинается не с технического задания, а с вещи, которая случайно попала в руки.

В моём случае это был Bluetooth-пульт Makeblock MBBTCTR01. Красивый? Да. Удобный? Более-менее.
Два стика, крестовина, кнопки — всё, что нужно для управления мобильным роботом. А пара тележек с дифференциальным приводом у меня как раз была под рукой.

Читать далее

ESP32 Кликер

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

Мини проект для esp32 уровня hello world. Используем esp32 как подобие геймпада.

Вдохновившись постом https://habr.com/ru/articles/1061100/ захотелось сделать что-то тактильное, одно кнопочное, но без паяльника, станков и при условии что руки растут отнюдь не из плеч. Немного помаявшись и покрутив в руках фиджет кубик, пришла простоя идея - а что если просто считать сколько раз потеребонькал кубик? Спойлер - после подсчёта размеров платы разработки, платы зарядки и аккумулятора, стало понятно, что впихнуть это во вменяемый размер никак не получится. Но плата и несколько кнопок-тумблеров на волне энтузиазма уже были куплены, поэтому идея несколько трансформировалась. Было решено сделать управление простой мини игрой через тумблеры.

Читать далее

Обзор протокола J1939 (или нервная система грузовиков)

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

J1939 это высокоуровневый проприетарный протокол используемый поверх CAN. Появился в середине 198х годов. Этот протокол работает в груpовых автомобилях: автобусы, грузовики, самосвалы, фуры, БелАЗы и прочее. Протокол J1939 принципиально не применяется в легковых автомобилях.

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

По J1939 происходит управление трансмиссией, генератором, двигатели, форсунками, тормозами и прочим.

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