Как прошить загрузчик ардуино в атмегу 328: Прошивка загрузчика на микроконтроллере ATMEGA328P

Содержание

Прошивка загрузчика на микроконтроллере ATMEGA328P

Цена и размер — это только пара причин, по которым использование платы Arduino для конкретных проектов может оказаться за гранью разумного. Зачастую они слишком большие или слишком дороги для целого ряда применений, особенно если требуется сделать несколько экземпляров. Хорошим способом получить простоту применения, присущую платформе Arduino, и при этом избавиться от всех этих недостатков является использование отдельного микроконтроллера ATmega328P и программирование его посредством среды разработки Arduino IDE и её упрощённой версии языка Си. Однако без начального загрузчика (bootloader) платформы Arduino сам по себе микроконтроллер ATmega328P не получится программировать с помощью среды Arduino IDE.

Цель этого руководства — понять, как работает начальный загрузчик платформы Arduino и как его записать в память микроконтроллера ATmega328P.

Программирование микроконтроллеров может оказаться непростой задачей, поскольку для этого необходимы специальные программаторы и файлы программ в шестнадцатеричном формате с расширением.hex, не говоря уже о глубоких знаниях языка программирования Си, на котором пишутся программы. Это довольно сложно для новичков, поэтому в рамках проекта Arduino был создан специальный файл формата.hex, после установки которого в микросхему семейства AVR можно программировать платы через последовательный порт. При этом всё что вам понадобится — это подсоединить последовательный интерфейс микроконтроллера к компьютеру, что можно осуществить с помощью преобразователя из USB в UART. Этот специальный файл носит название – Загрузчик (Bootloader) Arduino.

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

  1. Отслеживает, не пытается ли компьютер загрузить программу в микросхему через последовательный порт. Если компьютер начинает загрузку, то он принимает код и сохраняет его в специально отведённой области памяти микроконтроллера таким образом, чтобы при этом не затереть самого себя.
  2. Если компьютер не инициирует загрузку кода, то загрузчик командует микросхеме начать выполнение кода, который уже находится в памяти. Как только загрузчик записал в память программу и запустил её, плата Arduino будет непрерывно выполнять программу, пока подаётся питание.

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

Существует немало способов записи загрузчика платформы Arduino в микроконтроллер, но мы остановимся на самом простом, который предполагает использование платы Arduino в качестве внутрисхемного программатора ISP (In-System Programmer).

В процессе производства электронных устройств программу в микроконтроллеры обычно загружают уже после монтажа на печатную плату. Такая операция называется внутрисхемным программированием ISP (In-System Programming), и для неё необходимы специальный разъём на плате, через который получают доступ к микроконтроллеру при записи программы. Большинство плат Arduino оснащены таким разъёмом с выводами 2×3, который используется для одной из разновидностей ISP — внутрисхемного последовательного программирования ICSP (in-circuit serial programming).

Разъём содержит 3 вывода интерфейса SPI –

MOSI (D11), MISO (D12), SCK (D13) и выводы питания и земли (VCC, GND), а также вывод сброса (Reset). Через эти выводы и производится загрузка программ в микроконтроллер на плате Arduino. Подключив эти выводы к микроконтроллеру ATmega328P, мы сможем записать в его память начальный загрузчик (BootLoader) Arduino.

1. Подготовьте плату Arduino в качестве внутрисхемного программатора ISP

В среде разработке Arduino IDE есть готовый пример Arduino as ISP, который, если его загрузить в плату Arduino, превращает её во внутрисхемный программатор. Откройте этот пример и загрузите (Upload) его в плату Arduino Uno или Duemilanove.

2. Подключение компонентов

Далее соедините предназначенный для программирования микроконтроллер ATmega328P к плате Arduino с помощью макетной платы, как показано на схеме ниже.

Для наглядности ниже приведена таблица соединения.

Arduino Atmega328P
D13 Pin 19
D11
PIN 17
D10 Pin 1 Reset (no Capacitor needed)
VCC 5V
GND GND

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

3. Запись Загрузчика

Всё подсоединив, мы можем приступать к записи загрузчика.

Настройте среду Arduino IDE, выбрав в меню Инструменты > Плата (Tools > Board) пункт Arduino Uno. Затем выберите в меню Инструменты > Программатор (Tools > Programmer) пункт Arduino as ISP. Наконец, запишите загрузчик, выбрав пункт меню Инструменты > Записать Загрузчик (Tools > Burn Bootloader). Среда найдёт в папке, соответствующей выбранной вами плате, текстовый файл board.txt для загрузчика.

Важно, чтобы в вашей среде Arduino IDE были корректно установлены все файлы для используемых плат, чтобы можно было их выбрать в соответствующем меню. Обычно они уже установлены в среду.

Выполнив все пункты, вы сможете загружать код напрямую из среды Arduino IDE в микроконтроллер ATmega328P и использовать его сам по себе.

Если загрузчик записан, то вы можете загружать в микроконтроллер свои программы посредством среды Arduino IDE, следуя этой инструкции.

На это всё, спасибо, что прочитали это руководство. Не стесняйтесь оставлять любые возникающие вопросы в секции комментариев.

Прошивка Ардуино ATmega328 через Arduino IDE и программатор

Загрузка скетча или прошивка контроллера Ардуино – основная операция, с которой рано или поздно сталкивается любой ардуинщик. Именно возможность быстро и без лишних проблем загрузить в память контроллера управляющую программу и стала одной из основных причин успеха платформы Arduino. В этой статье мы узнаем, как прошиваются Arduino Uno, Nano, Mega и другие платы на основе Atmega с использованием Arduino IDE, программатора или другой платы Ардуино.

Загрузка скетча в плату Ардуино

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

Что происходит, когда мы жмем кнопку «Загрузить»

Плата Ардуино – это микроконтроллер AVR (Atmega8/168/328 или Atmega1280/2560), который прошивается загрузчиком. В микроконтроллер записывается программа, называемая прошивкой, которая позволяет получать сигналы с датчиков, обрабатывать нажатия кнопок, общаться с различными устройствами через интерфейсы, управлять исполнительными процессами.

Обычно прошивка записывается в кристалл микроконтроллера при помощи специальных устройств, называемых программаторами. Для разных микроконтроллеров существуют различные программаторы – от специализированных до универсальных. Важным отличием Ардуино от других контроллеров является возможность залить прошивку через обычный USB кабель. Это достигается при помощи специальной программы – загрузчика (Bootloader). Для прошивки не требуются лишние провода, не нужно подключать дополнительные устройства или нажимать что-то на плате. Также при работе через загрузчик нельзя добраться до опасных настроек, которые выведут из строя Ардуино.

При подключении платы Ардуино к источнику питания, внутри него начинается активная деятельность микропрограмм. При запуске микроконтроллера управление получает загрузчик. Первые 2 секунды он проверяет, поступил ли новый код от пользователя.  Кроме того загрузчик подает импульсы на пин, к которому подключен светодиод, и он начинает мигать. Это означает, что загрузчик установлен и работает исправно. Когда подается скетч, загрузчик записывает его во флеш-память микроконтроллера. Затем эта программа подается на выполнение.  Если данные не поступили, загрузчик запускает предыдущую программу. Во время выполнения программы внутри Ардуино выполняется ряд операций по инициализации и настройке среды окружения, и только после этого начинается выполнение кода.

Вызов setup и loop при загрузке

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

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

Функция void loop – в нее помещаются команды, которые должны выполняться, пока включена плата. Микроконтроллер начнет выполнять программы, начиная с первой, и когда дойдет до конца, сразу вернется в начало, чтобы повторить эту же последовательность бесконечное число раз.

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

В Ардуино IDE компиляция скетча начинается при нажатии кнопки Verify, после этого скетч может быть загружен в память Ардуино через USB с помощью кнопки Upload. Перед загрузкой кода программы нужно установить все параметры в меню Tools. В этом меню выбираются порт, к которому подключена плата, и платформу. В окне Arduino IDE внизу будет отображен ход компиляции скетча. При успешной выгрузке скетча будет получено сообщение «Done uploading».  Запуск скетча начинается сразу после окончания загрузки. Для расширения возможностей можно подключать дополнительные внешние библиотеки, разработанные командой Ардуино или сторонними авторами.

Обзор возможных вариантов загрузки скетча

Кратко весь алгоритм можно записать следующим образом: Написание кода >> компиляция >> загрузка в микроконтроллер. При загрузке скетча используется Bootloader (Загрузчик). Он представляет собой небольшую программу, которая загружается в микроконтроллер на Ардуино. С помощью этой программы можно загружать скетч, не используя дополнительные аппаратные средства. При работе загрузчика на плате будет мигать светодиод.

1. Загрузка в Arduino IDE. Самый простой и удобный вариант загрузки кода. Все, что        нужно сделать – это написать или найти нужный скетч и загрузить его.

  1. Ускоренная загрузка скетча в Arduino IDE. С помощью этого метода можно увеличить скорость загрузки в микроконтроллер в два раза. Для этого нужно лишь зайти в Настройки и снять галочку с пункта Проверка кода. Пропуская шаг проверки, будет уменьшено количество байтов, которые передаются во время загрузки. При этом все равно некоторые из видов проверок будут осуществлены, но они не занимают долгого времени. Отключать проверку кода не рекомендуется, если Ардуино помещается в какой-либо ответственный проект (например, в спутник). Также можно провести проверку, если подключение производится через очень длинный USB кабель (порядка 10 метров).

Уменьшение времени загрузки при помощи отключения проверки работает с любой платой Ардуино, которая использует USB соединение. Все эти микроконтроллеры используют загрузчик avrdude. Платы, которые используют загрузчик Catarina, не нуждаются в отключении проверки кода, так как этот загрузчик работает быстрее.

  1. Загрузка скетча в Ардуино через Bluetooth. Этот способ используется, когда нужно обойтись без физического соединения Ардуино и компьютера – например, в силовых цепях или радиочастотных цепях. Для реализации загрузки потребуется Bluetooth-модуль, который оснащен платой-адаптером для Ардуино. Этот модуль нужно подключить к компьютеру через переходник USB-UART-TTL. Работа с модулем осуществляется с помощью AT-команд.
  2. Загрузка при помощи Андроид-устройства. Для осуществления такого типа загрузки кода понадобятся провода USB-A – USB-B и USB-Host (OTG-кабель), Ардуино и устройство на базе Андроид с поддержкой режима host. На Андроид-устройство нужно установить программу ArduinoDroid или ArduinoCommander из Google Play. Все устройства нужно соединить при помощи кабелей, после этого можно включать Ардуино и загружать на него код. Нужно запустить установленную программу. При включении начнется обновление IDE, на что понадобится некоторое время.

Сначала работа будет рассмотрена на примере программы ArduinoCommander. После ее запуска нужно нажать USB-Device. Затем нужно наддать Autodetect, чтобы Андроид-устройство выполнило поиск Ардуино и отобразило его на экране. Как только Ардуино появится на экране, нужно на него нажать. Чтобы перейти в меню, нужно щелкнуть в нижнем правом углу. В этом меню можно загрузить скетч с SD-карты.

ArduinoDroid представляет собой среду разработки, компилятор и загрузчик одновременно. Начать компиляцию скетча нужно нажав на кнопку Lightning-Button. После завершения компиляции нужно нажать на кнопку загрузки. Загрузка занимает несколько секунд. По окончании загрузки ардуино запустит на выполнение новый код.

  1. Программирование при помощи Raspberry Pi. Можно загружать скетчи двумя способами – при помощи Arduino IDE и при помощи пакета arduino-mk. Пакет позволяет собирать и загружать скетчи Ардуино из командной строки.

Структура памяти Ардуино, где располагается скетч и данные

На микроконтроллере Ардуино имеется 3 вида памяти – флеш-память, которая используется для хранения скетчей, ОЗУ для хранения переменных и EEPROM для хранения постоянной информации. Из этих типов памяти флеш-память и EEPROM являются энергонезависимыми, то есть информация сохраняется при выключении питания. ОЗУ используется только для хранения данных, которые имеют отношение к исполняемой программе.

Микроконтроллер ATmega168, который используется на части плат Ардуино, имеет 16 Кб флеш-памяти, 1024 байта для ОЗУ и 512 байт EEPROM. Важно обратить внимание на малый объем ОЗУ. Большие программы могут полностью ее израсходовать, что приведет к сбою в программе. По этой причине нужно следить за тем, сколько строк занимает программа, и по возможности удалять лишнее. Уменьшить объем кода можно несколькими способами:

  • Можно отправить часть информации на компьютер.
  • Для таблиц и других крупных массивов использовать минимальный тип данных для хранения.
  • Данные, которые остаются неизменными, можно объявить константами при помощи слова const перед объявлением переменной.
  • Меньше использовать рекурсию. При ее вызове в памяти, называемой стеком, выделяется фрагмент, в котором хранятся различные данные. Если часто вызывать рекурсию, стеки будут занимать большой объем памяти и могут израсходовать ее.
  • Неизменяемые строки можно сохранять во флеш-памяти во время работы программы. Для этого используется функция PROGMEM.

На объем памяти не влияют размер имени переменных и комментарии. Компилятор устроен таким образом, что не включает эти данные в скомпилированный скетч.

Для измерения объема занимаемой памяти ОЗУ используется скетч из библиотеки MemoryFree. В ней имеется специальная функция free­Memory, которая возвращает объем доступной памяти. Также эта библиотека широко используется для диагностики проблем, которые связаны с нехваткой памяти.

Оптимизация флеш-памяти. Как только будет окончена процедура компиляции, в окне появится информация о занимаемой памяти кодом. Если скетч занимает большую часть памяти, нужно произвести оптимизацию использования флеш-памяти:

  • Использование констант. Аналогично как и для ОЗУ задавать неизменяющиеся значения константами.
  • Удалить ненужные Serial.println. Эта команда используется, когда нужно увидеть значения переменных в разных местах программы, нередко эта информация просто не нужна. При этом команды занимают место в памяти, поэтому, убедившись в корректной работе программы, некоторые строки можно удалить.
  • Отказ от загрузчика – можно программировать микроконтроллер через контакты ICSP на плате с использованием аппаратных программаторов.

Флеш память является безопасным и удобным способом хранения данных, но некоторые факторы ограничивают ее использование. Для флеш-памяти характерна запись данных блоками по 64 байта. Также флеш-память гарантирует сохранность информации для 100000циклов записи, после чего информация искажается. Во флеш-памяти имеется загрузчик, который нельзя удалять или искажать. Это может привести к разрушению самой платы.

EEPROM память используется для хранения всех данных, которые потребуются после отключения питания. Для записи информации в EEPROM нужно использовать специальную библиотеку EEPROM.h, которая входит в число стандартных библиотек в Arduino IDE. Чтение и запись информации в EEPROM происходит медленно, порядка 3 мс. Также гарантируется надежность хранения данных для 100000 циклов записи, потому лучше не выполнять запись в цикле.

Варианты прошивки Ардуино

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

