Atmel mega328p инструкция на русском

Компания Atmel производит множество чипов и 2 разновидности микроконтроллеров, которые были признаны радиолюбителями. Один из них — ATmega328P, рассматриваемый в этой статье. Рассмотрим его устройство, варианты программирования и ПО, требующееся для прошивки

ATmega328P — микроконтроллер группы AVR

Устройство atmega328p имеет 28 контактов. Его знает большинство владельцев конструктора Arduino, как главный элемент электронного комплекта. Но на самом деле, функционал устройства намного шире, чем применение в этом конструкторе. И это подтверждается в atmega328p datasheet.

Микрочип ATmega328P

Семейство микроконтроллеров AVR, куда входит atmega328p, сегодня широко применяется при конструировании электроники разного уровня. Среди них не только микроконтроллер ATmega328P, но и схожий по характеристикам 8-контактный ATtiny45, имеющий чуть меньше функций.

Микроконтроллер также является основой Arduino Nano — маленькой отладочной платы, очень распространённой в любительской среде программистов. Это устройство — компактное по размеру, но по характеристикам не уступающее всем известной Arduino Uno. Она запросто включается в проекты, где параметры очень важны.

Распиновка atmega328p

Как правило, программирование указанных устройств ведется с помощью SPI — последовательного периферийного интерфейса. Через шину данных идет ряд сигналов:

  • MOSI — вход поступления данных;
  • MISO — выход ее распространения;
  • SCK — синхронизирующий вход.

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

Распиновка ATmega328P

Как выбрать физический программатор под ATmega328P

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

По мнению радиолюбителей, это лучший программатор для прошивки AVR и схожих микросхем. Его можно приобрести в интернет-магазинах наподобие AliExpress, по стоимости от 5 тысяч рублей. Устройство выглядит так:

Atmel-ICE

К сожалению, такая версия не по карману простым любителям электроники. Рациональнее — остановить выбор на usb — программаторе AVR Pocket Programmer. Он стоит намного дешевше профессионального Atmel-ICE. На некоторых сайтах его можно приобрести даже за 200 р, правда, без проверки.

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

  1. Резисторы.
  2. Светодиоды.
  3. Стабилитроны.

Конструкция самодельного устройства — проста и доступна. Желательна буферизация сигнальных линий, но она не обязательна. Для нее в схеме должен находиться буфер. К примеру, его роль может сыграть устройство 74AC125. Оно же входит и в фирменную версию. Вместо него можно применить транзистор.

Схема 1

Программатор не функционирует без usb-драйвера. Поэтому, радиолюбители обзаводятся универсальным инсталлятором для Windows (7 и более высоких версий), который помогает устанавливать общие драйвера. Установка драйвера в ОС желательна до того, как физическая схема atmega328p подключится к компьютеру.

Среди часто используемых программаторов — stk500 atmega328p.

Как подключать и программировать микроконтроллер

Устройства группы AVR программируют с помощью интерфейса SPI, сигнальным прохождением сквозь 6 участкоа:

  • электропитание;
  • «земля»;
  • сброс;
  • получение данных;
  • передача;
  • синхронизирование.

Чтобы все перечисленные сигналы перемещались через устройства, нужен 1 из 2 стандартных разъемов, с 6 или 10 контактами. Программаторная atmega328p плата соединяется с ними с помощью шлейфа-кабеля. Ее заводской вариант укомплектован всеми возможными дополнениями.

Схема 2

Для работы вместе с программным инструментом используются 2 вида контактных разъемов SPI.

Фирменная плата оборудована переключателем режимов электропитания. При его помещении в положение Power Target, она получает от usb напряжение 5 В. В противном случае, то есть, режиме No Power на контакте нет питания. Второй вариант применяется, чтобы программировать чипы с невысоким напряжением, от 1,8 до 3,3 В.

В каждый контроллер atmega328p для avrdude встраивается технология bootloader atmega328p. Она считается самым рациональным и правильным вариантом программирования. Так как специализированные программные адаптеры и набор знаний — не обязательны, необходимо подключение классического кабеля от ПК к плате и активацию программы.

При предварительной переконфигурации atmega328p nano или обычной, старт микроконтроллера идёт со специализированого адреса, где, как правило, располагается atmega328p old bootloader. Это является условием запуска, определяемым состоянием перемычки извне, которая подключается к ножке atmega328p для Ардуино.

Использование утилиты AVRDUDE

Рассмотрим инструмент для строки команд в системе Windows. Для его применения нужно нажать всего 2 клавиши: Пуск, а затем, выполнить. После этого выясните уровень готовности утилиты следующей командой:avrdude -c usbtiny -p atmega328p.

Эта комбинация помогает выяснить, подключен ли микроконтроллерный программатор к разъему usb. Чипы из других серий, соответственно, проверяются другими командами.

Если программатор подключен правильно, утилита выведет на экран следующее (см. Рисунок):

Скрин 1

Если микроконтроллер изготавливается по стандартам, в нем присутствуют идентификаторы. Он определяется при первом запуске утилиты. AVRDUDE в ходе проверки сканирует идентификатор чипа.

Микросхемные идентификаторы имеют разный вид, согласно типу AVR. В частности, идентификация ATmega328P выглядит как 0x1E950F. Эти символы выводятся в специальное окно. После проверки работоспособности схемы, идет следующий шаг — чтение и запись программного кода посредством утилиты.

Участок памяти чипа, как правило, прошиваемый, является энергозависимой областью, местом для хранения программ (Flash). Прошивка atmega328p производится с помощью комбинации: avrdude c usbtiny p atmega328p U flash:w:test.hex. Имя файла здесь дано только как пример.

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

Скрин2

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

Символ U в команде AVRDUDE для atmega328р — отвечает за просмотр и запись. Им владелец демонстрирует использование atmega328p памяти flash. Эта же опция применяется, чтобы читать информацию в памяти AVR. Приведем пример: в файле test.hex ее можно считать по команде avrdude c usbtiny p atmega328p U flash:r:test.hex:r.

Добавочный символ w указывает на запись, затем, через знак “:” идет имя и местонахождение документа, который и записывается в память.

Работа инструмента возможна лишь с теми документами, у которых есть расширение hex.

Отличия ATmega328 от ATmega328P и ATmega328PU

