Рубрика «программирование микроконтроллеров» - 45

Немного о многозадачности

Каждый, кто день за днем или от случая к случаю, занимается программированием микроконтроллеров, рано или поздно столкнется с вопросом: а не использовать ли многозадачную операционную систему? Их в сети предлагается довольно много, при этом немало – бесплатных (или почти бесплатных). Только выбирай.

Подобные сомнения появляются, когда попадается проект, в котором микроконтроллер должен одновременно выполнять несколько различных действий. Некоторые из них не связаны с другими, а остальные, наоборот, не могут друг без друга. К тому же, и тех и других может оказаться слишком много. Что такое “слишком много” зависит от того, кто будет оценивать или от того, кто будет выполнять разработку. Хорошо, если это один и тот же человек.

Это, скорее, не вопрос количества, а вопрос качественного различия задач по отношению к скорости выполнения, или еще каким-то требованиям. Такие мысли могут возникнуть, например, когда в проекте требуется регулярно отслеживать напряжение питания (не пропало ли?), довольно часто считывать и сохранять значения входных величин (покоя не дают), изредка следить за температурой и управлять вентилятором (дышать нечем), сверять свои часы с тем, кому доверяешь (вам хорошо там командовать), поддерживать связь с оператором (стараться не нервировать его), проверять контрольную сумму постоянной памяти программ на предмет деменции (при включении, или раз в неделю, или с утра).Читать полностью »

Несколько лет назад я изготовил на микроконтроллере ATmega8 часы с будильником, где реализовал однотональный (одноголосный) простейший синтезатор мелодий. В Интернете немало статей для начинающих, посвящённых этой теме. Как правило, для генерации частоты (нот) применяют 16-разрядный таймер, который конфигурируется определённым образом, заставляя на аппаратном уровне выдавать сигнал в форме меандра на определённом выводе МК. Второй (8-разрядный) таймер применяется для реализации длительности ноты или паузы. Ноты по известным формулам сопоставляются с частотами, а они, в свою очередь, сопоставляются с определёнными 16-битными числами, обратно пропорциональные частотам, которые задают периоды счёта таймера.
Читать полностью »

image

Здравствуйте, меня зовут Дмитрий, сегодня я расскажу как я создал GPS часы. В конце статьи будет ссылка на прошивку и CAD 3D модель.
Читать полностью »

Я работаю со студентами на микроконтроллере STM32F411RE, имеющего целых 512 кБайт ROM и 128 кБайт ОЗУ.
Обычно в этом микроконтроллере в ROM память записывается программа, а в RAM изменяемые данные и очень часто нужно сделать так, чтобы константы лежали в ROM.
В микроконтроллере STM32F411RE, ROM память расположена по адресам с 0x08000000...0x0807FFFF, а RAM с 0x20000000...0x2001FFFF.

И если все настройки линкера правильные, студент рассчитывает, что вот в таком незамысловатом коде его константа лежит в ROM:

class WhantToBeInROM
{
private:
  int i;
public:
  WhantToBeInROM(int value): i(value) {}
  int Get() const
  {
    return i;
  }
};

const WhantToBeInROM myConstInROM(10);

int main()
{  
  std::cout << &myConstInROM << std::endl ;
}

Вы тоже можете пробовать ответить на вопрос: где лежит константа myConstInROM в ROM или в RAM?

Если вы ответили на этот вопрос, что в ROM, поздравляю вас, на самом деле скорее всего вы не правы, константа в общем случае будет лежать в RAM и чтобы разобраться, как правильно и законно расположить ваши константы в ROM — добро пожаловать под кат.
Читать полностью »

Введение

Внимание, это не очередная «Hello world»статья о том как помигать светодиодом или попасть в свое первое прерывание на STM32. Однако, я постарался дать исчерпывающие объяснения по всем затрагиваемым вопросам, поэтому статья будет полезна не только многим профессиональным и мечтающим стать таковыми разработчикам (как я надеюсь), но и начинающим программистам микроконтроллеров, так как тема эта почему-то обходится стороной на бесчисленных сайтах/блогах «учителей программирования МК».