Прошить плату при помощи среды разработки Arduino IDE можно в несколько шагов. В первую очередь нужно скачать и установить саму программу Arduino IDE. Также дополнительно нужно скачать и установить драйвер Ch441. Плату Ардуино нужно подключить к компьютеру и подождать несколько минут, пока Windows ее опознает и запомнит.

После этого нужно загрузить программу Arduino IDE и выбрать нужную плату: Инструменты – Плата. Также нужно выбрать порт, к которому она подключена: Инструменты – Порт. Готовая прошивка открывается двойным кликом, чтобы ее загрузить на плату, нужно нажать кнопку «Загрузить» вверху панели инструментов.

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

Прошивка с помощью программатора

Одни из самых простых способов прошивки платы – при помощи программатора. Заливка будет производиться в несколько этапов.

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

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

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

Последний шаг – нажать на «записать загрузчик» в меню Сервис.

После этого начнется загрузка. Завершение произойдет примерно через 10 секунд.

Прошивка Arduino через Arduino

Для того чтобы прошить одну плату с помощью другой, нужно взять 2 Ардуино, провода и USB. В первую очередь нужно настроить плату, которая будет выступать в качестве программатора. Ее нужно подключить к компьютеру, открыть  среду разработки Arduino IDE и найти в примерах специальный скетч ArduinoISP. Нужно выбрать этот пример и прошить плату.

Теперь можно подключать вторую плату, которую нужно прошить, к первой. После этого нужно зайти в меню Инструменты и выставить там прошиваемую плату и тип программатора.

Можно начать прошивать устройство. Как только прошивка будет открыта или написана, нужно перейти в меню Скетч >> загрузить через программатор. Для заливания прошивки не подходит стандартная кнопка загрузки, так как в этом случае прошивка будет загружена на первую плату, на которой уже имеется прошивка.

Заключение

В этой статье мы рассмотрели различные аспекты загрузки скетчей в Arduino Uno и Nano. Прошивка плат на базе микроконтроллеров ATmega328 и ATmega256, как правило, не сложна и может выполняться одним нажатием кнопки в Arduino IDE. За эту простоту мы должны благодарить встроенную программу-загрузчик, выполняющую за нас все основные действия на низком уровне.

Еще одним вариантом перепрошивки контроллера является использование другой платы адуино или специальных программаторов, использующих микросхемы CP2102 Ch440, FTDI и другие. Этот метод требует дополнительных усилий и затрат, но позволяет гибко изменять параметры прошивки. Какой из двух вариантов выбрать – решать вам. Для новичков, безусловно, первым шагом станет использование Arduino IDE, благо, ее создатели сделали все, чтобы упростить этот процесс.

 

Как прошить Ардуино загрузчик без программатора

Разбираемся как прошить Arduino Uno R3 без какого-либо программатора для прошивки загрузчика в ATMEGA328P.

Установка программного обеспечения Atmel FLIP

На плате Arduino есть два микроконтроллера - ATMEGA328P (328P) и ATMEGA16U2 (16U2). Вы можете обновить прошивку 16U2, сделав его программатором AVRISP MKII, а затем использовать Atmel Studio для прошивки 328P.

Я пробовал разные варианты, но возникали разные проблемы. Многие рекомендации плохо работали в моем случае особенно в части перепрошивки загрузчика через ПО Arduino.

Переда началом прошивки Ардуино потребуется программное обеспечение Atmel (Microchip) FLIP для обновления прошивки внутри 16U2.

Скачиваем Flip с сайта Microchip - отсюда. Устанавливаем. Не должно возникнуть никаких проблем, просто следуйте инструкциям мастера установки.

Возьмите плату Arduino, отсоедините питание и USB. Замкните на ICSP1 пины 5-6 (16U2 RESET будет в низком состоянии).

Распиновка ICSP1

Выглядеть это будет так:

Далее подключите Arduino к USB. Разъедините пины на ICSP1 (5-6). В этот момент 16U2 переходит в режим DFU. Новое устройство USB должно быть распознано.

Если драйвер не устанавливается автоматически, установите его из: C:\Program Files\AtmelFlip3.4.7usb»

Перейдите в Диспетчер устройств: Win + Pause -> Оборудование -> Диспетчер устройств. Проверьте, правильно ли установлен драйвер. Он будет расположен под USB-устройствами Atmel -> ATmega16U2.

Прошивка AVRISP MKII в Arduino ATmega16U2

Мы готовы перепрошить прошивку в 16U2.

Скачайте hex файл AVRISP MKII отсюда.  Отключите Arduino от USB-кабеля и питания. Замкните контакты 5-6 ICSP1. Подключите Arduino к USB. Разомкните выводы ICSP1 5-6.

Запустите программное обеспечение FLIP: Пуск -> Все программы -> Flip. Зайдите в: Настройки -> Связь -> USB. Нажмите «Открыть».

Перейдите в: Файл -> Загрузить файл HEX. Далее выберите LUFA-BOTH-AVRISP-MKII.hex и нажмите «Выполнить».

ATMEGA16U2 теперь AVRISP MKII и работает в режиме Atmel Studio. Arduino AVRISP MKII может работать в двух режимах: Atmel Studio или Avrdude. Ниже я буду говорить только о режиме Atmel Studio, так как у меня было много проблем с режимом Avrdude.

Установка Atmel Studio

Скачайте и установите Atmel Studio (включая драйверы) отсюда. После установки подключите Arduino к USB-кабелю. Оба светодиода (RX и TX) должны мигать два раза (это означает, что 16U2 находится в режиме Atmel Studio). Новое устройство будет распознано.

Установите драйверы. Если они не распознаются автоматически, вы найдете их в USB-драйверах: С:\Program Files\Atmel.

Перейдите в Диспетчер устройств, нажмите: Win + Pause -> Оборудование -> Диспетчер устройств. Проверьте, правильно ли установлен драйвер. Должно быть в Jungo Connectivity -> AVRISP MKII.

Вот теперь мы готовы прошить Arduino ATMEGA328P. Переходим к следующему шагу.

Перепрошивка загрузчика Arduino в ATMEGA328P через ATMEGA16U2

Довольно сложная часть нашего мероприятия по прошивке Ардуино. Вам нужно будет припаять некоторые провода. В основном нам нужно подключиться таким образом:

ICSP1 MISO2.Pin.1 -> ICSP MISO.Pin.1
ICSP1 SCK2.Pin.3 -> ICSP SCK.Pin.3
ICSP1 MOSI2.Pin.4 -> ICSP MOSI.Pin.4
JP2 PB4.Pin.1 -> ICSP RESET.Pin.5

Смотрите картинку ниже для понимания:

Подключите плату Arduino к USB-кабелю. Светодиоды RX и TX должны помигать два раза. Драйверы должны быть правильно распознаны (Jungo Connectivity -> AVRISP mkII). Запустите Atmel Studio. Зайдите в: Пуск -> Все программы -> Atmel -> Atmel Studio.

Перейдите в: Инструменты -> Программирование устройства. Выберите:

Инструмент -> AVRISP mkII
Устройство -> ATmega328P
Интерфейс -> ISP

Нажмите кнопку «Применить».

Установите частоту ISP на 16,1 кГц. Нажмите кнопку «Установить».

Программатор не будет работать, если вы установите очень низкую тактовую частоту ISP. Вы получите сообщение об ошибке: "ispProgramMem: получено состояние ошибки: получено 0x81, ожидаемое 0x00 (истекло время выборки контакта RDY / nBSY)". На английском будет звучать так: "ispProgramMem: Error status received: Got 0x81, expected 0x00 (RDY/nBSY pin sampling timed out)". Однако максимальная скорость ISP также ограничена и не может превышать 1/4 частоты устройства.

Перейдите в «Подпись устройства» (Device signature) и нажмите кнопку «Читать» (Read). Вы должны увидеть правильную «подпись устройства»: 0x1E950F. Нажмите «Memories» и найдите hex файл загрузчика Arduino. Он находится в:

C:\Program Files\ Arduino\hardware\arduinobootloaders\optiboot\optiboot_atmega328.hex

Нажмите кнопку «Program». Если вы используете совершенно новый незапрограммированный ATMEGA328P, вы также должны запрограммировать FUSES. Перейдите в Fuses и используйте следующие значения: low_fuses = 0xff; high_fuses = 0xDE; extended_fuses = 0x05.

Вы успешно прошили 328P с загрузчиком Arduino. На следующем шаге мы вернем оригинальную прошивку 16U2.

Перепрошиваем Arduino ATMEGA16U2 в оригинальное ПО

Почти сделано. Нам нужно вернуть оригинальное программное обеспечение в ATMEGA16U2.

Отключите Arduino от питания и USB. Замкните на ICSP1 контакты 5-6. Подключите USB-кабель. Разомкните пины ICSP1 5-6.

Запустите программное обеспечение FLIP. Перейдите в: Пуск -> Все программы -> Flip -> Flip. Далее: Настройки -> Связь -> USB.

Нажмите «Открыть». Перейдите в: Файл -> Загрузить файл HEX.

Выберите файл:

С:\Program Files\Arduino\hardware\arduino\firmwares\atmegaxxu2\arduino-usbserial\Arduino-usbserial-atmega16u2-Uno-Rev3.hex

Нажмите «Выполнить».

Отсоедините USB-кабель и подключите его снова. Новое устройство USB должно быть распознано. Если драйвер не установлен автоматически, вы найдете его в: С:\Program Files\Arduino\drivers.

Перейдите в Диспетчер устройств: Win + Pause -> Оборудование -> Диспетчер устройств. Проверьте, правильно ли загружен драйвер. Вы должны увидеть его в: Ports -> Arduino Uno.

Теперь мы можем проверить любой скетч из примеров, типа Blink. Запустите программное обеспечение Arduino (Пуск -> Arduino).

Нажмите: Open (стрелка вверх) -> -> 01.Basics -> Blink.

Выберите COM-порт а: Инструменты -> Последовательный порт -> COM (выберите порт, на котором была распознана плата).

Нажмите значок «Загрузить» (стрелка вправо). Светодиод должен начать мигать.

Всё готово. Мы узнали как прошить Ардуино и успешно перепрограммировали ATMEGA328P без использования какого-либо внешнего программатора.

Arduino - примеры, эксперименты: Как прошить Atmega328 и Atmega8

   Ранее я писал, что большую и дорогую Arduino Uno можно заменить на малюсенький и дешёвый микрочип Atmega328 или даже Atmega8








   
      Я покажу как прямо из среды программирования Arduino прошить микроконтроллеры Atmega328 и Atmega8. Первый у меня имеется в DIP корпусе, а второй в TQFP.

    Для программирования я использую программатор USBasp. Купил его на ebay.com, стоит он в пределах 150р.



  Первая проблема с которой столкнутся пользователи Windows8 и Windows10 - установка драйвера для USBasp.




     Проблема в том, что эти операционные системы просят, что бы у драйвера была какая-то цифровая подпись, а у драйверов для USBasp на сегодняшний день её нет. Проблема решается отключением проверки этих цифровых подписей. Для этого перезагружаем компьютер с нажатой клавишей Shift. Появляется экран, на котором выбираем "Диагностика"

Далее - "Дополнительные параметры"



Далее - "Параметры загрузки"



Далее - "Перезагрузить"



На следующем экране появляется список действий, которые мы можем сделать. Выбираем на нём "Не проверять цифровые подписи драйверов", жмём цифру 7

   Подключим наш программатор к микрочипу. Для удобства я купил макетную плату и соединительные проводки. Соединяем микрочип с программатором согласно схеме

У Atmega8 в TQFP корпусе выводы располагаются следующим образом

К 9 и 10 выводу микроконтроллера присоединяем кварцевый резонатор.



   Здесь стоит пояснить значение этого резонатора.Скорее всего в купленном вами микроконтроллере выставлены настройки (fuses) на работу от внешнего тактового генератора, т.е. от кварца. Поэтому, что бы его прошить, нужно что бы он был подключён к этому самому кварцу. Для перепрошивки кварц можно взять любой попавшийся вам под руку. Я когда впервые перепрошивал просто выпаял его из какого-то сломанного устройства, вот он маленький на фото.

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

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

1. Выбираем "Внутренний генератор" если не хотим использовать кварцевый резонатор, либо выбираем "Внешний генератор" если хотим увеличить скорость работы чипа.

2. Выбираем модель микроконтроллера (в нашем случаем Atmega328)

3. Нажимаем "Создать HEX"

Появляется такое окно:

   Первое что мы делаем - скачиваем наш загрузчик в виде hex файла. Если конструктор по какой-то причине не работает, можно скачать загрузчик для atmega328 для внутреннего генератора здесь. 

      Ниже мы видим блок файла boards.txt для Arduino IDE. Я долго пытался подключить этот блок, что бы в среде ардуино появился выбор платы, но мне это почему-то не удалось, в итоге обошёлся без этого.

     Ещё ниже мы видим подсказку как залить загрузчик через программу avrdude и программатор USBasp. Я делаю следующим образом:

-Подключаю программатор к компьютеру через USB.

-Копирую HEX файл в папку avrdude

-Создаю bat файл в папке avrdude и копирую в bat эту строку

avrdude -c usbasp -p atmega328p -U flash:w:a328p_8MHz_e2_de_5.hex -U lfuse:w:0xe2:m -U hfuse:w:0xde:m -U efuse:w:0x5:m

@echo This batch file

@pause

-Запускаю bat файл. Если лень создавать bat файл, можете скачать его здесь.

Если всё сделано правильно, вы увидите что-то подобное

   Это значит, что всё прошло хорошо и на наш микроконтроллер залился загрузчик ардуино. Теперь мы сможем прошивать его прямо из среды программирования Arduino.

   Если вы где-то накосячили и что-то сделали не правильно, можете увидеть такое сообщение:

    Тут могут быть разные причины:

-Возможно вы не правильно соединили программатор с микрочипом. Проверьте соединения.

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

-И третий вариант о котором я не сказал, но с которым тоже столкнулся, когда прошивал Atmega8. На каком-то форуме мне подсказали, что микрочип работает на пониженной частоте и чтобы прошить его, нужно на программаторе замкнуть перемычку JP3. Что собственно мне и помогло.

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

   Откроем среду разработки Arduino и запустим классический пример моргания светодиодом:



     Видим, что в примере указан цифровой выход 13. На микрочипе он соответствует ножке 19

    Т.к. этот вывод у нас сейчас подключен к программатору под вывод SCK, то изменим в программе 13 вывод на 5.

И подключим к нему светодиод.

Выбираем в Инструментах плату, чип и программатор

































Нажимаем Скетч - загрузить через программатор.



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

    С какой задержкой будет мигать светодиод если в программе указано 1 секунда? Зависит от того использовали ли вы внутренний тактовый генератор или внешний. Если внутренний, а частота его 8MHz, то программа будет работать в 2 раза медленней, т.к. в Arduino UNO стоит кварц на 16MHz. 

    Если вы использовали внешний кварц, то задержка моргания светодиодом будет зависить от частоты вашего кварца. При частоте 16MHz светодиод будет моргать через 1 секунду как и полагается по программе.

    Убедимся, что микроконтроллер прошит и работает самостоятельно. Отключим его от программатора и подключим к нему питание 5 вольт. Увидим, что светодиод моргает, программа, залитая в чип, работает!

