Что такое микроконтроллеры и как их программировать. Какие языки и инструменты используются для разработки встраиваемых систем. Как работать с периферийными устройствами и прерываниями микроконтроллеров. Какие существуют особенности и ограничения при программировании микроконтроллеров.
Что такое микроконтроллер и зачем его программировать
Микроконтроллер — это миниатюрный компьютер, размещенный на одной интегральной схеме. Он содержит процессор, память и программируемые входы/выходы. Микроконтроллеры используются для управления различными электронными устройствами и системами.
Основные преимущества использования микроконтроллеров:
- Компактные размеры
- Низкое энергопотребление
- Невысокая стоимость
- Наличие встроенной периферии (таймеры, АЦП, интерфейсы и т.д.)
- Возможность программирования под конкретную задачу
Программирование микроконтроллера позволяет реализовать требуемый алгоритм работы устройства. Это дает возможность создавать «умные» устройства, способные выполнять сложные функции.

Языки программирования микроконтроллеров
Для программирования микроконтроллеров используются различные языки, наиболее распространенными являются:
- Ассемблер — низкоуровневый язык, обеспечивающий прямой доступ к аппаратным ресурсам
- C/C++ — позволяют писать эффективный и переносимый код
- Python — упрощает разработку прототипов
- BASIC — хорошо подходит для начинающих
Выбор языка зависит от конкретной задачи, требований к производительности и имеющегося опыта разработчика. Для большинства проектов оптимальным выбором является язык C.
Особенности программирования микроконтроллеров
При разработке программ для микроконтроллеров необходимо учитывать следующие особенности:
- Ограниченные ресурсы (память, вычислительная мощность)
- Работа в реальном времени
- Необходимость оптимизации кода
- Прямой доступ к аппаратным ресурсам
- Использование прерываний
- Отсутствие операционной системы
Эти особенности требуют от программиста тщательного планирования архитектуры программы и эффективного использования доступных ресурсов микроконтроллера.

Инструменты для разработки
Для программирования микроконтроллеров используются следующие инструменты:
- Интегрированные среды разработки (IDE)
- Компиляторы
- Программаторы
- Отладчики
- Симуляторы
Выбор конкретных инструментов зависит от типа используемого микроконтроллера и предпочтений разработчика. Многие производители микроконтроллеров предоставляют собственные наборы средств разработки.
Работа с периферийными устройствами
Микроконтроллеры имеют встроенные периферийные устройства, которые позволяют взаимодействовать с внешним миром. Основные типы периферии:
- Порты ввода-вывода
- Таймеры/счетчики
- АЦП и ЦАП
- Интерфейсы UART, SPI, I2C
- ШИМ-генераторы
Для работы с периферией используются специальные регистры, через которые осуществляется настройка и управление. Важно внимательно изучить документацию на микроконтроллер, чтобы правильно использовать доступную периферию.
Прерывания в микроконтроллерах
Прерывания позволяют микроконтроллеру реагировать на внешние события в реальном времени. Основные типы прерываний:

- Внешние (от кнопок, датчиков и т.п.)
- Таймерные
- От периферийных устройств
При возникновении прерывания выполнение основной программы приостанавливается и управление передается обработчику прерывания. Это позволяет оперативно реагировать на события без постоянного опроса.
Оптимизация кода для микроконтроллеров
Оптимизация важна из-за ограниченных ресурсов микроконтроллеров. Основные способы оптимизации:
- Использование битовых операций
- Замена умножения и деления на сдвиги
- Использование встроенных функций компилятора
- Оптимизация циклов
- Правильный выбор типов данных
Оптимизированный код позволяет экономить память и повышать быстродействие программы. При этом важно соблюдать баланс между оптимизацией и читаемостью кода.
Отладка программ для микроконтроллеров
Отладка встраиваемых систем имеет свои особенности. Основные методы отладки:
- Использование светодиодов и пинов портов
- Вывод отладочной информации по UART
- Использование встроенных отладчиков (JTAG, SWD)
- Симуляция на ПК
Важно продумать возможности отладки на этапе проектирования устройства. Это позволит значительно упростить поиск и устранение ошибок в дальнейшем.

