Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Содержание

Прошивка загрузчика на микроконтроллере 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 с помощью макетной платы, как показано на схеме ниже.

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

ArduinoAtmega328P
D13Pin 19
D11PIN 17
D10Pin 1 Reset (no Capacitor needed)
VCC
5V
GNDGND

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

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

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

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

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

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

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

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

Про 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 через стандартный порт не нужно забывать устанавливать нужный тип контроллера

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

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 вольт. Увидим, что светодиод моргает, программа, залитая в чип, работает!

Optiboot загрузчик для Arduino: elchupanibrei — LiveJournal

Не секрет, что Arduino использует загрузчик для заливки прошивок. До 2012 года они активно пилили bootloader для Atmega, а потом устали. Peter Knight на основе их кода и пары других исходников изобрел свой велосипед – загрузчик Optiboot. Потом он тоже устал и с 2011 года поддержкой стал заниматься Bill Westfield. Он до сих пор медленно развивает проект. Код получился на столько удачным, что официально ставится на все оригинальные Arduino Uno. Что ставят китайцы на свои клоны никто не знает. Поэтому я взял себе за правило менять bootloader после получения плат. Что мы получим установив “лучшийсапог”?


– optiboot занимает 0.5Kb, против 2Kb у Arduino. Это лишних 1.5Kb для вашего кода
– загрузка скетчей происходитв 2 раза быстрее, 115200bps против 57600bps
– почти мгновенное исполнение кода в “камне”, за счет маленьких задержек после старта

Я знаю два способа установки Optiboot – автоматический и ручной. Сам пользуюсь ручным.

Автоматический с помощью Arduino IDE. Идем в File -> Preference и в поле “Additional Boards Manager Urls” вписываем строчку package_optiboot_optiboot-additional_index.json разделяя пакеты запятой. Потом идем в Tools -> Boards -> Boards Manager и устанавливаем Optiboot. Теперь подключаем плату, выбираем нужный bootloader и прошиваем.

Ручной способ сложнее, но более правильный, так как контролирутся весь процесс. Первый этап, с помощью старого доброго USBasp (покупал на eBay) или моста FTDI FT232R прошиваем микроконтроллер. Я пользуюсь avrdude в связке с AVRDudess, исходники которого лежат на Github. Под windows нужно скачать файл avrdude-6.x-mingw32.zip и распакоать в папку с AVRDudess.


пошаговая инструкция работы с AVRDudess

Для Arduino Duemilanove, Nano или Pro Mini (5v, 16 MHz) на ATmega328 выбираем optiboot_atmega328.hex и выставляем фьюзы — l: FF, h: DE, e: FD. Для Arduino Pro Micro (16MHz) на ATmega32 берем optiboot_atmega32.hex и выставляем фьюзы — l: FF, h: DE, e: F3.

Второй этап, обучить оболочку работать с новым загрузчиком. Если этого не сделать не получим дополнительных 1.5Kb и 115200bps. Для активации плюшек ныряем в ..\Arduino\hardware\arduino\avravr\boards.txt и дописываем новые куски в соответствующие секции.


пример новой вставки для платы с Optiboot
Уже подправленный boards.txt для Arduino IDE 1.8.4 лежит тут. Финальный аккорд – копируем свежую версию optiboot_atmega328.hex с Github-а в папку ..\Arduino\hardware\arduino\avr\bootloaders\optiboot

UDP: Отличная статья по фьюзам для ATmega328 тут

UDP2: Если хотите питать ATmega328 от 1.8в до 5.5в нужно менять кварц на 4MHz, скорректировать Brown-out Detection с помощью фьюзов и перепрошить bootloader на хитроделанный. Почему так происходит можно узнать из этой статьи.

UDP3: Если не охота возится с 4MHz кварцем, то берем Blue Pill/STM32F103, работает на частоте 72MHz при напряжении от 2в до 3.6в

Как хранить данные в памяти flash Arduino Uno (ATmega328p)



У меня есть проект с Arduino Uno, где мне нужно хранить char**, который слишком велик для EPROM.

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

До сих пор я изучал avr/boot.h API, но я не совсем уверен, как правильно его использовать и правильно ли это вообще.

arduino avr atmega
Поделиться Источник leumas95     19 апреля 2015 в 15:44