Arduino прошивка загрузчика (bootloader) на новый чип Atmega 328P-PU / 168 через Bit-Bang на самой плате Arduino в Ubuntu 14 c помощью avrdude версии 6.1

Доигрался я со своей Ардуинкой, и сжёг несколько пинов у чипа =))

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

Благо на Ардуинке присутствует микросхема от ftdi (ft232rl) благодаря которой Ардуинку можно подключать через usb, а в системе появляется виртуальный com-порт,

но у неё есть ещё один режим работы так называемый Bit-Bang т.е. можно напрямую дёргать её ножки. Этим мы и воспользуемся.

Чип Atmega 328 а так же 168 и большинство других прошиваются через протокол SPI, на самой ардуинке присутствует разъём для этого под названием SPI или ICSP

так же выведен разьём микросхемы ft232rl (под названием x3 или как то так с четырьмя ножками)

Всё, что нам нужно для заливки прошивки, это их соединить по схеме:

 

 

Если чип прошивается на самой плате, то подключать питающую линию не нужно.  (да, можно прошивать чип ардуинки  с другой ардуинки)

Выглядит примерно так:

 

Фото честно спёрты с robocraft.ru =)

Вот впринципе и всё =)

Дальше устанавливаем avrdude командой:

sudo apt-get install avrdude

Потом открываем консольку и переходим в каталог установленной Arduino IDE:

cd /opt/Arduino/hardware/arduino/avr/bootloaders/atmega

Узнаем как там чип:

sudo avrdude -c arduino-ft232r -p m328p -P ft0 -U hfuse:r:-:h -B 4800

Если вывод показывает что всё прошло успешно, то заливаем прошивку:

sudo avrdude -q -C /etc/avrdude.conf -p m328p -c arduino-ft232r -P ft0 -B 4800 -e -U flash:w:ATmegaBOOT_168_atmega328.hex

Ну и на последок прошиваем фьюзы:

sudo avrdude -C /etc/avrdude.conf -p m328p -c arduino-ft232r -B 4800 -u -U lock:w:0x3f:m -U efuse:w:0x05:m -U hfuse:w:0xDA:m -U lfuse:w:0xFF:m

Вот и всё =) Отсоединяем провода, перетыкаем usb и можно залить простенький скетч.

За что какие параметры отвечают можно прочитать вызвав «avrdude -?»

Для чипа Atmega168 прошивка будет ATmegaBOOT_168_diecimila.hex
фьюзы:-Uefuse:w:0x00:m -Uhfuse:w:0xdd:m -Ulfuse:w:0xff:m -Ulock:w:0x0F:m
чип: m168

Для Atmega8 прошивка будет в папке atmega8 файл ATmegaBOOT.hex
фьюзы: -Ulfuse:w:0xdf:m -Uhfuse:w:0xCA:m
чип: m8
В Arduino IDE выбираете плату Arduino NG or older и чип Atmega8

 

Про Arduino IDE, загрузчики (bootloader), программаторы (avrdude.exe), фьюзы, HEX-файлы. В одном флаконе. Не претендуя на оригинальность.

РадиоКот >Статьи >

Про Arduino IDE, загрузчики (bootloader), программаторы (avrdude.exe), фьюзы, HEX-файлы. В одном флаконе. Не претендуя на оригинальность.

Про Arduino IDE, загрузчики (bootloader), программаторы (avrdude.exe), фьюзы, HEX-файлы. В одном флаконе. Не претендуя на оригинальность.

Для предметности разговора начну с картинки

Нет худа без добра (с).
Пока использовал заводские платы «Arduino UNO» и «Arduino MiniPRO», я не задумывался о том, как работает система в целом. Я просто писал код, нажимал кнопку «Вгрузить» и всё заливалось в микроконтроллер, далее МК, установленный на плате (ATmega328). В этом и заключается прелесть экосистемы «Arduino».
Сподвигла написать данный опус проблема. Никак мне удавалось залить исходную программу, далее СКЕТЧ, из Arduino IDE в нестандартный для неё МК «ATmega8L» с кварцем 8МГц стандартным способом, т.е. через USB-порт (на самом деле через преобразователь USB- UART). Это кратко. Теперь начну рассказывать, какую важную информацию я «наковырял» и как решил свою проблему.

Немного общей теории.
Для того, что бы залить (прошить, загрузить, UPLOAD) скетч в ATmega8L из Arduino IDE через USB-порт, нужен преобразователь, который преобразует информацию, передаваемую по USB-интерфейсу(каналу, дороге, линиям) в сигналы последовательного канала UART. Т.е. должны получиться определенные уровни сигналов – интерфейс (RS232, RS485) и определенные длительности сигналов (протокол).
Что бы принять информацию, поступающую в ATmega8L по UART (физически через выводы Rx, Tx) в МК должна быть ПРЕДВАРИТЕЛЬНО загружена программа, которая настраивает определенные выводы МК как Rx и Tx, и умеет обрабатывать полученную через них информацию. Эта программа называется ЗАГРУЗЧИК или по англицки BOOTLOADER.

(Отступление. ЗАГРУЗЧИКи бывают для разных интерфейсов и, соответственно, протоколов. Программа-программатор, заливающая информацию, должна соответствовать имеющемуся ЗАГРУЗЧИКу. И наоборот - прошитый ЗАГРУЗЧИК должен соответствовать управляющей программе-программатору. Грубо говоря - это «папа» и «мама» одного разъема. Очень часто для МК фирмы ATMEL «папой» является программа avrdude.exe).
Итак, посредством USBasp-платы и avrdude.exe я залил ЗАГРУЗЧИК в ATmega8L. Залитый ЗАГРУЗЧИК должен учитывать определенные физические характеристики МК. В моем случае это то, что МК работает с внешним кварцем на частоте 8МГц (в рамках данной статьи этой характеристики достаточно). Заливка ЗАГРУЗЧИКа происходит просто и жестко – как указал разработчик МК. Не залить HEX-файл (FIRMWARE) ЗАГРУЗЧИКа при минимальном количестве извилин, прямых руках, исправных деталях и правильном соединении просто невозможно.

А почему же тогда возникает проблема залить скетч? Ответ есть выше. Предварительно прошитый ЗАГРУЗЧИК должен соответствовать настройкам «программы-заливатору» (от слова «программатор») и, конечно же, преобразователю интерфейса (плате-программатору). Если идиот подключит два проводка от Rx и Tx ATmega8 к двум выводам разъема USB, то ничего не прошьется. Поэтому на платах-преобразователях останавливаться не буду. Единственно напомню, что ISP-программаторы - это программаторы «железа», которые работают на самом низком уровне и позволяют настраивать МК почти как угодно в пределах возможного.

Вот и нарисовался главный вопрос: Как определить, что имеющийся в МК ЗАГРУЗЧИК соответствует программе-программатору (в рамках данной статьи – Arduino IDE)? Если кратко – то никак!!! И не поможет вам ни осциллограф, ни анализатор. С помощью анализатора можно увидеть длительности каких-то сигналов и максимум, что можно определить – используемую ЗАГРУЗЧИКом скорость, если он будет что-нибудь выдавать по линии Tx. Но даже если скорость будет согласованная, а считанная информация читабельна, это не скажет нам ровным счетом ничего. Единственный способ подружить ЗАГРУЗЧИК в МК и «программу-заливатор» – это читать и следовать информации разработчика ЗАГРУЗЧИКа.
И вот здесь мы подходим к главному плюсу и недостатку одновременно Arduino IDE – дружелюбному интерфейсу для начинающего пользователя. Читай: скрытие всех системных настроек программы от пользователя.
Продолжаю. Итак, мы прочитали информацию от разработчика ЗАГРУЗЧИКа как прошивать его ЗАГРУЗЧИК и как потом загружать HEX-файлы в МК. НО СТОП! В Arduino IDE нет понятия «ЗАГРУЗЧИК», «HEX-файл». Здесь я вынужден прервать рассказ, вернуться к первой картинке и рассказать «с высоты птичьего полета» как устроена Arduino IDE.

1) Грубо говоря, программная платформа «Arduino IDE» предоставляет нам только убогий (для профи) и замечательный для экосистемы «Arduino» интерфейс для написания скетчев и легкой настройки (плата, порт, программатор). При нажатии кнопки «Проверить»(скетч) в дело вступает «наемный профессионал» - компилятор avr-gcc.exe, который преобразует нашу гениальную программу в вид, принимаемый программой-программатором – HEX-файл. Если скетч преобразовался (скомпилировался) и получился HEX-файл, то можно приступить ко второму шагу(смотри картинку1).
2) Запустить программу-программатор с определенными параметрами, что бы HEX-файл «скормить», например, через преобразователь USB-UART, ЗАГРУЗЧИКу МК. Из данной схемы видно, что если автор ЗАГРУЗЧИКа использует в качестве программы-программатора, например, классическую «дудку» (avrdude.exe), то нам вовсе необязательно мучится с настройками платформы «Arduino IDE», спрятанными в фиг знает каких файлах и фиг знает в каком формате. Мы можем просто написать свой bat(cmd, скрипт)-файл и запускать его как для компиляции проекта (avr-gcc.exe), так и для заливки HEX-файла в МК (avrdude.exe). А дальше процесс происходит практически на уровне железа.
3) Драйверы операционной системы преобразуют информацию так, что бы она была понятной подключенным USB-устройствам. В представленной схеме я показал два варианта:
4) 1-й вариант с USB-UART -преобразователем и МК с обязательным (5.1) ЗАГРУЗЧИКом. 2-й вариант с аппаратным USBasp-программатором и (5.2)МК (ЗАГРУЗЧИК не нужен, хотя может иметься).

Какие можно сделать выводы, глядя на представленную картинку?
1. НЕ НАДО устраивать танцы с бубном, если не происходит в Arduino IDE компиляция проекта. Заходим на сайт разработчика компилятора для требуемого МК (ATmega, ESP8266 и т.п.) и читаем, какая среда требуется для компиляции проекта, и с какими опциями надо запустить компиляцию. Часто это будет быстрее и проще, чем пытаться подружить Arduino IDE с нужным МК. Да, для этого надо обладать определенным уровнем знаний не на уровне электрика.
2. Тоже самое можно сказать и о случае, если не происходит заливка HEX-файла в МК через ЗАГРУЗЧИК. Вводим в командной строке рекомендуемую для данного ЗАГРУЗЧИКа команду и получаем результат. Если результат отрицательный, то почти сразу знаем куда «копать». Либо проблема с драйверами ОС, либо дохлая ножка Rx, либо косяк разработчика и на худой конец – проблема в ДНК пользователя.
Вроде всё, о чем я рассказал, есть в интернете, но часто для начинающего ардуинщика непонятно, нужна ли ему некая информация и как ею воспользоваться. Это как на первом курсе универа нас пичкают производными, интегралами, матрицами и у студента растет естественное чувство «А нафига нам это надо?». А потом какой-нибудь практик возьмет и покажет, как использовать для решения реальных задач эту «вышку». И наступает «дзен». Вдруг резко всё, что валялось в голове в виде ненужного хлама, раскладывается по полочкам и ты понимаешь, что стал ИНЖЕНЕРОМ.

К сожалению это не всё, что надо бы знать начинающему ардуинщику. Кое-что расскажу о ЗАГРУЗЧИКЕ (bootloader) подробней.
Что же надо знать о ЗАГРУЗЧИКе, что бы осознанно им пользоваться?
1)Размер загрузчика.
2)Область памяти, в которую он загружается.
3)Фьюзы, которые должны быть использованы с загрузчиком.
4)Скорость для UART.
5)Частоту МК, под которую рассчитан ЗАГРУЗЧИК.
6)Ну и конечно же, под какой МК рассчитан ЗАГРУЗЧИК.
7)Внешнее проявление работающего ЗАГРУЗЧИКа.
8)Критерий для запуска ЗАГРУЗЧИКА.

1) Загрузчик имеет некий размер. Есть МК, у которых мало памяти, и разместить ЗАГРУЗЧИК просто нет места. Или место есть, но не останется места для программы пользователя. Загрузчик – это все таки только программа-посредник для нашего удобства.
2) В МК ATmega Загрузчик может заливаться (условно говоря) в одну из 4х верхних областей Flash-памяти.
3) Соответственно фьюзами задаем область памяти МК, в которой находится ЗАГРУЗЧИК, что бы МК знал, с какого адреса запускать программу в МК после «Reset» или другого события.
4) В экосистеме «Arduino» используется ЗАГРУЗЧИК по UART. А для этого протокола важна скорость. Если Загрузчик настроен на одну скорость обмена информацией, а программа-программатор(avrdude.exe) на другую, то загрузки HEX-файла в память МК не произойдет.
5) МК может работать с разными тактовыми частотами. Чем ниже частота – тем меньше потребляемая мощность. Если залить ЗАГРУЗЧИК, не рассчитанный на используемую МК тактовую частоту, то как минимум будет проблема в несогласованной скорости UART. Т.е. скетч вряд ли загрузится в МК, а если ЗАГРУЗЧИК без контроля ошибок, то может загрузиться черт знает что.
6) Типов МК очень много. ЗАГРУЗЧИК для МК AVR не подходит для МК PIC. Проблемы могут возникнуть даже для одинаковых МК, но в разных корпусах.
7) Очень не мешает знать, как ведет себя загрузчик в МК без пользовательской программы. Вот получили вы посылку из Китая с Arduino ProMini и как узнать есть в ней загрузчик или нет? А если есть описание, то можно прочитать, что при подаче питания или сбросе должен 5 раз мигнуть желтый светодиод. Не мигает? Значит нет загрузчика или у вас проблемы с платой.
8) Вообще-то ЗАГРУЗЧИК может активизироваться (начать свою работу, прервав работу основной программы) не только по сигналу сброса, но любым другим способом, который реализовал разработчик, например, замыканием выв. 5 МК на землю.

А теперь переведем полученную информацию в практическую плоскость.

1) Как узнать размер ЗАГРУЗЧИКА, находящегося в МК?
Если речь о загрузчике, залитом в плату ардуино (читай в МК ATmega8/168/328), то можно прочитать с помощью программы-программатора, например, AVRDUDESS и платы-программатора USBasp, Flash-память и фьюзы BOOTSZ0 и BOOTSZ1. Открыв сохраненный HEX-файл текстовым редактором, можно увидеть в младших адресах код пользовательской программы, потом незанятую память (FF) и в самых верхних адресах памяти (см строку 225) код загрузчика с адреса 1C00 и до признака конца 01FF. Таким образом можно узнать длину загрузчика в байтах, а потом перевести в длину в словах.

 

2)Как узнать размер ЗАГРУЗЧИКА, который мы хотим разместить в МК?
Открываем в текстовом редакторе HEX-файл, в котором хранится интересующий нас загрузчик. Видим приблизительно такую куртинку

Здесь пояснения как понимать полученные цифры

