Программатор для ардуино мега

ISP (ICSP) программатор из Arduino/Freeduino

Мы не выдаем Китай за Италию. Платы от российского производителя по сниженным ценам.

Любая версия Freeduino / Arduino может выступать в роли ISP программатора, с помощью которого можно, например, изменить bootloader в другой аналогичной плате, или прошить bootloader в новую микросхему ATmega. В описании указывается Arduino, но фактически может быть использован любой клон, включая все варианты Freeduino.

Здесь рассматривается два варианта ISP программатора на основе Arduino: Mega-ISP, который может быть собран из любой версии Arduino и его клонов, и Bit-Bang программатор, для которого подойдут только те варианты Arduino, которые имеют дополнительно выведенные на специальный разъем контакты микросхемы FT232RL.

Аббревиатуры ISP и ICSP означают In System Programming и In Circuit Serial Programming соответственно. Это означает программирование чипа уже подключенного в некоторую схему, программирование в готовом устройстве по последовательному протоколу.

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

Источник тактовых сигналов выбирается в микроконтроллерах серии ATmega с помощью так называемых fuse-битов, которые, также как и память программ, и EEPROM доступны для изменения с помощью программатора.

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

Из известных проектов по созданию ISP программатора на основе Arduino наиболее интересным нам кажется Mega-ISP. Именно этот проект включен в состав ПО Arduino в раздел с примерами под именем ArduinoISP.

После загрузки скетча в вашу плату Arduino, скорее всего потребуется тем или иным образом отключить программный сброс. Владельцы плат Freeduino 2009/2013/Nano/Mega2560 могут просто снять перемычку JRS, владельцы Arduino могут перерезать ножом ту же перемычку. Для некоторых других плат можно выпаять конденсатор CRS, но мы советуем менее радикальный способ — соединить выводы Reset и +5V резистором номиналом порядка 120 Ом (оригинал здесь). Если все сделано правильно, при открытии COM-порта не будет происходить сброс микроконтроллера (это видно по светодиоду 13), и как побочный эффект станет невозможно обновить его собственную прошивку из среды Arduino.

Во-вторых, данный ISP программатор при общении с ПК использует протокол AVRISP/STK500v1 только со скорость 19200 бит/сек, и нормально работает не со всеми вариантами ПО для ПК. Поэтому не удивляйтесь, что не удается что-либо прошить из среды Arduino. Авторы рекомендуют использовать программу avrdude из состава Win-AVR.

Сборка программатора Mega-ISP

Если Вы с помощью одной платы Arduino собираетесь прошить другую, то Вам потребуется разъем 2×3 и 6 проводков. Схема сборки:

Если нужно прошить отдельный микроконтроллер (не забываем, что его fuse-биты должны быть выставлены так, что он тактируется от внутреннего осцилятора), то нужно узнать согласно документации Atmel расположение вывовдов Gnd, Vcc, MOSI, MISO, SCK.

Соединение с Arduino такое: 10 — Reset, 11 — MOSI, 12 — MISO, 13 — SCK.

Не забываем подключить «землю» и питание.

Для примера приводим разводку для разъема ICSP и микроконтроллеров ATmega328 и ATtiny85.

На фото представлен один из вариантов реализации:

Работа с программатором Mega-ISP

Рассмотрим например, как прошить новый boot-loader.

Скачайте архив с проектом и подходящей версией avrdude. Распакуйте архив в какую-нибудь папку.

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

Подсоедините вторую плату (которую будем «прошивать») к первой.

В режиме командной строки перейдите в папку с avrdude. Теперь можно запускать avrdude с соответствующими ключами:

-q — уменьшает объем выводимой на экран отладочной информации

-C avrdude.conf — указывает расположение .conf файла (в нашем случае он в той же папке)

-p m328 — выбор типа микроконтроллера ATmega328

-c avrisp — выбор протокола

-P COM3 — выбор COM порта. Здесь нужно поставить свой

-b 19200 — выбор скорости порта

-e — Команда на предварительную очистку памяти программ

-U flash:w:ATmegaBOOT_328_diecimila.hex — указывает на .hex файл с прошивкой

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

Архив с ПО также содержит файл sample.bat, в котором кроме bootloader’а программируются fuse и lock биты.

В Сети есть страничка с разведенной платой такого программатора, включающей дополнительные отладочные светодиоды: http://drug123.org.ua/mega-isp-shield/

«Сердцем» Bit-Bang программатора является микросхема FD232RL (та самая, которая реализует COM-порт на шине USB), а собственно микроконтроллер ATmega никакого участия в процессе программирования не принимает. Это позволяет программировать микроконтроллер, установленный в «панельке» Вашей Arduino – вторая плата Arduino не потребуется.