3 ответа


  • Arduino flash лимит памяти

    У меня есть проект на Arduino Uno , и я делаю его из Eclipse . Компилятор AVR дает мне это: avrdude: 24348 байт flash записанных avrdude: проверка flash памяти против SunAngles.hex: avrdude: загрузка данных flash данных из входного файла SunAngles.hex: avrdude: входной файл SunAngles.hex…

  • Atmel AVR Studio 6 использует Arduino Uno (ATmega328p) и FreeRTOS

    Привет всем, Я хочу начать работать с freeRTOS, используя мой Arduino Uno, который использует ATmega328p на Atmel AVR Studio 6. Я работаю над windows 7. Я вошел в этот учебник: http:/ / www.jayconsystems.com / учебник/atmerpt1 / в нем описывается, как установить и подготовить Atmel AVR Studio 6 к…



1

Из таблицы ATmega328P, раздела “Boot Loader Support”, подраздела “Application and Boot Loader Flash Sections”, подсекции “Application Section”:

… инструкция SPM отключается при выполнении из раздела Приложения.

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

Поделиться Ignacio Vazquez-Abrams     19 апреля 2015 в 16:45



1

arduino (в частности, версии atmel 328) позволяют записывать данные в память flash только тогда, когда это позволяет загрузчик.

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

Решение: Установите загрузчик, который действительно позволяет вам запускать функции, позволяющие вам писать в flash.

Вот загрузчик (показанный на hackaday) для arduino, который позволяет вам записывать в память flash во время выполнения http:/ / majek.mamy.to/en / writing-to-internal-flash-on-arduino/

Вот хакадейский пост на эту тему https://hackaday.com/2015/07/03/arduinos-and-other-avrs-write-to-own-flash/

Поделиться Meek_The_Geek     19 сентября 2017 в 17:34



0

Я не верю, что это правильно. 328p действительно имеет возможность контролировать то, что некоторые инструкции о том, где им разрешен доступ. Я нигде не видел, чтобы это было невозможно, и в некоторых конфигурациях он (328p) может писать flash под своим собственным контролем.

Я искал в техническом паспорте “SPM инструкция отключена” и попал только на ATmega 48a/48pa., много раз путаясь с этим справочником, читающим о неправильном контроллере. Это ни о чем не говорило.

Скопировано непосредственно из таблицы данных (660 страниц):

“ATmega 48A/48PA не имеет отдельной секции загрузчика Boot, и инструкция SPM включена для всего Flash, если запрограммирован предохранитель SELFPRGEN (“0”). В противном случае инструкция SPM будет отключена.”

328p имеет “бит блокировки байт” устанавливает все эти элементы управления, вообще говоря. Они также контролируют, какой доступ у них есть.

Я бы подумал, что вы захотите поместить его в eeprom (который IS отличается)…

Джек

Поделиться Jack Wilborn     02 сентября 2016 в 14:37



Похожие вопросы:


Как читать память arduino flash

Представьте, что я потерял свой исходный код. Есть ли способ сбросить память arduino flash ? То, что я хочу сделать, это получить файл hex на моем PC, который представляет байт на байт памяти…


C++ планировщик для Arduino Uno

Я хотел бы создать / использовать легкий самодельный планировщик (в C++) для моей программы, основанной на Arduino Uno (ATMega328P) : я хочу управлять своим другим tasks на основе приоритетной…


Arduino UNO analogRead всегда возвращает 1023

Итак, моя проблема заключается в том, что название говорит: Arduino UNO analogRead всегда возвращает 1023. Но когда я сжигаю тот же эскиз в Arduino Mega 2650, все работает как заклинание. Я пробовал…


Arduino flash лимит памяти

У меня есть проект на Arduino Uno , и я делаю его из Eclipse . Компилятор AVR дает мне это: avrdude: 24348 байт flash записанных avrdude: проверка flash памяти против SunAngles.hex: avrdude:…


Atmel AVR Studio 6 использует Arduino Uno (ATmega328p) и FreeRTOS

Привет всем, Я хочу начать работать с freeRTOS, используя мой Arduino Uno, который использует ATmega328p на Atmel AVR Studio 6. Я работаю над windows 7. Я вошел в этот учебник: http:/ /…