3)Что будет, если залить загрузчик и неправильно выставить фьюзы BOOTSZ0 и BOOTSZ1?
Надо иметь ввиду, что не любой загрузчик способен перезаписать сам себя. Почему так? Этот вопрос выходит за рамки данной статьи. Более того, вопрос поставлен не «как перезаписать загрузчик в МК средствами платформы Arduino IDE?», а о первичной записи в новый МК загрузчика и установке конкретных фьюзов BOOTSZ0 и BOOTSZ1, предполагая, что остальные фьюзы установлены гарантированно правильно.
Итак, первый раз загрузчик всегда прошивается аппаратным программатором (ISP), поэтому выставим ли сначала фьюзы BOOTSZ0 и BOOTSZ1, а потом зальем ЗАГРУЗЧИК или наоборот, значения не имеет, так как ISP-программатор будет загружать данные по адресам, указанным в HEX-файле. Но вот потом, после Reset, ATmega8 начнет выполнение программы с адреса 000, если фьюз BOOTRST=1, независимо от BOOTSZ0 и BOOTSZ1


Из таблицы видно, что если Загрузчик разместим не с нужного адреса или неправильно установим фьюзы, то Загрузчик не запустится должным образом. Под должным образом я подразумеваю запуск нештатным способом за счет других ошибок, которые «исправляют» начальные ошибки. Например, залили в ATmega8 ЗАГРУЗЧИК длиной 510 слов с адреса E02, т.е. как фьюзы BOOTSZ1 и BOOTSZ0 не выставляй, а при сбросе ЗАГРУЗЧИК не запустится (не получит управление МК). Или прошили ЗАГРУЗЧИК размером в 1000 слов с адреса C00, но фьюзы BOOTSZ1 и BOOTSZ0 выставили в 0 и 1. Тогда при сбросе счетчик команд будет установлен в E00 и какой-то участок кода ЗАГРУЗЧИКа запустится, но такой запуск может привести к непредсказуемым результатам.
4)Что будет, если ЗАГРУЗЧИК от ATmega8 залить в ATmega328?
С одной стороны ATmega8 и ATmega328 выводно совместимы, с другой – у них разный объем памяти, а ЗАГРУЗЧИК всегда размещается в конце памяти (в старших адресах). Поэтому, если мы перекомпилируем исходник загрузчика для ATmega8 под ATmega328, то нельзя говорить о том, что мы пытаемся залить ЗАГРУЗЧИК от ATmega8 в ATmega328. Другое дело, если мы попытаемся HEX-файл с ЗАГРУЗЧИКом от ATmega8 залить в ATmega328. Здесь ответ однозначный – данные зальются вовсе не в конец памяти ATmega328, где должен располагаться ЗАГРУЗЧИК, а в область пользовательской программы и никогда штатным образом ЗАГРУЗЧИК не получит управление (не запустится).

И о результате осознания и конечном итоге.
Теперь я знаю, что ЗАГРУЗЧИК optiboot_flash_atmega8_UART0_57600_8000000L.hex из проекта MiniCore, который я хочу залить в свою ATmega8L зальется с адреса 1E00, т.е. займет сектор памяти 1FFF-1E00=1FF (512байт или 256 слов). Соответственно я должен установить (в ноль) три фьюза следующим образом: BOOTRST=0, BOOTSZ1=0 и BOOTSZ0=1 (см таблицу выше)

Залил с помощью программы AVRDUDESS и USBasp-программатора
Как я говорил выше, ЗАГРУЗЧИК и Программа-программатор – это мама и папа одного разъема. И коль я прошил ЗАГРУЗЧИК (маму), то теперь надо настроить «папу»-ArduinoIDE, которой я должен «рассказать» 1) скорость UART, 2)марку МК, 3)Частоту тактирования процессора МК (требуется для правильной компиляции, а не для загрузки), 4)Место, где лежит HEX-файл прошитого ЗАГРУЗЧИКА. Зачем? Не знаю.
Отредактируем файл boards.txt. В разных версиях ArduinoIDE он имеет разный формат!!!
1)Название платы для меню в ArduinoIDE задаётся в строке с «.name=», например: 328.name=ATmega328 или atmegang.name=Arduino NG or older

2)За выбор названия МК для меню отвечает строка вида «.menu.cpu.atmega8=», например: atmegang.menu.cpu.atmega8=ATmega8 или 8.build.mcu=atmega8
К сожалению, все параметры для всех версий ArduinoIDE описать невозможно. Поэтому я показал соответствующие разделы файла boards.txt двух версий. Думаю по образцу и подобию Вы сможете доработать свою версию ArduinoIDE под свои ЗАГРУЗЧИКИ.

Проверим теорию на практике, для чего:
1)Зальем посредством USBasp в ATmega8 (на беспаечной плате) с кварцем 16МГц штатный загрузчик из состава ArduinoIDE «ATmegaBOOT-prod-firmware-2009-11-07.hex» (размер файла 2,8кБ), загрузка с адреса 1C00. Разъемы от плат-программаторов USBasp и USB-UART от беспаечной платы отключать не буду, что бы не перепутать при подключении. Проще отсоединить/присоединить к программаторам, которые надо обязательно отсоединять. Устанавливаю фьюзы L=FF, H=C0. Отключаю USBasp, смотрю на светодиод, подаю питание. Несколько раз быстро мигнул и более не светится. Значит загрузчик работает. Теперь зальем скетч BLINK штатным способом. Подключаюсь USB-UART и светодиод начинает вести себя совсем по другому- раз в 8 сек светится. Запускаю ArduinoIDE 1.6.6.0, устанавливаю Arduino NG…, ATmega8, порт, программатор AVRISP mkII. AVRDUDE 6.0.1 выдает кучу всякой информации (у меня так настроено), скорость 19200. Скетч прошивается и сразу начинает выполняться. Т.е. провода, фьюзы, настройки выполнены правильно.
2)По такой же методике выполним заливку загрузчика optiboot_flash_atmega8_UART0_115200_16000000L.hex, переименовав в «01.hex» и положив в каталог optiboot (размер файла 1,34кБ), загрузка с адреса 1E00. Поэтому фьюзы L=FF, H=C2. После заливки загрузчика светодиод начинает мигать несколько раз в секунду. Без программаторов (только питание) не светится, т.е. загрузчик не выдает своего присутствия. Добавляю секцию в файл boards.txt
##############################################################
#поместите HEX-файл в каталог optiboot

a8_16MHz_E.name=atmega8 (16 MHz_ExtOsc_115k)
a8_16MHz_E.upload.tool=avrdude
a8_16MHz_E.upload.protocol=arduino
a8_16MHz_E.menu.cpu.atmega8.upload.maximum_size=7680
a8_16MHz_E.menu.cpu.atmega8.upload.maximum_data_size=512
a8_16MHz_E.upload.speed=115200
a8_16MHz_E.bootloader.unlock_bits=0x3F
a8_16MHz_E.bootloader.lock_bits=0x0F
a8_16MHz_E.menu.cpu.atmega8.bootloader.low_fuses=0xff
a8_16MHz_E.menu.cpu.atmega8.bootloader.high_fuses=0xc2
a8_16MHz_E.bootloader.tool=avrdude
a8_16MHz_E.bootloader.path=optiboot
a8_16MHz_E.bootloader.file=01.hex
a8_16MHz_E.build.mcu=atmega8
a8_16MHz_E.build.f_cpu=16000000L
a8_16MHz_E.build.core=arduino
a8_16MHz_E.build.variant=standard
a8_16MHz_E.build.board=AVR_NG

Прошиваю штатным способом. Светодиод при наличии USB-UART не светится. При отключении преобразователя и подаче питания начинает мигать, т.е. скетч запустился.

3)Когда попытался повторить вышеописанное для загрузчика optiboot_flash_atmega8_UART0_115200_8000000L.hex потерпел неудачу. Штатным способом скетч не заливался. После долгих танцев с бубном, на основании которых и появился данный трактат, пришел к выводу, что косяк разработчика, так как те же действия для optiboot_flash_atmega8_UART0_38400_8000000L.hex привели к загрузке скетча штатным способом. Кроме того, посмотрев файл boards.txt, нашел в нем ошибки, например:
###################
#### ATmega8/A ####
###################

8.name=ATmega8
8.upload.tool=avrdude
8.upload.protocol=arduino
8.upload.maximum_size=7680
8.upload.maximum_data_size=1024!!!!!!!!!!!!!!!! Ошибка
8.menu.clock.16MHz_external.bootloader.high_fuses=0xc4!!!!!!!!!!!!ошибка
И нет для 8МГц скорости 115200, а нерабочий HEX-файл есть. Вот и верь разработчикам.

Извините, что не могу привести отличия форматов файла boards.txt в разных версиях ArduinoIDE, так как этим вопросом не занимался. Попробовал сделать под имеющуюся версию по образцу и подобию – получилось. Глубже не «копал».

Спасибо за внимание. Буду рад, если кому-то мои исследования оказались полезными.

P.S. В последних версиях в конфигурацию (boards.txt) начали прописывать vid и pid. Видимо жаба душит итальянцев. Берегите старые версии ArduinoIDE. А то будет как с хромом – негде скачать старую версию.

P.S.2 При прошивке скетча в МК в сообщениях об ошибках ArduinoIDE, а правильнее сказать AVRDUDE, может упоминаться протокол STK500. В штатном режиме работы мы выбираем программатор AVRISP mkII. А в меню еще есть AVR ISP, Arduino ISP, Arduino as ISP. В русскоговорящем интернете я не встречал объяснения «на пальцах» зачем такое обилие типов программаторов в ArduinoIDE и главное, чем они отличаются и когда какой использовать. Поэтому чувствую себя как лох в хорошем ресторане, перед которым положили 5 ложек и 5 вилок…. И все смотрят только на меня. Кое-что я нашел на сайте microsin, но у автора есть проблема с обозначением объекта. Это как безобъектный праздник «день независимости». Независимости кого, от чего? Каждый волен понимать как хочет. И многие этим пользуются. Но в технике нужна однозначность. Попробую объяснить «на пальцах» как понял я. Если не прав, то прошу поправить.
Итак, AVRISP mkII это плата-программатор от AVR для своих микроконтроллеров серий ATtinyXX, ATmegaXX и других с последовательным (не UART ) интерфейсом ISP (4 сигнальных провода MOSI, MISO, SCK, GND) (режим последовательного программирования на основе интерфейса SPI). Интересно, зачем нужны эти два интерфейса ISP и SPI в одном программаторе? Так как обмен данными между AVRISP mkII и компьютером PC происходит через интерфейс USB, а плата-программатор AVRISP mkII построена на основе AVR-USB162, AVR-USB162MU, AVR-USB32U4 и других, то требуется прошивка для используемого МК. Firmware для программатора AVRISP mkII, распространяется свободно. Понятно, что количество типов МК растет и хотелось бы, что бы плата-программатор AVRISP mkII умел с ними работать. Соответственно надо дорабатывать прошивку AVRISP mkII. Но AVRISP mkII должен общаться не только с программируемым (целевым) МК, но и компьютером. Так вот этот набор «слов для общения» называют протоколом. И эти протоколы тоже развиваются (STK500, STK600. AVRISP mkII во многом совпадает с протоколом STK600). До сих пор вроде понятно, если вспомнить, что на плате Arduino UNO использовался преобразователь-программатор на основе ATmega8U2. Но всякое понимание улетучивается, когда вспоминаем, что платы Arduino продаются с прошитым в основной МК загрузчиком. И нет никакого ISP (MOSI, MISO, SCK, GND). Всё общение происходит по интерфейсу UART, и даже нет необходимости эмулировать сигналы ISP. Тогда при чем AVRISP mkII?
А вот если мы обратим свой взор на стартеркит STK500 (что это такое?), то увидим, что обмен между STK500 и PC происходит через интерфейс RS232 (PC COM-порт)(тот же UART, только уровни сигналов +/- 12в, а не 0-5в). При этом STK500 использует следующие настройки порта: 115.2kbps, 8 data bits, 1 stop bit, no parity. Интерфейс на выходе программатора STK500 – ISP и PP. STK500 и AVRISP поддерживают тактовые частоты ISP от 4 кГц до 1.8 МГц.
Про UART и загрузчик – ни слова. Так почему AVRISP mkII?

Файлы:
ATmega8 Addressing the Flash
распределение памяти в атмега8
ATmega8 фьюзы Заводские и как должно стать
ATmega8 зависимость частоты от напряжения питания
AVRDUDESS фьюзы
Последовательное программирование
преобразователь usb-uart
Штатный загрузчик от Ардуино
03.hex
01.hex
04.hex
FLASH память-RWW-NRWW
USBasp-atmega8A-pin
Эта статья в ворд-формате
Работа с представленными загрузчиками
проверенная Blink РАБОЧАЯ секция
проверенная Blink РАБОЧАЯ секция3
проверенная Blink РАБОЧАЯ секция1
сообщения при удачной заливке скетча новым загрузчиком на 16МГц
сообщения при удачной заливке скетча штатным загрузчиком

Все вопросы в Форум.


Как вам эта статья?

Заработало ли это устройство у вас?


Эти статьи вам тоже могут пригодиться:

Перезапись загрузчика в Arduino Pro Mini

Arduino Pro Mini весьма привлекательная плата из семейства Ардуино в первую очередь маленькими габаритами и ценой.

Например на АЛИ можно купить ее меньше чем за $2

Зачем перезаписывать загрузчик

  1. Если загрузчик «слетел» и плата не прошивается. Выдает всегда: «avrdude: stk500_recv(): programmer is not responding».
  2. Если вы решили разобраться со сторожевым таймером, как в этой статье, и использовать для этого OPTIBOOT.
  3. Если нужно переустановить ФЬЮЗ-биты, например, как в моем случае, отключить контроль напряжения питания для того чтобы запитать плату от 3.3В
  4. Или же вы решили совсем убрать загрузчик с целью экономии памяти и увеличения скорости загрузки, тогда вместо загрузчика заливается ваша программа по нулевому адресу.

Что для этого нужно

Подключение

Все Arduino имеющие 6-пиновый IСSP разъем подключаются к программатору через такой переходник

Arduino Pro Mini ICSP на плате не имеет, поэтому подключаем проводками по следующей схеме

Подключаем программатор к USB компьютера, устанавливаем драйвер USBAsp (если он еще не установлен) и запускам среду Arduino IDE

Выбираем тип программатора USBASP

Выбираем тип контроллера. Если мы хотим просто восстановить загрузчик — выбираем Arduino Pro Mini 5В (или 3.3В в зависимости от платы). Если нам нужен OPTIBOOT без лишней головной боли — выбираем Arduino UNO

 

Затем жмем «Записать загрузчик»

 

Если все подключено и настроено правильно, то программатор довольно долго мигает лампочками.

Настройка параметров загрузчика

Последнее время применяю Aduino Pro Mini 5В с модулями NRF24L01+, требующих для питания 3.3В. Для питания таких плат от низкого напряжения нужно отключить во фьюзах контроль напряжения питания. Для этого открываем файл c:\Program Files (x86)\Arduino\hardware\arduino\boards.txt и прописываем в нем характеристики желаемой прошивки:

atmega328_16.name=Atmega328_16 (3.3V, 16 MHz external) atmega328_16.upload.protocol=arduino atmega328_16.upload.maximum_size=32256 atmega328_16.upload.speed=115200 atmega328_16.bootloader.low_fuses=0xff atmega328_16.bootloader.high_fuses=0xde atmega328_16.bootloader.extended_fuses=0x07 atmega328_16.bootloader.path=optiboot atmega328_16.bootloader.file=optiboot_atmega328.hex atmega328_16.bootloader.unlock_bits=0x3F atmega328_16.bootloader.lock_bits=0x0F atmega328_16.build.mcu=atmega328p atmega328_16.build.f_cpu=16000000L atmega328_16.build.core=arduino atmega328_16.build.variant=standard

atmega328_16.name=Atmega328_16 (3.3V, 16 MHz external)

atmega328_16.upload.protocol=arduino

atmega328_16.upload.maximum_size=32256

atmega328_16.upload.speed=115200

atmega328_16.bootloader.low_fuses=0xff

atmega328_16.bootloader.high_fuses=0xde

atmega328_16.bootloader.extended_fuses=0x07

atmega328_16.bootloader.path=optiboot

atmega328_16.bootloader.file=optiboot_atmega328.hex

atmega328_16.bootloader.unlock_bits=0x3F

atmega328_16.bootloader.lock_bits=0x0F

atmega328_16.build.mcu=atmega328p

atmega328_16.build.f_cpu=16000000L

atmega328_16.build.core=arduino

atmega328_16.build.variant=standard

После этого шьем выбираем тип контроллера «Atmega328_16 (3.3V, 16 MHz external)» и пишем загрузчик.

Программируя «перешитый» Arduino Pro Mini через стандартный порт не нужно забывать устанавливать нужный тип контроллера

со своего сайта.

Запись загрузчика ATMega328p

В центре каждой Arduino UNO находится микроконтроллер Microchip ATmega328p. Это мозг операции, без него ваш Arduino не смог бы делать ничего из того, чем он славится.

Запись загрузчика за 5 простых шагов:

Шаг 1. Установка мини-ядра

  1. Установите «Мини-ядро» - аппаратный пакет, который добавляет поддержку ряда устройств ATmega в Arduino IDE.
  2. Откройте IDE Arduino и перейдите к настройкам (или нажмите ctrl +, ).Скопируйте следующий URL-адрес в пустое поле с надписью «Дополнительные URL-адреса диспетчера плат»: https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
  3. перейдите в диспетчер досок, который можно найти в Инструменты> Доска > Менеджер плат .
  4. Введите «minicore» в строку поиска, и появится соответствующая запись. Выберите последнюю версию и нажмите «установить». После завершения установки закройте окно диспетчера досок.

Шаг 2 - Установка ArduinoISP

Перепрограммируйте Arduino с помощью встроенного в систему программатора.Вы найдете ArduinoISP под заголовком «Примеры» в меню «Файл».

Шаг 3. Подключение

Подключите Arduino к макетной плате. Чтобы ваш ATMega328 работал, вам понадобятся четыре дополнительных компонента:

  • Подтягивающий резистор 10 кОм
  • Два керамических конденсатора 18-22 пФ
  • Кристалл 16 МГц или 8 МГц

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

Подключите все это так:

Шаг 4 - Выберите устройство, кристалл и программатор

  1. Выберите соответствующие параметры устройства, кристалла и программатора в меню «Инструменты».
  2. Для платы выберите «ATmega328» (или любой другой чип, который вы используете).
  3. Под clock, выберите частоту ваших внешних часов. Это должно быть написано заглавными буквами на верхней части корпуса кристалла.
  4. и ваш программатор как «Arduino as ISP»

Шаг 5. Записать загрузчик

  1. Записать загрузчик с помощью опции «Записать загрузчик» в нижней части меню «Инструменты».
  2. Затем вы можете удалить перемычки, соединяющие контакты 10-13 платы Arduino с макетной платой.

Теперь ваша макетная плата будет работать, используя только сигналы + 5В и заземление - все сигналы данных будут поступать от самого ATMega328. Вы сможете загружать эскизы в ATMega328 с помощью кабеля FTDI, который соединяет микроконтроллер с USB-разъемом компьютера.

Для получения дополнительной информации о ATmega328p и подробных инструкций, включая снимки экрана, см. Ниже.

-

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

Для этого вам нужно записать загрузчик на чип. Это означает подключение Arduino к вашей новой макетной плате. Таким образом, Arduino действует как системный программист или интернет-провайдер. Мы проведем вас через этот процесс, но прежде чем мы начнем, давайте поговорим о преимуществах этого подхода и кратко объясним, что такое ATmega328p.

Что такое ATmega328p?

Семейство микросхем megaAVR было создано Atmel, а затем приобретено Microchip Technology, когда они приобрели Atmel в 2016 году.ATmega является флагманом этой серии и с самого начала составляла основу плат Arduino.

Чтобы установить ATmega на макетную плату, вам понадобится DIP-версия микросхемы. Он будет аккуратно вставлен в центр макета, так что ножки будут располагаться по обе стороны от зазора. Как только он будет установлен, вы сможете использовать соседние разъемы для подключения к контактам.

Что делает ATmega328p на Arduino UNO?

С определенной точки зрения, ATmega328p - это Arduino.Ваши наброски хранятся во внутренней памяти, и он выполняет все содержащиеся в нем инструкции, повышая и понижая напряжение и считывая внешние входные данные. Когда мы говорим о подключении чего-либо к Arduino, мы на самом деле говорим о подключении чего-либо к ATmega328p - среда и печатная плата Arduino просто обеспечивают легкую для понимания упаковку, которая делает подключение к ATMega328 немного более интуитивным. ATMega328 имеет ту же распиновку, что и женские разъемы Arduino Uno, за исключением контактов питания.

Что такое загрузчик?

Так что же такое загрузчик и почему он так важен? Возможно, вы знакомы с этим термином на своем настольном ПК. В этом случае загрузчик - это программа, которая запускается, как только машина включается, и ее задача - запустить вашу операционную систему. Хотя у Arduino нет операционной системы, у него все еще есть загрузчик, который на самом деле представляет собой небольшую часть программного обеспечения, которая позволяет устанавливать новую прошивку на чип без необходимости использования внешнего интернет-провайдера.Если на микросхеме нет загрузчика, то нет возможности ввести новую прошивку, а это означает, что каждый загрузчик необходимо будет установить с помощью внешнего интернет-провайдера хотя бы один раз.

Нельзя ли вынуть ATmega328 из Arduino?

Если на вашем Arduino установлена ​​DIP-версия ATmega328, вы можете просто переместить ее на макетную плату. Поскольку на нем уже есть загрузчик, вам не нужно ничего делать, но вы, очевидно, не сможете использовать свой Arduino, если на нем нет микроконтроллера.

Зачем использовать ATmega328 отдельно?

Вам может быть интересно, в чем смысл всего этого. Если в Arduino уже есть все необходимое для работы ATmega, зачем убирать одно из другого? Существует несколько возможных причин:

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

Какими бы ни были ваши цели, давайте посмотрим, как прошить ATMega328p с помощью необходимого загрузчика.

Запись загрузчика

Установка мини-ядра