Обычному пользователю сложно понять, почему маркировка кристаллов отличается, и какой выбрать. Попробуем разобраться:

  1. Для использования в обычных сферах между первыми двумя вариантами — разница небольшая, поэтому возможна взаимозаменяемость.
  2. Энергопотребление ATmega328P — существенно ниже, чем Atmega328. Это описано в параметрических таблицах даташит. О чем это говорит? О том, что при разработке первого варианта применялся более точный технический процесс. Как правило, стоимость этих чипов — выше. У микроконтроллеров категории AVR с низким энергопотреблением, согласно классификации производителя, есть отметка PicoPower. Получается, что для батарейных устройств ATmega328P — выгоднее. В них должны быть использованы контролирующие режимы для уменьшение потребления энергии.
  3. У рассматриваемых вариантов — разные сигнатуры чипов. Поэтому, при использовании программ для их чтения (по аналогии с утилитой avrdude) можно увидеть сообщения об ошибке atmega328p при неправильном указании типа микроконтроллера.
  4. Только Atmega328P может быть оснащен корпусом TQFP32, но не TQFP328. Это зависит от большей толщины кристалла, из-за которой он просто не влезает в данный корпус.
  5. В Atmega328 отсутствует фьюз, блокирующий детектор низкого уровня питания. Во втором варианте данный фьюз присутствует, за счет чего дополнительно снижается потребление энергии и происходит отключение BOD. Наличие такого фьюза возможно только у версий группы picoPower. Их обозначение заканчивается символами 48PA, 88PA, 168 PA, 328 P. То же самое касается фьюзов BODS, BODSE.
  6. Система команд, которые относятся к инструкциям перехода, тоже пусть незначительно, но отличается. При компиляции чипа программы в обоих вариантах — работоспособны.
  7. Буквы PU означают вид кристального корпуса. Это -DIP28 из пластика. В него легко помещается ATmega328, вот и дополняется таким суффиксом. Также варианты корпусов обозначаются буквенными сочетаниям AU, MU.

Можно изготовить Ардуино на основе atmega328p mini. Этот вариант — более простой, чем uno, так как там нет участка USB-to-Serial. Как мы знаем, atmega328p pro mini — это, как правило, вариант atmega328p au. Но для некоторых устройств этот вариант — слишком мал, и туда больше подходит PU.

На основе микроконтроллеров создаётся множество устройств, в том числе, atmega328p тестер-транзистор и контроллер atmega328p nano 3.0.

Led-матрица на основе ATmega328p (самодельный Arduino)

Этот прибор может украсить полку любого пользователя и радиолюбителя.

Составляющие элементы

Сначала нужно собрать все необходимые детали. Нам понадобится:

  1. 7 резисторов с сопротивлением 150 Ом.
  2. 5 конденсаторов (50 В, 1 мкФ ).
  3. Резонатор из кварца (16 МГЦ).
  4. Разъём-гребенка с 18 контактами.
  5. Регистор сдвига с DIP-корпусом.
  6. Микросхемная панель 74ch595 с 16 ножками.
  7. 35 световых диодов (3 В).
  8. Непосредственно микроконтроллер в корпусе DIP.
  9. Плата для монтажа 5*7.

Обзаведитесь флюсом, припоем и паяльником, оптимальными проводами, например, МГТФ.

Регистр сдвига

Принцип действия микросхемы 74ch595 — довольно сложен для понимания. Ее основное предназначение — увеличение числа пинов.

74ch595

В схеме есть несколько основных регулирующих контактов: вывода (DS), определения напряжения на выводе (SH), записи состояния в DC, открытия и закрытия микросхемы путем установки контактов в нужное положение (ST).

Последнее, что нужно узнать, — это код для функционирования микросхемы.

Как подготовить матрицу

Иногда светодиодам не хватает места на плате, и тогда нужна обточка мелкой окантовки. Делайте ее аккуратнее, так как световые диоды — довольно хрупкие элементы.

Не забудьте о конденсаторах! При их отсутствии световые диоды погаснут, что помешает оптимизации устройства.

Резисторов, как уже было указано, в конструкции — 7, но видно только 6, так как 1 расположен напрямую под микросхемой.

Вместо генератора с частотой 16 МГц можно использовать имеющий 24 МГц, для ускорения работы. Но такую корректировку можно сделать только в готовом устройстве. Дело в том, что прошивка ATmega328p на генераторе с большей частотой — невозможна.

Расположение светодиодов таково:»+» к 74ch595, «-» — ATmega328p.

После запайки всех составляющих можно перейти к припаиванию проводов. Соедините все контакты со световыми диодами, элементы питания — с генератором, световые диоды — с микросхемой 74ch595.

Конечно, не прошитое устройство мгновенно не заработает, однако, можно попробовать воспользоваться классическим blink Arduino. При определённых условиях — может сработать. При мигании света в 1-м ряду можно считать, что эксперимент удался.

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

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

Как выбрать источник электропитания

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

Конечно, слабая работа прибора, созданного на микроконтроллере, может объясняться неправильным прошивочным кодом, проблемой с контактами на плате. Но если вы меняете источник питания, и работа возобновляется, дело в нем.

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

А поскольку, согласно технической инструкции, чтобы контроллер ATmega328p при 16 МГц, нужно напряжение около 5 В, здесь не обойтись без модуля преобразователя, который повышает напряжение.

Выбор руководства

Платформа Arduino Nano выпускается на микроконтроллере Microchip ATmega328 семейства AVR. На текущий момент микроконтроллер Microchip ATmega328 можно встретить в двух модификациях:

  • ATmega328P — базовый микроконтроллер на котором выпускалась Arduino Nano с 2010 года по настоящее время.
  • ATmega328PB — улучшенный микроконтроллер на котором Arduino Nano стали выходить с 2024 года.
Arduino Nano ATmega328PB Info 1

Визуально платформы Arduino Nano ATmega328P и Arduino Nano ATmega328PB полностью идентичны, отличить их можно только по маркировке на микроконтроллере.

Arduino Nano ATmega328PB Info 2

Для микроконтроллера ATmega328P данная статья не подходит и вам по ссылке выше! Однако, если вам достался микроконтроллер ATmega328PB и вы хотите раскрыть весь потенциал обновлённого чипа — не переключайтесь. Все подробности про расширенную работу платы на ATmega328PB читайте в текущей статье.

Доступные версии

В нашем магазине мы предлагаем Arduino Nano в нескольких вариантах:

Модель Микроконтроллер USB-UART Исполнение
Arduino Nano
(USB CH340 / Без ног)
ATmega328P / ATmega328PB CH340 Без ног
Arduino Nano
(USB CH340 / С ногами)
ATmega328P / ATmega328PB CH340 С ногами
Arduino Nano
(USB FT232R / С ногами)
ATmega328P / ATmega328PB FT232R С ногами