Использование библиотек Arduino для автономного MCU (ATMega328p

Мне интересно, как использовать библиотеки Arudino для проектов, использующих обычные микропроцессоры, в моем случае ATMega328p. У меня просто есть процессор PDIP на макетной плате, и я не использую…


Генерация временной задержки 1 сек с помощью таймера на Arduino Uno с ATmega328P (C язык)

Аппаратное обеспечение: Arduino Uno с ATmega328P Программное Обеспечение: Atmel Studio 6.2.1153, Arduino 1.0.6 Вычисление циклов, необходимых для 1С Тактовая частота ATmega328P = 16М Гц Тактовая…


Почему while loop необходим в main для вызова ISR в arduino UNO?

Я пишу код C, который загружается в arduino uno. Это было простое упражнение, чтобы узнать, как вызвать ISR в C. Вот этот код: #include<stdio.h> #include<stdlib.h>…


RobotDyn Uno wifi не работает

Я использую плату Uno+WiFi R3 ATmega328P+ESP8266, 32Mb flash, USB-TTL Ch440G, Micro-USB. Я могу видеть сеть SSID на моем PC и подключаться к ней, но когда я попытался загрузить эскиз с помощью…


Настройка Arduino Uno (ATMEGA328P) PWM с помощью Timer1

Я хочу настроить пользовательскую частоту(12 Гц) и рабочий цикл (20%) с помощью 16 МГц Arduino Uno (ATMEGA328P). АВР дает калькулятор : ICR1 = 20833 OCR1A = 4167 Я прочитал тонну форумов и Тутов, но…

Прошивка Atmega328 с помощью Arduino (as ISP) » NGIN.pro

Прошивка Atmega328 с помощью Arduino (as ISP) » NGIN.pro – Arduino, Raspberry Pi, умный дом, интернет вещей, крутые проекты, статьи, новости и полезная информация Прошивка Atmega328 с помощью Arduino (as ISP) Прошивка Atmega328 с помощью Arduino (as ISP)
 
В настоящее время Arduino является удобным инструментом для любителей электроники. Открытая платформа и “готовые к использованию” схемы, различные Arduino шилды для реализации любых конструкций. Но иногда это трудно и не эстетично использовать такую большую плату в качестве основной схемы нашего проекта или продукта. 

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

Шаг 1: Элементы

1. Arduino Uno.2. Макетная плата.3. USB A к USB B кабель.4. Микроконтроллер ATmega328.5. Светодиоды.6. Конденсаторы 22 пФ.7. Кварцевый генератор 16Mhz.8. 9В батарея.9. Перемычки.

Шаг 2: Подключение микроконтроллера Atmega328





 
Микроконтроллеры Atmega328, что мы покупаем на рынке, могут или не могут быть с загрузчиком (bootloaded).  Если он уже bootloaded, то мы можем напрямую использовать его с Arduino, в противном случае мы должны загрузить его в первую очередь.1. Закрепите Atmega328 на макетной плате.2. Подключите кварцевый генератор к 9-му и 10-му контактам Atmega328.3. Подключите два 22 пФ конденсаторы, к каждой из двух ножек кристалла и заземлите их.4. Подключите контакты 7 и 20 к контакту 5V Arduino.5. Подключите контакты 8 и 22 к GND Arduino.6. Подключите контакт 10 Arduino к контакту 1 (reset) Atmega328.7. Подключите контакт 11 Arduino к контакту 17 Atmega328.8. Подключите контакт 12 Arduino к контакту 18 Atmega328.9. Подключите контакт 13 Arduino к контакту 19 Atmega328.
 
Теперь подключите Arduino к компьютеру

Programmer>arduino as ISP”>В меню выберите Инструменты> Программатор> Arduino как ISPBurn bootloader -> Затем выберите Programmer>arduino as ISP”>Инструменты> Записать ЗагрузчикЧерез несколько секунд, Atmega328 будет с загрузчиком и мы сможем легко программировать его с помощью Arduino платы.

Шаг 3: Программирование 

 

 

Удалите все соединения, что мы сделали для бутлоадера.Теперь соберем схему для програмирования Atmega328.1. Подключите Vcc и Gnd от Arduino к контактам макетной платы2. Подключите RESET Arduino к контакту 1 ATmega328.3. Подключите Rx Arduino к контакту 2 ATmega328.3. Подключите Tx Arduino к контакту 3 ATmega328.Теперь внесем некоторые изменения в IDE, как показано ниже,Board > “Arduino Duemilanove or Diecimila””>1. Из меню, выберите Инструменты> Плата> “Arduino Duemilanove или Diecimila”Processor > ATmega328”>2. Теперь выберите, Инструменты> Процессор> ATmega328



 Теперь все настройки программирования готовы.Напишите программу, как обычно, и нажмите кнопку “загрузить”Код был загружен в микроконтроллер.Уберите все Arduino соединения, обеспечьте отдельный источник питания постоянного тока 5В к плате, и теперь у вас есть независимый микроконтроллер Atmega328 в действии.

Шаг 4: Будьте внимательны!!!

В Arduino IDE, контакт 5 означает 5 контакт Arduino, а не пятый контакт микроконтроллера Atmega328.Это на самом деле 11-й контакт Atmega328.

Таким образом, чтобы получить доступ к 11-му контакту Atmega328, мы должны написать в коде “5”, а не 11.Все 18 I/O контакты Atmega328 доступны.Вот вам таблица, которая описывает все особенности кодирования контактов ввода / вывода.

 

Запись загрузчика на ATMega328 с использованием Arduino UNO в качестве интернет-провайдера: 5 шагов (с изображениями)

ОБНОВЛЕНИЕ 2: Для всех, у кого по-прежнему возникают проблемы с поиском предыдущих версий программного обеспечения, перейдите на эту страницу: https: //www.arduino .cc / en / Main / OldSoftwareReleases # previous

ОБНОВЛЕНИЕ: это руководство будет работать с Arduino IDE 1.0.1, последняя версия 1.0.5 вносит некоторые изменения в эскиз ISP, поэтому я не уверен, будет ли оно работать ( Я только что купил 2 ATMega328 и сжег оба на 1.0,1).

Пожалуйста, используйте 1.0.1 для устранения любых проблем. Click Here

У меня был один проект с дистанционным управлением, для которого требовалась круглосуточная работа Arduino, но я не хотел оставлять свою Arduino UNO за 32 доллара, поэтому решил купить несколько штук и создал свой собственный Arduino. Самой важной частью была покупка микроконтроллера. Это были мои варианты:

ATMega328P-PU с Optiboot ~ 5,50 доллара (Sparkfun) / 5,19 доллара (Digikey)
ATMega328P-PU ~ 3,16 доллара (Digikey)
ATMega328-PU ~ 2,88 доллара (Digikey)

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

В последних двух вариантах отсутствовал загрузчик. Загрузчик – это «небольшая программа, загруженная в микроконтроллер. Это позволяет загружать код без использования какого-либо дополнительного оборудования ».

Итак, сначала, если вам нужно что-то сделать с этими микроконтроллерами, вам понадобится загрузчик , записанный на на этих чипах.Как вы могли заметить, разница между вторым и третьим составляет всего P после 328. Это P означает pico для пиковой мощности, которая является разработанной ATMEL технологией, которая позволяет микроконтроллеру работать с меньшими затратами. мощность.

Что ж, если вы увидите микроконтроллер на вашем Arduino UNO, вы обнаружите, что он использует микроконтроллер picopower, а не обычный. Купил 3 нормальных. Боже мой, тогда я совершенно облажался. Ну нет, вам просто нужно внести пару изменений в файлы Arduino, чтобы он заработал.

Из этого туториала Вы узнаете, как это сделать.

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

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

Введение

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

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

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

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

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

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

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

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

Загрузчики

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

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

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

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

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

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

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

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

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

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

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

Необходимые компоненты
  • Ардуино UNO
  • ATmega328 Микроконтроллер IC
  • 16 МГц, кристалл
  • Керамические конденсаторы 22 пФ x 2
  • Резистор 10 кОм
  • Кнопка
  • Резистор 330 Ом
  • светодиод
  • Макет
  • Соединительные провода
  • Источник питания 5 В

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

Как упоминалось ранее, здесь в качестве программатора AVR используется Arduino UNO.Для этого вам необходимо загрузить на рабочую плату 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 as 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

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

Загрузчик – это небольшой фрагмент исполняемого кода, который постоянно хранится в памяти микроконтроллера. Это занимает менее 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: – После « Done uploading» отсоедините плату Arduino от компьютера и выполните соединения платы Arduino с Atmega 328, как показано на схеме ниже.

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

Перейдите к Tools , выберите плату как Arduino / Genuine Uno , выберите правильный порт для своей платы. Выберите Programmer как «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 без использования платы Arduino :

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

SparkFun Education – Как установить загрузчик Arduino

Обзор

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

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

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


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

AVR

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

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

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

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


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

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

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

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

Или вы можете использовать официальный программатор Atmel AVR MKII (, снят с производства ) или программатор Atmel JTAG ICE3.

АРН MKII

JTAG ICE3

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

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

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


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

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

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

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

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

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

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

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

Если вы используете программатор, такой как MKII или Pocket Programmer, ваша установка должна выглядеть примерно так:

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

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

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

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

Arduino как ISP Программатор AVR Заголовок ISP ATmega328 ATmega32U4
Vcc / 5 В 5V Штифт 2 Vcc Vcc
ЗЕМЛЯ ЗЕМЛЯ Штифт 6 ЗЕМЛЯ ЗЕМЛЯ
MOSI / D11 MOSI Штифт 4 D11 D16
MISO / D12 MISO Штифт 1 D12 D14
SCK / D13 SCK Штифт 3 D13 D15
D10 Сброс Штифт 5 Сброс Сброс

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

Самый простой способ загрузить загрузчик – использовать IDE Arduino. Откройте свою IDE и выберите плату, которую хотите запрограммировать. Затем выберите программатор (если вы используете Arduino в качестве ISP, вам также необходимо выбрать COM-порт, к которому подключен Arduino в качестве ISP). Затем выберите BurnBootloader. Это возьмет выбранную вами плату и найдет соответствующий загрузчик в файле board.txt. Затем он найдет загрузчик в папке загрузчика и установит его. Это работает только в том случае, если плата правильно установлена ​​в среде IDE и у вас есть правильный загрузчик.

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


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

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

Этот процесс состоит из двух этапов. Первый шаг включает установку предохранителей. Предохранители – это часть микросхемы AVR, которая определяет такие вещи, как использование внешнего кристалла или необходимость обнаружения потемнения.Команды, перечисленные ниже, предназначены для Arduino Uno, использующего ATMega328, они, вероятно, будут работать на некоторых других аналогичных платах, таких как Duemilanove, но убедитесь, что вы знаете, что делаете, прежде чем играть с плавкими битами (ПРИМЕЧАНИЕ: эти плавкие биты не будут работать на Плата 3,3 В / 8 МГц). Все необходимые предохранители перечислены в файлеboards.txt для разных плат, но опять же, если у вас установлен файлboards. txt, просто используйте Easy Way.

Arduino в качестве ISP: 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

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

avrdude -b 19200 -c usbtiny -p m328p -v -e -U efuse: w: 0x05: m -U hfuse: w: 0xD6: m -U lfuse: w: 0xFF: m

Второй шаг – это загрузка программы.

Arduino в качестве провайдера:

avrdude -P comport -b 19200 -c avrisp -p m328p -v -e -U flash: w: hexfilename.hex -U lock: w: 0x0F: m Карманный программатор AVR: avrdude -b19200 -c usbtiny -p m328p – v -e -U flash: w: шестнадцатеричное имя файла.hex -U блокировка: w: 0x0F: m

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

Как записать загрузчик на ATMega328 PU

Опубликовано Билли

Когда я купил свой чип ATMega328PU, я а) понятия не имел, что означает ПУ, и б) думал, что чип будет загружен с загрузчиком в соответствии с описание предмета (я купил этот – ATMEGA328 с комплектом загрузчика Arduino Duemilanove).Я уже купил стартовый комплект arduino (дешевый клон – стартовый комплект Kuman Project Super Starter Kit для наборов Arduino UNO R3 Mega2560 Mega328 Nano, включая плату R3), поэтому, естественно, первым делом я удалил чип ATMega, поставляемый со стартовым комплектом arduino. и замените его новым купленным. Я ожидал, что светодиодный индикатор будет работать, поскольку это, по-видимому, установлен по умолчанию на этих чипах, или чтобы иметь возможность загружать эскизы в чип через плату Arduino. Ничего подобного, поэтому я решил записать загрузчик сам, используя то, что у меня уже было.Я и не подозревал, что на это у меня уйдут дни. Теперь, успешно записав загрузчик на микросхему ATMega PU 328, я написал инструкции, чтобы не забыть, как это делать сам в будущем, так что без лишних слов…

Что вам нужно?

  1. Плата Arduino с ATMega328, на которой уже установлен загрузчик. Я использовал полученный через стартовый комплект kuman (ссылка выше)
  2. Ваш новый чип ATMega328-PU
  3. x2 22 пФ конденсатор
  4. x1, кристалл 16 МГц
  5. Резистор
  6. x1 10 кОм (думаю, можно не устанавливать…)
  7. Перемычки

Ступени

  1. Установите скетч ArduinoISP на оригинальный микроконтроллер (мой оригинальный чип – ATMega328P-PU).Этот скетч можно найти в примерах в среде разработки arduino. Я использовал следующие настройки:
    1. Программатор: AVRISP mkII
    2. Плата: Arduino / Geuino Uno
  2. Установите доску, как показано на рисунке ниже. Учтите, что резистор мне не понадобился. Также обратите внимание, что эта картинка немного обманчива. Оставьте микроконтроллер ATMega подключенным к плате Arduino!
  3. Установите Arduino IDE 1.0.5-rc2. Я не знаю, зачем вам использовать эту версию IDE, но получите ее.Вы можете найти его на сайте arduino – https://www.arduino.cc/en/Main/OldSoftwareReleases. Откройте файл \ Arduino \ hardware \ tools \ avr \ etc \ avrdude.conf в текстовом редакторе и найдите строку с надписью 0x1e 0x95 0x0F. Замените его на 0x1e 0x95 0x14 и сохраните. Закройте и снова откройте Arduino IDE 1.0.5-rc2.
  4. Измените настройки в Arduino IDE на следующие:
    1. Программист: Arduino как ISP
    2. Плата
    3. : Arduino Duemilanove с ATMega328
    4. Записать загрузчик
  5. Теперь ваш загрузчик должен быть установлен.Выключите все, снимите микроконтроллер ATMega с макета и попробуйте его на плате Arduino. Если он работает, светодиод на выводе 13 должен мигать (функция загрузчика по умолчанию).
  6. Попробуйте загрузить скетч. Теперь вы можете использовать последнюю версию IDE. Набор:
    1. Плата: Arduino Duemilanove или Dicemila
    2. Программатор: AVRISP mkII

Удачи! И, пожалуйста, напишите, если вы нашли это полезным или у вас возникли проблемы!

Следите за нами и ставьте лайки:

Использование 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) Целевая плата Arduino
Штифт 13 Штифт 13
Штифт 12 Штифт 12
Штифт 11 Штифт 11
Штифт 10 Сброс
5V
ЗЕМЛЯ ЗЕМЛЯ

Или см. Рисунок ниже:

После подключения перейдите в Инструменты> Плата и выберите «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 (на момент написания этого руководства). 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. Закройте IDE Arduino.
  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

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

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

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

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

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

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

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

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

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

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

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

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

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

Optiboot / optiboot: небольшой и быстрый загрузчик для Arduino и других чипов Atmel AVR

Загрузчик Optiboot для Arduino и Atmel AVR

Optiboot – это простая в установке модернизация загрузчика Arduino на платах Arduino. Он предоставляет следующие возможности:

  • Позволяет делать эскизы большего размера.Optiboot занимает всего 512 байт, освобождая 1,5 КБ дополнительного места для кода по сравнению со старыми загрузчиками.
  • Ускоряет загрузку ваших эскизов. Optiboot работает с более высокими скоростями передачи и имеет оптимизированное программирование.
  • Улучшения производительности Adaboot. Optiboot реализует «fastboot», который запускает скетчи сразу после включения.
  • Совместим с ATmega8, ATmega168 и ATmega328p Arduinos и производными, включая Lilypad, Pro, Nano и многими производными.
  • Работает с МНОГИМИ дополнительными микросхемами Atmel AVR – почти со всем, что поддерживает загрузку или самопрограммирование флэш-памяти.«Сюда входят микросхемы от 8-контактных чипов ATtiny до 100-контактного ATmega2560, используемого на Arduino Mega.
  • Поддерживает альтернативные последовательные порты, частоты процессора и скорости передачи данных.

Optiboot (более старая версия) устанавливается по умолчанию на Arduino Uno и (по состоянию на 2018 год) на официальных платах Arduino Nano. Его можно установить на все старые Arduinos на базе Mega8, 168 или 328.

Optiboot_X

В 2019 году компания Atmel была приобретена Microchip Inc и выпустила несколько «новых» архитектур с процессором AVR.Они известны как серии Mega-0, Tiny-0 и Tiny-1. Хотя основные операции ЦП примерно такие же, как и у старых AVR, периферийные устройства, включая самопрограммирование Flash, значительно отличаются. Это оправдало появление новой версии Optiboot с отдельным исходным кодом и Makefile, которую мы называем optiboot_x (новые микросхемы AVR очень похожи на микросхемы AVR XMega).

Дополнительная документация

Более подробная документация добавляется (медленно) в вики репозитория.

Примечания по совместимости версий IDE

Optiboot в широком смысле “совместим” со всеми версиями Arduino IDE. Первоначально он был написан примерно в то же время, что и v1.0, и имеет некоторые «причуды», относящиеся к тому времени. Что наиболее важно, структура каталогов репозитория git «странная».

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

Вам НЕ нужно «устанавливать» Optiboot, если вы пытаетесь обновить установленную платформу, которая уже использует ту или иную форму Optiboot.Фактически, вам почти наверняка НЕ ​​следует устанавливать Optiboot с помощью менеджера платы. Репозиторий Optiboot GitHub в наши дни в основном полезен в качестве репозитория исходного кода для всех, кому по какой-то причине необходимо создать сильно настроенную версию. Или улучшение самого Optiboot.

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

