Через программатор для ардуино

Программирование Arduino с помощью ISP программатора

Программировать Arduino Uno на «чистом» C или на Ассемблере не намного сложнее, чем с использованием стандартного языка программирования для Arduino. При этом вы можете сильно выиграть в производительности и сократить размер вашей программы. Далее речь пойдет о том, как перепрошить Arduino Uno R3 с использованием ISP программатора и AVR Studio 6.2.

Итак, нам понадобится Arduino Uno R3, любой ISP программатор совместимый с Atmel Studio 6, один светодиод и резистор, например, на 250 Ом. Для программирования Arduino я использую универсальный программатор Atmel ICE. Как я уже говорил, вы можете использовать любой программатор ISP для программирования Arduino. Список поддерживаемых программаторов вы можете посмотреть прямо в Atmel Studio.

Все знают, что в Arduino Uno R3 используется микроконтроллер ATmega328P-PU. Именно его мы и будем программировать. Фактически после записи нашей программы у нас будет уже не Arduino, а просто микроконтроллер с обвязкой. Так как мы сотрем загрузчик Arduino.

К сожалению, микроконтроллер ATmega328P-PU не поддерживает «продвинутую» отладку через JTAG. Вы, конечно, можете дебажить свой Arduino в Arduino Micro с точками останова и выводом значений в output (нужно явно запрашивать, что хотите получить), но такой подход не всегда удобен, к тому же в Atmel Studio есть значительно более совершенные средства отладки (просмотр состояний регистров, мониторинг памяти, и т.д.). По этому мы ограничимся тем, что будем просто прошивать наш контроллер по ISP.

Откройте Atmel Studio и выберите проект GCC C Exacutable Project, так как показано на рисунке.

Отлично, проект создан. Теперь нужно подключить наш программатор. Я использую Atmel ICE. Это универсальный программатор, который подходит для большинства микроконтроллеров AVR и ARM от Atmel. Подключаем программатор к компьютеру, затем в Atmel Studio выбираем пункт Tools -> Device Programming. Важно! Если у вас русская Windows то не создавайте проект в моих документах и вообще с папках с русским названием. Лучше создайте на диске отдельную папку с названием без кириллицы, например D:\myprog. Так же не забудьте запустить студию с правами администратора.

В открывшимся окне выбираем следующие опции: Tool — устройство для программирования\отладки в данном случае Atmel ICE, Device — микроконтроллер, который собираемся программировать, Interface — интерфейс через который наш программатор будет прошивать\отлаживать микроконтроллер, в данном случае доступен только ISP.

Нажимаем кнопочку Read для получения идентификатора устройства и его рабочего напряжения. Если Arduino подключена правильно, то вы должны получить номер устройства, например 0x1E950F и напряжение 4.9V.

Нажимаем Apply. После этого должны появится настройки для программатора так как показано на рисунке ниже.

Далее выполняем следующие действия. Меняем ISP Clock на 250. Затем переходим в раздел Memories и нажимаем кнопку Erase now. Важно! После этого действия вы не сможете использовать свой Arduino совместно с Arduino IDE, так как загрузчик будет удален.

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

Теперь нужно разобраться какая ножка микроконтроллера соответствует выводу на плате. Для этого нам понадобится datasheet.

Так как мы хотим управлять светодиодом с помощью 6-го вывода на Arduino мы будем использовать регистр PORTD и 5-й бит который подаст напряжение на 11 ножку нашего микроконтроллера.

Поместите следующий код в файл с кодом проекта.

Нажимаем «Ctrl + Alt + F5» или выбираем в меню пункт Debug -> Start Without Debugging. Светодиод начнет мигать!

Вот, собственно, и все… Обратите внимание на скорость прошивки и на размер программы. Данный пример занимает около 186 байт, что составляет 0.6% от объема памяти контроллера.

Источник

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

Источник

Как запрограммировать Arduino Pro Mini с помощью программатора

