ATmega328P Основы: начало работы без Arduino

Ari Mahpour
|  Создано: 29 Мая, 2024
ATmega328P Основы: начало работы без Arduino

Я уже довольно долго использую плату Arduino Uno, в том числе в качестве примеров для многих своих статей. Меня всегда интересовало, что потребуется для того, чтобы заставить ATmega328P (оригинальный чип, используемый на старых платах Uno) работать полностью самостоятельно. Учитывая, что Arduino делает его таким доступным благодаря своему загрузчику, приятному графическому интерфейсу и абстракции C++, интересно, зачем мне вообще хотелось попытаться это сделать. Иногда, чтобы оценить чужие достижения, важно попробовать сделать это самому. Этот проект действительно показал, сколько работы вложили создатели Arduino в этот продукт и как они изменили мир с помощью этого дружелюбного малыша.

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

Настройка среды

Существует несколько способов настройки ATmega328P. Один из таких способов, о котором, как вы уже поняли из заголовка, не говорится, заключается в том, чтобы вставить ваш чип ATmega328P в Arduino Uno, запрограммировать его, а затем перенести на макетную плату. Основываясь на отзывах на форумах, некоторые люди хотят пропустить процесс с Arduino и использовать более традиционный подход с программаторами, такими как Atmel-ICE от Microchip. Самый простой способ начать работу с микропроцессором Microchip (ранее Atmel) - установить Microchip Studio. На момент написания этой статьи полный комплект Microchip Studio поддерживается только в Windows. Поскольку мне нравится, чтобы все мои среды сборки работали в CI (Continuous Integration), я выбрал альтернативный подход.

GNU Compiler Collection (GCC) - один из самых популярных компиляторов для языка C. Он компилирует определенные платформы и архитектуры, но не для семейства чипов AVR (ATmega). Однако существует набор компиляторов для AVR и других семейств Microchip на их веб-сайте. К счастью, некоторые добрые люди даже упаковали эти компиляторы в приятные пакеты Debian, которые можно легко установить в Debian или Ubuntu следующим образом:

$ apt-get install gcc-avr binutils-avr avr-libc avrdude

С этими инструментами теперь мы можем компилировать и программировать ATmega328P только с помощью программатора Atmel-ICE и внешнего источника питания (установленного на 5В). Мы будем использовать версию GCC для AVR, чтобы скомпилировать код, и AVRDUDE для прошивки чипа ATmega328P.

Проект

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

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

В дополнение к модульному тестированию (расположенному в папке «tests»), есть также папка под названием «hil», что означает Hardware in the Loop (Аппаратное обеспечение в цикле). Эта папка содержит скрипты, необходимые для тестирования с использованием реального аппаратного обеспечения в цикле (как обсуждалось во многих моих предыдущих статьях). Это гарантирует, что мой код функционирует не только в виртуальном мире (с использованием имитаций), но и в реальном мире, проводя тесты на реальном оборудовании.

Обращение к README.md предоставит вам схему подключения для соединения программатора Atmel-ICE с чипом ATmega328P:

Распиновка Atmel ICE

Рисунок 1: Распиновка Atmel ICE

Добавив несколько светодиодов, подключив порт последовательной связи к Raspberry Pi и использовав линию +5V с Raspberry Pi, вы получите полностью готовую сборку:

Расширительная плата Raspberry Pi

Рисунок 2: ATmega328P с использованием расширительной платы с Raspberry Pi и программатором Atmel-ICE

Тестирование, компиляция и еще тестирование

Разрабатывая новые функции, используйте Makefile для запуска модульных тестов и компиляции кода. После подтверждения, что ваш желаемый код делает то, что от него ожидается (через проверку модульными тестами), соберите бинарный файл, запрограммируйте его на устройство (также с помощью Makefile) и проведите тестирование Hardware in the Loop (HIL) с использованием порта последовательной связи Raspberry Pi.

Одним из самых важных моментов является правильное программирование битов предохранителей для включения внутреннего 8 МГц тактового генератора. Это документировано в README, но также добавлено в команду прошивки в Makefile:

avrdude -c atmelice_isp -p m328p -B 32 -U lfuse:w:0xe2:m

После этого вы должны быть в состоянии использовать последовательный интерфейс чипа с предположением, что встроенный тактовый генератор работает на частоте 8 МГц (как определено в верхней части main.c). Отсюда вы сможете добавить больше функциональности, такой как поддержка дополнительных последовательных команд, интерфейсы к внешним компонентам и датчикам, и все, что вы можете придумать с этим забавным маленьким микроконтроллером.

Заключение

В этой статье вы узнали, как начать работу с чипом ATmega328P без использования внешних схем, как это обычно бывает с оригинальными Arduino Uno и платами оценки Microchip. Теперь вы знаете концепцию модульного тестирования, сборки бинарных файлов, прошивки чипа и проведения тестирования с оборудованием в цикле. Кроме того, была рассмотрена важная деталь, которую часто упускают из виду, - программирование битов предохранителя для установки внутренних часов на 8 МГц. На этом этапе вы должны быть способны добавить больше функциональности с помощью дополнительных модульных и HIL-тестов и запускать все, используя только программатор Atmel-ICE и внешний источник питания 5В. Для упрощения использование Raspberry Pi в качестве источника питания и средства для серийной коммуникации будет самым простым способом контролировать процесс от начала до конца.

Исходный код проекта можно найти здесь:https://gitlab.com/embedded-designs/atmega328p-serial-led-control.

Об авторе

Об авторе

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

Связанные ресурсы

Связанная техническая документация

Вернуться на главную
Thank you, you are now subscribed to updates.