image
Читать полностью »

В комментариях под моими предыдущими статьями неоднократно возникал вполне резонный вопрос: "Зачем делать dc/dc преобразователи на микроконтроллере, когда есть готовые?" и я в качестве ответа постоянно упоминал, как наиболее яркий пример, контроллер заряда с алгоритмом MPPT. Но сказать это одно, а показать… уже куда интереснее и нагляднее, поэтому сегодня расскажу о своем небольшом вялотекущем проекте такого контроллера.

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

Фото МРРТ

Читать полностью »

Затыки неизбежны при разработке любого ПО. В эмбедде свои щедрые пять копеек могут подкинуть еще и аппаратные проблемы, но то отдельная песня. А вот чисто программные засады, когда застреваешь на, вроде бы, пустом месте… Для меня их три вида.

Проще всего, когда не до конца понят мануал, стандарт или, скажем, порядок конфигурирования библиотеки под железо. Здесь ясно: не все ходы исчерпаны, терпение и труд, еще пяток-другой экспериментов и оно оживет. Осциллограф и научный тык в помощь.

Маскирующиеся баги в эмбедде - 1
Выбор делителя частоты для настройки шины CAN

Хуже, когда проблема — в опечатке или ошибке в логике, которую не видишь в упор, пока по этому месту двадцать раз не пройдешься и глазами, и в пошаговой отладке. Потом осеняет, звонкий удар по лбу, крик «Ну екарный ты ж бабай!», правка. Работает.

И мрачный третий вид: глюк, окопавшийся в чужой библиотеке и вылезающий на стыке с железом. Шекспировские страсти рождает под ровный свет монитора. «Да ведь не может, не мо-жет система так себя вести, потому что не может никогда! Ну правда же! А?!» Не-а. Получите, распишитесь.

В итоге реальность оказывается ширше ширее шире ожидаемого. Пара примеров:
Читать полностью »

В сегодняшней статье хочу поделится с вами новым проектом. На этот раз это сенсорный выключатель с стеклянной панелью. Устройство компактное, размерами 42х42мм(стандартные стеклянные панель имеет размеры 80х80мм). История этого устройства началась давно, около года назад.

Сенсорный мини выключатель cо стеклянной панелью на nRF52832 - 1

Читать полностью »

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

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

Избавиться от «макаронного кода» и вернуть сложному проекту на МК гибкость и управляемость помогает использование операционных систем реального времени.
Для микроконтроллеров AVR разработаны и довольно популярны несколько кооперативных ОС реального времени. Однако все они написаны на языке Си или Ассемблер и не подходят тем, кто программирует МК в среде BASCOM AVR, лишая их столь полезного инструмента для написания серьезных приложений.

Чтобы исправить этот недостаток, я разработала простую ОСРВ для среды программирования BASCOM AVR, которую и выношу на суд читателей.

image
Читать полностью »

У вас бывает такой сон: вы оказываетесь на экзамене или выступаете перед некоторой аудиторией, и вдруг осознаете, что вы вообще не готовились и сейчас прийдется импровизировать. Именно в такой ситуации, но не во сне, а в реале, я оказался перед майскими праздниками в Москве, куда прилетел из Калифорнии, чтобы провести трехдневный семинар для тщательно отобранных школьников ведущих московских физматшкол. Под эгидой РОСНАНО, в гимназии РУТ (МИИТ) и в присутствии преподавателей из МИЭТ, МИРЭА, МИФИ, МЭИ и ВШЭ МИЭМ.

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

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

4 июня я с коллегами по Wave Computing провожу похожий семинар в Лас-Вегасе, но только для взрослых, а 8-19 июля помогаю МИЭТ провести летнюю школу в Зеленограде. Планы этих мероприятий (не окончательные, а для обсуждения в группе преподавателей и инженеров, в том числе здесь, на Хабре) — в конце поста.

Как я не готовился и провел роснановский семинар по ПЛИС-ам в Москве. Планы сделать то же в Лас-Вегасе и Зеленограде - 1
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js