Режимы микроконтроллера ATmega328PB

Arduino Nano на микроконтроллере ATmega328PB может работать в двух режимах:

  • Режим совместимости с ATmega328P: контроллер функционирует аналогично ATmega328P, предоставляя стандартный набор интерфейсов и возможностей.
  • Расширенный режим ATmega328PB: контроллер предлагает дополнительные функции, которые улучшает коммуникационные возможности микроконтроллера.
Параметры Режим совместимости с ATmega328P Расширенный режим ATmega328PB
Контакты с ШИМ 6 9
Интерфейс SPI 1 2
Интерфейс UART 1 2

Расширенный режим ATmega328PB

Для активации в Arduino Nano всех плюшек микроконтроллера ATmega328PB необходимо:

  1. Скачать и установить среду программирования Arduino IDE.
  2. Добавить в Arduino IDE поддержку микроконтроллера ATmega328PB.
  3. Записать загрузчик ATmega328PB в контроллер Arduino Nano.
  4. Настроить Arduino IDE на работу с Arduino Nano на ATmega328PB.
  5. Выполнить проверку Arduino Nano на базовом примере.

В качестве примера рассмотрим все шаги на платформе Arduino Nano (USB CH340 / С ногами). С другими моделями Nano процесс коммуникации будет аналогичный.

1. Скачивание и установка Arduino IDE

Для старта необходимо скачать и установить среду программирования Arduino IDE. Весь процесс описан в нашем руководстве по Arduino IDE.

2. Добавления в Arduino IDE поддержки ATmega328PB

По умолчанию IDE настроена только на штатные AVR-платы. Для работы с платформой Arduino Nano на микроконтроллере ATmega328PB — добавьте в менеджере плат поддержку платформ на ядре MiniCore.

  1. Откройте среду программирования Arduino IDE.
  2. Arduino Nano ATmega328PB Arduino IDE Add Minicore 1

  3. Зайдите в настройки Arduino IDE:ФайлНастройки
  4. Arduino Nano ATmega328PB Arduino IDE Add Minicore 2

  5. В окне Дополнительные ссылки для менеджера плат введите адрес:

    https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json

    И нажмите на кнопку OK.

    Arduino Nano ATmega328PB Arduino IDE Add Minicore 3

  6. Зайдите в менеджер плат:ИнструментыПлатаМенеджер плат
  7. Arduino Nano ATmega328PB Arduino IDE Add Minicore 4

  8. Вбейте в поисковое окно строку MiniCore. Найдите в списке соответствующую платформу и нажмите на кнопку Установить.
  9. Arduino Nano ATmega328PB Arduino IDE Add Minicore 5

  10. Начнётся установка дополнений, после которой отобразится надпись INSTALLED. Это значит установка завершилась успешно и можно нажимать кнопку Закрыть.
  11. Arduino Nano ATmega328PB Arduino IDE Add Minicore 6

  12. Теперь вам доступны к программированию платы из ядра MiniCore, в котором есть семейство микроконтроллеров ATmega328.
  13. Arduino Nano ATmega328PB Arduino IDE Add Minicore 7

3. Запись загрузчика ATmega328PB в Arduino Nano

Записать загрузчик в Arduino Nano можно с помощью другой платы Arduino в роли программатора. Для удобства приведем нейминг плат:

  • Плата программатор — контроллер Arduino через который будем зашивать загрузчик в плату исполнитель. Для примера в роли программатора будем использовать Arduino Uno. В вашем случае это может быть и другая Arduino.
  • Плата исполнитель — контроллер Arduino в который будем зашивать загрузчик. В даном случае будем использовать как раз Arduino Nano.
Arduino Nano ATmega328PB Bootloader 1

  1. Подготовьте плату программатор. Подробности читайте в нашей общей статье по записи загрузчика в Arduino.
  2. Соедините плату программатор Arduino Uno с платой исполнитель Arduino Nano. Подробности читайте в нашей общей статье по записи загрузчика в Arduino.
  3. Arduino Nano ATmega328PB Bootloader 2

  4. Подключите плату программатор к компьютеру через кабель USB. При успешном подключении должны загореться индикаторные светодиоды питания на плате программаторе и плате исполнителе.
  5. Arduino Nano ATmega328PB Bootloader 3

  6. В Arduino IDE выберите семейство контроллеров ATmega328: ИнструментыПлатаMiniCoreATmega328
  7. Arduino Nano ATmega328PB Bootloader 4

  8. В Arduino IDE выберите контроллер ATmega328PB: ИнструментыVariant328PB
  9. Arduino Nano ATmega328PB Bootloader 5

  10. В Arduino IDE выберите COM-порт платы программатора: ИнструментыПортCOMx, где x — номер порта платы.
  11. Arduino Nano ATmega328PB Bootloader 6

  12. В Arduino IDE выберите тип программатора: ИнструментыПрограмматорArduino as ISP
  13. Arduino Nano ATmega328PB Bootloader 7

  14. Плата программатор и исполнитель настроены — можно записывать загрузчик. В Arduino IDE выберите: ИнструментыЗаписать загрузчик
  15. Arduino Nano ATmega328PB Bootloader 8

  16. Если все шаги были пройдены правильно, на плате программаторе начнут мигать светодиоды RX и TX. При завершении процесса — в окне статуса Arduino IDE должна появиться надпись Запись загрузчика завершена.
  17. Arduino Nano ATmega328PB Bootloader 9

  18. Отключите плату программатор от USB. А затем разберите схему между платой программатором Arduino Uno и платой исполнителем Arduino Nano. Плата программатор кстати нам больше не понадобится, все дальнейшие шаги будем совершать с помощью платы исполнителя Arduino Nano.