Программирование микроконтроллеров — Учимся программировать микроконтроллеры / Хабр
Учимся программировать микроконтроллеры
Статьи Авторы Компании
Сначала показывать
Порог рейтинга
rukhi7
Программирование *Анализ и проектирование систем *C *Программирование микроконтроллеров *
Когда-то мне довелось делать программу для управления процессом измерения в мониторе артериального давления (АД). Хочу на этом примере разобрать и продемонстрировать что нужно для решения задач реального времени.
Я постараюсь, конечно, рассмотреть эту задачу как гипотетическую, с минимальным погружением в детали того откуда берутся те или иные требования, но очень многое завязано именно на эти детали.
Читать далее
Всего голосов 10: ↑8 и ↓2 +6
Просмотры1.4K
Комментарии 24
marus-ka
Программирование микроконтроллеров *Производство и разработка электроники *
На волне подъема всеобщего интереса к отечественным микроконтроллерам и процессорам мне захотелось разобраться, а что за камни делает НИИЭТ? Про микроконтроллеры и процессоры других производителей написано немало (как на самом Хабре, так и в тематических журналах). А про МК НИИЭТ крайне мало информации, особенно практической и особенно про 8-ми и 16-битные.
Читать далее
Всего голосов 20: ↑20 и ↓0 +20
Просмотры2.8K
Комментарии 22
aabzel
Программирование микроконтроллеров *Производство и разработка электроники *
Tutorial
Часто в РФ приходится слышать мнение, что в Embedded разработке якобы в принципе не может быть никакого модульного тестирования. Инженеры за 40 в (7 случаях из 10) даже никогда не слышали термина unit testing. В России бытует даже расхожее мнение
Не нужны никакие тесты. Если программист хороший, то и код он пишет без ошибок.
Попробуем разобраться какие есть плюсы и минусы в модульном тестировании и понять надо это или нет.
Читать далее
Всего голосов 13: ↑7 и ↓6 +1
Просмотры 1. 5K
Комментарии 46
bougumot
Блог компании Auriga Программирование *Системное программирование *Программирование микроконтроллеров *
В этой статье я опишу методику инструментирования на основе промежуточного ассемблера которую использовал для создания иллюстраций к своей предыдущей статье. Данный метод в частности используется таким инструментом как LDRA, с которым мне недавно пришлось столкнуться в рамках одного проекта…
Читать далее
Всего голосов 10: ↑10 и ↓0 +10
1K
Комментарии 0
aabzel
Программирование микроконтроллеров *Производство и разработка электроники *
Tutorial
Перепрошивка Пастильды обернулась настоящим квестом. Как перепрошить Pastild(у) или бег с препятствиями. Инструкция для обыкновенного пользователя компьютером.
Читать далее
Всего голосов 4: ↑4 и ↓0 +4
Просмотры1.3K
Комментарии 11
dmitriyrudnev
Блог компании RUVDS.com Разработка систем связи *Программирование микроконтроллеров *Схемотехника *DIY или Сделай сам
Во второй части публикации речь пойдёт о реализации линейного входа описанной ранее звуковой карты USB на встроенном в MCUSTM32F411CEU6АЦП.
В статье будут разобраны несколько неочевидных нюансов подобной реализации, а в финале мы сравним характеристики линейного входа на встроенном АЦП с характеристиками линейного входа на кодеке TLV320AIC3104IRHB.
Читать дальше →
Всего голосов 47: ↑46 и ↓1 +45
Просмотры4.3K
Комментарии 16
YuriPanchul
FPGA *Программирование микроконтроллеров *Образование за рубежом Производство и разработка электроники *Процессоры
Обнаружил интересный баг американской системы образования:
У многих студентов в резюме стоит «делал курсовой проект по алгоритму Томасуло, out-of-order суперскаляру, многопоточному процессору итд».
На это я спрашиваю: «Прекрасно, давайте возмем два процессорных ядра — одно со статическим конвейером, а у другого с динамическим, как в вашем курсовике. Насколько ваш процессор будет производительнее?»
На это они отвечают «процессор будет производительнее, потому что» — и начинают ковыряться в деталях зависимостей между инструкциями.
На это я машу руками и говорю «стоп-стоп-стоп. Я не просил вас объяснить мне что такой RaW (read-after-write), WaR и WaW зависимости. Я вообще не спрашивал у вас «почему?» Я спросил у вас «сколько?» Я просил вас грубо оценить пользу от вашей разработки.
И представляете что они мне отвечают?
Всего голосов 68: ↑53 и ↓15 +38
Просмотры23K
Комментарии 174
DSarovsky
C++ *Программирование микроконтроллеров *
В продолжение темы применения современного C++, а именно шаблонов, в программировании микроконтроллеров рассматриваю реализацию еще одного популярного класса USB — Mass Storage, а также вопрос создания композитного устройства.
Читать далее
Всего голосов 18: ↑15 и ↓3 +12
Просмотры 3. 4K
Комментарии 10
aabzel
Программирование микроконтроллеров *Производство и разработка электроники *Электроника для начинающих
Tutorial
В этом тексте я написал про особенности интерфейса I2S и про то как можно тестировать и отлаживать интерфейс I2S.
Читать далее
Всего голосов 13: ↑12 и ↓1 +11
Просмотры2.6K
Комментарии 2
avsolovyev
Программирование микроконтроллеров *
Как избавиться от дополнительных разъемов на печатной плате IoT-устройств при наличии разъема Type-C?
Этим вопросом мы задались, когда в своих разработках начали переход с micro-USB на 24pin Type-C. В этой статье я постараюсь описать наш опыт использования Type-C, расскажу о распиновке разъемов Type-C для устройств с ESP32, STM32, Миландра, RISC-V или ARM, а также о том, что внутри кабеля Type-C и как его выбрать.
Читать далее
Всего голосов 29: ↑28 и ↓1 +27
Просмотры4.2K
Комментарии 14
rukhi7
C *Программирование микроконтроллеров *Производство и разработка электроники *
Хочу поделиться своим вариантом способа хранения параметров. Мой вариант подходит не только для хранения в какой-то отдельной энергонезависимой памяти (далее Епром), он изначально придуман для хранения калибровочных значений в остатке флеш памяти программ.
Я рассматривал задачу не только с точки зрения хранения данных, а еще и с точки зрения эффективного использования Епром для их изменения.
Читать далее
Всего голосов 8: ↑7 и ↓1 +6
Просмотры1.7K
Комментарии 29
reug
Программирование микроконтроллеров *
Продолжая цикл публикаций по микроконтроллерам на ядре Cortex-M0 компании Megawin (см. предыдущие статьи 1, 2, 3, 4, 5, 6 и 7), сегодня рассмотрим модуль интерфейса SPI в роли ведущего и ведомого, а также:
Читать далее
Всего голосов 10: ↑9 и ↓1 +8
Просмотры886
Комментарии 3
dmitriyrudnev
Блог компании RUVDS.com Разработка систем связи *Программирование микроконтроллеров *Схемотехника *DIY или Сделай сам
С момента публикации материала о реализации составного устройства USB на STM32 прошло полтора года. Данная статья в двух частях будет своеобразным отчётом о проделанной за это время работе.
Напомню, что описанное в предыдущей публикации решение состоит из двухканального звукового устройства USB и виртуального COM-порта. Разрабатывалось составное устройство USB для применения в составе любительской SDR-радиостанции.
Далее речь пойдёт об аппаратно-программной доработке двухканального звукового устройства USB в полноценную звуковую карту USB.
Читать дальше →
Всего голосов 49: ↑48 и ↓1 +47
Просмотры5K
Комментарии 13
Evgeny_E
Программирование микроконтроллеров *Производство и разработка электроники *DIY или Сделай сам Звук
Условия эксплуатации танка, как известно, весьма суровые: пыль и вибрация, широкий диапазон рабочих температур, большие изменения влажности. Именно поэтому обойтись дешёвыми китайскими платами с Aliexpress здесь не получится. К тому же плеер должен органично вписываться в существующий конструктив, не мешать орудиям и рычагам управления. А вот большой объем памяти наоборот не требуется, воспроизводить нужно два трека: выстрел из пушки и пулемёт.
Читать далее
Всего голосов 31: ↑22 и ↓9 +13
Просмотры12K
Комментарии 12
YuriPanchul
Алгоритмы *GPGPU *FPGA *Программирование микроконтроллеров *Карьера в IT-индустрии
Я работаю проектировщиком аппаратного блока графического процессора в телефонах Samsung, в рамках совместного проекта с AMD. Сейчас наш менеджмент расширяет команду и поощряет инженеров распостранять информацию о новых позициях среди своих знакомых. Я решил написать это пост для более широкой аудитории, так как множество людей, способных пройти интервью на RTL или DV позицию — больше, чем множество моих знакомых. Если вы сможете прислать мне ответ на задачку в моем посте вместе с вашим резюме, я перешлю его нанимающему менеджеру и рекрутеру нашей группы (в комментах прошу ответ не писать). Если резюме им понравится, вам нужно будет пройти стандартное собеседование на несколько часов, с несколькими инженерами, у каждого из которых свой набор задачек.
Также я покажу материалы, по которым можно готовиться к собеседованию, особенно если вы студент или у вас ограниченный опыт в микроэлектронной промышлености.
Читать далее
Всего голосов 17: ↑14 и ↓3 +11
Просмотры4.3K
Комментарии 33
aabzel
Open source *Программирование *Промышленное программирование *Программирование микроконтроллеров *DevOps *
Tutorial
Итак в вашем репозитории накопилось количество сборок превысившее число 1. Настало время задуматься о DevOps(е). Как же уследить за всеми этими сборками?
Классическое решение это запустить сервер сборки. Есть готовая технология, называется Jenkins.
Идея проста. Сервер сборки это инфраструктурный прикладной процесс, который периодически запускает скрипты построения конкретных программных проектов и затем сохраняет бинари в конкретную папку или архив. Обычно сервер сборки работает автономно 24/7 и собирает артефакты из репозитория с кодом.
В этом тексте я написал инструкцию для разворачивания Jenkins на Windows компьютере.
Читать далее
Всего голосов 11: ↑4 и ↓7 -3
Просмотры2.8K
Комментарии 23
Indemsys
Разработка систем связи *Программирование микроконтроллеров *Схемотехника *Производство и разработка электроники *DIY или Сделай сам
IoT маршрутизатор нужен для сбора и передачи данных в облака от различных проводных локальных шин (CAN, RS485, USB …) и беспроводных локальных сетей (Bluetooth, LoRa …).
Используя Azure RTOS сделать свой маршрутизатор достаточно просто. Нужно только правильно выбрать пару ингредиентов: Wi-Fi модуль и универсальный, быстрый, защищённый, экономичный микроконтроллер с открытой архитектурой.
Читать далее
Всего голосов 4: ↑3 и ↓1 +2
Просмотры1.9K
Комментарии 4
Yufi
Программирование микроконтроллеров *Схемотехника *Электроника для начинающих
Как-то мне пришлось делать устройство на голой esp8266, и о сложностях (моей тупоголовости) я сейчас поведаю.
Если вы когда-нибудь делали устройство на голой esp, навряд ли я вам мир открою, статья рассчитана на начинающих, так что давайте преступим к вопросу безотлагательно.
Итак, речь пойдет не о самой микрухе esp, а о модуле с распаянными памятью, обвязкой и тд. Но даже если вы будете разводить плату на микрухе, информация вам пригодится.
Читать далее
Всего голосов 25: ↑7 и ↓18 -11
Просмотры3.7K
Комментарии 11
hddmasters
Системное администрирование *Восстановление данных *Реверс-инжиниринг *Программирование микроконтроллеров *Компьютерное железо
Tutorial
На вопрос, какие не самые обычные случаи восстановления данных могут повстречаться в компании, профиль которой – извлекать информацию из поврежденных накопителей, можно привести пример одной из недавних задач с MMC картой из промышленного ПЛК (PLC) Siemens Simatic S7-300, в задачи которого входило управление несколькими десятками электродвигателей и клапанов, а также анализ параметров целой россыпи датчиков некоего конвейера.
Для решения этой задачи перечень услуг специалиста по работе с поврежденными накопителями оказался недостаточным. Кроме этого потребовался опыт реверс-инженера, опыт аналитика повреждений в данных, не имеющих избыточности, а также опыт программиста.
Читать далее
Всего голосов 34: ↑34 и ↓0 +34
Просмотры5.4K
Комментарии 33
aabzel
Криптография *Open source *C++ *Программирование микроконтроллеров *Схемотехника *
Решил купить себе Pastild(у). Это аппаратный хранитель паролей и одновременно USB Flash(ка). Также понравилась возможность съёмной SD карты. Идея аппаратного менеджера паролей, который не требует отдельного USB просто великолепная!
Какие же впечатления от использования Пастильды (User experience)?
Читать далее
Всего голосов 8: ↑7 и ↓1 +6
Просмотры3K
Комментарии 12
Программирование 32-разрядных микроконтроллеров
Программирование 32-разрядных микроконтроллеров
Занятие 1: Введение. Устройство микроконтроллера. Понятие «микроконтроллер». Семейства микроконтроллеров. Применение микроконтроллеров. Блоки контроллера: общий ввод-вывод, тактирование, таймеры, прерывания, периферия, возможность отладки. Язык С для ARM. Отличия написания программы по сравнению с программированием под PC. Ввод и вывод. Адресация. Двоичное и шестнадцатиричное счисление. Среда программирования IAR EWARM. Загрузка программы в микроконтроллер. Создание программы ввода-вывода. Освоение связи схемы платы и прошивки, документации, поиска адресов аппаратных регистров.
Занятие 2: Зачем нужны прерывания. Блок контроля прерываний, вектора прерываний, приоритеты. Флаги прерываний в контроллерах LuminaryMicro. Написание программы асинхронного ввода-вывода. Освоение документации к NVIC, возможностей прерываний GPIO, маски побитового доступа, стартового кода, таблицы векторов прерываний, дребезга контактов, макросов таблиц адресов аппартаных регистров и доступа к ним, правил написания обработчиков прерываний.
Занятие 3: Обмен данными. UART. Обмен данными с другими устройствами. Последовательная и параллельная передача данных, UART. Понятие протокола передачи данных. Помехоустойчивость и коррекция ошибок. RS232 для микроконтроллера и компьютера. Виртуальный USB-RS232 порт. Альтернативные функции порта GPIO. Написание эхо-программы UART с использованием прерываний. Освоение альтернативной функции GPIO, правил как не сломать контроллер, работы с COM портом на компьютере, событий UART.
Занятие 4. Таймеры. Режимы работы таймеров, измерение коротких времен. Написание программы синхронного вывода с использованием прерываний и таймера. Освоение библиотеки driverlib.
Занятие 5. Доделывание программ: ввод-вывод, асинхронный ввод-вывод, UART-эхо, синхронный вывод при помощи таймера.
Занятие 6. Широтно-импульсная модуляция (ШИМ). Методы синхронизации каналов ШИМ. Разработка программ периодического плавного управления выходной мощностью с использованием таймера и генератора ШИМ. Освоение цифровых компараторов как
способа плавного регулирования, счётчиков как делителей частоты.
Занятие 7: АЦП, ЦАП. Скорость дискретизации и разрядность. Режимы запуска АЦП, дифференциальный режим измерения. Алгоритмы усреднения измеренных величин: скользящее среднее и экспоненциальное усреднение Разработка программы цифрового контроллера напряжения.
Занятие 8: Интерфейс I2C. Физическая реализация. Open-drain и pull-up. Выделенные адреса. Арбитраж. Типы обнаруживаемых ошибок. Multi-master. Как можно автоматически распределить адреса? Примеры других последовательных интерфейсов (SPI, CAN). Программа обнаружения дисплея на тестовой плате и автоматическое определение его адреса.
Занятие 9: Взаимодействие с дисплеем. Устройство дисплея. Пиксели, цвет, битность изображения. Протокол записи информации на дисплей. Написание программы вывода на дисплей.
Занятие 10: Работа с флеш-памятью микроконтроллера. Виды памяти и принципы их работы. Запись во флэш память из прошивки. Отличие от записи в оперативную память. Написание простой программы с использованием флеш памяти.
Introduction to Microcontrollers — Beginnings
Майк Сильва●20 августа 2013 г.●Tweet
Добро пожаловать в серию руководств «Введение в программирование микроконтроллеров». Если вы хотите изучить основы встроенного программирования для микроконтроллеров (а также немного дизайна встроенного оборудования), я надеюсь, что эти учебные пособия помогут вам в этом путешествии. Это мои первые сообщения здесь, и я пишу эту серию руководств, потому что на протяжении многих лет я видел бесчисленное количество новичков, задающих одни и те же вопросы и спотыкающихся о одни и те же камни преткновения, и я подумал, что смогу придумать что-то полезное в ответах. эти вопросы, и в избегании этих точек срабатывания.
- Часть 1. Введение в микроконтроллеры. Начало
- Часть 2. Введение в микроконтроллеры. Дальнейшее начало
- Часть 3. Введение в микроконтроллеры. Hello World
- Часть 4. Введение в микроконтроллеры. Введение в микроконтроллеры. Прерывания
- Часть 6.
Введение в микроконтроллеры. Подробнее о прерываниях
- Часть 7. Введение в микроконтроллеры. Таймеры
- Часть 8. Введение в микроконтроллеры.0008
- Часть 9. Знакомство с микроконтроллерами — дополнительные таймеры и дисплеи
- Часть 10. Знакомство с микроконтроллерами — кнопки и дребезг
- Часть 11. Знакомство с микроконтроллерами — матрица кнопок и автоматическое повторение
- Часть 12. Знакомство с микроконтроллерами — управление WS2812 Светодиоды RGB
- Часть 13. Введение в микроконтроллеры — 7-сегментные дисплеи и мультиплексирование
- Часть 14. Введение в микроконтроллеры — Ада — 7 сегментов и обнаружение ошибок
Целевая аудитория
Эта серия руководств предназначена для студентов, любителей, программистов и разработчиков оборудования, которые хотят изучить основы программирования микроконтроллеров или заполнить некоторые пробелы в своих знаниях в области программирования. Этот учебник не научит вас программированию в целом, хотя в нем будут обсуждаться методы программирования, представляющие особый интерес для микроконтроллеров. Этот учебник также не научит вас проектировать аппаратное обеспечение, хотя и проиллюстрирует аппаратные проблемы, с которыми обычно сталкиваются при использовании микроконтроллеров. Я надеюсь, что это поможет новичку понять, что такое микроконтроллер (μC), какими возможностями он обычно обладает и как использовать эти возможности. Он будет идти с самого начала — как подключить и запрограммировать микроконтроллер на мигание и светодиод (микроконтроллерная версия программы «Hello World»), через различные функции и периферийные устройства, обычно используемые в микроконтроллерах, такие как прерывания, таймеры / счетчики, UART, SPI, I2C, АЦП, ЦАП, ШИМ, сторожевой таймер и т. д. Также будут рассмотрены общие темы, такие как подавление дребезга входных сигналов, фильтрация значений АЦП, управление жидкокристаллическими дисплеями символов и другие подобные задачи.
Эта статья доступна в формате PDF для удобной печати. Это относится практически ко всему, что вы прочтете в этом уроке. Если вы прочтете здесь «Х», не думайте, что это означает «Х и только Х, во всех возможных ситуациях, без исключений или оговорок, сейчас и навсегда». Разработчики микроконтроллеров придумали много разных, интересных, а иногда и просто странных способов сделать что-то. И как пользователь микроконтроллера и программист, вы тоже можете придумать много разных и интересных способов сделать что-то. По моему опыту, для программы, состоящей из N шагов, вероятно, существует как минимум N-квадрат способов написания этой программы. Цель этого руководства состоит в том, чтобы попытаться дать вам прочную основу для программирования микроконтроллеров, а не в том, чтобы быть всеобъемлющей энциклопедией в этой области. Для каждой программы-примера я постараюсь написать ее простым и понятным способом, а в дальнейшем дам вам возможность открыть для себя свои собственные хитрые приемы.
Другой возможный источник путаницы — терминология. Разные производители довольно часто используют разную терминологию для одних и тех же или похожих функций, регистров и опций конфигурации/состояния. В этом руководстве иногда я буду использовать терминологию, используемую одним из семейств микроконтроллеров , используемых в руководстве, а в других случаях я буду использовать неспецифическую терминологию. Я буду использовать то, что кажется подходящим для каждой ситуации.
Что такое встроенное программирование?
Встроенное программирование — это термин для компьютерного программирования, которое живет и управляет множеством управляемых компьютером устройств, которые окружают нас в наших домах, автомобилях, на рабочих местах и в сообществах. Чтобы было ясно, все программирование микроконтроллеров является встроенным программированием, но не все встроенное программирование является программированием микроконтроллера. Об этом чуть подробнее будет сказано далее. Иногда эти термины используются взаимозаменяемо, но основное внимание в этой серии руководств всегда уделяется микроконтроллерам.
На каждый имеющийся у вас настольный компьютер, ноутбук или планшет приходится дюжина или более (возможно, намного больше) микроконтроллеров, тихо выполняющих свои встроенные функции, и с этими устройствами многие люди даже не осознают, что речь идет о крошечном компьютере. запуск программы. Но они есть, и они есть, и эти программы нужно было написать, и именно поэтому миру нужно встроенное программирование. Микроконтроллеры добавляют интеллект бесчисленным устройствам и системам, позволяя этим устройствам и системам работать лучше, быстрее, безопаснее, эффективнее, удобнее, с большей пользой, и во многих случаях допуская само существование устройств и систем, которые нельзя было бы построить иначе. . Потратьте некоторое время на то, чтобы осмотреться и попытаться понять, где работают микроконтроллеры, и вы начнете понимать, насколько они стали вездесущими с момента их изобретения более 40 лет назад.
Вдобавок ко всему, многие люди, в том числе и я, считают программирование микроконтроллеров особенно увлекательной и полезной ветвью дерева программирования, и мы просто как программируем встроенные системы. Способы, сильно отличающиеся от большинства программ для настольных ПК или мэйнфреймов, встроенные программы делают вещи делают вещи , и для встроенного программиста вещи, делающие вещи, бесконечно круты.
Что такое встроенная система?
На этот вопрос нет идеального ответа, так как каждый ответ будет иметь некоторые исключения. Однако для наших целей давайте объявим, что встроенная система — это система, в которой используется один или несколько микрокомпьютеров (то есть от маленьких до очень и очень маленьких компьютеров), на которых выполняются специальные специальные программы и которые подключены к специализированному оборудованию для выполнения определенного набора функций. . Это можно сравнить с компьютером общего назначения, таким как знакомый настольный компьютер или ноутбук, которые не предназначены для запуска только одной специальной программы с одним специализированным набором оборудования. Это не идеальное определение, но это начало.
Некоторые примеры встроенных систем:
• Сигнализация / система безопасности
• Автомобильный круиз-контроль
• Термостат отопления / кондиционирования воздуха
• Микроволновая печь
• Контроллер противоскольжения
• Контроллер светофора
• Торговый автомат
• Газовый насос
• Портативная игра-судоку
• Контроллер ирригационной системы
• Рыба-поющая стена (или эквивалент этого сезона подарков)
• Мультикоптер
• Осциллограф
• Марсоход
По большей части я перечислил примеры встроенных приложений на менее сложном конце спектра, так как это, в конце концов, начальное руководство. К концу этой серии руководств у вас должно быть хорошее общее представление о том, как будет запрограммировано большинство этих приложений, и в общих чертах, какие типы ввода-вывода, синхронизации, прерывания и аппаратного обеспечения и функций для них потребуются.
В приведенном выше списке есть несколько вещей, на которые стоит обратить внимание. В то время как многие встроенные системы используют довольно традиционные пользовательские устройства ввода-вывода (клавиатуры, дисплеи), многие другие этого не делают. Кроме того, многие встроенные системы взаимодействуют напрямую с людьми, а другие нет (и мы все еще ждем, будет ли марсоход напрямую взаимодействовать с какими-либо марсианами).
Чем отличается встроенное программирование?
Встроенные программы должны тесно взаимодействовать со специализированными компонентами и специальными схемами, составляющими аппаратное обеспечение. В отличие от программирования поверх полнофункциональной операционной системы, где детали аппаратного обеспечения максимально удалены от внимания и контроля программиста, большая часть встроенного программирования работает непосредственно с аппаратным обеспечением и на нем. Сюда входит не только аппаратное обеспечение ЦП, но и аппаратное обеспечение, из которого состоят все периферийные устройства (как встроенные, так и внешние) системы. Таким образом, встроенный программист должен иметь хорошие знания об оборудовании, по крайней мере, в том, что касается написания программного обеспечения, которое правильно взаимодействует с этим оборудованием и манипулирует им. Эти знания часто распространяются на определение ключевых компонентов аппаратного обеспечения (микроконтроллер, устройства памяти, устройства ввода-вывода и т. д.), а в небольших организациях иногда доходят до проектирования и компоновки (в виде печатной платы) аппаратного обеспечения. Встроенному программисту также необходимо хорошо разбираться в отладочном оборудовании, таком как мультиметры, осциллографы, логические анализаторы и тому подобное.
Другое отличие от компьютеров общего назначения состоит в том, что большинство (но не все) встраиваемых систем весьма ограничены по сравнению с первыми. Микрокомпьютеры, используемые во встроенных системах, могут иметь размер программной памяти от нескольких тысяч до нескольких сотен тысяч байт, а не гигабайты в настольном компьютере, и обычно имеют даже меньший объем памяти данных (ОЗУ), чем память программ. Кроме того, процессоры часто представляют собой 8- и 16-разрядные устройства меньшего размера, в отличие от 32-разрядных и более крупных устройств, используемых в настольных компьютерах (хотя небольшие 32-разрядные микроконтроллеры сейчас стоят менее доллара в умеренных количествах, что удивительно). Меньший размер слова ЦП означает, среди прочего, что программе потребуется больше инструкций (и, следовательно, больше тактовых циклов), чем эквивалентной программе, работающей на ЦП с большим размером слова. И, наконец, скорость, с которой работают микроконтроллеры меньшего размера, намного меньше, чем скорость, с которой работает ПК. Типичная тактовая частота микроконтроллера меньшего размера составляет от 1 до 200 МГц, а не тактовая частота ПК.
В чем разница между микрокомпьютером, микропроцессором и микроконтроллером?
Под микропроцессором обычно понимают однокристальный центральный процессор (ЦП), причем ЦП является «мозгом» компьютера — частью компьютера, выполняющей программные инструкции. Микрокомпьютер — это любой компьютер, построенный на основе микропроцессора, вместе с памятью программ и данных, а также устройствами ввода-вывода и другими периферийными устройствами по мере необходимости. Микроконтроллер (часто сокращаемый до μC в этом руководстве) — это одночиповое устройство, в которое встроен не только микропроцессор, но и энергонезависимая память программ (ПЗУ) и энергозависимых данных (ОЗУ), а также полезные периферийные устройства. такие как ввод-вывод общего назначения (GPIO), таймеры и каналы последовательной связи. Отсюда следует, что все микроконтроллеры являются микрокомпьютерами, но не все микрокомпьютеры используют микроконтроллеры.
В небольших встроенных системах чаще всего используются микроконтроллеры, а не конструкции на основе микропроцессоров , поскольку микроконтроллеры обеспечивают наиболее компактную конструкцию и самую низкую стоимость оборудования. С другой стороны, более крупные встроенные системы могут использовать один или несколько микропроцессоров, если микроконтроллер с подходящей скоростью и функциональностью не может быть найден. Это может распространяться на использование промышленных ПК и даже более мощного оборудования. Также возможно включать как микропроцессоры, так и микроконтроллеры в сложную встраиваемую систему. Единственными реальными правилами являются использование любых устройств, соответствующих задаче, с учетом ограничений по бюджету, доступности, времени, инструментам и т. д.
Следует также отметить, что к большинству микроконтроллеров можно добавить внешнюю память и периферийные устройства, если встроенный микс не позаботится обо всех потребностях системы. Когда имеет смысл добавить такие внешние устройства, а не выбирать более крупный микроконтроллер с необходимыми ресурсами на борту, это выбор, который необходимо делать на индивидуальной проектной основе.
Что такое N-разрядный ЦП/микропроцессор/микроконтроллер?
Существует дискуссия о том, что значит называть устройство N-битным процессором, но в большинстве случаев это довольно очевидно. Если устройство может выполнять большинство своих инструкций по обработке данных со словами данных размером до N бит, то устройство является N-битным процессором. Например, устройство может иметь полный набор инструкций, которые могут работать с 8-битными данными, а также несколько инструкций, которые работают с 16-битными данными. Это устройство следует считать 8-битным, даже если отдел маркетинга утверждает обратное и называет его 16-битным чипом.
По объему 8-битные микроконтроллеры составляют самый большой сегмент рынка встраиваемых систем. Многие приложения просто не нуждаются в дополнительной мощности и никогда не будут нуждаться в ней. 16-разрядные устройства более мощные, но они занимают место между 8-разрядными устройствами младшего уровня и 32-разрядными устройствами высокого класса. 32-разрядные устройства находятся на верхнем уровне встраиваемого спектра для всех, кроме самых сложных или высокопроизводительных конструкций, но их цена постоянно снижается.
Какие семейства микроконтроллеров используются в этих руководствах?
Чтобы дать небольшой обзор различных разновидностей доступных микроконтроллеров, это руководство будет написано для одного 8-битного семейства (Atmel AVR) и одного 32-битного семейства (архитектура ARM Cortex M3 в форме семейство STM32). Эти два семейства были выбраны, чтобы дать довольно широкое представление об устройствах и подходах, используемых в мире микроконтроллеров. Первые несколько примеров программного обеспечения будут написаны на языке ассемблера для каждого из этих семейств, а также на языке C. После этого примеры будут написаны только на языке C.
Что еще нужно для этих уроков?
Хотя я полагаю, что вы могли бы проработать большую часть этого руководства, используя только симулятор микроконтроллера, я настоятельно рекомендую вам иметь либо плату для обучения/отработки микроконтроллера, либо даже просто чистую микросхему микроконтроллера, различные компоненты и макетную плату с питанием. Кроме того, вам понадобится компилятор C, предназначенный для вашего устройства, и, возможно, ассемблер для вашего устройства. У вас не должно возникнуть проблем с поиском бесплатного ассемблера для вашего чипа, и вы также сможете найти бесплатный компилятор C, даже если это версия коммерческого компилятора с ограниченной функциональностью. Вам также понадобится способ загрузки ваших программ в ваш микроконтроллер. Детали этого процесса загрузки будут тесно зависеть от конкретного микроконтроллера и платы, на которой он установлен.
Что касается контрольно-измерительного оборудования, цифровые мультиметры очень дешевы, и нет никаких оправданий тому, чтобы их не иметь. Такие места, как Harbour Freight, иногда продают их по несколько долларов. Другой элемент оборудования, который должен быть у любого встроенного инженера, — это приличный осциллограф. Не паникуйте, для этих руководств не требуется прицел. Однако, если вы сможете заполучить один из них, вы узнаете больше и сэкономите себе немало времени в придачу. USB-прицелы дают хорошую отдачу, как и некоторые импортные прицелы (или, конечно, работающие бывшие в употреблении прицелы). В конце прошлого года я побаловал себя красивым осциллографом Agilent с огромным (для меня) экраном и каждый раз, когда использую его, радуюсь потраченным деньгам.
Что касается микроконтроллеров, используемых в этих учебных пособиях, вот подробная информация об оборудовании, которое я буду использовать для каждого из семейств процессоров:
AVR
• Аппаратное обеспечение: плата Atmel STK-500 с установленным ATmega8515
• Инструменты: Atmel Studio 6 (бесплатно)
ARM Cortex M3
• Аппаратное обеспечение: STM32VLDiscovery Board, установленная на специальной стыковочной плате
• Инструменты: Rowley Crossworks (150 долл. США за личную лицензию — рекомендуем IAR Embedded Workbench Kickstart Edition для получения бесплатного набора инструментов)
Какой язык программирования?
Самое время немного поговорить о различных языках программирования, которые можно использовать для написания встраиваемого программного обеспечения. В этом уроке я буду использовать два языка: C и ассемблер. Первое, что я хочу отметить, это то, что это , а не , единственные два языка, доступные программистам встраиваемых систем, и что во многих случаях другие языки могут быть лучшим выбором. При этом и Си, и язык ассемблера полезны не только для изучения программирования на микроСи, но и для фактического продуктивного программирования на микроСи. Они также широко распространены в том смысле, что независимо от того, какой микроконтроллер вы выберете, он почти наверняка будет иметь доступ как к ассемблеру (для обработки исходного кода на языке ассемблера), так и к компилятору C (для обработки исходного кода C). То же самое определенно не относится к другим языкам. Но я бы посоветовал вам рассмотреть другие языки, если вы так склонны, и, если они доступны для вашего семейства устройств.
Что касается языка ассемблера, даже если вы не планируете использовать язык ассемблера при программировании встраиваемых систем, я настоятельно рекомендую вам хотя бы немного ознакомиться с концепциями и набором инструкций вашего микроконтроллера. Причина этого в том, что, даже если вы в конечном итоге не напишете какой-либо язык ассемблера (я почти никогда не напишу больше), в какой-то момент вы обнаружите, что вам нужно изучить вывод вашего компилятора и/или предоставленный компилятором код. файлы запуска, написанные или выведенные на ассемблере.
Также обратите внимание, что термин «язык ассемблера» часто сокращается в этом руководстве и в других местах до «asm» или «ASM».
Как работает встроенная программа?
Прежде чем говорить о программировании встраиваемых систем, здесь уместно дать краткий обзор того, как запускается и работает встроенная программа. Если предположить, что вы сгенерировали программный файл и загрузили его в программную память микроконтроллера (все шаги, о которых мы поговорим более подробно позже), хорошие вещи происходят, когда вы либо включаете устройство, либо нажимаете кнопку RESET. Когда микроконтроллер выходит из состояния сброса в результате любого действия, он всегда переходит в определенное место в памяти, как определено производителем, чтобы начать выполнение любого кода, найденного там или указанного там. Иногда эта ячейка памяти содержит непосредственно код; например после выхода из сброса выполнение программы начинается с адреса программы 0. В других случаях фиксированная ячейка памяти представляет собой вектор, ячейку, которая содержит фактический адрес начала программы; например после выхода из состояния сброса контроллер загрузит в свой программный счетчик значение, найденное по программному адресу 0xFFFE, и, таким образом, начнет выполнение кода с адреса, найденного в ячейках 0xFFFE и 0xFFFF (при условии, что 16-битный программный адрес хранится в 2 байтах).
В первом случае вам нужно будет убедиться, что ваша программа загрузилась по указанному стартовому адресу, а во втором случае вы загрузите свою программу везде, где память программы была помещена в адресное пространство контроллера, и вам нужно будет сделать убедитесь, что вы затем загрузите этот начальный адрес в вектор адреса сброса. Обратите внимание, что выбор метода запуска не зависит от вас, он будет встроен в конструкцию выбранного вами микроконтроллера. AVR использует первый метод, а Cortex M3 — второй.
Когда встроенная программа начинает выполняться, обычно необходимо выполнить достаточное количество операций по инициализации и обслуживанию, прежде чем начнется выполнение основной части программы. Большая часть этой инициализации — это то, что средний программист настольных компьютеров никогда не увидит, поскольку он обрабатывается загрузочным кодом компьютера и операционной системой. Но во встроенной системе вполне вероятно, что нет операционной системы, и весь загрузочный код и другой код запуска должен быть предоставлен явно. Некоторое очень важное оборудование может потребоваться сначала инициализировать, например. оборудование, которое контролирует время доступа к памяти и карты адресов, а также аппаратное обеспечение системных часов. Затем может потребоваться некоторая инициализация программного обеспечения, например, установка указателя стека и, возможно, копирование данных из энергонезависимой памяти в энергозависимую память, где к ним можно получить доступ и, возможно, изменить. После этого обычно следует еще один этап аппаратной инициализации, настройки любых периферийных устройств, необходимых системе, и установки начальных состояний вывода. Наконец, может произойти еще один раунд инициализации программного обеспечения.
Эта инициализация обычно разбивается на две части: первые шаги аппаратной и программной инициализации часто выполняются в так называемом коде запуска, а последующие аппаратные и программные шаги выполняются в пользовательской программе. Это разграничение более отчетливо в программе C, где код запуска невидим для программы C, поскольку это код, который происходит до запуска main() и заканчивается переходом или вызовом main(), где начинается видимая программа C. . В программе на ассемблере все шаги инициализации могут быть одинаково видны в пользовательском коде, хотя даже в этом случае первые шаги могут находиться в отдельном исходном файле запуска.
Примечание к примерам программ
Каждый раздел учебника будет включать несколько коротких примеров программ. Примеры будут начинаться с самых простых понятий и добавлять некоторые понятия в каждую последующую программу. Попутно некоторые комментарии будут обрезаны, чтобы попытаться уменьшить визуальный беспорядок и сосредоточить внимание на представленных новых концепциях. Например, комментарии о том, что «этот бит/порт/адрес необходимо настроить для вашего конкретного оборудования», в конечном итоге исчезнут, потому что к тому времени вы должны знать, что, например. если я обсуждаю светодиодный выход на PORTA, бит 0, а на вашем оборудовании вы используете светодиод на PORTB, бит 7, тогда вы сделаете это изменение соответствующим образом. Или когда я упоминаю в первых программах, что после инструкции «ret» лучше сначала настроить стек, то через какое-то время этот комментарий и ему подобные исчезнут.
Что дальше?
Прежде чем мы сможем перейти к нашей первой программе микроконтроллера, нашей светодиодной мигалке «Hello World», нам нужно рассказать больше о конструкции и работе микроконтроллеров. Это будет предметом следующего урока в этой серии.
Хотите научиться программированию и микроконтроллерам? – EEJournal
Самое смешное в том, что ты знаешь что-то сам, так это то, что ты склонен предполагать, что это знают и все остальные. Это особенно верно для такого сайта, как EEJournal, который привлекает инженеров-электронщиков и разработчиков встраиваемых систем из всех слоев общества. Но самое смешное в том, что когда вы действительно садитесь и болтаете с людьми, вы начинаете понимать, как мало они обычно знают за пределами своей области знаний.
То же верно и в обратном направлении. На самом деле, хотя я не люблю хвастаться, я думаю, справедливо будет сказать, что люди часто удивляются, обнаружив, как мало я знаю почти о любой теме, которую они хотят затронуть. Не то чтобы это мешало мне говорить об этих предметах, понимаете; как я уже неоднократно говорил, как и моя дорогая старая мама, настоящая хитрость заключается в том, чтобы заставить нас прекратить болтать.
Меня часто спрашивают, как лучше всего научиться писать программы (программное обеспечение) и использовать микроконтроллеры (аппаратное обеспечение). Часто это вызвано желанием выполнить какую-то конкретную задачу. Несколько лет назад, например, один из моих друзей, который строил гигантскую диораму-модель железной дороги в своей комнате отдыха наверху («человеческая пещера», если я когда-либо ее видел), имел в виду именно такую задачу. Он хотел управлять диорамой таким образом, чтобы, когда он выключал основной свет в комнате, уличные фонари включались на каждой улице, а комнатные огни в зданиях случайным образом включались и выключались.
Ну, как я всегда говорю: «Покажи мне мигающий светодиод, и я покажу тебе человека, пускающего слюни». Достаточно сказать, что диорама моего друга теперь превратилась в фестиваль огней — чтобы войти в комнату, нужно быть почти в темных очках.
Самое смешное, что я знаю людей, которые пишут умопомрачительно сложные прикладные программы для использования на рабочих станциях и серверах, но им неудобно крутить входные и выходные контакты микроконтроллера, чтобы воспринимать и контролировать реальный мир. Я также знаю людей, которые являются гуру в области проектирования электронного оборудования, но которые никогда не удосужились окунуться в воду программирования.
Что мне посоветовать? Ну, это немного сложно, потому что все зависит от того, что люди пытаются делать. Конечно, существуют всевозможные системы разработки микроконтроллеров. Лично мне очень удобно пользоваться платами Arduino и их клонами. Мне также нравится относительная простота интегрированной среды разработки (IDE) Arduino, с помощью которой вы записываете свои программы, компилируете их и загружаете на макетную плату.
Что касается языков программирования, то на протяжении многих лет я пробовал их самые разные, включая различные языки ассемблера, BASIC, FORTRAN, Pascal, C и Python. У меня есть друзья, которые являются страстными сторонниками Python, и мне самому он очень нравится, но когда дело доходит до работы с микроконтроллерами, я в значительной степени придерживаюсь языка программирования C вместе с любыми вызовами функций, которые мне нужно использовать в любой работе. Библиотеки C++, с которыми мне довелось работать в то время.
Что касается конкретных макетных плат, это зависит от того, чем я занимаюсь в данный момент — все, о чем я прошу, это чтобы они были совместимы с Arduino и чтобы их можно было запрограммировать с помощью Arduino IDE. Например, некоторое время назад я создал массив шариков для пинг-понга размером 12×12, каждый из которых содержал трехцветный светодиод в форме WS2812B (он же NeoPixel). На самом деле, я недавно загрузил это видео, показывающее, как мой массив работает с игрой Conway’s Game of Life (GOL).
В данном случае я выбрал недорогой (примерно 5 долларов) Seeeduino XIAO от Seeed Studio, который, хотя и размером с обычную почтовую марку, может похвастаться 32-разрядным процессором Arm Cortex-M0+, работающим на частоте 48 МГц с 256 КБ флэш-памяти и 32 КБ SRAM (см. Также «Скажи привет Seeeduino XIAO»).
Seeeduino XIAO размером с небольшую почтовую марку
(Источник изображения: Seeed Studio)
Для сравнения, еще один из моих проектов — легендарный Prognostication Engine (не спрашивайте). Как мы видим в этом видео, эта безрассудная красавица может похвастаться изобилием старинных переключателей, ручек и аналоговых счетчиков. В нижнем корпусе есть 116 трехцветных светодиодов, связанных с ручками, переключателями и кнопками; 64 трехцветных светодиода в топке в верхнем шкафу; и 140 трехцветных светодиодов, связанных с большими вакуумными трубками, установленными в верхней части двигателя.
Я начал с нескольких плат Arduino Mega, но заставить их всех общаться друг с другом было головной болью, а это не лучшее место для боли. Совсем недавно я начал использовать ShieldBuddy TC375 от Hitex (см. также Вздох в восторге от ShieldBuddy TC375).
ShieldBuddy TC375 (Источник изображения: Hitex)
Несмотря на то, что ShieldBuddy имеет тот же форм-фактор, что и Arduino Mega, он невероятно мощнее, начиная с того факта, что у него три 32-битных процессорных ядра, каждое из которых работает. на частоте 300 МГц, каждый со своим собственным модулем с плавающей запятой (FPU), и каждый с большим объемом памяти, чем вы можете бросить! Хотя ядра работают независимо, они могут обмениваться данными и координировать свои действия, используя такие методы, как разделяемая память и программные прерывания.
Одна из замечательных особенностей использования Arduino заключается в том, что у вас есть доступ к огромному количеству съемных плат, называемых шилдами, которые выполняют всевозможные полезные функции. Эти платы также поставляются с примерами программного обеспечения, которое поможет вам быстро и легко приступить к работе. Например, недавно я хотел начать играть с датчиками MEMS (микроэлектромеханические системы), поэтому я выбрал Fusion Breakout Board (BOB) с 9 степенями свободы (9 степеней свободы) от Adafruit.
Разделительная плата Fusion с 9 степенями свободы (Источник изображения: Adafruit)
На этой плате установлен датчик MEMS BNO055 от Bosch. В свою очередь, этот датчик имеет 3-осевой акселерометр, 3-осевой гироскоп и 3-осевой магнитометр. Кроме того, он оснащен 32-разрядным процессором Arm Cortex M0+, который выполняет слияние датчиков и возвращает значения в форме, которую вы можете понять, не выходя из ушей. Как мы видим в этом видео, я прикрепил один из этих датчиков к моему набору шариков для понг-понга 12×12. Идея заключалась в том, чтобы использовать датчик для измерения наклона массива и использовать эти измерения, чтобы «катать» «шар» по массиву.
Используя пример кода, предоставленный Adafruit, мне буквально потребовалось всего пару минут, чтобы начать доступ к показаниям датчика. Не более чем через 15 минут я использовал датчик для управления своим массивом.
Итак, предположим, что вы абсолютный новичок и у вас есть соблазн попробовать Arduino, какой из них выбрать? Если я учу кого-то новичка, я обычно советую начать с Arduino Uno или Arduino Nano, потому что оба они легко укладываются в голове.
Обе платы используют 8-битный процессор ATmega328 (хотя и в разных корпусах), работающий на частоте 16 МГц и предлагающий 32 КБ флэш-памяти и 2 КБ ОЗУ. С одной стороны, это немного с точки зрения памяти или производительности. С другой стороны, удивительно, что вы можете сделать с этими маленькими негодяями, и работать в рамках ограничений полезно для вас, когда вы только начинаете.
Хорошо, каков ваш следующий шаг? Что ж, в Интернете доступно огромное количество бесплатных ресурсов. Кроме того, на Amazon есть несколько замечательных стартовых наборов Arduino. Сказав это, в этих наборах обычно используются макетные платы, что может быть как благословением, так и проклятием. Взгляните на следующее изображение, которое имеет сверхъестественное сходство со многими моими собственными прототипами.
Типичный сценарий прототипирования Arduino Uno (Источник изображения: Dr Duino)
Здесь мы видим все элементы, которые я обычно использую в своих проектах — некоторые кнопочные переключатели мгновенного действия, некоторые потенциометры, несколько традиционных светодиодов с сопутствующие токоограничивающие резисторы, «палочка» из трехцветных светодиодов NeoPixel и, конечно же, куча летающих проводов. Это сплошное развлечение и игра, пока один из супругов не попросит вас «убрать свой электронный мусор с обеденного стола» (просто чтобы выбрать случайный пример из воздуха), и один или несколько ваших проводов отсоединяются в процессе, и вы можете не помню, кто куда идет.
Но смените хмурый взгляд на улыбку, потому что мой приятель Гвидо Бонелли решил что-то сделать, чтобы решить эту проблему. Гвидо представляет собой интересный случай в том смысле, что еще в глубине веков он использовал на работе сложные платформы для разработки микроконтроллеров и наборы инструментов на основе Eclipse, но ему хотелось чего-то более дешевого и простого для использования в своих хобби-проектах дома, и именно так он пришел, чтобы начать играть с Arduino.
Совсем недавно Гвидо создал комплект под названием Dr. Duino Pioneer Shield, который поставляется с Arduino Uno. Pioneer, который подключается к верхней части Uno, предоставляет пользователю обычные светодиоды, планку из восьми NeoPixels, кнопочные переключатели, потенциометры, светозависимый резистор (LDR), пьезозуммер и разъемы для подключения I2C. датчики на основе. Кроме того, на этом изображении не показан тот факт, что Pioneer поставляется с ультразвуковым датчиком измерения расстояния и соответствующим кабелем для его подключения к экрану.
Dr. Duino Pioneer (Источник изображения: Dr Duino)
Следующий шаг — тот, который стоит у меня на столе — это комплект Dr. Duino Explorer. В нем есть все функции Pioneer, дополненные рогом изобилия других вкусностей, включая дисплей на органических светодиодах (OLED), мощный регулятор напряжения для питания ваших проектов, небольшую макетную плату и небольшую область для прототипирования.
Dr. Duino Explorer (Источник изображения: Dr Duino)
Как вы помните, Pioneer поставлялся с Arduino Uno. Что ж, Explorer поставляется с Arduino Nano, который вы можете видеть подключенным к середине нижнего края на фотографии выше. Однако, если вы хотите, вы можете удалить Nano, а затем подключить Explorer в качестве щита к Uno (вы можете видеть заголовки Uno, окружающие небольшую макетную плату).
Существует также пакет расширения, который можно использовать как с Pioneer, так и с Explorer. Это включает в себя плату звуковых эффектов, пассивный инфракрасный (PIR) датчик, датчик 6-DOF (шесть степеней свободы) с 3-осевым акселерометром и 3-осевым магнитометром, атмосферный датчик (температура, влажность, атмосферное давление), и так далее.
ОЧЕНЬ ВАЖНО! Я только что вспомнил, что должен сказать вам, что и Pioneer, и Explorer поставляются в виде наборов деталей, которые вы должны собрать сами. С другой стороны, если вы планируете действительно заняться микроконтроллерами для проектов «сделай сам», вы будете делать много всего, и это самое хорошее место для начала, как и везде.
К счастью, когда вы покупаете Dr. Duino Pioneer или Explorer, вы также получаете доступ к Dr. Duino Labs. Здесь вы будете работать с Мастером, который проведет вас через процесс сборки (в том числе порекомендует инструменты и научит вас паять) в одном из лучших пошаговых руководств, которые я когда-либо видел, и это не то, что я мягко сказать.
После того, как вы собрали свой комплект, система проведет вас через процесс загрузки и установки Arduino IDE и запуска некоторых простых программ (также известных как «эскизы» в мире Arduino). Все это приводит к некоторым умным небольшим проектам, таким как сканер Ларсона, который является своего рода эффектом, наблюдаемым в KITT из Knight Rider или Cylons из Battlestar Galactica. Следуя предоставленным инструкциям, вы можете реализовать собственную версию этих культовых велосипедных фонарей на вашем Pioneer или Explorer.
Где Гвидо действительно сделал «лишнюю милю», так это в партнерстве с компанией под названием Programming Electronics Academy (PEA).