Есть также несколько крупных репозиториев «общих» версий ядер для различных целей, в том числе:

  • MegaCore от MCUdude Поддерживает большие AVR, такие как ATmega128, ATmega640, ATmega1280, ATmega1281, ATmega2560 и ATmega2561.
  • MightyCore от MCUdude Поддерживает большинство 40-контактных AVR, включая ATmega1284, ATmega644, ATmega324, ATmega32 и ATmega8535.
  • MiniCore от MCUdude Поддерживает большинство 28-контактных AVR ATmega, включая процессоры, используемые Uno / etc, а также новые процессоры, такие как ATmega328PB.
  • MajorCore от MCUdude Поддерживает несколько относительно устаревших больших AVR, таких как ATmega8515 и ATmega162.
  • ATTinyCore от Спенса Конде Поддерживает многие AVR ATtiny, включая ATtiny85, ATtiny1634, ATtiny84 и ATtiny841.
  • MegaCoreX от MCUdude Поддерживает AVR серии Mega-0 (особенно ATmega480x и ATmega320x) (с использованием Optiboot_X. )
  • megaTinyCore от Spence Konde Поддерживает многие микросхемы AVR серий Tiny-0 и Tiny-1 (с использованием Optiboot_X.).

Если вам нужна новая функция Optiboot, не включенная в предварительно упакованное ядро, рекомендуемая процедура – загрузить или разветвить исходный код, вручную скомпилировать нужную версию и скопировать файл.hex-файл в существующий каталог платы (после переименования старого .hex-файла, на случай, если он вам понадобится)

Тем не менее, существует автоматически устанавливаемый пакет Board Manager, который включает файлы .hex для Optiboot на нескольких популярных платах Arduino (очень небольшое подмножество возможных целей). При использовании процедуры «установки» Optiboot не устанавливаются никакие ядра или варианты, поэтому она полезна только для процессоров, которые уже поддерживаются стандартным ядром Arduino.

Следующие инструкции основаны на использовании “Board Manager” Arduino, присутствующего в версии 1 IDE.6.5 и новее.

  1. Найдите желаемый выпуск Optiboot на странице выпуска Optiboot.
  2. Используйте функцию «Копировать адрес ссылки» в своем браузере, чтобы скопировать URL-адрес связанного файла .json .
  3. Вставьте этот URL-адрес в поле «Дополнительные URL-адреса диспетчера плат» на панели «Настройки» Arduino IDE. (Отделите его от других URL-адресов, которые могут присутствовать запятой, или щелкните значок справа от поля, чтобы вставить его в новую строку.)
  4. После закрытия окна настроек меню Tools / Boards / Boards Manager должно включать запись для этой версии Optiboot.Выберите эту запись и нажмите кнопку Установить .

Для получения дополнительной информации об установке см. Страницу Optiboot AddingOptibootChipsToIde Wiki

Запись Optiboot на плату Arduino

  1. Выберите соответствующий тип платы Optiboot (или не Optiboot, если вы хотите вернуться к исходному состоянию).

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

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