4. Настройка Arduino IDE на работу с Arduino Nano на ATmega328PB

  1. Подключите платформу Arduino Nano к компьютеру через кабель USB. При успешном подключении должен загореться индикаторный светодиод PWR.
  2. Arduino Nano ATmega328PB Arduino IDE Setting 1

  3. Откройте диспетчер устройств Windows.
  4. Arduino Nano ATmega328PB Arduino IDE Setting 2

  5. В диспетчере устройств раскройте вкладку Порты (COM и LPT), идентифицируйте среди устройств плату исполнитель Arduino Nano и запомните номер назначенного COM-порта. В нашем случае это USB-SERIAL CH340 с COM-портом номер 11.
  6. Arduino Nano ATmega328PB Arduino IDE Setting 3

    В зависимости от модели платы Arduino Nano, а точнее от типа её USB-UART преобразователя, название устройства может быть разное. Приведём самые часто встречающие варианты: Arduino Nano, CH340, FT232.

    Если при подключении контроллера Arduino Nano в Arduino IDE не появляется новый COM-порт, установите драйвер в зависимости от чипа USB-UART преобразователя:

    • CH340 для OS Windows 7 или Windows 10
    • FT232R для OS Windows 7 или Windows 10
  7. В Arduino IDE выберите семейство контроллеров ATmega328: ИнструментыПлатаMiniCoreATmega328
  8. Arduino Nano ATmega328PB Arduino IDE Setting 4

  9. В Arduino IDE выберите контроллер ATmega328PB: ИнструментыVariant328PB
  10. Arduino Nano ATmega328PB Arduino IDE Setting 5

  11. В Arduino IDE выберите COM-порт платы: ИнструментыПортCOMx, где x — номер порта платы.
  12. Как узнать номер COM-порта платы Arduino Nano, мы смотрели пару шагов выше в диспетчере устройств.

    Arduino Nano ATmega328PB Arduino IDE Setting 6

  13. В Arduino IDE выберите тип программатора: ИнструментыПрограмматорUSBtinyISP slow
  14. Arduino Nano ATmega328PB Arduino IDE Setting 7

  15. На этом этапе плата Arduino Nano настроена на расширенный режим с микроконтроллером ATmega328PB и можно переходить к примерам работы.

5. Пример работы Arduino Nano ATmega328PB

Сделаем маячок с нарастающей яркостью. Для этого подключим светодиод к пину 2.

Что понадобится

    • 1× Arduino Nano
    • 1× Trema Shield Nano
    • 1× Светодиод (Trema-модуль)
    • 1× Кабель USB Mini

Схема устройства

Arduino Nano ATmega328PB Example 1

Исходный код

Прошейте платформу Arduino Nano ATmega328PB кодом ниже.

// Даём пину со светодиодом понятное имя
constexpr int LED_PIN = 2;
  
void setup() {
  // Настраиваем пин со светодиодом в режим выхода
  pinMode(LED_PIN, OUTPUT);
  Serial1.begin(9600);
}
  
void loop() {
  // Создаём цикл для перебора всех значений от 0 до 255
  // Выдаём на светодиод ШИМ-сигнал
  for (int brightness = 0; brightness <= 255; brightness++) {
    analogWrite(LED_PIN, brightness);
    // Ждём 10 мс
    delay(10);
  }
  // Создаём цикл для перебора всех значений от 255 до 0
  // Выдаём на светодиод ШИМ-сигнал
  for (int brightness = 255; brightness >= 0; brightness--) {
    analogWrite(LED_PIN, brightness);
    // Ждём 10 мс
    delay(10);
  }
}

Результат

После прошивки, светодиод начнёт плавно загораться, а затем плавно гаснуть.

На загрузчике ATmega328P на 2 пине ШИМа нет, а на расширенном загрузчике ATmega328PB на 2 пине ШИМ есть. Именно поэтому сейчас есть плавное нарастания яркости.

Arduino Nano ATmega328PB Example 1

Режим совместимости с ATmega328P

Для активации в Arduino Nano режиме совместимости с микроконтроллером ATmega328P необходимо:

  1. Скачать и установить необходимый софт.
  2. Записать загрузчик ATmega328P в контроллер Arduino Nano.
  3. Подменить фьюзы от ATmega328P в ATmega328PB.
  4. Настроить Arduino IDE на работу с Arduino Nano на ATmega328P.
  5. Выполнить проверку Arduino Nano на базовом примере.

В качестве примера рассмотрим все шаги на платформе Arduino Nano (USB CH340 / С ногами). С другими моделями Nano процесс коммуникации будет аналогичный.

1. Подготовка софта

  1. Скачайте и установите среду программирования Arduino IDE. Весь процесс описан в нашем руководстве по Arduino IDE.
  2. Скачайте и установите программу AVRDUDESS для прошивки микроконтроллеров семейства AVR.
  3. Скачайте и разархивируйте загрузчик ATmega328P. На выходе вы должны получить файл прошивки optiboot_atmega328.hex, содержащий машинный код для записи в память микроконтроллера.

2. Запись загрузчика ATmega328P в Arduino Nano

Записать загрузчик в Arduino Nano можно с помощью другой платы Arduino в роли программатора. Для удобства приведем нейминг плат:

  • Плата программатор — контроллер Arduino через который будем зашивать загрузчик в плату исполнитель. Для примера в роли программатора будем использовать Arduino Uno. В вашем случае это может быть и другая Arduino.
  • Плата исполнитель — контроллер Arduino в который будем зашивать загрузчик. В даном случае будем использовать как раз Arduino Nano.
Arduino Nano ATmega328P Bootloader 1

  1. Подготовьте плату программатор. Подробности читайте в нашей общей статье по записи загрузчика в Arduino.
  2. Соедините плату программатор Arduino Uno с платой исполнитель Arduino Nano. Подробности читайте в нашей общей статье по записи загрузчика в Arduino.
  3. Arduino Nano ATmega328P Bootloader 2

  4. Подключите плату программатор к компьютеру через кабель USB. При успешном подключении должны загореться индикаторные светодиоды PWR на плате программаторе и плате исполнителе.
  5. Arduino Nano ATmega328P Bootloader 3

  6. Откройте программу AVRDUDESS для прошивки микроконтроллеров семейства AVR.
  7. Arduino Nano ATmega328P Bootloader 4

  8. В AVRDUDESS выберите следующие настройки:

    • Микроконтроллер: ATmega328PB
    • Программатор: Arduino as ISP
    • COM-порт платы программатора: COMx, где x — номер порта платы.
  9. Arduino Nano ATmega328P Bootloader 5

  10. В AVRDUDESS нажмите на кнопку Detect. В консольной части программы вы должны увидеть сообщение про успешную инициализацию микроконтроллера ATmega328PB.
  11. Arduino Nano ATmega328P Bootloader 6

  12. В AVRDUDESS скормите файл загрузчика ATmega328P: раздел Flash и выберите заранее скаченный файл optiboot_atmega328.hex.
  13. Arduino Nano ATmega328P Bootloader 7

  14. В AVRDUDESS укажите, что будете прошивать контролер: раздел Flash и выберите чекбокс Write.
  15. Arduino Nano ATmega328P Bootloader 8

  16. Плата программатор и исполнитель настроены — можно записывать загрузчик: раздел Flash и нажмите на кнопку Go.
  17. Arduino Nano ATmega328P Bootloader 9

  18. Вы должны увидеть командную строку с последовательностью исполнения инструкций при прошивке. В завершении прошивки, всплывёт окно про успешную запись загрузчика.
  19. Arduino Nano ATmega328P Bootloader 10

3. Подмена фьюзов ATmega328PB к ATmega328P

С виду микроконтроллеры ATmega328P и ATmega328PB идентичны, однако имеют разные сигнатуры и фьюзы.

Параметры Микроконтроллер ATmega328P Микроконтроллер ATmega328PB
Сигнатура 1E 95 16 1E 95 0F
LOW Fuse Byte FF FF
HIGH Fuse Byte DA D7
EXTENDED Fuse Byte FD F5
  • Сигнатура — это идентификатор подписи микроконтроллера. Каждый микроконтроллер AVR имеет свой уникальный трёхбайтовый код подписи, который можно считать для подтверждения правильности типа устройства, подключенного к программатору. Сигнатуру микроконтроллера менять нельзя.
  • Фьюз-байты — это идентификаторы параметров микроконтроллеров AVR для хранения параметров при прошивке, например источник тактового сигнала, защита от записи и другие. В штатном загрузчике ATmega328P уже прописаны определённые фьюзы, которые отличаются от фьюзов загрузчика ATmega328PB.

Для активации совместимости, подменим фьюзы от ATmega328P в ATmega328PB.

  1. В AVRDUDESS считаем текущие фьюзы микроконтроллера ATmega328PB: раздел Fuses и нажмите кнопку Read.
  2. Arduino Nano ATmega328P Fuse Setting 1

  3. В разделе Fuses вы должны увидеть считанные фьюзы.
  4. Считанные фьюзы могут отличатся от фьюзов на скрине.

    Arduino Nano ATmega328P Fuse Setting 2

  5. В AVRDUDESS вбейте вручную фьюзы от загрузчика ATmega328P:

    • L:FF
    • H:DA
    • E:FD
  6. Arduino Nano ATmega328P Fuse Setting 3

  7. В AVRDUDESS запищите вписанные фьюзы в микроконтроллер ATmega328PB: раздел Fuses и нажмите кнопку Write.
  8. Arduino Nano ATmega328P Fuse Setting 4

  9. Вы должны увидеть командную строку с последовательностью исполнения инструкций при смене фьюзов. В завершении, всплывёт окно про успешную запись данных.
  10. Arduino Nano ATmega328P Fuse Setting 5

  11. Отключите плату программатор от USB. А затем разберите схему между платой программатором Arduino Uno и платой исполнителем Arduino Nano. Плата программатор кстати нам больше не понадобится, все дальнейшие шаги будем совершать с помощью платы исполнителя Arduino Nano.

4. Настройка Arduino IDE на работу с Arduino Nano на ATmega328P

  1. Подключите платформу Arduino Nano к компьютеру через кабель USB. При успешном подключении должен загореться индикаторный светодиод PWR.
  2. Arduino Nano ATmega328P Arduino IDE Setting 1

  3. Откройте диспетчер устройств Windows.
  4. Arduino Nano ATmega328P Arduino IDE Setting 2

  5. В диспетчере устройств раскройте вкладку Порты (COM и LPT), идентифицируйте среди устройств плату исполнитель Arduino Nano и запомните номер назначенного COM-порта. В нашем случае это USB-SERIAL CH340 с COM-портом номер 11.
  6. Arduino Nano ATmega328P Arduino IDE Setting 3

    В зависимости от модели платы Arduino Nano, а точнее от типа её USB-UART преобразователя, название устройства может быть разное. Приведём самые часто встречающие варианты: Arduino Nano, CH340, FT232.

    Если при подключении контроллера Arduino Nano в Arduino IDE не появляется новый COM-порт, установите драйвер в зависимости от чипа USB-UART преобразователя:

    • CH340 для OS Windows 7 или Windows 10
    • FT232R для OS Windows 7 или Windows 10
  7. В Arduino IDE выберите плату Arduino Nano: ИнструментыПлатаArduino AVR BoardsArduino Nano
  8. Arduino Nano ATmega328P Arduino IDE Setting 4

  9. В Arduino IDE выберите контроллер: ИнструментыПроцессорATmega328P
  10. Arduino Nano ATmega328P Arduino IDE Setting 5

  11. В Arduino IDE выберите COM-порт платы: ИнструментыПортCOMx, где x — номер порта платы.
  12. Как узнать номер COM-порта платы Arduino Nano, мы смотрели пару шагов выше в диспетчере устройств.

    Arduino Nano ATmega328P Arduino IDE Setting 6

  13. В Arduino IDE выберите тип программатора: ИнструментыПрограмматорAVRISP MKII
  14. Arduino Nano ATmega328P Arduino IDE Setting 7

  15. На этом этапе плата Arduino Nano настроена на режим совместимости с микроконтроллером ATmega328P и можно переходить к примерам работы.

5. Пример работы Arduino Nano ATmega328P

Сделаем маячок с нарастающей яркостью. Для этого подключим светодиод к пину 2.

Что понадобится

    • 1× Arduino Nano
    • 1× Trema Shield Nano
    • 1× Светодиод (Trema-модуль)
    • 1× Кабель USB Mini

Схема устройства

Arduino Nano ATmega328P Example 1

Исходный код

Прошейте платформу Arduino Nano ATmega328PB кодом ниже.

// Даём пину со светодиодом понятное имя
constexpr int LED_PIN = 2;
  
void setup() {
  // Настраиваем пин со светодиодом в режим выхода
  pinMode(LED_PIN, OUTPUT);
  Serial1.begin(9600);
}
  
void loop() {
  // Создаём цикл для перебора всех значений от 0 до 255
  // Выдаём на светодиод ШИМ-сигнал
  for (int brightness = 0; brightness <= 255; brightness++) {
    analogWrite(LED_PIN, brightness);
    // Ждём 10 мс
    delay(10);
  }
  // Создаём цикл для перебора всех значений от 255 до 0
  // Выдаём на светодиод ШИМ-сигнал
  for (int brightness = 255; brightness >= 0; brightness--) {
    analogWrite(LED_PIN, brightness);
    // Ждём 10 мс
    delay(10);
  }
}

Результат

После прошивки, у светодиода будет только два состояния: горит и не горит. Плавного нарастания яркости не будет.

На загрузчике ATmega328P на 2 пине ШИМа нет, а на расширенном загрузчике ATmega328PB на 2 пине ШИМ есть. Именно поэтому плавного нарастания яркости сейчас нет.

Arduino Nano ATmega328P Example 1

Элементы платы

В качестве примера рассмотрим основные компоненты на платформе Arduino Nano (USB CH340 / С ногами). На других моделях Nano, расположение компонентов на плате может немного отличаться, но суть и назначение одинаковое.

Arduino Nano ATmega328PB Annotation

Микроконтроллер ATmega328

Все платформы Arduino Nano выполнены на микроконтроллере Microchip ATmega328 семейства AVR с тактовой частотой 16 МГц. Процессор обладает тремя видами памяти:

  • 32 КБ Flash-памяти, из которых 0,5 КБ используются загрузчиком, который позволяет прошивать Arduino Nano с обычного компьютера через USB. Flash-память постоянна и её предназначение — хранение программ и сопутствующих статичных ресурсов.
  • 2 КБ SRAM-памяти, которые предназначены для хранения временных данных, например переменных программы. По сути, это оперативная память платформы. SRAM-память энергозависимая, при выключении питания все данные сотрутся.
  • 1 КБ энергонезависимой EEPROM-памяти для долговременного хранения данных, которые не стираются при выключении контроллера. По своему назначению — это аналог жёсткого диска для Arduino.

На текущий момент микроконтроллер Microchip ATmega328 можно встретить в двух модификациях:

  • ATmega328P — базовый микроконтроллер на котором выпускалась Arduino Nano с 2010 года по настоящее время.
  • ATmega328PB — улучшенный микроконтроллер на котором Arduino Nano стали выходить с 2024 года.

Визуально платформы Arduino Nano ATmega328P и Arduino Nano ATmega328PB полностью идентичны, отличить их можно только по маркировке на микроконтроллере.

Arduino Nano ATmega328PB Info 2

Преобразователь USB-UART

В зависимости от модификации, на плате Arduino Nano можно встретить USB-UART преобразователь на чипе: CH340 или FT232R.

Преобразователь USB-UART обеспечивает связь микроконтроллера ATmega328 с USB-портом компьютера. При подключении к ПК — Arduino Nano определяется как виртуальный COM-порт.

Если при подключении контроллера Arduino Nano в Arduino IDE не появляется новый COM-порт, установите драйвер в зависимости от чипа USB-UART преобразователя:

  • CH340 для OS Windows 7 или Windows 10
  • FT232R для OS Windows 7 или Windows 10

Микроконтроллер ATmega328 общается с компьютером через USB-UART преобразователь по интерфейсу UART, используя сигналы RX и TX, которые параллельно выведены на контакты 0 и 1 Arduino Nano. Не используйте эти пины в своём проекте во время прошивки и отладки программы.

Индикаторные светодиоды

Имя Назначение
PWR Индикатор питания платформы Arduino Nano.
L Пользовательский светодиод на 13 пине Arduino Nano. При задании высокого уровня светодиод загорается, при низком – гаснет.
TX Мигает при прошивки и отправление данных из Arduino Nano в USB, а также при использовании пина 0.
RX Мигает при прошивки и получение данных из USB в Arduino Nano, а также при использовании пина 1.

Кнопка RESET

Кнопка RESET служит для ручного сброса питания — аналог кнопки RESET обычного компьютера.

Порт USB Mini

Разъём USB Mini предназначен для прошивки и питания платформы Arduino Nano по USB. Для коммуникации понадобится кабель USB Mini.

Преобразователь напряжения 5 В

Понижающий преобразователь AMS1117-5 с выходом 5 вольта, обеспечивает напряжением платформу Arduino Nano при питании через пин Vin. Диапазон входного напряжения — от 7 до 12 вольт, на выходе напряжение 5 В с максимальны током 1 А.

Разъём ICSP

Разъём ICSP выполняет две полезные фитчи:

  • Транслирует сигнальные пины интерфейса SPI. Линии ICSP-разъёма также продублированы на цифровых пинах 11, 12 и 13.
  • Предназначен для загрузки прошивки в микроконтроллер ATmega328PB через внешний программатор для AVR. Одна из таких прошивок — Bootloader для Nano, который позволяет прошивать платформу по USB.

Распиновка

В качестве примера рассмотрим распиновку контактов на платформе Arduino Nano (USB CH340 / С ногами). На других моделях Nano, расположение пинов аналогичное.

На плате Arduino Nano расположены два ряда по 15 контактов и 6 дублирующих контактов на разъёме ICSP для подключения питания, дополнительных модулей и сенсоров.

В зависимости от загрузчика в Arduino Nano, распиновка платформы отличается:

Arduino Nano ATmega328PB Pinout

  • Всего физических контактов: 36 (15 + 15 + 6)
  • Контакты ввода-вывода GPIO: 22
  • Контакты с ШИМ: 9 с разрядностью 8 бит
  • Контакты с АЦП: 8 с разрядностью до 10 бит
  • Аппаратные интерфейсы: 2× UART, 2× SPI, 1× I²C
Arduino Nano ATmega328P Pinout

  • Всего физических контактов: 36 (15 + 15 + 6)
  • Контакты ввода-вывода GPIO: 20
  • Контакты ввода GPI: 2
  • Контакты с ШИМ: 6 с разрядностью 8 бит
  • Контакты с АЦП: 8 с разрядностью до 10 бит
  • Аппаратные интерфейсы: 1× UART, 1× SPI, 1× I²C

Габаритный чертёж

Размеры Arduino Nano (Без ног)

Arduino Nano ATmega328PB Dimensions 1

Размеры Arduino Nano (С ногами)

Arduino Nano ATmega328PB Dimensions 2

Характеристики

  • Модель: Arduino Nano ATmega328PB
  • Интерфейс USB-UART: CH340
  • Микроконтроллер: ATmega328PB
  • Тактовая частота: 16 МГц
  • Flash-память: 32 КБ
  • SRAM-память: 2 КБ
  • EEPROM-память: 1 КБ
  • Входное напряжение питания: 5 В

    • Через USB: 5 В
    • Через пин Vin: 7–12 В
  • Напряжение логических уровней: 5 В
  • Контакты общего назначения в расширенном режиме ATmega328PB:

    • Всего физических контактов: 36 (15 + 15 + 6)
    • Контакты ввода-вывода GPIO: 22
    • Контакты с ШИМ: 9 с разрядностью 8 бит
    • Контакты с АЦП: 8 с разрядностью до 10 бит
    • Аппаратные интерфейсы: 2× UART, 2× SPI, 1× I²C
  • Контакты общего назначения в режиме совместимости с ATmega328P:

    • Всего физических контактов: 36 (15 + 15 + 6)
    • Контакты ввода-вывода GPIO: 20
    • Контакты ввода GPI: 2
    • Контакты с ШИМ: 6 с разрядностью 8 бит
    • Контакты с АЦП: 8 с разрядностью до 10 бит
    • Аппаратные интерфейсы: 1× UART, 1× SPI, 1× I²C