. Пакет MiniCore от MCUDude - это аппаратный пакет, который добавляет поддержку ряда устройств ATmega в среде Arduino IDE, а именно:

  • ATmega8
  • ATmega48
  • ATmega88
  • ATmega168
  • ATmega328
  • Step1032839 1 - Откройте IDE Arduino и перейдите к настройкам (или нажмите ctrl +, ).Внизу страницы есть пустое поле рядом с «URL-адресами дополнительных плат». Вы хотите скопировать сюда следующий URL-адрес:

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

    Шаг 2. Перейдите к диспетчеру досок, который находится в Tools> Board> Boards Manager. . Здесь вы найдете список плат, с которыми может взаимодействовать ваш Arduino.

    Шаг 3 - Введите «minicore» в строку поиска, и появится соответствующая запись.Вы сможете выбрать из списка предыдущих версий, но если у вас нет конкретной цели, лучше выбрать последнюю. Нажмите «установить» и дождитесь завершения. Затем закройте окно менеджера досок.

    Установка ArduinoISP

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

    Подключение

    Теперь мы собираемся подключить оборудование так, чтобы Arduino был подключен к микроконтроллеру на плате. Помимо проводов, в идеале для этой работы вам понадобятся четыре дополнительных компонента. Это:

    • Подтягивающий резистор 10 кОм
    • Два керамических конденсатора 18-22 пФ
    • Кристалл 16 МГц или 8 МГц

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

    Подключите все так:

    Выберите устройство, кристалл и программатор

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

    Перейдите в меню плат в разделе «Инструменты» и выберите «ATmega328». Если вы используете другой чип, вы можете соответствующим образом изменить свой выбор.

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

    Наконец, установите для вашего программиста «Arduino as ISP».Ты почти сделал!

    Запишите загрузчик!

    Пришло время записать загрузчик. Сделайте это с помощью параметра «Записать загрузчик» в нижней части меню «Инструменты». Если вы все сделали правильно и ничего не пошло наперекосяк, вам нужно будет сделать это только один раз. После этого вы можете удалить перемычки, соединяющие контакты 10-13 платы Arduino с макетной платой.

    С этого момента вам нужно только подавать на него сигналы +5 В и заземление - все сигналы данных будут поступать от самого ATMega328.Вы сможете загружать свои эскизы на ATMega328 с помощью кабеля FTDI, который соединяет микроконтроллер с USB-разъемом компьютера.

    Мигает загрузчик Arduino на микроконтроллере Atmega328p

    Введение

    Стоимость и размер, и это лишь некоторые из них, делают использование платы Arduino в определенных проектах излишеством, часто она всегда слишком велика или слишком дорога для объема проекта, особенно когда это проект, в котором нам нужно сделать несколько единиц. . Один из хороших способов сохранить простоту использования платформы Arduino, избегая при этом всех других недостатков, - это использовать только микроконтроллер Atmega328p и программировать его с помощью Arduino IDE и его упрощенной версии языка программирования C.Однако микроконтроллер atmega328p нельзя использовать с Arduino IDE, пока он не будет прошит загрузчиком Arduino.

    Наша цель в этом руководстве - понять, как работает загрузчик Arduino и как с его помощью можно прошить микроконтроллер Atmeg328p.

    Atmega328P mcu

    Загрузчик Arduino

    Программирование микроконтроллеров может быть немного сложным, поскольку для них требуются специальные программисты и файлы .hex, не говоря уже об огромных знаниях языка программирования C, необходимых для написания кода.Это неудобно для новичков, поэтому для устранения этих проблем Arduino создал файл .hex, который можно установить на микросхемы AVR, которые позволяют программировать плату через последовательный порт, обеспечивая все необходимое для программирования микроконтроллера (после установки шестнадцатеричного кода). file) - это последовательное соединение между микроконтроллером и компьютером, которое может быть достигнуто с помощью адаптера USB-UART. Этот шестнадцатеричный файл называется загрузчиком Arduino .

    Загрузчик очень похож на BIOS, работающий на ПК, и выполняет две задачи:

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

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

    Запись загрузчика на микроконтроллер

    Существует множество методов записи загрузчика Arduino в микроконтроллер, но мы сосредоточимся на использовании самого простого метода, который включает использование платы Arduino в качестве внутрисистемного программиста (ISP).

    В процессе производства электронных устройств микроконтроллеры обычно программируются после того, как они были установлены на печатной плате. Этот процесс программирования называется внутрисистемным программированием (ISP), и он требует, чтобы на печатной плате были определенные выводы заголовка, через которые микроконтроллер может быть доступен для программирования.Большинство плат Arduino и Arduino также поставляются с этой функцией, поскольку они обычно имеют 2x3-контактные разъемы, которые используются для формы внутрисистемного программирования, известной как внутрисхемное последовательное программирование (ICSP). Контакты заголовка состоят из 3 контактов SPI (MOSI (D11), MISO (D12), SCK (D13)), VCC, GND и контакта сброса, и это контакты, используемые для программирования микроконтроллера на Arduino. Подключив микроконтроллер Atmeg328p к этим контактам, мы сможем прошить микроконтроллер Atmeg328p с помощью загрузчика Arduino.

    Необходимые компоненты

    Для работы с этим руководством необходимы следующие компоненты;

    1. Arduino Uno / Duemilanove
    2. Провода перемычки
    3. Доска для хлеба
    4. Микроконтроллер Atmega328p
    5. Кварцевый генератор 16 МГц
    6. Конденсаторы 22пФ

    Процедура загрузки загрузчика

    1. Подготовьте Arduino в качестве программиста ISP

    Под примерами, поставляемыми с Arduino IDE, находится пример «Arduino как ISP», который при загрузке на плату Arduino превращает плату в программатора ISP.Откройте пример и загрузите его в Arduino Uno или Duemilanove.

    Arduino как ISP Пример

    2. Подключение

    Затем подключите Atmega328p, подлежащий прошивке, к Arduino через макетную плату, как показано на схемах ниже.

    Схема

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

      Ардуино - Atmega328P
      D13 - штифт 19
    D12 - вывод 18
    D11 - вывод 17
    D10 - сброс контакта 1 (конденсатор не требуется).VCC - 5 В
    ЗЕМЛЯ - ЗЕМЛЯ 

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

    3. Записать загрузчик

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

    Подготовьте IDE Arduino, выбрав Инструменты, Платы, затем выберите Arduino Uno в качестве типа платы.После этого перейдите в Инструменты> Программист и выберите « Arduino как ISP » в качестве программиста. Последнее действие для записи загрузчика - это перейти к инструментам и выбрать «Записать загрузчик». Он возьмет выбранную вами плату и выполнит поиск в файле board.txt связанного с ней загрузчика в папке загрузчика. Важно, чтобы ваша Arduino IDE была правильно установлена ​​со всеми файлами платы, так как это не будет работать, если выбранный тип платы недоступен, но это очень редкий сценарий.

    Выберите Burn Bootloader

    После этого вы сможете загружать любой код непосредственно из Arduino IDE в микроконтроллер Atmega328P и использовать его в автономных целях.

    Теперь, когда на чипе установлен загрузчик, вы можете начать загружать в него пользовательские скетчи Arduino, следуя инструкциям, приведенным здесь.

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

    До следующего раза

    Установка загрузчика Arduino - learn.sparkfun.com

    Добавлено в избранное Любимый 25

    Введение

    Внимание! Это руководство было написано для микроконтроллеров AVR с загрузчиком Arduino с использованием контактов ICSP.Если вы используете микроконтроллер ARM с выводами SWD, вам понадобится специальный программатор (например, Atmel JTAG ICE 3 или Atmel-ICE) для подключения к порту SWD. Для получения дополнительной информации ознакомьтесь с нашим руководством по программированию на ARM.

    У вас есть заблокированная Arduino, которая больше не принимает код? Или, может быть, вы написали собственную прошивку и хотите загрузить ее на свой Arduino? Или, может быть, вы просто хотите узнать больше о внутренней работе Arduino, AVR и микроконтроллеров в целом. Что ж, тебе повезло! Из этого туториала Вы узнаете, что такое загрузчик, зачем его нужно устанавливать / переустанавливать, а также рассмотрите этот процесс.

    Рекомендуемая литература

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

    Основы печатной платы

    Что такое печатная плата? В этом руководстве мы разберем, из чего состоит печатная плата, и разберем некоторые общие термины, используемые в мире печатных плат.

    Что такое Ардуино?

    Что вообще такое «Ардуино»? В этом руководстве подробно рассказывается о том, что такое Arduino, а также о проектах и ​​виджетах Arduino.

    Установка Arduino IDE

    Пошаговое руководство по установке и тестированию программного обеспечения Arduino в Windows, Mac и Linux.

    Интегральные схемы

    Введение в интегральные схемы (ИС). Вездесущие черные фишки электроники. Включает внимание к разнообразию корпусов ИС.

    Что такое загрузчик?

    AVR

    Atmel - отличные маленькие ИС, но их немного сложно запрограммировать.Вам понадобится специальный программист и несколько необычных файлов .hex , и это не очень удобно для новичков. Arduino в значительной степени покончил с этими проблемами. Они поместили файл .hex на свои микросхемы AVR, который позволяет вам программировать плату через последовательный порт, то есть все, что вам нужно для программирования Arduino, - это USB-кабель.

    Загрузчик - это, по сути, файл .hex , который запускается при включении платы. Он очень похож на BIOS, который работает на вашем ПК. Он делает две вещи.Сначала он осматривается, пытается ли компьютер его запрограммировать. Если это так, он берет программу с компьютера и загружает ее в память микросхемы (в определенное место, чтобы не перезаписать загрузчик). Вот почему, когда вы пытаетесь загрузить код, IDE Arduino сбрасывает чип. Это в основном выключает и снова включает IC, чтобы загрузчик мог снова начать работать. Если компьютер не пытается загрузить код, он сообщает чипу, что нужно запустить код, который уже хранится в памяти. Как только он обнаруживает и запускает вашу программу, Arduino непрерывно выполняет цикл, пока на плату подается питание.

    Зачем устанавливать загрузчик?

    Если вы собираете свой собственный Arduino или вам нужно заменить IC, вам необходимо установить загрузчик. У вас также может быть плохой загрузчик (хотя это бывает очень редко), и вам необходимо переустановить загрузчик. Также бывают случаи, когда вы помещаете свою плату в странные настройки и переустанавливаете загрузчик и возвращаете его к заводским настройкам - это самый простой способ исправить это. Мы видели платы, на которых люди отключили последовательный порт, что означает, что нет возможности загрузить код на плату, хотя могут быть другие способы исправить это, переустановка загрузчика, вероятно, является самым быстрым и простым.Как я уже сказал, плохой загрузчик на самом деле встречается очень редко. Если у вас новая плата, которая не принимает код, в 99,9% случаев это не загрузчик. В остальном 1% случаев это руководство поможет вам решить эту проблему.

    Выбор программиста

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

    Вариант 1. Специальные программисты

    Для быстрого и легкого программирования мы рекомендуем изучить AVR Pocket Programmer (только для Windows).

    Карманный программатор AVR

    В наличии PGM-09825

    В этой новой версии используется заголовок SMD 5x2. Это простой в использовании программатор USB AVR. Он невысокий, прост в использовании, отлично работает…

    53

    Или вы можете использовать официальный программатор Atmel-ICE для ARM, SAM и AVR.

    Примечание: Также можно использовать следующих программистов, вышедших на пенсию.

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

    Вариант 2: Использование Arduino в качестве программиста

    Другой вариант - взять Arduino Uno (или Duemilanove). Если вы войдете в IDE Arduino, вы увидите пример скетча под названием 'Arduino as ISP.' Если вы загрузите этот код в свой Arduino, он будет действовать как программатор AVR. На самом деле это не рекомендуется для производства плат или плат с большим количеством памяти, но, в крайнем случае, это работает довольно хорошо. Также на момент написания этой статьи код работает только на платах ATmega328. Возможно, однажды это сработает на Леонардо или Дуэ, но пока нет.

    Подключение оборудования

    Внутрисхемное последовательное программирование (ICSP)

    Очень редко программируют микросхемы до того, как они будут припаяны к печатной плате.Вместо этого у большинства микроконтроллеров есть так называемый заголовок внутрисистемного программирования (ISP). В частности, некоторые производители микросхем, такие как Atmel и Microchip, имеют специализированный метод ISP для программирования своих микросхем. Это называется внутрисхемным последовательным программированием (ICSP). Большинство плат, совместимых с Arduino и Arduino, будут иметь 2x3-контактный разъем ICSP. У некоторых может быть даже больше одной, в зависимости от того, сколько микросхем находится на печатной плате. Он выламывает три контакта SPI (MISO, MOSI, SCK), питание, землю и сброс.Это контакты, к которым вам нужно подключить программатор, чтобы перепрограммировать прошивку на вашей плате.

    Здесь у нас есть Arduino Uno R3. Он имеет два заголовка ICSP: один для ATmega16U2 и один для ATmega328. Чтобы перепрограммировать загрузчик на этой плате, вы должны использовать только заголовок ICSP для ATmega328.

    На некоторых платах меньшего размера вы можете не видеть этот разъем, но контакты должны быть выломаны в другом месте. Независимо от того, используете ли вы SMD IC или DIP IC, контакты ISP должны быть доступны в той или иной форме.На некоторых платах могут быть контрольные точки только для заголовка ISP. В этом случае вы можете подумать о приобретении адаптера ISP Pogo. Этот комплект позволяет вам временно установить хорошее соединение с контрольными точками, чтобы перепрограммировать вашу ИС.

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

    Кабель для программирования AVR

    В наличии CAB-09215

    Это удобный кабель для программирования AVR, который включает в себя 10-контактный и 6-контактный программные интерфейсы ISP. Кабель…

    3

    Подключение карманного программатора AVR к Target

    Если вы используете программатор, такой как карманный программатор AVR, ваша установка должна выглядеть примерно так, как показано ниже, когда кабель для программирования AVR стрелка (◄) подключен к MISO .Если вы внимательно посмотрите на отливку разъема 2x3, вы должны заметить стрелку (◄) , указывающую на контакт 1 относительно положения стандартного заголовка ICSP.

    Щелкните, чтобы увеличить изображение.

    Внимание! Имеется небольшое различие в ориентации кабеля программирования AVR 2x5 - 2x3 по сравнению с другими кабелями 2x3, прикрепленными к официальным программаторам Atmel. Как показано на изображении ниже, где MISO выделен белой точкой, кабель карманного программатора AVR имеет MISO, подключенный ближе к внутренней части кабеля.Кабель AVR MKII имеет MISO, подключенный ближе к внешней стороне кабеля.
    Щелкните, чтобы увеличить изображение.
    Вы также можете заметить, что к одному из RedBoards не подключен кабель USB . Поскольку карманный программатор AVR может подавать питание 5 В на целевой AVR с переключателем, установленным в положение Power Target , для RedBoard кабель USB не требуется. Однако официальный Atmel AVR MKII не может обеспечить питание целевой платы.Таким образом, для подключения к целевому AVR требуется кабель.

    То же самое и с более новыми программистами Atmel. На изображении ниже показан Atmel JTAG ICE3, подключенный к RedBoard. Как видите, положение кабеля AVR подключается к RedBoard аналогично изображению с AVR MKII. Поскольку программист не может обеспечить питание цели, вам понадобится дополнительный кабель, подключенный к целевому AVR.


    Щелкните, чтобы увеличить изображение.

    Подключение Arduino в качестве ISP к Target

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

    Щелкните, чтобы увеличить изображение.

    Tip Ищете еще примеры, помимо соединения двух Arduino Unos вместе? Для получения дополнительной информации посетите страницу ArduinoISP на Arduino.cc. Arduino.cc - ArduinoISP

    Монтажный стол

    Power Your Target Arduino! Убедитесь, что ваша цель Arduino запитана. В противном случае вы не сможете прошить файл .hex на свою цель.

    Вот таблица, которая поможет прояснить, какие соединения и куда идут. В зависимости от Arduino у вас может быть доступ к контактам ICSP только на заголовке 2x3 ICSP. Обязательно обратитесь к разводке платы для получения дополнительной информации о SPI-соединениях Arduino.

    Программатор AVR Arduino в качестве ISP Заголовок 2x3 ICSP ATmega328 ATmega2560 ATmega32U4
    Vcc / 5 В Штифт 2 Vcc Vcc Vcc
    ЗЕМЛЯ ЗЕМЛЯ Штифт 6 ЗЕМЛЯ ЗЕМЛЯ ЗЕМЛЯ
    MOSI MOSI / D11 Штифт 4 Д11 Д51 Д16
    MISO MISO / D12 Штифт 1 Д12 Д50 Д14
    SCK SCK / D13 Штифт 3 Д13 D52 D15
    Сброс D10 Штифт 5 Сброс Сброс Сброс
    Предупреждение! Подключение для Arduino 5 В.Если вы подключаетесь к Arduino, который использует более низкое напряжение, убедитесь, что вы безопасно преобразовали логические уровни с помощью преобразователя между программатором и целевой Arduino. Для получения дополнительной информации ознакомьтесь с нашим руководством по логическим уровням.

    Логические уровни

    Узнайте разницу между устройствами 3,3 В и 5 В и логическими уровнями.

    Код загрузки - Easy Way

    Примечание: В этом примере предполагается, что вы используете последнюю версию Arduino IDE на своем рабочем столе.Если вы впервые используете Arduino, ознакомьтесь с нашим руководством по установке Arduino IDE.

    Самый простой способ загрузить загрузчик - использовать IDE Arduino.

    Загрузить Arduino как ISP

    Предупреждение! Вам нужно будет загрузить ArduinoISP.ino на ваш заведомо исправный Arduino (то есть на вашу плату программирования), прежде чем вы сможете использовать его в качестве программиста.

    Возьмите заведомо исправную RedBoard или Arduino Uno. Откройте вашу Arduino IDE.В меню выберите Файл> Примеры> 11. ArduinoISP> ArduinoISP , чтобы открыть Arduino как эскиз ISP

    .

    Выберите COM-порт для вашего Arduino в качестве ISP. COM-порт может отличаться в зависимости от того, как он пронумерован на вашем компьютере.

    Загрузите код в свой Arduino, чтобы превратить его в AVRISP.

    Запись загрузчика до целевой

    Оставьте Arduino в качестве ISP (то есть вашего программиста), подключенного к вашему компьютеру. Если вы еще этого не сделали, подключите целевой Arduino.Затем выберите определение платы для вашей целевой Arduino в меню Tools> Board .

    Выберите программатор, который вы используете, в Tools> Programmer . В этом случае наш программист является Arduino в качестве ISP, поэтому выберите Arduino в качестве ISP . Вам также нужно будет выбрать COM-порт, к которому подключен Arduino как ISP, если вы еще не выбрали COM-порт.

    Внимание! Вы можете встретить несколько вариантов выбора «Arduino как ISP» в списке программистов.Любой из них будет работать. Однако «ArduinoISP» не будет работать, если он выбран.

    Наконец, выберите Записать загрузчик . Это возьмет плату, которую вы выбрали в Arduino IDE, и найдите соответствующий загрузчик в файле board.txt . Затем он найдет загрузчик в программной папке Arduino IDE (в частности, « ... \ Arduino \ hardware \ arduino \ avr \ bootloaders ») и установит его. Это работает только в том случае, если плата правильно установлена ​​в среде IDE и у вас есть правильный загрузчик.

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


    Код загрузки - Hard Way

    Трудный путь для тех, кто хочет использовать командную строку.Этот метод может быть более предпочтительным, если вы модифицируете и перекомпилируете и не хотите постоянно обновлять IDE, но в остальном это совершенно не нужно. Опять же, вам нужно будет найти программиста и все подключить. В этом примере мы используем avrdude в Windows.

    Этот процесс состоит из трех этапов:

    • Установка битов предохранителей (т. Е. Низкого, высокого и удлиненного)
    • Flash .hex Файл
    • Набор фиксаторов

    Первый шаг включает установку предохранителей.Предохранители - это часть микросхемы AVR, которая определяет такие вещи, как использование внешнего кристалла или необходимость обнаружения потемнения. Перечисленные ниже команды предназначены специально для Arduino Uno, использующего ATMega328, они, вероятно, будут работать на некоторых других подобных платах, таких как Duemilanove, но убедитесь, что вы знаете, что делаете, прежде чем играть с плавкими битами. Все необходимые предохранители перечислены в файле boards.txt для различных плат. Опять же, если у вас есть платы .txt , тогда просто используйте Easy Way. Второй шаг - это загрузка программы. Последний шаг - установка битов блокировки.

    Примечание: Эти плавкие вставки , а не , будут работать на плате 3,3 В / 8 МГц. Если вы используете другой микроконтроллер, вам также потребуется настроить параметр partno.

    Карманный программатор AVR

    Биты предохранителя

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

      язык: bash
    avrdude -b 19200 -c usbtiny -p m328p -v -e -U efuse: w: 0x05: m -U hfuse: w: 0xD6: m -U lfuse: w: 0xFF: m
      
    Шестнадцатеричный файл и фиксирующие биты

    После того, как биты предохранителя установлены, мы можем прошить скомпилированный файл .hex на целевую плату и установить биты блокировки. Введите в командной строке следующее. Убедитесь, что вы находитесь в том же каталоге, что и ваш файл .hex , и настройте ... hexfilename.hex , который вы используете для прошивки для своей цели.Чтобы запустить загрузчик Arduino Uno, перейдите в папку программы Arduino. В ОС Windows он будет выглядеть примерно так: ... \ arduino-1.8.5 \ hardware \ arduino \ avr \ bootloaders \ optiboot . В папке есть несколько файлов, но нас интересует файл optiboot_atmega328.hex .

      язык: bash
    avrdude -b 19200 -c usbtiny -p m328p -v -e -U flash: w: hexfilename.hex -U lock: w: 0x0F: m
      

    Arduino как ISP

    Биты предохранителя

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

      язык: bash
    avrdude -P comport -b 19200 -c avrisp -p m328p -v -e -U efuse: w: 0x05: m -U hfuse: w: 0xD6: m -U lfuse: w: 0xFF: m
      
    Шестнадцатеричный файл и фиксирующие биты

    После того, как биты предохранителя установлены, мы можем прошить скомпилированный файл .hex на целевую плату и установить биты блокировки. Введите в командной строке следующее. Убедитесь, что вы находитесь в том же каталоге, что и ваш файл .hex , и настройте ... hexfilename.hex , который вы используете для прошивки для своей цели.Чтобы запустить загрузчик Arduino Uno, перейдите в папку программы Arduino. В ОС Windows он будет выглядеть примерно так: ... \ arduino-1.8.5 \ hardware \ arduino \ avr \ bootloaders \ optiboot . В папке есть несколько файлов, но нас интересует файл optiboot_atmega328.hex .

      язык: bash
    avrdude -P comport -b 19200 -c avrisp -p m328p -v -e -U flash: w: hexfilename.hex -U lock: w: 0x0F: m
      

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

    Ресурсы и движение вперед

    Ищете подходящую Arduino?

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

    Отведи меня туда!

    Для получения дополнительной информации о AVR, загрузчиках и прошивке прошивок на другие платы ознакомьтесь с этими другими замечательными руководствами.

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

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

    Исправьте MicroView без загрузчика! В этом руководстве рассказывается, как: разобрать MicroView, подключить его к разным программистам, запрограммировать загрузчик и протестировать его.

    Pi AVR Programmer HAT Hookup Guide

    В этом руководстве мы будем использовать Raspberry Pi 3 и Pi AVR Programmer HAT для программирования цели ATMega328P.Мы собираемся сначала запрограммировать загрузчик Arduino через SPI, а затем загрузить скетч Arduino через последовательный COM-порт USB.

    Или ознакомьтесь с нашим руководством по программированию ARM для чипов ARM.

    ARM Программирование

    Как программировать платы SAMD21 или SAMD51 (или другие процессоры ARM).

    Как записать загрузчик на ATmega328 с помощью Arduino UNO?

    В этом проекте я покажу вам, как записать загрузчик на микроконтроллер ATmega328.Используя этот метод, вы можете использовать свой микроконтроллер ATmega328 как автономный на специальной конструкции или печатной плате или просто записать загрузчик на ATmega328 (а также вы можете загрузить код).

    Введение

    Если вы просматриваете этот проект, возможно, вы использовали плату Arduino. Существует высокая вероятность того, что микроконтроллер ATmega328 на Arduino UNO может выйти из строя через определенное время (или неправильное соединение). Чтобы повторно использовать эту плату Arduino, вам понадобится новая микросхема ATmega328 с загруженным загрузчиком (я расскажу о загрузчике через минуту).

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

    ПРЕДУПРЕЖДЕНИЕ: Не рекомендуется настраивать загрузчик в Arduino, если вы новичок в подобных вещах.

    Что такое загрузчик?

    Проще говоря, загрузчик - это небольшой фрагмент кода (исполняемый код в формате .hex), который находится в памяти микроконтроллера.Загрузчик в Arduino позволяет нам программировать Arduino через последовательный порт, то есть с помощью кабеля USB.

    Задача загрузчика в Arduino - принять код с компьютера и поместить его в память микроконтроллера.

    Зачем нужен загрузчик?

    Традиционно микроконтроллеры, такие как ATmega328 от Atmel, программируются с помощью специальных программистов, что подразумевает некоторые причудливые соединения. Загрузчики устраняют эту сложность и предоставляют нам простой способ программирования микроконтроллера i.е. просто с помощью кабеля USB.

    Загрузчики находятся в специальном защищенном месте программируемой флэш-памяти микроконтроллера и обычно занимают менее 1 КБ памяти.

    Зачем нужен записывающий загрузчик на ATmega328?

    Как я упоминал ранее, если вы хотите загружать программы на новую микросхему микроконтроллера ATmega328, вы должны использовать специальный программатор (а также установить биты предохранителя). Но если вы записываете загрузчик на ATmega328, вы можете просто запрограммировать микроконтроллер через последовательный порт (USB-кабель).

    Когда микроконтроллер ATmega328 будет готов с загрузчиком, вы можете просто использовать его на своей плате Arduino (в качестве замены) или использовать в качестве микроконтроллера, если вы планируете создать свою собственную плату Arduino.

    Как записать загрузчик на ATmega328?

    Есть несколько способов записать загрузчик на микросхему ATmega328. Первый способ - использовать специализированное оборудование для программирования AVR. Второй способ - использовать рабочую плату Arduino в качестве программатора и записать загрузчик на целевой микроконтроллер ATmega328.

    В этом проекте я буду использовать второй метод, то есть использовать Arduino в качестве программиста.

    Принципиальная схема

    Принципиальная схема для записи загрузчика на микроконтроллере ATmega328 с использованием Arduino показана ниже.

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

    Необходимые компоненты
    • Arduino UNO
    • Микроконтроллер ATmega328 IC
    • Кристалл 16 МГц
    • 22pF x 2 Керамические конденсаторы
    • Резистор 10 кОм
    • Кнопка
    • Резистор
    • Резистор
    • Резистор
    • Резистор
    • Резистор
    • Источник питания 5 В

    Процедура программирования загрузчика на Atmega328

    Как упоминалось ранее, Arduino UNO используется здесь как программатор AVR.Для этого вам необходимо загрузить на рабочую плату Arduino UNO специальную программу под названием «Arduino ISP».

    Итак, перед подключением подключите работающую Arduino UNO к компьютеру с помощью USB-кабеля и выберите соответствующую плату и ПОРТ в Arduino IDE.

    Теперь перейдите в Файл> Примеры> ArduinoISP> ArduinoISP. Загрузите этот код в Arduino UNO, чтобы превратить вашу плату Arduino UNO в программатор AVRISP.

    После завершения этого шага выполните необходимые подключения (если они еще не выполнены).Теперь перейдите в Инструменты> Программист и выберите опцию «Arduino as ISP». После этого вы готовы записать загрузчик.

    Просто перейдите в Инструменты и нажмите «Записать загрузчик». Ваш целевой микроконтроллер ATmega328 будет запрограммирован с загрузчиком.

    Загрузить эскизы в ATmega328

    После того, как вы закончите загрузку загрузчика на микроконтроллер ATmega328, вы можете продолжить, загрузив на него тестовый эскиз. Для этого сохраните те же соединения, что и раньше, и откройте любой эскиз, например, Blink Sketch.

    Не меняйте никаких параметров, т.е. программатор по-прежнему настроен на «Arduino как ISP». Теперь, удерживая кнопку «Shift» на клавиатуре, щелкните значок «Загрузить». Это загрузит скетч в микросхему микроконтроллера ATmega328, используя Arduino UNO в качестве программиста.

    После завершения вы можете отключить Arduino UNO от микроконтроллера ATmega328 и использовать микросхему ATmega328 в качестве автономного устройства с запущенным на нем скетчем Blink.

    На следующем изображении показан микроконтроллер ATmega328, на котором запущен скетч Blink после загрузки с помощью Arduino UNO.

    ПРИМЕЧАНИЕ: Чтобы загрузить код в Arduino UNO, обязательно переключите программатор обратно на «AVRISP mkII».

    Заключение

    В этом проекте я показал вам, как записать загрузчик на микросхему микроконтроллера ATmega328, а также в качестве дополнительной опции я также показал вам, как загружать эскизы Arduino на ATmega328 с помощью загрузчика с использованием Arduino UNO.

    Как записать загрузчик Arduino в IC Atemga328 и запрограммировать его с помощью Arduino IDE

    Мы все знаем, что IC Atmega328 используется в плате Arduino UNO.Эта микросхема - мозг платы Arduino. На самом деле, дизайнеры Arduino хотели сделать удобную макетную плату для начинающих, поэтому они организовали все компоненты таким образом, чтобы любой мог получить доступ ко всем контактам Atmega328 IC и запрограммировать ее, просто подключив ее к компьютеру. Плата Arduino очень популярна для создания хобби-проектов. Но в промышленных или потребительских товарах не рекомендуется использовать полную плату Arduino, поэтому мы можем использовать автономную микросхему Atmega328, которую можно запрограммировать с помощью Arduino IDE, но без использования платы Arduino.

    В этом руководстве мы увидим , как заменить плату Arduino на Atmega328 IC и несколько других компонентов. Для использования микросхемы Atmega328 вместо arduino, сначала мы должны записать в нее загрузчик Arduino, а затем запрограммировать его с помощью FTDI или платы Arduino. Это руководство также поможет заменить поврежденную микросхему Atmega328 на плате Arduino. Также, используя схему, описанную ниже, вы можете создать свою собственную плату Arduino , скопировав ее на печатную плату.

    Необходимые компоненты
    1. Atmega 328 IC
    2. Макет
    3. LM7805
    4. Кристалл, 16 МГц
    5. Керамические конденсаторы 22 пФ (2)
    6. Конденсатор 10 мкФ (2)
    7. Резистор 10 кОм
    8. 1к резистор
    9. Перемычки

    Дополнительно можно использовать 3.Регулятор напряжения 3 В LM1117-3,3 В для включения шины 3,3 В в вашу схему.

    Схема контактов Atmega328

    Принципиальная схема Схема

    для репликации Arduino на макетной плате приведена ниже:

    Описание компонентов

    Блок питания -

    1. Регулятор напряжения 5 В: Atmega 328 IC работает от источника питания 5 В.Итак, здесь мы используем LM7805 для получения выхода 5 В, он может обрабатывать до 30 В. в качестве входа. Если у вас есть отдельный источник питания 5 В, тогда . Этот шаг можно оставить.
    2. Конденсаторы: Конденсатор 10 мкФ используется на входе и выходе 7805 для обхода любых компонентов переменного тока на землю.
    3. LED: Это покажет вам, что ваш выход 5V поступает.

    Часть микроконтроллера -

    1. Atmega 328: Это наш основной компонент на макетной плате.Его выводная схема приведена выше.
    2. Кварцевый генератор: Внешний кварцевый генератор с частотой 16 МГц подключен между контактами 9 и 10 микроконтроллера ATmega328. Этот кристалл используется для передачи микроконтроллеру тактовой частоты для более быстрого выполнения задач.
    3. Кнопка: Для сброса микроконтроллера кнопка подключается между контактом 1 и GND. Обычно он подключается к 5 В с помощью резистора 10 кОм.
    4. Светодиод: Светодиод подключен к цифровому выводу 13.

    Это полное руководство разделено на три части, чтобы создать свой собственный Arduino, работающий на макетной плате:

    1. Создание схемы Arduino на макетной плате
    2. Запись загрузчика в микросхему Atmega328
    3. Как программировать загрузчик Arduino загрузил микросхему Atmega 328 на макетную плату.

    Теперь мы объясним каждую часть по очереди.

    Часть-1: Построение схемы Arduino на макетной плате

    Шаг 1: - Подключите блок питания , часть , как показано на принципиальной схеме, и проверьте его, используя внешний источник питания, к LM7805.Это будет выглядеть так.

    Шаг 2: - Теперь подключите микроконтроллер , часть , как показано на принципиальной схеме. Тщательно выполняйте соединения.

    Шаг 3: - Теперь соедините блок питания и часть микроконтроллера с помощью перемычек. Ваша последняя схема будет выглядеть примерно так.

    Итак, это наш Arduino на макете . Вы можете реализовать ту же схему на печатной плате, используя простые инструменты, такие как EasyEDA и т. Д.Теперь нам нужно загрузить загрузчик в новую микросхему Atmega 328, чтобы мы могли начать ее программирование.

    Часть-2: Запись загрузчика в Atmega328 IC

    Что такое загрузчик и зачем он нам ???

    Загрузчик - это небольшой фрагмент исполняемого кода, который постоянно хранится в памяти микроконтроллера. Это занимает менее 1 КБ памяти. Загрузчик позволяет ИС принимать код от компьютера и помещать его в память микроконтроллера.

    Традиционно все микроконтроллеры от Atmel программируются с помощью программистов, у которых есть какие-то причудливые соединения. Загрузчики упрощают и позволяют нам легко и эффективно программировать микроконтроллер. Это означает, что вы можете запрограммировать, просто используя USB-кабель .

    Когда вы покупаете новую Atmega 328 с рынка, в ней нет загрузчика . Итак, чтобы запрограммировать Atmega328 с помощью Arduino IDE, вам необходимо сначала загрузить загрузчик.

    Для загрузки загрузчика у нас есть два метода:

    1. Использование программатора USBasp
    2. Использование платы Arduino UNO

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

    Итак, в этом руководстве мы загрузим загрузчик с помощью платы Arduino Uno .

    Загрузите загрузчик Arduino в чип Atmega328

    Шаг 1: - Откройте Arduino IDE.Перейдите в файл -> Примеры -> ArduinoISP . Затем выберите ArduinoISP. Как показано ниже.

    Шаг 2: - Теперь вам нужно загрузить этот код на плату Arduino. Выберите com-порт и плату в меню инструментов и нажмите кнопку загрузки.

    Шаг 3: - После « Готово выгрузить» отсоедините плату Arduino от компьютера и подключите плату Arduino к Atmega 328, как показано на диаграмме ниже.

    Шаг 4: - Теперь подключите плату Arduino к компьютеру. Откройте Arduino IDE.

    Перейдите к Tools , выберите плату как Arduino / Genuine Uno , выберите правильный порт Port для своей платы. Выберите программатор как «Arduino as ISP» . Не путайте его с ArduinoISP. Оба разные.

    Шаг 5: - Теперь снова перейдите к Tools и нажмите Burn Bootloader сразу под опцией Programmer.Через несколько секунд загрузчик успешно загружен. Если при загрузке произошла ошибка, проверьте соединения.

    Посмотрите видео ниже, чтобы понять шаги, описанные выше для загрузки загрузчика в Atmega 328 IC .

    Ваш макет Arduino готов к работе как настоящая плата Arduino. Теперь возникает вопрос, что , как программировать Atmega 328 IC ? Об этом мы поговорим в следующем разделе.

    Часть-3: Как программировать загрузчик Arduino, загруженный Atmega 328 IC

    Автономный чип Arduino Atmega328 можно программировать разными способами.

    1. Используется пустая плата Arduino, то есть плата Arduino без микросхемы Atmega 328 в ней.
    2. Использование модуля преобразователя USB в последовательный TTL (модуль FTDI).
    3. Использование программатора USBasp (требуется много подключений).

    Здесь мы запрограммируем его двумя способами: преобразователь USB в последовательный порт и плата Arduino.

    Программирование чипа Atmega328 с использованием платы Arduino

    Шаг 1: - Возьмите плату Arduino без чипа Atmega328. Подключите плату Arduino к нашей макетной плате Arduino , как показано на этой схеме.

    Шаг 2: - Подключите плату Arduino к компьютеру и откройте Arduino IDE. Выберите Arduino Uno из меню Board в Tools , Programmer как USBasp и исправьте com-порт платы.

    Шаг 3: - Начнем с загрузки программы Blink. Поэтому выберите программу мигания из примеров и нажмите кнопку «Загрузить».

    Теперь вы можете видеть, что светодиод на макете начинает мигать.

    Программирование микросхемы Arduino Atmega328 с использованием преобразователя USB в последовательный

    Шаг 1: - Если у вас нет платы Arduino. Это лучший способ запрограммировать вашу макетную плату Arduino .

    Подключите как:

    Вывод RXD FTDI -> Вывод Tx Atmega328 (вывод 3)

    Вывод TXD FTDI -> Вывод Rx Atmega328 (вывод 2)

    GND -> GND (контакт 8)

    5 В -> Vcc (вывод 7)

    Некоторые модули FTDI имеют вывод сброса, также известный как вывод DTR, который необходимо соединить с выводом сброса Atmega328 (вывод 1). Если в модуле нет вывода сброса, не волнуйтесь, я дам решение, когда мы запрограммируем чип.

    Шаг 2: - Теперь подключите FTDI к компьютеру и откройте Диспетчер устройств на панели управления. Вы увидите раздел «Порт», разверните его. Если перед драйвером стоит желтая отметка, вам необходимо обновить драйвер модуля.

    Если отметки нет, то запишите номер com-порта и откройте Arduino IDE. Перейдите в Инструменты -> Порты -> Выберите com, который вы отметили.

    Шаг 3: - Теперь мы загрузим программу мигания на нашу макетную плату Arduino .Перейдите в Файл -> Примеры -> Основы -> Blink . Выберите Arduino Uno из меню Board в инструментах, Programmer как USBasp и исправьте com-порт платы.

    Затем нажмите кнопку загрузки.

    Примечание. Если ваш модуль FTDI не имеет вывода DTR, нажмите кнопку сброса на макете и нажмите кнопку загрузки. Удерживайте ее нажатой, если отображается Компиляция эскиза… Отпустите кнопку, как только появится сообщение Загрузка…

    Теперь программа будет успешно загружена в чип Arduino Bootloader Atmega328.

    Ниже видео для программирования Atmega 328 IC без использования платы Arduino :

    Мы закончили с нашей схемой DIY Breadboard Arduino Circuit . Вы можете спроектировать эту схему на печатной плате, чтобы сделать ее более компактной.

    Использование ISP для записи загрузчика в Arduino

    Если вы собираете свой собственный Arduino или вам нужно заменить IC, вам нужно будет загрузить программу загрузчика в Atmega328 (на UNO и BBFuino).Также есть случаи, когда вы поместили свою плату в странную настройку и не можете загрузить в нее код, переустановка загрузчика будет самым простым и быстрым способом исправить это.

    Что такое загрузчик?

    Загрузчик - это, по сути, файл .hex, который запускается, когда мы включаем плату Arduino, и позволяет нам программировать плату Arduino через последовательный порт. Он очень похож на BIOS, который работает на нашем ПК. Без загрузчика нам понадобится специальный программатор, т.е.е. AVR USBASP Programmer, для программирования Atmel AVR. Благодаря усилиям Arduino, теперь нам просто нужен USB-кабель (на Arduino UNO) или преобразователь USB в последовательный (на BBFuino) для программирования нашей платы Arduino.

    Это руководство, надеюсь, покажет вам, как записать загрузчик на плату Arduino, и в этом руководстве есть 3 сеанса:

    • Сессия 1: Запись загрузчика в CT-UNO
    • Сессия 2: Запись загрузчика в BBFuino
    • Сессия 3: Записать загрузчик в автономный Arduino

    Сессия 1: Записать загрузчик в CT-UNO

    В основном есть два шага, участвующих в записи загрузчика:

    • Шаг 1: Подготовьте ISP Programmer
    • Шаг 2: Записать загрузчик

    Программист ISP (внутрисистемное программирование) необходим для записи загрузчика.В этом руководстве мы будем использовать CT-UNO в качестве программиста ISP. Чтобы подготовить CT-UNO как ISP-программиста, сначала мы выбираем «ArduinoISP» в меню «Файл»> «Примеры».

    И загрузите в CT-UNO.

    После завершения загрузки мы выбираем «Arduino as ISP» в меню «Инструменты»> «Программист».

    Сейчас CT-UNO работает программистом ISP.

    Следующим шагом является выполнение некоторых соединений между программатором ISP и целевой Arduino, соединение показано в таблице ниже:

    Программатор ISP (CT-UNO) Target Arduino Board
    Pin 13 Штифт 13
    Штифт 12 Штифт 12
    Штифт 11 Штифт 11
    Штифт 10 Сброс
    5V 5V12ND

    Или вы можете обратиться к рисунку ниже:

    После подключения перейдите в Инструменты> Плата и выберите «Arduino Uno» в качестве платы целевой Arduino.

    После этого нажмите «Записать загрузчик» в меню «Инструменты», и программист ISP начнет записывать загрузчик в целевой Arduino. Обычно полная запись загрузчика занимает несколько минут.

    Записать загрузчик.

    Arduino IDE отобразит «Готово записать загрузчик», когда это будет сделано.

    После завершения записи загрузчика ваша целевая Arduino сможет принимать код из вашей Arduino IDE.Просто отключите программатор ISP и подключите целевой Arduino к ПК через USB-кабель, и вы можете загрузить свой скетч на целевой Arduino, как обычно. Не забудьте изменить «Инструменты»> «Программист» с «Arduino as ISP» на «AVR mkII» перед загрузкой скетча в целевой Arduino.

    Сессия 2: Запись загрузчика в BBFuino

    BBFuino, или совместимая с макетной платой Arduino, является первой версией Cytron совместимой платы Arduino. Он разработан, чтобы соответствовать макетной плате для создания прототипов и обучения.Конвертер USB в UART, то есть UC00A или UC00B, необходим для загрузки скетча Arduino в BBFuino. Если вы получаете BBFuino от Cytron, он предварительно загружен с загрузчиком :). Таким образом, следующие шаги применимы только в том случае, если вы заменяете новую IC на BBFuino или, в некоторых случаях, вы повреждаете загрузчик.

    BBFuino использует микросхему ATmega328 вместо ATmega328P IC (на момент написания этого руководства). ATmega328 и ATmega328P почти одинаковы. Разница между этими микросхемами заключается в том, что ATmega328P имеет технологию Atmel picoPower, а ATmega328 - нет.Благодаря технологии picoPower ATmega328P подходит для использования в приложениях с низким энергопотреблением. Кроме того, только ATmega328P распознается Arduino, а ATmega328 - нет. Следовательно, это может вызвать проблему, заключающуюся в том, что мы не можем записать загрузчик в ATmega328, используя метод, который мы обсуждали в сеансе 1. Когда мы попытаемся записать загрузчик в ATmega328, вы получите ошибку, как показано на рисунке ниже:

    Это связано с тем, что ATmega328-PU и ATmega328P-PU имеют различную идентификационную подпись: ATmega328 имеет подпись 0x1E 0x95 0x14 , а ATmega328P имеет подпись 0x1E 0x95 0x0F .

    Можно еще записать загрузчик в ATmega328? Ответ ДА! Есть два метода, которые можно использовать для записи загрузчика в ATmega328:

    1. Записать Optiloader в ATmega328.
    2. Измените конфигурацию Arduino IDE.

    Первый метод - это записать Optiloader в ATmega328. Optiloader - это эскиз, предназначенный для массового обновления загрузчиков платы Arduino с использованием другого Arduino в качестве программиста ISP. Подходит для микроконтроллеров ATmega8, ATmega168, ATmega328 и ATmega328P.Чтобы записать Optiloader, просто выполните следующую процедуру:

    1. Загрузите Optiloader в Github. Нажмите «Загрузить ZIP», чтобы начать загрузку.
    2. После загрузки распакуйте его с помощью любого программного обеспечения для распаковки.
    3. В главном каталоге OptiLoader есть 3 файла, откройте файл optiLoader.pde с помощью Arduino IDE.
      Через пару секунд появится окно с запросом, хотите ли вы создать папку эскиза с именем «optiLoader» и переместить optiLoader.pde внутри этой папки. Щелкните «ОК».
      optiLoader.pde открыт:
    4. OptiLoader.pde требует, чтобы его файл библиотеки был включен в файл эскиза. В противном случае этот файл эскиза не может быть скомпилирован. Чтобы включить файл библиотеки, сначала нажмите «Добавить файл…» в меню эскиза.

      Выберите файл библиотеки «optiLoader.h» в главном каталоге Optiloader и затем нажмите «Открыть».

      После того, как вы нажмете «Открыть», вы увидите вкладку «optiLoader.h» рядом с «optiLoader» в Arduino IDE:
    5. Подключите CT-UNO и BBFuino, как показано на рисунке ниже:
    6. Загрузите эскиз.Это займет до 2 минут. Потерпи!
    7. Процесс загрузки скетча завершается, когда в Arduino IDE отображается сообщение «Done uploading», в то же время BBFuino также записывается с помощью optiLoader!

    Теперь BBFuino готов с прошивкой загрузчика и может использоваться с UC00A для приема кода из Arduino IDE.

    Второй способ - изменить конфигурацию Arduino IDE. Как мы упоминали ранее, разница между ATmega328 и ATmega328P заключается в технологии picoPower и их идентификационной сигнатуре.В остальном ATmega328 и ATmega328P архитектурно идентичны во всех смыслах. Следовательно, мы можем изменить конфигурацию Arduino IDE, чтобы Arduino IDE могла обрабатывать ATmega328 как ATmega328P.

    Этот метод состоит из 3 шагов.

    Первый шаг - подготовка ISP-программиста. Обратитесь к сеансу 1, чтобы превратить CT-UNO в программиста ISP.

    Второй шаг - изменить конфигурацию Arduino IDE , просто следуйте приведенной ниже процедуре:

    1. Закройте Arduino IDE.
    2. Найдите каталог Arduino. В моем случае мой каталог Arduino - C: \ Users \ user \ Desktop \ arduino-1.0.5
      Затем найдите каталог hardware \ tools \ avr \ etc. Вы заметите, что внутри этого каталога есть файл с именем «avrdude.conf».
    3. Сделайте копию файла «avrdude.conf» для резервного копирования.
    4. Откройте файл «avrdude.conf» с помощью WordPad.
    5. Найдите «m328p».
    6. Ищите «подпись». Под «m328p» должно быть несколько строк.

      Изменить 0x1e 0x95 0x0f на 0x1e 0x95 0x14
    7. Нажмите «Сохранить», чтобы сохранить отредактированный файл конфигурации и закрыть его. Теперь вы изменили конфигурацию Arduino IDE.

    Третий шаг - записать загрузчик. Сначала подключите программатор ISP к BBFuino:

    Затем выберите «Arduino Uno» в меню «Инструменты»> «Плата».

    Щелкните «Записать загрузчик» в меню «Инструменты» и подождите несколько минут для записи процесса загрузчика.

    После завершения процесса записи загрузчика BBFuino готов с прошивкой загрузчика и может использоваться с UC00A для приема кода из Arduino IDE.

    Для этого метода, если вы планируете записать загрузчик или загрузить программу в устройство ATmega328P, то есть CT-UNO, убедитесь, что вы изменили конфигурацию Arduino IDE, прежде чем записывать загрузчик или загружать программу. Это связано с тем, что после изменения конфигурации ATmega328 распознается Arduino IDE, а ATmega328P - нет.Повторите , изменяя конфигурацию процедуры Arduino IDE , и измените подпись с 0x1e 0x95 0x14 на 0x1e 0x95 0x0f .

    Сессия 3: Запись загрузчика в автономный Arduino

    Автономный Arduino - это базовая схема ATmega, это простейшая форма Arduino. Иногда он тоже называется Arduino на макетной плате.

    Требуемое оборудование:

    К вашему сведению, микросхемы ATmega328P, поставляемые Cytron, предварительно загружены загрузчиком Optiboat.Вам не нужно записывать в него загрузчик перед использованием.

    Создайте автономную схему Arduino, как показано на рисунке ниже:

    Если вы обратитесь к таблице данных ATmega328P, вы обнаружите, что на схеме выводов ATmega328P есть порт A, порт B, порт C и порт D. Где цифровые и аналоговые контакты, обозначенные на плате Arduino? Не волнуйтесь, рисунок ниже поможет вам определить расположение цифровых и аналоговых контактов Arduino.На рисунке ниже показана схема отображения контактов ATmega168 / 328-Arduino.

    Источник: Arduino.cc

    Как и в сеансе 1, есть два шага для записи загрузчика в автономную Arduino.

    Первый шаг - подготовка ISP-программиста. Обратимся к сеансу 1, чтобы превратить CT-UNO в программиста ISP.

    Затем подключите программатор ISP к автономному Arduino:

    Выберите «Arduino Uno» в меню «Инструменты»> «Плата»:

    Нажмите «Записать загрузчик» в меню «Инструменты» и подождите несколько минут для записи загрузчика. процесс.

    После завершения процесса записи загрузчика автономная Arduino готова принять код из вашей Arduino IDE. Чтобы запрограммировать его, вы можете использовать CT-UNO в качестве программиста ISP для загрузки кода в автономную Arduino.

    Отлично! Я закончил рассказывать о возможном методе загрузки загрузчика в главный контроллер Arduino, надеюсь, это будет полезно, и если у вас есть какие-либо вопросы, обсудите их на нашем техническом форуме, поскольку мы редко проверяем раздел комментариев на сайте руководства.Помните, что после успешной загрузки загрузчика в Atmega вы можете использовать загрузчик для загрузки новой программы обычным способом из Arduino IDE.

    ATMEGA328P-AU ЗАГРУЗЧИК

    Я сделал эту печатную плату на ATmega328p-AU. Если чип новый и не имеет загрузчика, узнайте здесь, как записать его с помощью Arduino IDE и Arduino NANO с кодом ISP.

    Часть 1.1 - Основные подключения

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

    × Часть 1.2 - Соединения печатной платы

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

    × Часть 2.1 - Arduino как ISP

    Хорошо, мы должны записать загрузчик на чип, а затем загрузить наши коды. Для этих шагов нам понадобятся указанные выше подключения к Arduino. В моем случае я буду использовать Arduino NANO, потому что я использую версию чипа для Австралии. Итак, сделайте соединения, как указано выше, между портом Arduino SPI и печатной платой. Мы будем использовать Arduino в качестве интернет-провайдера для загрузки кодов.

    Чтобы использовать Arduino в качестве программиста ISP, нам нужно загрузить для него код, для этого перейдите в Примеры -> ArduinoISP -> ArduinoISP и откройте этот пример кода. Затем убедитесь, что вы выбрали тип платы для вашего Arduino, в моем случае - Arduino NANO. Выберите com и оставьте программатор по умолчанию как «AVRISP mkII». Подключите USB, выберите COM и загрузите код в Arduino UNO.

    × Часть 2.2 - Запись загрузчика

    Хорошо, теперь у Arduino есть код ISP, поэтому он будет действовать как программист ISP. Теперь давайте сожжем загрузчик. Перейдите в Инструменты -> Плата и выберите тип платы NANO. Перейдите в Инструменты -> Программатор и убедитесь, что вы изменили обычный программатор с «AVRISP mkII» на « Arduino как ISP ». Наконец, убедитесь, что Arduino NANO подключен к печатной плате к порту ISP, и перейдите в Инструменты -> Записать загрузчик .Светодиоды Arduino Rx / Tx будут мигать, и через некоторое время на экране появится сообщение о завершении записи загрузчика.

    × Часть 3.1 - Коды загрузки (базовая конфигурация)

    Убедитесь, что вы изменили программатор с «Arduino как ISP» на «AVRISP mkII». Затем подключите программатор FTDI к порту UART, как показано ниже, к контактам RX, TX и DTR.Установите колпачок 100 нФ между DTR и выводом сброса микросхемы. Убедитесь, что вы выбрали Arduino NANO в качестве платы и COM программатора FTDI. Затем получите свой код, скомпилируйте и загрузите.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *