Обновить
286.42

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

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

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

Какой Может быть UART-CLI в Микроконтроллере (или Курс Молодого Бойца)

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

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

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

Читать далее

Новости

Структуры данных на практике. Глава 1: Разрыв в производительности

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

Часть I: Основы

«В теории теория и практика одинаковы. На практике это не так». — авторство приписывается разными специалистам по computer science

Загадка

Два часа утра. Я смотрю на совершенно нелогичные данные профилирования.

В процессе работы над загрузчиком для SoC RISC-V у нас возникла проблема с производительностью. Загрузчик должен был искать конфигурации устройств в таблице: примерно пятьсот элементов, каждый с 32-битным ID устройства и указателем на данные конфигурации. Всё просто.

Мой коллега реализовал эту систему с помощью хэш-таблицы. «Поиск за O(1), — сказал он уверенно, — лучше уже некуда».

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

Я попробовал использовать очевидную оптимизацию: заменить хэш-таблицу двоичным поиском по отсортированному массиву. Двоичный поиск занимает O(log n), что теоретически хуже, чем O(1). Так написано в учебниках. Мой преподаватель алгоритмов был бы разочарован.

Но в результате загрузчик оказался на 40% быстрее.

Как O(log n) смогло победить O(1)? Что происходит?

Читать далее

Каскадный Таймер на STM32 (или Таймер с Прицепом)

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

Как вы знаете в STM32 много 16 битных таймеров. При этом их разрядности порой не достаточно для получения тайм штампов.

Проблема в том, что в STM32 таймеры обладают очень низкой разрядностью. Большинство таймеров 16 битные. Есть только два 32 битных таймера и они обычно чем-то заняты.

При этом большинство прошивок требуют возможности получать микросекундные тайм штампы. Это нужно для выдерживания пауз, для планировщика, для подписывания логов и прочего. То есть нужен таймер, который увеличивается на 1 каждую 1 микросекунду и не переполняется в обозримой перспективе.

В случае 16 битного таймера такой таймер будет переполняться каждые 65 ms. Это плохо.

Попробуем разобраться, что делать в этой ситуации.

Читать далее

Процессор, которого не существует. Читаем и пишем ПЗУ

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

Автомобильные блоки управления полны компонентов, промаркированных нестандартно. Например, встречались микросхемы, на которых выбито "Toyota", хотя ежу понятно, что Toyota никаких процессоров не производит. Но в мире электроники при больших партиях производители чипов имеют возможность выбить на чипе ваш логотип, или маркировку, и разработчики ЭБУ этим активно пользуются, хотя цели их не совсем ясны.

Но нестандартная маркировка - это еще цветочки! Существует огромный пласт кастомных компонентов, выполненных "под заказ" для конкретного производителя ЭБУ. Такие проприетарные компоненты зачастую не только не имеют открытой документации, но и отсутствуют в линейке производителя.

Не так давно мы разбирались с процессором TMS470R1A256, очень популярный в блоках SRS 2007-2010 г.в.. На нём выбивают маркировки: TMS470R1VF3482 или TMS470AVF3482, однако достаточно подключиться к этому процессору посредством отладчика чтобы понять, что это процессор TMS470R1A256. Дело в том, что согласно datasheet на эти процессоры, в каждом процессоре есть device identification code register, прочитав который, вы сможете узнать part number данного процессора, который уже можно отыскать в datasheet.
Например, для TMS470R1A256: `The assigned device-specific part number for the A256 device is 0001010` что при переводе в hex = 0x0A. Много разработчиков написало программы для чтения данных процессоров, но почему-то блоки с процессорами, записанными этими программами, не выходили на связь. Пришлось разбираться с этим вопросом самостоятельно, результатом чего стала версия программы JLinkZReader, в которой проблема чтения и записи данных CPU была решена.

Читать далее

Пошаговая GDB отладка прошивки STM32 из консоли cmd

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

Порой бывает так, что вы скачиваете open-source репозиторий, а там нет файлов .project и .сproject для eclipse или файлы .project и .сproject есть, но они по каким-то причинам повреждены и IDE их не может открыть.

Тем не менее прошивка собирается командой make all. Ты ее прошиваешь и LED не мигает. Очевидно, что прошивка зависла. Где-то свалилась в HardFault_Handler.

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

Читать далее

Двухканальная паяльная станция на базе STM32

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

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

Читать далее

Макропад своими руками: первый прототип

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

Продолжаю рассказывать, как я создавал макрос-клавиатуру с нуля. В этой части: почему Loupedeck и 3Dconnexion не подошли, как Speed Editor стал моим идеалом, и что из этого вышло. Спойлер: Arduino превращается в тыкву😅

Читать далее

Световой будильник

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

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

На протяжении нескольких лет, я сделал несколько версий светового будильника. Были разные корпуса, кнопки/энкодер, RTC, ATmega328P, ШИМ и/или с RGB светодиодами, галогенной лампой, без рассеивателя и они мне не понравились. Хотелось утром просыпаться без пульсаций света, как при восходе солнца.

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

После многих переделок часы синхронизируются с сервером времени, а будильник с восходом солнца редко когда меняется и настраивается со смартфона в локальной сети Wi-Fi на собственном сайте будильника. Остался только простой способ выключить будильник. Теперь это датчик жестов. Его не касается статическое электричество. Хотя и это не обязательно, т.к. будильник сам выключится через 7 минут. Это время для того чтобы дойти и включить свет в комнате или выйти из комнаты.

Код я разрабатывал множество раз, под разные способы управления светом и контроллеры. Выкладываю последнюю версию для ESP32-C6. Она самая успешная получилась.

Читать далее

Будильник для зимы: как я подружил лампу Ильича, ZigBee и LLM

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

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

Причём бесит не сам факт пробуждения (я всё-таки взрослый человек и понимаю, что проекты сами себя не напишут), а то, как именно это происходит. Резко. Грубо. Без предупреждения.

TLDR: Собрал мощный потолочный светобудильник на ZigBee-диммере + лампы накаливания. Настроил через Tasmota с помощью LLM за один день вместо недели.

Подключить светобудильник к умному дому

«Горячие колеса» с BLE

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

Здравствуй, Хабр! В этой статье я хочу поделиться своим опытом модификации популярной машинки в масштабе 1/64. Цель модификации — сделать машинку радиоуправляемой. В качестве пульта управления будет использоваться android телефон. В статье рассмотрим три основных этапа: разработка встраиваемого программного обеспечения для управления приводом поворота колес и ходового мотора, проектирование шасси и приложение для телефона.

Читать далее

Новый инерциальный MEMS-датчик LSM6DSV320X от ST c искусственным интеллектом для распознавания активности и ударов

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

Инерциальные модули (IMU, Inertial Measurement Unit) выполненные в виде MEMS-датчиков давно используются в смартфонах, игровых контроллерах, носимых устройствах, и т.д. В такой модуль входит акселерометр и гироскоп, вся обработка выполняется на основном процессоре смартфона или микроконтроллера. Для обработки поступающих данных от инерциального модуля, процессор должен быть постоянно в состояние активности. Например, для носимой электроники данный фактор не позволит отправить основной процессор в спящий режим. Вторая проблема заключается в большом лаге между наступлением события и реакции. Например, если необходимо обрабатывать события удара, пока ОС обработает поступающие данные и сделает вывод об ударе, времени на реакцию будет немного. Для решения указанных задач, и не только, компания STMicroelectronics разработала модуль LSM6DSV320X с искусственным интеллектом где вся обработка данных выполняется в самом модуле.

Читать далее

Новогодняя игрушка

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

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

Читать далее

Особенности работы с микроконтроллерами TMS320С28xx

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

Микроконтроллеры серии TMS320C28xx (C2000) от Texas Instruments появились достаточно давно, однако до сих пор остаются актуальными в ряде задач.

Эти микроконтроллеры отличаются надёжностью, обладают значительным объёмом оперативной памяти, поддерживают операции с числами с плавающей точкой (float/double) на аппаратном уровне, а также оснащены одними из лучших в своём классе модулями ШИМ (PWM) и АЦП (ADC). При этом их стоимость остаётся весьма демократичной.

В этой статье я расскажу об особенностях работы с данными микроконтроллерами.

Читать далее

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

Новогодняя игрушка

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

Привет, Хабр! Пришло моё время начать писать статьи сюда. И первая моя статья будет посвящена новогодней игрушке. Прошу не судить строго.

В 2019-м году Я приобрел 50 микроконтроллеров CH32V003F4P6 по 11 рублей за штуку. В этом году решил пустить их в дело. И первое, что пришло в голову, это сделать игрушку к новому году. Кроме того, появилась возможность лично попробовать WS2812B.

Схема и печатная плата устройства были разработаны в свободной САПР KiCad 9.0. Прошивка написана в среде MounRiver Studio Ⅱ, от производителя микроконтроллера Nanjing Qinheng Microelectronics.

Схема устройства получилась достаточно простой, даже примитивной. В её основе RISC-V микроконтроллер CH32V003F4P6 и адресные светодиоды WS2812B. Так же в схеме есть разъём питания, разъём программирования и куча конденсаторов по питанию. Питание платы внешнее, номиналом 5 В.

Читать далее

Как Работать с UART на Микроконтроллерах (UART + FIFO = LOG)

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

«Во всех самолётах есть черный ящик. A UART‑логирование это черный ящик вашей прошивки.»

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

Допустим вы решили делать в своей прошивке printf‑отладку. Или даже забабахать UART‑CLI (Shell).

Первое с чем Вы столкнетесь — это настроить UART‑трансивер. Как же реализовать алгоритм работы с UART периферией?

Читать далее

Надежное программирование — часть 6. Неудачники, выросшие и перспективные языки

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

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

Читать далее

Ёлочная игрушка, на которой запустили Doom

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

Близятся Новый год и Рождество, а значит, ёлки и всё связанное с ними: гирлянды, украшения и, разумеется, игрушки. Праздник слишком уж весёлый, и я решил, что ему не хватает мрачной игры, поэтому напечатал маленькую ёлочную игрушку в виде модели IBM PC, засунул в неё самый маленький ЖК-дисплей, который смог найти, добавил туда процессор и логику, а также аккумулятор. Это устройство может висеть на ёлке и показывать демонстрационный режим Doom со звуком и музыкой. Но и это ещё не всё: если подключить ней любую BLE-клавиатуру или джойстик, то можно будет самому убивать миллиметровых зомби, какодемонов и импов.

Читать далее

Разрушая миф: «Из-за санкций США Китай создаст новую архитектуру RISC-X, потому что доступ к RISC-V будет заблокирован»

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

Представьте заголовок: “Китай запускает новую архитектуру RISC-X - ответ на санкции США”. Хороший кликбейт: есть драма, геополитика и слово "архитектура". Но если выключить кликбейт-режим, остаётся классический рецепт жареной утки: берём "а вдруг?", вырываем из контекста, добавляем три щепотки паники - и подаём как "уже решили!". 

Спойлер: блокировать RISC‑V нельзя так же, как нельзя «отозвать» таблицу умножения. Это открытый стандарт (ISA), тексты опубликованы и лицензированы так, чтобы ими мог пользоваться любой, кто умеет читать и проектировать железо. Данная организация представляет собой швейцарскую ассоциацию RISC‑V International, что в значительной степени снижает геополитические риски. Хотите — форкните, назовите хоть RISC‑XXL, но экономически это как «играть в хоккей на льду в роликах с мячом, которого нет»: красиво звучит, играть неудобно, выиграть невозможно.

И этот миф мы разберем более подробно в нашем следующем материале. Всем заинтересованным - добро пожаловать под кат!

Читать далее

Что должно быть на каждой PCB с STM32

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

С моей точки зрения большинство разрабатываемых электронных плат работают под управлением микроконтроллера STM32. Если обобщить их схемотехнику, то можно кое-что вынести за скобки. Вот об этом сейчас и поговорим. Что должно быть заложено в каждую электронную плату на основе МК STM32? Само собой надо добавить квадратные первые пины на вилках, шелкографию, тест пады, симметричные отверстия 3мм по краям для крепления платы, удобный USB для питания и т.п. Но есть кое-что еще. Некоторые особенности проектирования PCB применимы только для STM32. Но обо всём по порядку.

Читать далее

Игрушка на елку к Новому году

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

Приветствую, Хабр!

Перед Новым годом для поднятия настроения до праздничного, захотелось сделать что-то необычное и новое. Все мы украшаем елку, ставим на вершину звезду, вешаем на ветки игрушки и ждем Деда Мороза. Женя, 41 годик.

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

Вклад авторов