Ресурсы

Мы также рекомендуем к чтению ссылки на статьи, документации и другие вспомогательные материалы по платформе Arduino Nano.

Магазин

  • Arduino Nano (USB CH340 / Без ног)
  • Arduino Nano (USB CH340 / С ногами)
  • Arduino Nano (USB FT232R / С ногами)

Инструкции

  • Установка и настройка среды Arduino IDE
  • Базовое руководство по использованию платформы Arduino Nano
  • Расширенное руководство по использованию платформы Arduino Nano
  • Общее руководство по записи загрузчика в плату Arduino
  • Драйвер на USB-UART преобразователь CH340
  • Драйвер на USB-UART преобразователь FT232R
  • Установка драйвера USB CH340 для Windows 7
  • Установка драйвера USB CH340 для Windows 10
  • Установка драйвера USB FT232R для Windows 7
  • Установка драйвера USB FT232R для Windows 10

Документация

  • Datasheet на микроконтроллер ATmega328PB
  • Datasheet на USB-UART преобразователь CH340
  • Datasheet на USB-UART преобразователь FT232R
  • Datasheet на понижающий преобразователь напряжения AMS1117-5 с выходом на 5 В

ATmega328P

ATmega328P Высокопроизводительный 8-разрядный микроконтроллер Microchip picoPower® на базе RISC AVR® сочетает в себе 32-килобайтную флэш-память ISP с возможностями чтения во время записи, 1 KB EEPROM, 2 KB SRAM, 23 линии ввода / вывода общего назначения, 32 рабочих регистра общего назначения, три гибких таймера / счетчика с режимами сравнения, внутренние и внешние прерывания, последовательный программируемый USART, байтовый двухпроводной последовательный интерфейс, SPI последовательный порт, 6-канальный 10-разрядный аналого-цифровой преобразователь (8 каналов в пакетах TQFP и QFN / MLF), программируемый сторожевой таймер с внутренним генератором и пять программно выбираемых режимов энергосбережения. Устройство работает в диапазоне 1,8-5,5 V.

ATmega328P

Параметр Значение
Тип памяти Flash
Размер памяти (для записи программ) 32 KB
Скорость CPU 20 MIPS/DMIPS (20 МГц)
SRAM 2 KB
EEPROM 1 KB
ШИМ (PWM) 6
Таймеры 2 x 8-bit, 1 x 16-bit
Диапазон температур -40 — 85 °C
Диапазон рабочего напряжения 1.8 — 5.5 V
Цифровых контактов 6
Аналоговых контактов 6
SPI 2
I2C 1
UART 1

MIPS (Millions of Instructions Per Second) — миллион команд в секунду.

Схема микроконтроллера ATmega328P

ATmega328P pinout

Прошивка ATmega328P с помощью Arduino

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

Схема подключения Arduino к ATmega328P (для прошивки)

ATmega328P firmware

Arduino ATmega328P
GND GND
3.3 V Vcc
13 PB5 (SCK)
12 PB4 (MISO)
11 PB3 (MOSI)
10 PC6 (RESET)

Дополнительно для прошивки ATmega328P нужно добавить конденсатор на 10 мкФ. Более длинный (положительный) контакт конденсатора подключите к выводу RESET микроконтроллера, короткий (отрицательный) контакт конденсатора подключите к выводу GND.

Подготовка Arduino как ISP-программатора

  1. Подключить Arduino к ПК (далее будет использоваться Arduino Pro Mini);
  2. Запустить Arduino IDE;
  3. Загрузить ArduinoISP скетч (Файл -> Примеры -> 11.ArduinoISP -> ArduinoISP);
  4. Выбрать плату Arduino, ту которую используете (Инструменты -> Плата -> Arduino AVR Boards -> Arduino Pro Mini);
  5. Выбрать используемый порт (Инструменты -> Порт);
  6. Нажать в панели управления Arduino IDE кнопку «Загрузка»;
  7. После успешной загрузки скетча, Arduino может использоваться как ISP-программатор.

Установка загрузчика в ATmega328P

  1. Добавить поддержку ATmega328P в Arduino IDE:
  • Arduino -> Preferences… -> Дополнительные ссылки для менеджера плат -> Вставить https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
  • Инструменты -> Плата -> Менеджер плат -> Ввести MiniCore -> Установить
  1. Выбрать плату ATmega328P (Инструменты -> Плата -> MiniCore -> ATmega328)
  2. Настроить плату:
  • Инструменты -> Clock -> Internal 8 MHz;
  • Инструменты -> BOD -> BOD 1.8V;
  • Инструменты -> EEPROM -> EEPROM retained;
  • Инструменты -> Compiler LTO -> LTO disabled;
  • Инструменты -> Bootloader -> No bootloader;
  1. Выбрать программатор (Инструменты -> Программатор -> Arduino as ISP (MiniCore));
  2. Записать загрузчик (Инструменты -> Записать загрузчик);
  3. В нижней части Arduino IDE появиться надпись «Запись загрузчика завершена».

Загрузка скетча в ATmega328P

  1. Создайте новый скетч и скопируйте в него содержимое ниже;
  2. Выбрать плату ATmega328 (и если нужно настроить ее);
  3. Выбрать программатор (Инструменты -> Программатор -> Arduino as ISP (MiniCore));
  1. Загрузка скетча (Скетч -> Загрузить через программатор).

Минимальная обвязка ATmega328P

  1. Используйте стабилизатор питания для питания ATmega328P, например на 3.3 V. Положительный вывод подключите к VCC, а отрицательный к GND;
  2. Соедините выводы VCC и AVCC у микроконтроллера;
  3. Соедините выводы GND у микроконтроллера.
  4. (Не обязательно) Добавить два керамических конденсатора на 100 нФ между ножками VCC — GND и AVCC — GND.
  5. (Не обязательно) Между RESET и VCC установить резистор на 10 кОм (для защиты от непреднамеренного сброса).

ATmega328P blink

    Урок 38

    Atmega 328p Pro Mini

Сегодня мы познакомимся поближе с интересной отладочной платой, выполненной на базе микроконтроллера  Atmega 328p. А наибольший интерес у программистов микроконтроллеров AVR данная плата вызвала тем, что помимо того, что контроллер здесь не слабый, но, самое главное, стоит она сущие копейки. Я, например, приобретал её всего лишь за 2,7 $. В видеоверсии данного урока я описании дам ссылку на распаковку и первоначальное тестирование данной платы, а также и на продавца, у которого я её приобретал.

По данной плате есть немало видеотестов, но почему-то все они практически выполнены с применением в качестве программатора переходника USART, и, самое главное, программирование происходит посредством программы для разработки ПО для плат Arduino.

Мы же пойдём другим путём и применим данную плату уже как полноценную отладочную плату для создания приложений под управлением привычной для нас среды программирования Atmel Studio. Соттветственно, в качестве программатора мы также возьмём привычный нам народный программатор, который мы применяем во всех наших занятиях и подключим его к шине SPI.

Я думаю, будет лишним перечисление всех достоинств контроллера Atmega328p по сравнению с контроллером Atmega 8A. Здесь и оперативной памяти больше и памяти под прошивку больше, и также здесь две шины USART по сравнению с одной в восьмой серии.

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

image01

Теперь подключим программатор Для подключения программатора я спаял вот такой переходничок

image02

Распиновка нашей платы совпадает со стандартом Arduino UNO R3. Приводить я её здесь не буду во избежание нарушения прав. Найти данную распиновку не представляет никаких трудностей. Согласно распиновки разъём к плате подключаем следующим образом:

AVR ISP — ATMEGA328
VCC-VCC
GND-GND
RESET-RST
MOSI-11
MISO-12
SCK-13

Получится вот так

image03

Подключим к разъёму программатор и проверим обнаружение платы. Для этого запустим программу avrdude, выберем там контроллер ATmega328P и нажмем кнопку «чтение». Программатор и контроллер должны будут обнаружиться и должны будут считаться калибровочные ячейки

image07

Также считаем фьюзы, чтобы потом установить подобные в протеусе для корректной работы эмуляции, ну и также для того, какие именно фьюзы надо и куда устанавливать, а то ведь фьюзы — это дело такое… Для этого переходим на закладку «Fuses» и жмем там кнопку «Чтение». После этого фьюзы расставятся так, как они уже выставлены в контроллере

image08

Теперь также подключим для тестирования 10 светодиодов. У меня, как вы знаете из моих уроков, есть 10-диодная матрица. Не забываем про токоограничивающие резисторы. Так как я данную матрицу использую ещё в тестах на контроллерах stm32, в которых граничный ток портов ниже, то резисторы там установлены на 680 ом. Менять я их не стал, светодиоды работают и с ними, возможно только светятся не так ярко, но это не страшно. Вот такая вот плата с матрицей

image04

К отладочной плате светодиоды мы подключим следующим образом (нажмите на картинку для увеличения изображения)

image05_0500

Согласно стандарту Arduino соединения получатся следующие

Светодиоды — отладочная плата

GND — GMD

D1 — 2

D2 — 3

D3 — 4

D4 — 5

D5 — 6

D6 — 7

D7 — A0

D8 — A1

D9 — A2

D10 — A3

Теперь создадим проект в Atmel Studio 7 стандартным образом, выбрав в качестве контроллера Atmega 328P, Назовём проект LIGHTS.

Добавим в файл main.c объявление частоты процессора и библиотеки для задержки

#define F_CPU 16000000L

#include <avr/io.h>

#include <util/delay.h>

В функции main() настроим порты

int main(void)

{

  DDRD |= 0b11111100;

  PORTD &= ~(0b11111100);

  DDRC |= 0b00001111;

  PORTC &= ~(0b00001111);

  while(1)

Также добавим код в бесконечный цикл

while(1)

{

  PORTD |= 0b00000100;

  _delay_ms(100);

  PORTD &= ~(0b00000100);

  PORTD |= 0b00001000;

  _delay_ms(100);

  PORTD &= ~(0b00001000);

  PORTD |= 0b00010000;

  _delay_ms(100);

  PORTD &= ~(0b00010000);

  PORTD |= 0b00100000;

  _delay_ms(100);

  PORTD &= ~(0b00100000);

  PORTD |= 0b01000000;

  _delay_ms(100);

  PORTD &= ~(0b01000000);

  PORTD |= 0b10000000;

  _delay_ms(100);

  PORTD &= ~(0b10000000);

  PORTC |= 0b00000001;

  _delay_ms(100);

  PORTC &= ~(0b00000001);

  PORTC |= 0b00000010;

  _delay_ms(100);

  PORTC &= ~(0b00000010);

  PORTC |= 0b00000100;

  _delay_ms(100);

  PORTC &= ~(0b00000100);

  PORTC |= 0b00001000;

  _delay_ms(100);

  PORTC &= ~(0b00001000);

}

Соберём код, перейдём сначала в протеус. Схему я уже показывал, файл протеуса будет в архиве вместе с проектом для студии. Добавим прошивку в настройики проекта в протеусе и настроим там микроконтроллер следующим образом:

image06

Запустим проект. Огни в матрице должны побежать.

Теперь вернёмся в проект, так как программировать микроконтроллер мы будем опять напрямую из Atmel Studio.

Только для 328-го контроллера мы добавим другую строку в сервис. Зайдём таким же образом, как и на прошлом занятии, в меню в пункт «Сервис -> Новые инструменты». добавим там ещё один пункт, назовем его Atmega 328p, только строчку с параметрами добавим следующую

«-p m328p -c usbasp -P usb -U flash:w:$(ProjectDir)Debug$(TargetName).hex:a»

Добавляем, конечно, без кавычек. Теперь Нажимаем на наш новый пункт Сервис -> Atmega 328p и таким образом контроллер наш должен прошиться, а светодиоды по очереди будут светиться, создавая эффект бегущего огня.

Предыдущий урок Программирование МК AVR Следующий урок

Исходный код

Приобрести плату Atmega 328p Pro Mini можно здесь.

Приобрести программатор USBASP USBISP с адаптером можно здесь USBASP USBISP 3.3 с адаптером

Смотреть ВИДЕОУРОК в RuTube (нажмите на картинку)

Смотреть ВИДЕОУРОК в YouTube (нажмите на картинку)


Post Views:
5 707

Я уже довольно долго использую плату 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:

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

Добавив несколько светодиодов, подключив порт последовательной связи к Raspberry Pi и использовав линию +5V с 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.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Itone eye drops капли глазные инструкция отзывы
  • Должностная инструкция начальника пассажирского поезда
  • Ферлатум фол инструкция для детей до года
  • Биоспринт для крс инструкция
  • Фосфалюгель инструкция по применению для детей 12 лет