Установите загрузчик на ATmega AT328P-PU и дешево получите функциональность, близкую к Arduino Uno!

Добавлено 15 октября 2017 в 23:25

Настоящая Arduino Uno – это отличная платформа для разработки множества развлекательных и полезных схем на микроконтроллерах, но использование полноценной платы Uno в каждом проекте может быть слишком дорого. Воспользовавшись инструкциями в этой статье, вы сможете уменьшить стоимость блока управления в проекте на 50 и более процентов.

Что такое Arduino? Вы серьезно?

После 2003 года сложно было не услышать что-либо об Arduino; нравятся ли они вам или нет, но эти платы вездесущи. Но что такое Arduino?

Вопреки тому, как многие думают, Arduino не является микроконтроллером, это особый бренд сборок на печатных платах, которые содержат микроконтроллеры. Эти микроконтроллеры – это чаще всего ATmega от компании Atmel (которая сейчас входит в состав Microchip), а одним из наиболее часто используемых ATmega является AT328P. Но не каждый AT328P будет работать на печатной плате Arduino или с Arduino IDE (интегрированной средой разработкой); на скриншоте ниже показано, что произойдет, когда вы попытаетесь загрузить скетч в обычный AT328P, который приобрели в магазине.

Ошибка при попытке загрузить скетч в AT328P
Ошибка при попытке загрузить скетч в AT328P

Как можете видеть, загрузка не удалась десять раз, и каждый сбой происходил по одной и той же причине. Несмотря на то, что сообщения об ошибках не указывают на это, ошибки были вызваны тем, что микроконтроллер ATmega не содержал загрузчик Arduino, небольшую часть кода, который говорит микроконтроллеру ATmega, как реагировать на инструкции Arduino IDE. К счастью, код загрузчика может быть загружен на нужные микроконтроллеры ATmega через относительно простой процесс.

Далее следуют пошаговые инструкции по загрузке кода загрузчика Arduino на AT328P-PU с помощью полноценной платы Arduino Uno. По сути, процесс разбивается на четыре части:

  1. сборка схемы загрузчика;
  2. настройка Arduino Uno как ISP (внутрисхемного программатора);
  3. подключение Arduino Uno к схеме загрузчика;
  4. прошивка кода загрузчика.

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

Сборка схемы прошивки загрузчика

Чтобы загрузить код загрузчика из Arduino Uno в пустой ATmega328P-PU, потребуется небольшая схема прошивки загрузчика. Комплектующие, необходимые для схемы загрузчика, перечислены ниже (вам может также понадобиться несколько перемычек).

Список комплектующих
ОбозначениеОписание
R1Резистор 10 кОм, 0,25 Вт
C1, C2Конденсатор, керамический, 22 пФ, 50 В
C3Конденсатор, керамический, 0,1 мкФ, 50 В
X1Кварцевый резонатор, 16 МГц, HC49, 20 пФ
U1Микросхема, ATmega328P-PU, флэш 32 килобайта, DIP-28, 1,8–5,5 В
нетМакетная плата, беспаечная, 400 контактов
нетArduino Uno R3

Ниже приведена очень простая принципиальная схема прошивки загрузчика AT328P-PU. Часть генератора состоит из X1, C1 и C2; обратите внимание, что кварцевый резонатор X1 должен быть на 16 МГц, а не на 20 МГц. Несмотря на то, что AT328P-PU может использовать кварц 20 МГц, для процесса прошивки загрузчика требуется работа на 16 МГц. R1 – это подтягивающий резистор для вывода Reset; а C3 – это обычный конденсатор фильтра питания.

Подписи, расположенные слева на принципиальной схеме, указывают на контакты Arduino Uno, к которым должен быть подключен каждый вывод. Эти соединения показаны на фотографии макетной платы, приведенной под схемой. Подписи цветов проводов на схеме соответствуют цветам перемычек на фотографии.

Соберите схему прошивки загрузчика, но пока не подключайте её к Arduino Uno.

Схема прошивки загрузчика в AT328P-PU
Схема прошивки загрузчика в AT328P-PU
Arduino Uno, подключенная к макетной плате прошивки загрузчика в AT328P-PU
Arduino Uno, подключенная к макетной плате прошивки загрузчика в AT328P-PU

Делаем ISP программатор из Arduno Uno

После двойной проверки схемы прошивки загрузчика, прежде чем подключать ее к Arduino Uno, вы должны настроить Arduino Uno для работы в качестве программатора ISP (In-circuit Serial Programmer, внутрисхемный последовательный программатор). Подключите Arduino Uno к компьютеру и запустите Arduino IDE. Затем выполните шаги, как показано на следующих скриншотах.

  1. Укажите, что подключена обычная плата Arduino Uno.
    Определение платы, подключенной к компьютеру
    Определение платы, подключенной к компьютеру
  2. Укажите назначение платы Arduino Uno как Arduino ISP.
    Назначение режима работы Arduino Uno в качестве ISP программатора
    Назначение режима работы Arduino Uno в качестве ISP программатора
  3. Откройте скетч Arduino ISP.
    Скетч Arduino ISP
    Скетч Arduino ISP
    Скетч Arduino ISP
    Скетч Arduino ISP
  4. Загрузите скетч Arduino ISP в Arduino Uno.
    Загружаем скетч Arduino ISP в Arduino Uno
    Загружаем скетч Arduino ISP в Arduino Uno
  5. Когда вы увидите сообщение "done uploading" (загрузка завершена), ваша плата Arduino Uno будет готова работать в качестве ISP программатора, и будет способна понимать и отвечать на инструкции от Arduino IDE.
    Arduino Uno готова работать в качестве ISP программатора
    Arduino Uno готова работать в качестве ISP программатора

Прошивка кода загрузчика

Теперь подключите шесть проводов от схемы прошивки загрузчика к Arduino Uno точно так, как показано на схеме и фотографии, приведенной выше в разделе «Сборка схемы прошивки загрузчика». После двойной проверки всех соединений вы готовы записать следующий код загрузчика в AT328P-PU в схеме прошивки загрузчика.

  1. Выберите "Burn Bootloader" (прошить загрузчик) как действие для Arduino Uno; процесс должен начаться сразу после того, как вы кликните "Burn Bootloader".
    Прошивка загрузчика в AT328P-PU
    Прошивка загрузчика в AT328P-PU
  2. Когда вы увидите сообщение "Done burning bootloader" (прошивка загрузчика завершена), процесс будет выполнен, и AT328P-PU сможет понимать и отвечать на инструкции от Arduino IDE.
    Загрузчик загружен в AT328P-PU
    Загрузчик загружен в AT328P-PU

Простейшая схема программирования (и проверки работы)

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

Список комплектующих
ОбозначениеОписание
R2Резистор 470 Ом, 0,25 Вт
C4Конденсатор, керамический, 0,1 мкФ, 50 В
LED1Светодиод, T1 3/4, желтый
нетКонвертер USB–TTL с выводом DTR

Преобразовать схему прошивки загрузчика AT328P-PU в простейшую схему программирования и проверки работоспособности довольно просто. Ниже приведены принципиальная схема и фотография макета.

  1. Удалите все шесть перемычек между Arduino Uno и схемой прошивки программатора.
  2. Подключите R2 и LED1 между землей и выводом 19 микроконтроллера AT328P-PU.
  3. Подключите выводы 1, 3, 4 и 5 от USB-TTL конвертера к AT328P-PU, как показано ниже. Вывод 2 не используется.
  4. Подключите вывод 6 через конденсатор C4 (0,1 мкФ) к выводу 1 AT328P-PU. (C4 обеспечивает, чтобы сигнал DTR от преобразователя USB-TTL выдавал кратковременный сигнал сброса, а не тот сигнал, который остается на низком логическом уровне в течение длительного периода времени.)
Простейшая схема программирования AT328P-PU
Простейшая схема программирования AT328P-PU
Макет простейшей схемы программирования AT328P-PU
Макет простейшей схемы программирования AT328P-PU

Загрузка первого скетча: разумеется, мигаем

  1. Чтобы подтвердить работоспособность макета простейшей схемы программирования и проверки работы, откройте скетч "Blink" из базовых примеров, включенных в Arduino IDE.
    Скетч Blink
    Скетч "Blink"
  2. После выбора правильного COM порта скомпилируйте и загрузите в AT328P-PU скетч "Blink".
    Скетч Blink
    Скетч "Blink"
    Первая попытка прошивки скетча Blink не удалась; можете увидеть, почему произошел сбой? Подсказка: посмотрите на правый нижний угол окна IDE выше, и сравните его с тем же участком окон IDE на скриншотах ниже (на которых прошивка удалась).
    Компиляция скетча Blink
    Компиляция скетча Blink
    Прошивка скетча Blink
    Прошивка скетча Blink
    Конечно, причина неудачи первой попытки прошивки заключается в неправильном выборе COM порта: был выбран COM3, вместо правильного COM6.

Что случилось?

Успех! Вы прошили загрузчик Arduino в AT328P-PU, а затем загрузили в AT328P-PU скетч Blink, что подтверждается мигающим желтым светодиодом на макете простейшей схемы программирования и проверки работоспособности. Теперь любой скетч для Arduino может быть загружен аналогичным образом, а компоненты, необходимые для этого скетча, могут быть подключены к микроконтроллеру AT328P-PU, и всё будет работать.

Развлекайтесь с Arduino... тратя теперь меньшие деньги!

Теги

ArduinoArduino IDEArduino UnoATmegaATmega328PBootloaderЗагрузчикМикроконтроллерПрограммирование

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.


  • 2020-08-14Константин Нетсев

    Спасибо! Статья полезная, все работает. Загрузчик соберу в виде шейлда для uno. Версия arduino IDE 1.8.13

  • 2020-03-31Виталий Охотский

    Огромное спасибо автору за статью! Все доступно изложено, а главное что работает с первого раза. Версия Arduino IDE 1.8.9

  • 2020-01-19Сергей Корженевский

    Спасибо за статью, помогло, правда с дополнением.
    Все это работает в версии Arduino IDE 1.8.3, а в более современных - не работает, (у меня на 1.8.9 не получилось).

    Подробно эта проблема рассмотрена здесь:

    http://arduino.ru/forum/obs...