Соответственно, для данного программатора подойдут только USB версии Arduino, да и то не все, т.к. не на всех вариантах разведен разъем X3 с дополнительными выводами FT232RL.

Сборка программатора Arduino Bit-Bang

Для сборки Вам потребуются разъемы 1×4, 2×6, штекер 1×2 (для питания) и несколько проводов. Можно использовать, например пару Audio-кабелей от CD-ROM – у них удобные разборные разъемы, и в таком случае можно обойтись даже без паяльника.

Схема соединений следующая:

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

На фотографиях представлены оба варианта соединения – программирование микроконтроллера ATmega168, находящегося в панельке Arduino (провода питания и «земли» не нужны), и программирование микроконтроллера во второй плате.

Работа с программатором Arduino Bit-Bang

Аналогично рассмотрим прошивку нового boot-loader’а.

Скачайте архив с соответствующей версией avrdude. Распакуйте архив в какую-нибудь папку.

Подсоедините программатор к USB порту.

В режиме командной строки перейдите в папку с avrdude. Теперь можно запускать avrdude с соответствующими ключами:

-q — уменьшает объем выводимой на экран отладочной информации

-C avrdude.conf — указывает расположение .conf файла (в нашем случае он в той же папке)

-p m168 — выбор типа микроконтроллера ATmega168

-c diecimila — выбор программатора (он описан под таким именем в .conf файле)

-P ft0 — выбор порта. Выбрано первое устройство с чипом FTDI

-e — Команда на предварительную очистку памяти программ

-U flash:w:ATmegaBOOT_168_diecimila.hex — указывает на .hex файл с прошивкой

Архив с ПО также содержит файл sample.bat, в котором кроме bootloader’а программируются fuse и lock биты.

Более полную информацию можно найти по ссылке:

Источник

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

Используем Arduino Mega 2560 в качестве внутрисхемного программатора (ISP)

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

  • Arduino Mega
  • Плата с микроконтроллером ATmega, который нужно прошить
  • Конденсатор 100 нФ
  • USB-кабель, соединяющий Arduino Mega с компьютером
  • Среда разработки Arduino IDE
  • Несколько проводов для соединения Arduino Mega с самодельным Arduino

Основная трудность заключается в том, что у Arduino Mega другая распиновка в отличие от Arduino UNO, Duemilanove или Diecimila, поэтому руководства использования в качестве программатора перечисленных плат не подходят. Подробнее про распиновку Arduino Mega можно узнать здесь.

Вам нужно соединить Arduino Mega 2560 с платой с чипом Atmega 168/328 следующим образом:

Итак, для начала нужно загрузить скетч ArduinoISP. Откройте Arduino IDE, выберите Tools – Board – Arduino Mega 2560 (Сервис – Плата – Arduino Mega 2560). Выберите корректный COM-порт: Tools – Serial port – нужный порт (Сервис – Последовательный порт – нужный порт). Теперь перейдите в File – Examples – ArduinoISP (Файл – Примеры – ArduinoISP). Перед вами откроется скетч ArduinoISP. Нажмите кнопку Upload (Загрузить) и загрузите его в Arduino Mega 2560.

После того, как скетч будет полностью загружен, подключите конденсатор 100 нФ между линией питания +5 В и выводом RESET на Arduino Mega, чтобы отключить автосброс. В противном случае ничего не получится.

Далее выберите плату, которую хотите запрограммировать. Если у вас, например, микроконтроллер Atmega328 с осциллятором 16 МГц, то следует выбрать Arduino Duemilanove or Nano /w Armega 328.

Выберите Tools – Burn Bootloader – Arduino as ISP (Сервис – Программатор – Arduino as ISP). После загрузки кода вы сможете наслаждаться вашим самодельным Arduino.

Если у вас возникли ошибки:

  • Проверьте правильность выбора платы
  • Если у вас появилась ошибка типа avrdude: stk500_getsync(): not in sync: resp=0x00, то вы не поместили конденсатор 100 нФ между линией питания +5 В и выводом RESET на Arduino Mega
  • Если у вас другая ошибка, то ищите ответ в гугле
  • Если не нашли ответ в гугле, то воспользуйтесь тематическими форумами про Arduino

Если при программировании вашего Arduino появилась ошибка avrdude: stk500_getsync(): not in sync: resp=0x00 avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51, значит не в порядке автосброс (DTR). То есть Arduino IDE не может перезагрузить Arduino, и загрузка кода заканчивается провалом. Чтобы избежать этого, вы можете:

  • Нажать кнопку сброса на Arduino, кода появляется «Binary sketch size: xxxx bytes (of a xxxxxxx byte maximum)»
  • Если это не помогло, то вы можете подключить USB-кабель к компьютеру, но не к Arduino, и после того, как появится «binary sketch…», быстро воткнуть кабель в Arduino
  • Если и это не помогло, то вы можете держать нажатой кнопку сброса на Arduino, нажать Upload (Загрузить) в Arduino IDE и отпустить кнопку, когда появится «binary sketch size . »
  • Если и это не помогло, то вы можете нажать кнопку сброса после появления «binary sketch size . » и держать ее 2-10 секунд
  • Если и это не помогло, то вы можете заново загрузить загрузчик
  • Если и это не помогло, то вы можете взять другую плату Arduino, если есть такая в запасе
  • Если и это не помогло, то остается только спросить на форуме

Источник

Превращаем Arduino в полноценный AVRISP программатор

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

Меня уже давно спрашивают — можно ли прошивать hex файлы при помощи Arduino? Изменять фьюзы? Считывать прошивку? И всякое такое… Ответ — можно, и я сегодня вам расскажу, как я это делаю.

(Данное видео дублирует представленную ниже информацию)

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

Небольшая предыстория:
Одного прекрасного дня, я наткнулся на отличный проект на ATtiny13, но увы автор выгрузил в сеть только hex-файл и схему, ну и конечно же, я так и не смог его попробовать в железе. Меня этот вопрос мучил всё больше и больше, и тут я случайно наткнулся на одно видео в сети, где автор утверждал, что он при помощи Arduino прошил другой микроконтроллер, имея только hex-файл, ну и схему, само собой. Именно он мне подсказал — используй SinaProg, но с Arduino’вскими файлами…

Загуглив на тему SinaProg, я скачал SinaProg 2.1.1.RUS, но он работать отказывался с Arduino, потому я закинул пару-тройку файлов из Arduino IDE в папку SinaProg 2.1.1\data\ и всё заработало.

Пройдёмся коротко по возможностям софта:

В блоке Hex-file выбираем hex или eep(первый — прошивка, второй — содержимое энергонезависимой памяти).

А той части, где кнопка «>», мы можем видеть всякие сообщения, типа «OK», или «ERROR», сама же кнопка «>» открывает логи Avrdude.

В блоке Flash есть кнопки:

Program — запись hex-файла в микроконтроллер(возможно, когда выбран Hex-file);
Verify — проверка прошивки, что в микроконтроллере, и hex-файла(проще говоря, их сравнение), если всё норм — программа говорит OK;
Read — считать hex-файл.

С блоком EEPROM всё по аналогии.

Далее блок Device, тут можно выбрать нужный микроконтроллер, вот весь список поддерживаемых(список выдрал из файла Device.txt, который лежит в папке SinaProg 2.1.1\data\):

Шутка, вон их сколько:

AT90CAN128
AT90CAN32
AT90CAN64
AT90PWM2
AT90PWM2B
AT90PWM3
AT90PWM3B
AT90USB1286
AT90USB1287
AT90USB162
AT90USB646
AT90USB647
AT90USB82
AT90s1200
AT90s2313
AT90s2323
AT90s2333
AT90s2343
AT90s4414
AT90s4433
AT90s4434
AT90s8515
AT90s8535
ATmega103
ATmega128
ATmega1280
ATmega1281
ATmega1284P
ATmega128RFA1
ATmega16
ATmega161
ATmega162
ATmega163
ATmega164P
ATmega168
ATmega169
ATmega2560
ATmega2561
ATmega32
ATmega324P
ATmega325
ATmega3250
ATmega328P
ATmega329
ATmega3290
ATmega3290P
ATmega329P
ATmega48
ATmega64
ATmega640
ATmega644
ATmega644P
ATmega645
ATmega6450
ATmega649
ATmega6490
ATmega8
ATmega8515
ATmega8535
ATmega88
ATtiny11
ATtiny12
ATtiny13
ATtiny15
ATtiny22 2343
ATtiny2313
ATtiny24
ATtiny25
ATtiny26
ATtiny261
ATtiny44
ATtiny45
ATtiny461
ATtiny84
ATtiny85
ATtiny861
ATtiny88
ATxmega64A1
ATxmega128A1
ATxmega128A1D
ATxmega192A1
ATxmega256A1
ATxmega64A3
ATxmega128A3
ATxmega192A3
ATxmega256A3
ATxmega256A3B
ATxmega16A4
ATxmega32A4
ATxmega64A4
ATxmega128A4

Как видите, есть все популярные микроконтроллеры фирмы ATmel, в частности ATmega328P, ATmega8, ATtiny13, ATtiny2313 и всякие другие…

Далее — кнопка Search, если её нажать, то программа попытается прочитать сигнатуры того микроконтроллера, который подключен к программатору, проще говоря, поищет микроконтроллер. Потом может ответить „OK“ или „ERROR“ в информационном блоке, если всё нормально, или нет, соответственно.

В блоке Fuses есть предустановки для ATmega8 для работы на разных частотах, но, увы, только для ATmega8 и ATmega32, можно добавить в файле Fuse.txt (который лежит в папке SinaProg 2.1.1\data\).

Есть кнопка Program — записать предустановки, смотрим на абзац выше.

А так же Advanced — лихая кнопка, после её нажатия можно увидеть вот такое окно:

Device signature — какие-то циферки, я так понял это идентификатор микроконтроллера, по ним программа опознаёт, что за микроконтроллер мы ей суём.

Информационная часть, всё как выше.

Чуть ниже идут фьюзы… если уж зачешется, то не забывайте их сначала считать кнопкой Read(чтобы не нарочно изменить важные фьюзы, например «SPIEN» или «RSTDSBL»), записать фьюзы — кнопка Write, кнопка Chip Erase стирает микроконтроллер, что-то примерно напоминает — форматирование флешки на компьютере(но фьюзы не устанавливаются по умолчанию, так что забывать об этом не стоит).

Пару слов о фьюз-битах — это такие как бы тонкие подстройки микроконтроллера, то частоту поднять, то убавить, то вкл/выкл тактирование от внутренней RC цепочки то ещё что-то… в общем, туда лезть только в крайнем случае, иначе можно заблокировать микроконтроллер(нашаманить так, что перестанет работать, серьёзно), и уже без Atmega fusebit doctor никак.

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

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

Итак, последний блок основного окна программы — Programmer, тут выбирается тип программатора, если вы используете Arduino в качестве программатора — ставьте всё, как у меня на скрине, только не COM19, это у меня такой, у вас, наверное, будет другой, в любом случае точно не COM1, первый это системный, актуален только для программаторов, которые подключаются к реальному COM порту, например, Программатор Громова. На ноутбуке COM-порта может не быть, а на компьютерах, как правило, COM-порт ещё есть, особенно тех, что постарше. Можно использовать и другой программатор, к примеру, USBASP, только не забываем выбрать его в списке, скорость для него я ставлю такую же как и в случае с AVRISP.

Список поддерживаемых программаторов:

Gromov
USBtiny
ALF
Arduino
AT ISP
AVR109
AVR910
AVR911
AVRISP
AVRISP 2
AVRISP mkII
AVRISP v2
Bascom
Blaster
BSD
Butterfly
C2N232I
DAPA
DASA
DASA 3
Dragon_DW
Dragon_HVSP
Dragon_ISP
Dragon_JTAG
Dragon_PP
DT006
ERE-ISP-AVR
Frank-STK200
Futurlec
JTAG 1
JTAG 1Slow
JTAG 2Slow
JTAG 2
JTAG 2Fast
JTAG 2ISP
JTAG 2dW
JTAG mkI
JTAG mkII
MIB510
pAVR
Picoweb
Pony-STK200
ponyser
SI Prog
SP12
STK200
STK500
STK500 HVSP
STK500 PP
STK500 v1
STK500 v2
STK600
STK600 HVSP
STK600 PP
USBasp
Xil

Лично я тестировал только на программаторах AVRISP(Arduino с прошитым скетчем ArduinoISP) и USBasp, на двух микроконтроллерах — ATmega8 и ATtiny13.

Чтобы можно было шить/читать/изменять фьюзы/ убить микроконтроллер при помощи Arduino, предварительно нужно зашить скетч ArduinoISP, подключив всё, как я писал, например вот тут:

Если в двух словах, то подключаем пины Reset, MOSI, MISO, SCK микроконтроллера, который будем прошивать/считывать прошивку/изменять фьюзы так, как указано в скетче в комментариях, а именно:

Вот пример подключения к ардуине ATmega8:

Ну и по аналогии… Ищем карту пинов, например, в даташите (техдокументация на МК) интересующего нас микроконтроллера, вот, к примеру, первая ссылка из гугла по запросу «ATmega8 pdf».

PS У меня было такое, что ATtiny13 перестала прошиваться, на попытки её программирования, после того, как я попробовал запустить её на частоте 128 kHz, откопал где-то вот такой, слегка модифицированный код ArduinoISP который заставляет прошивку/изменение фьюзов происходить медленнее в несколько раз и может ещё какая-то магия, не разбирался, честно.

Источник

Adblock
detector