Все потоки
Поиск
Написать публикацию
Обновить
162.12

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

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

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

Синтез Цифрового БИХ Фильтра Низких Частот

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

Мне потребовалось синтезировать быстрый цифровой фильтр нижних частот. Причем этот фильтр должен работать в реальном времени на микроконтроллере. Тут я понял, что надо вспоминать с какой стороны следует подходить к цифровым IIR фильтрам.

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

Далее я покажу некоторые приёмы расчета IIR фильтра по известным коэффициентам.

Читать далее

KC868-A8S V2: стиляга в металлическом прикиде (третье поколение контроллеров Kincony)

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


Не знаю, интуитивно, в результате множества итераций R&D или с помощью приглашённого технического дизайнера, но третье поколение контроллеров Kincony выглядит просто классно (я бы даже сказал стильно) — эти изделия приятно держать в руках и я лично получаю удовольствие от работы с ними.

Как сказал один мой знакомый разработчик электроники, крутя в руках контроллеры Kincony третьего поколения, — «Класс! Прям хочется выпустить что-то подобное...».

Причём этот эффект достигается очень простыми средствами, обо всём этом мы поговорим далее в этой статье…
Читать дальше →

Правка скриптов автогенерации cubeMX/cubeIDE

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров1.6K

На примере добавления дополнительных классов USB (Media Transfer Protocol (MTP) и Smart Card (CCID)) показать каким образом можно вносить изменения в скрипты автоконфигурации для ускорения создания последующих проектов, а также для исправления существующих ошибок в них, чтобы не держать в голове, какие в каком случае постоянно вносить правки для исправления тех или иных ошибок.

Читать далее

IoT Geofencing: как мы сократили время определения функциональных зон, используя H3-индексы

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

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

Меня зовут Сергей Шилин, я руковожу разработкой электроники и встроенного ПО в Whoosh. В этой статье расскажу, почему не embedded-задача попала в embedded-отдел и как мы научили микроконтроллер считать H3-индексы и определять вхождение в любую функциональную зону за 0.1 секунды. Прошу под кат!

Вжух — и другая скорость

Гид по блокирующему, неблокирующему и квази-блокирующему вводу-выводу

Уровень сложностиПростой
Время на прочтение19 мин
Количество просмотров5.8K

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

В этой статье я разберу блокирующий, неблокирующий, а также квази-блокирующий методы. Примеры буду брать из приложений, которые разрабатывал в ходе собственной практики.

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

В общем, хочу поделиться собственным опытом, но не откажусь и от совета в комментариях.

Читать далее

Сборка и отладка прошивки IoT-модуля: Python, make, апельсины и чёрная магия

Уровень сложностиПростой
Время на прочтение22 мин
Количество просмотров3.9K

Когда имеешь дело с микроконтроллерами, а микроконтроллер — основа нашего IoT-модуля, постоянно приходится собирать и отлаживать прошивку. Пишешь код, компилируешь его, заливаешь на микроконтроллер. Потом надо убедиться, что всё работает как надо: подключить отладчик, подебажить.

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

С вами на связи Фарук Юссуф. Как и прежде, я тружусь инженером-разработчиком электроники и встроенного ПО в Whoosh. Сегодня расскажу историю о том, как мы захотели оптимизировать и расширить процесс сборки и отладки прошивки, не смогли остановиться и в итоге пришли к целому серверу для сборки и специальным удалённым узлам для отладки.

Будет make, Python, vscode, ansible, gdb, orangepi и немного чёрной магии.

Вуншпунш

Настройка связки VScode, OpenOCD, WCH-LinkE, Cortex-M

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

Wch-link является программатором для ARM, RISC-V микроконтроллеров. По возможностям это аналог St-link, JLink и прочих. По сравнению с st-link он поддерживает контроллеры не только фирмы STM. А по сравнению с JLink стоит намного дешевле и не имеет проблем с лицензиями, которые могут встречаться у дешевых клонов JLink. Также плюсом идет поддержка набирающих популярность контроллеров от китайской компании WCH.