В жизни начинающего ардуинщика рано или поздно наступает момент, когда хочется сэкономить на размере своего изделия, не жертвуя при этом функциональностью. И тогда Arduino Pro Mini – отличное для этого решение! За счёт того, что у этой платы отсутствует встроенный USB-разъём, она в полтора раза меньше Arduino Nano. Но для того, чтобы её запрограммировать, придётся приобрести дополнительный – внешний – USB-программатор. О том, как «залить» написанную программу в память микроконтроллера и заставить Arduino Pro Mini работать, и пойдёт речь в этой статье.

Инструкция по программированию Arduino Pro Mini программатором

1 Программатор для Arduino

Сначала пара слов о самом программаторе. Купить такой можно за 2 доллара в любом китайском интернет-магазине, например, в этом.

  • Разъём типа USB-A используется, понятно, для подключения программатора к компьютеру.
  • ISP-соединитель нужен для подключения к программируемой плате.
  • Джампер JP1 контролирует напряжение на выводе VCC ISP-коннектора. Оно может быть 3,3 В или 5 В. Если целевое программируемое устройство имеет собственный источник питания, нужно убрать перемычку.
  • Джампер JP2 используется для перепрошивки самого программатора; в данной статье этот вопрос не рассматривается.
  • Перемычка JP3 нужна, если тактовая частота целевого устройства ниже 1,5 МГц.
  • Светодиоды показывают: G – питание подаётся на программатор, R – программатор соединён с целевым устройством.

USBasp-программатор и назначение его частей

2 Установка драйвера для программатора

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

Сообщение об отсутствии драйвера для USBasp программатора

В этом случае скачаем драйвер для программатора с официального сайта. Распакуем архив и установим драйвер стандартным способом. В диспетчере устройств должен появиться программатор USBasp. Теперь программатор готов к работе. Отключаем его от компьютера.

Установка драйвера для USBasp программатора

Если вы испытываете трудности с установкой драйвера для USBasp программатора, то вам поможет статья «Как установить драйвер для программатора USBasp в Windows 8 и Windows 10».

3 Схема подключенияArduino к программатору

Соединяем ISP-разъём программатора с выводами на Arduino Pro Mini согласно приведённой схеме.

Схема подключения Arduino Pro Mini к USBasp программатору

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

Плата Arduino Pro Mini подключена к USBasp программатору

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

Переходник для быстрого подключения платы Arduino Pro Mini к программатору USBasp

3 Настройка Arduino IDEдля работы с программатором

Открываем среду разработки Arduino IDE. Выбираем нужную плату через меню: Инструменты Плата Arduino Pro or Pro Mini (Tools Board Arduino Pro or Pro Mini).

Нужно также выбрать тип микроконтроллера, который задаётся через меню Инструменты Процессор. У меня это ATmega 168 (5V, 16 MHz), у вас может быть другой. Это обычно написано на самом корпусе микроконтроллера и хорошо видно под увеличительным стеклом.

Настройка Arduino IDE для работы с программатором

Выберем тип программатора: Инструменты Программатор USBasp (Tools Programmer USBasp).

Укажем тип программатора в Arduino IDE

4 Загрузка скетча в Arduinoс помощью программатора USBasp

Откроем скетч, который хотим загрузить в память микроконтроллера. Для примера пусть это будет мигание светодиодом: Файл Образцы 01. Basics Blink.

Подключаем программатор с подключённым к нему Arduino Pro Mini к компьютеру. Для того чтобы загрузить скетч в Ардуино с помощью программатора, можно поступить несколькими способами.

  1. Через меню Файл Загрузить через программатор.
  2. Используя сочетание клавиш Ctrl + Shift + U .
  3. Зажав клавишу Shift, нажать на кнопку со стрелкой вправо , которая обычно используется для загрузки скетча в память Ардуино стандартным способом.

Загрузка скетча в Arduino Pro Mini с помощью программатора USBasp

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

Обратите внимание

Если Arduino IDE выдаст предупреждение: warning: cannot set sck period. please check for usbasp firmware update. Не паникуйте, скетч всё равно записался в память микроконтроллера и будет работать.

Источник

Adblock
detector