Есть несколько вариантов этого отладчика, я буду говорить о версии Wch-linkE rev 1.3.

Читать далее

Можно ли использовать DMA вместо memcpy в Linux

Время на прочтение7 мин
Количество просмотров5.2K

В интернете можно найти описание проблем, связанных с использованием DMA для стандартной функции копирования данных из памяти в память:

Linux – DMA memcpy operation in Linux

Давайте попробуем разобраться, как можно использовать интерфейс к DMA для реализации стандартной операции копирования memcpy и есть ли в этом смысл.

Читать далее

Интеллектуальная панель Sunton 7″ на базе ESP32S3

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров14K
image
Отображение информации это один из важнейших аспектов автоматизированных систем.

В IoT системах роль терминала чаще всего выполняет смартфон или компьютер. Но иногда и в умном доме удобно иметь автономную операторскую панель

На сайте Makerfabs в разделе OpenHardware появились интеллектуальные дисплеи Sunton 4.3″, 5″ и 7″ на базе ESP32S3. Из них и герой обзора — панель ESP32-8048S070, купленная на Алиэкспресс за 3000 руб. вместе с доставкой.
Читать дальше →

Каждому первоклашке свой «школьный» контроллер

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

Предлагаю, продолжить разговор на тему «Что делать с детьми летом, если ты айтишник». Сегодня, как договаривались — про hard.

Родной российский чиновник не перестает нас умилять: дескать нужны стране IT-шники. А электронщики — те вообще нужны! Прямо позарез! Но, взяться они должны, естественно, по щучьему веленью, по их (чиновников) хотению! Говорят: за границей есть, и нам нужно! А память у наших чиновников очень «оперативная» — сказанул чего‑нибудь в микрофон и забыл… Вот Президент В.В. Путин еще в 2017 году сказал, мол, кто преуспеет с искусственным интеллектом — тот и в дамках! Им бы, чиновникам нашим, «намотать эти слова на ус», запомнить и начать добиваться. Но, нет: память у чиновников только «оперативная» — чуть с работы вышел, все стерлось...

Помню (через 3 года после выступления Президента) Минобразования твердо пообещало ввести с 2021г обучение программированию с начальной школы. Дескать, щас преподов обучим и вперед — догонять остальные экономически развитые страны. Мы-то с вами знаем, что обещанного в России три года ждут, ну и ждали, конечно. Но, недавно, уже в 2023г, депутатам Госдумы сообщили, что в России создался дефицит учителей информатики. Правда небольшой — всего-то 3600 учителей на целую ⅙ часть суши!

А те-то, экономически развитые страны, не ждут, они своих деток еще с 2012–14 годов не только программированию учат, но и учат их в «железе» разбираться. Понавыпускали всяких MicroBit»ов и дарят их (то есть, отдают совершенно безвозмездно) каждому первоклашке. Это — в Англиях, где учиться начинают с 5-ти лет. В других Европах MicroBit не дарят, но изучают его очень активно. MicroBit превращает обучение серьезным вещам в интересную игру. Как результат, в той же Англии пятилетки‑первоклашки к 5-му классу вполне осваивают и Python, и Java Script…А в Поднебесной, читал, с обычного 5-го класса (не специально го) начинают делать лабораторные работы по искусственному интеллекту (накупили для этого чипов у Intel)…

Но, в нашем Минобре ни про то, ни про это не читают и другим не советуют. Это ж только во времена СССР поэт В. Маяковский учил: «глазами жадными цапайте все то, что у нашей земли хорошо и что хорошо на Западе»...

Читать далее

Оптимизированный доступ к GPIO и не только, часть вторая

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

Уважаемые жители Habr‑а, В данной статье, речь пойдет о доступе к GPIO, и другим регистрам, используя C++.

Несколько лет назад, я подготовил статью, о том, как можно используя constexpr‑клаcсы, серьезно оптимизировать доступ к GPIO‑порту, таким образом, чтобы команда «PA0.set()» — превращалась в одну‑три ассемблерных инструкции, в зависимости от обстоятельств. Этот класс лишь выглядел обычным, который оптимизировался компилятором. Фактически, это была высокоуровневая оптимизация низкоуровневого кода. Теоретически возможно было перегрузить оператор равенства и писать просто PA0=1 или PA0=0, фактически это вызывало inline инструкцию, позволяющую добавить еще и барьерную инструкцию.

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

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

Читать далее

Реверс-инжиниринг китайского ПЛК FX3U-14MR. Часть 2. Софт

Время на прочтение9 мин
Количество просмотров13K

В первой части мы познакомились с аппаратным обеспечением китайского клона ПЛК FX3U-14MR (одного из его вариантов). В это части мы научимся подключаться к его MCU по доступным коммуникационным интерфейсам, останавливать, запускать программу, заливать прошивку. И в конце рассмотрим примеры программ на базе библиотеки STM32duino, задействующих всю периферию ПЛК.

Читать далее

Starting Electronics: руководство по веб-серверам на Arduino. Часть 4. Отображение состояния кнопки на веб-странице

Уровень сложностиСложный
Время на прочтение5 мин
Количество просмотров5.5K


От переводчика. В этой части руководства автор собирает ещё одну часть пазла и объясняет каким образом можно отображать состояние кнопки на веб-странице. Разумеется, это не обязательно должна быть кнопка, это может быть переключатель, джампер, контакты реле или что-то подобное.

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

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

Читать дальше →

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

Тестируем cs1238

Время на прочтение6 мин
Количество просмотров4.9K

В данной статье сделана попытка сравнить работу двух АЦП – cs1238 (Chipsea Tech Shenzhen) и mcp3424 (Microchip) в диапазоне входных напряжений 0-30мВ.

Читать далее

Stm32 + USB на шаблонах C++. Продолжение'. Делаем MSC

Время на прочтение12 мин
Количество просмотров6.8K

В продолжение темы применения современного C++, а именно шаблонов, в программировании микроконтроллеров рассматриваю реализацию еще одного популярного класса USB - Mass Storage, а также вопрос создания композитного устройства.

Читать далее

Отладка интерфейса I2S

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

В этом тексте я написал про особенности интерфейса I2S и про то как можно тестировать и отлаживать интерфейс I2S.

Читать далее

MP3 плеер для танка

Время на прочтение5 мин
Количество просмотров15K

Условия эксплуатации танка, как известно, весьма суровые: пыль и вибрация, широкий диапазон рабочих температур, большие изменения влажности. Именно поэтому обойтись дешёвыми китайскими платами с Aliexpress здесь не получится. К тому же плеер должен органично вписываться в существующий конструктив, не мешать орудиям и рычагам управления. А вот большой объем памяти наоборот не требуется, воспроизводить нужно два трека: выстрел из пушки и пулемёт.

Читать далее

Почему Нам Нужен UART-Shell? (или Добавьте в Прошивку Гласность)

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

Есть такая классическая и одновременно забытая технология отладки FirmWare как интерфейс командной строки поверх UART.

В этом тексте я напишу про достоинства и недостатки отладки через UART Shell.

Читать далее

Микроконтроллеры Megawin серии MG32F02: таймеры общего назначения

Время на прочтение30 мин
Количество просмотров2.1K

Продолжая цикл публикаций по микроконтроллерам на ядре Cortex-M0 компании Megawin (см. предыдущие статьи 1, 2, 3, 4 и 5), сегодня рассмотрим таймеры общего назначения.

Читать далее

Как разместить переменную по определенному адресу в Keil

Время на прочтение4 мин
Количество просмотров13K

Иногда возникает задача сохранить во flash памяти контрольную сумму, картинку, строчку текста, настройку. А ещё иногда возникает задача сохранить переменную не просто в ОЗУ, а в определенных адресах. Или например иметь функцию, исполняемую из ОЗУ чтобы можно было присылать по UART и сразу исполнять новый код функции. Рассмотрим эти задачи на примерах.

Читать далее

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