Как использовать ардуино как программатор

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

80р, а ставить для этого Arduino ценой в

1000р. мне жаба не дает) + несколько резисторов, кнопок и 7-ми сегментный индикатор. Но остановился перед проблемой — в отличии от Arduino здесь нужен программатор. Поскольку я не сильно увлекаюсь МК, то программаторов у меня как-то не водится. Arduino теоретически можно использовать в этом качестве, но реально я этого никогда не делал.

Собственно, после этого этапа мы уже имеем программатор типа avrisp, но нужно еще подключить к нему наш МК.

2. Смотрим в datasheet к нужному МК(у меня это ATTiny2313A) и ищем pinout. На следующей картинке я отметил интересующие нас ноги.

3. Теперь пришел самый интересный этап — подключаем наш программатор к МК. Собственно схема подключения не представляет из себя ничего сложного, но есть одна хитрость — нужно подключить конденсатор в 10мкФ(uF) между выходами RESET и GND у Arduino. Причем выход «-» (отмечен белой полосой) должен быть подключен к GND. Данный трюк предотвратит перезагрузку Arduino при заливке прошивки в МК.

Соединяем ноги МК и пины Arduino в соответствии с функционалом из pinout и sketch (Pin10 с ногой PA2, Pin11 с ногой PB5 и тд). Помним что VCC это питание, а в нашем случае — +5V. Для индикации я выбрал следующие светодиоды:
9: Heartbeat — Зеленый. Показывает что программатор работает. В процессе простоя постоянно мигает.
8: Error — Красный. Теоретически загорается при ошибках, но еще ни разу не видел.
7: Programming — Синий. Мигает аналогично Arduino’вским RX/TX при заливке прошивки в МК.
Повесил их через резисторы 220 Ом.
Собранная схема будет выглядеть примерно вот так:

4. Подготавливаем прошивку для нашего МК. Для тестирования я решил использовать обычное мигание светодиодом:

Компилируем в hex (выдрал команды из какого-то Makefile от WinAVR):

Хочу обратить внимание на ограничение скорости заливки в 19200. Без этого параметра я долго пытался что-то залить, но avrdude мне упорно возвращал ошибки типа «programmer is not responding» или «not in sync».

После этого можно подключить светодиод к ноге PB0 МК(через резистор конечно) и посмотреть как он мигает.

Источник

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

Источник

Про Ардуино и не только

четверг, 19 июля 2018 г.

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

Что такое ISP?

ISP (In-System Programming) расшифровывается как внутрисхемное программирование. Это технология, которая позволяет программировать микроконтроллер, установленный в устройство. До появления этой технологии микроконтроллеры программировались перед установкой в устройство, а для их перепрограммирования требовалось их извлечение из устройства.

Существует 2 основных подхода внутрисхемного программирования:

Использование загрузчика существенно упрощает процесс перепрограммирования микроконтроллера, что особенно полезно при отладке. Но за удобство приходится платить. Во-первых, загрузчик занимает часть ПЗУ и для программы пользователя остается меньший объем памяти. Во-вторых, загрузчик не может изменить Fuse-биты и Lock-биты (в отличие от программаторов). Ну и, конечно, не обойтись без программатора, если вы хотите обновить бутлоадер или загрузить его в чистый МК. Таким образом существует ряд задач, которые могут быть выполнены только с использованием программатора. Если же у вас нет аппаратного программатора, то вместо него можно воспользоваться Ардуино, о чем и будет рассказано дальше.

Arduino as ISP. Прошивка загрузчика в Ардуино.

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

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

Если используются не Uno, а другие платы Ардуино, то перед подключением программатора к целевой плате необходимо уточнить расположение на них выводов MOSI, MISO и SCK. Их расположение для различных плат приведено ниже в таблице. Как вы можете видеть, не на всех платах Ардуино линии SPI мультиплексированны с цифровыми выводами, поэтому для подключения к данному интерфейсу необходимо использовать разъем ICSP. Ниже показан пример подключения Uno в качестве программатора к плате Nano через ICSP разъем.

Плата Ардуино MOSI MISO SCK Уровень
Uno, Duemilanove 11 или ICSP-4 12 или ICSP-1 13 или ICSP-3
Nano 11 или ICSP-4 12 или ICSP-1 13 или ICSP-3
Pro Mini 11 12 13 3.3В или 5В
Mega1280, Mega2560 51 или ICSP-4 50 или ICSP-1 52 или ICSP-3
Leonardo ICSP-4 ICSP-1 ICSP-3
Due ICSP-4 ICSP-1 ICSP-3 3.3В
Zero ICSP-4 ICSP-1 ICSP-3 3.3В
101 11 или ICSP-4 12 или ICSP-1 13 или ICSP-3 3.3В

Обратите внимание на нумерацию выводов ICSP платы Nano: она начинается с правого нижнего угла. Поэтому на приведенной схеме Arduino Nano перевернута.

Теперь необходимо вернуться в Arduino IDE и изменить в ней параметры:

Резюмируя вышеописанное, выделим основные шаги для прошивки загрузчика с использованием Ардуино в качестве ISP программатора:

Прошивка скетча с использованием Arduino as ISP

Источник

Как использовать ардуино как программатор

Универсальный AVR-программатор на Arduino.

Автор: AV_K
Опубликовано 31.10.2016
Создано при помощи КотоРед.

Как то понадобилось мне позаливать скетч из Arduino IDE в мелкий восьминогий ATTiny85, как правило, для этого используется Arduino с соответствующим скетчем ArduinoISP. Несколько китайских клонов Arduino Nano у меня имелось, поэтому и использовал их. Все бы хорошо, но мне не недоставало одного вывода. Точнее он имеется у тини (вывод RESET), но чтобы задействовать его как цифровой вход, нужно запрограммировать соответствующий фьюз. С помощью ArduinoISP это можно сделать только один раз, и последующие попытки заливки скетчей с помощью этого и других программаторов ISP становятся невозможными, поскольку вывод с функцией RESET становится не доступным. Если дальнейшей модификации скетча (программы) не требуется, то и проблем нет, но в процессе разработки какого то устройства требуется неоднократная перепрошивка мк. Выход из этой ситуации один – использование высоковольтного программатора. Для AVR контроллеров с выводами 8, 14 используется высоковольтное последовательное программирование, а для мк с выводами 20 и больше – высоковольтное параллельное. Я озадачился поиском подобного программатора, но для меня было принципиально важно, чтобы он был на основе Arduino и работал из под Arduino IDE. Рассматривал вариант использования восстановителя фьюзов для тини, но уж очень хлопотная получается перепрошивка. Это нужно сначала восстановить фьюз, затем перепрошить мк, затем фьюз и т.д. В силу своих скромных способностей в программировании, вариант самому написать скетч для высоковольтного программатора на Arduino отпадал. А вот поиск в инете увенчался успехом. Спасибо парню по имени Matthias Neerache, который создал для нас этот уникальный софт для ардуино.

ScratchMonkey использует расширенную версию протокола STK500v2. Он реализует следующие методы программирования:

— ISP (In-Sistem Programming) внутрисхемное программирование использует 4х проводный протокол SPI для программирования и поддерживается почти всеми AVR мк. Главный недостаток – при определенных установках фьюзов может быть не пригодным для использования. В ISP режиме ScratchMonkey работает аналогично встроенному в IDE ArduinoISP программатору. Однако, ScratchMonkey немного более универсальный, поддерживает микроконтроллеры с более чем 128КБ флэш-памяти, и может работать с различными настройками фьзов определяющих режим генератора тактовой частоты мк. Имеет дополнительный выход XTAL (сигнал тактовой частоты), что позволяет запрограммировать мк с настройкой фьюзов на внешний генератор. Кроме того, ScratchMonkey может эмулировать SPI (на те же пины) на более низкой частоте чем аппаратный SPI (Limp Mode), что позволяет программировать мк с внутренним генератором тактовой частоты, настроенным на 128 кГц.

— HVSP (High Voltage Serial Programming) высоковольтное последовательное используется для программирования мк 8 и 14 пин и не зависит от состояния фьюзов. Требует внешний источник 12В и транзисторный ключ для подачи высокого напряжения на RESET пин.

— HVPP (High Voltage Parallel Programming) высоковольтное параллельное используется для программирования мк от 20 пин и выше, не зависит от состояния фьюзов. Также требует внешний источник 12В и транзисторный ключ для подачи высокого напряжения на RESET пин.

— TPI (Tiny Programming Interface) Тини программный интерфейс для мк семейства ATtiny4/5/9/10 (SOT23-6 package). ТПИ использует только 3 вывода, и может работать либо в режиме низкого напряжения или в режиме высокого напряжения. RESET пин может использоваться как обычные линии ввода/вывода.

Более чем достаточно функций для моих целей. Для начала тестирования составил простейшую схему (рис.1) на основе диаграммм из мануала ScratchMonkey и изготовил на макетке типа шилда для Arduino Nano (клона), Рис.2,3 (только ISP и HVSP режимы). Транзистор любой n-p-n.

scratchmonkey_stk500v2.name=ScratchMonkey (STK500 Mode)
scratchmonkey_stk500v2.communication=serial
scratchmonkey_stk500v2.protocol=stk500v2

scratchmonkey_stk500v2_hvsp.name=ScratchMonkey HVSP (STK500 Mode)
scratchmonkey_stk500v2_hvsp.communication=serial
scratchmonkey_stk500v2_hvsp.protocol=stk500hvsp

Вставляем эти строки в аналогичный файл IDE: arduino-1.6.12/hardware/arduino/avrp/rogrammers.txt. Добавляем к этим строчкам еще по 3 строки (выделены на рис.4), без них не работает. Открываем ArduinoIDE и видим, что добавились два программатора ScrstchMonkey (Рис.5).

В IDE открываем скетч ScratchMonkey.ino и прежде чем залить в Arduino добавим одну строчку. Дело в том, что при высоковольтном последовательном программировании было выявлено, что пин D11Arduino, подающий напряжение питания на мк при обращении к нему остается в 1, а значит программируемый мк остается под напряжением все время, что «не есть гуд». Я не знаю с какой целью автор это упустил, но при параллелном программировании питание отключается после обращения к мк. Открываем вкладку с файлом SMoHWIF_HVSP.h, находим функцию Stop() и добавляем строку digitalWrite(HVSP_VCC, LOW) Рис.6.

Компилим и заливаем скетч в Arduino (без шилда). Вставляем Arduino в шилд, подключаем к разъему (ISP или HVSP) через переходник Attiny. Для режима HVSP подключаем 12V. В пункте Инструменты/Программатор выбираем соответствующий программатор (Рис.5). В пункте «Плата» выбираем предварительно установленные тини. Как добавить ATTiny в IDE здесь. Открываем в IDE файл скетча для тини и заливаем в мк кнопкой «Загрузка» или «Загрузить через программатор».

Что бы сделать действительно универсальный программатор AVR микроконтроллеров из Arduino родилась такая схема, Рис.7, реализующая все возможности ScratchMonkey.

Как видим схема гораздо проще, по сравнению с программаторами с аналогичными возможностями. На линии портов установлены ограничительные резисторы 1кОм, с целью предотвращения кз на этих линиях при неблагоприятных условиях. DD2 – dc/dc конвертер на микросхеме ME2149F 5/12V c Aliexpres Рис.8.

Или самодельный на MC34063, Рис.9. Рис.9

SA1 включает высокое напряжение и переключает низковольтный и высоковольтный режимы. Светодиоды показывают состояние программатора. Разъем XR1 (Debag) для дополнительной отладки программатора, если что-то пойдет не так и сообщений avrdude не достаточно. Подключается к выводам RX и общий конвертера USB/UART, например к такому, Рис.10:

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

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

Пропатченные и скомпилированные файлы avrdude.exe и avrdude.conf вставляются в папки ArduinoIDE вместо штатных файлов. В файл programmers.txt вставляются строки:

scratchmonkey.name=ScratchMonkey ISP/TPI
scratchmonkey.communication=serial
scratchmonkey.protocol=scratchmonkey
scratchmonkey.program.protocol= scratchmonkey
scratchmonkey.program.tool=avrdude
scratchmonkey.program.extra_params=-P

scratchmonkey_hvsp.name=ScratchMonkey HVSP
scratchmonkey_hvsp.communication=serial
scratchmonkey_hvsp.protocol=scratchmonkey_hvsp
scratchmonkey_hvsp.program.protocol= scratchmonkey_hvsp
scratchmonkey_hvsp.program.tool=avrdude
scratchmonkey_hvsp.program.extra_params=-P

scratchmonkey_hvpp.name=ScratchMonkey HVPP
scratchmonkey_hvpp.communication=serial
scratchmonkey_hvpp.protocol=scratchmonkey_pp
scratchmonkey_hvpp.program.protocol= scratchmonkey_hvpp
scratchmonkey_hvpp.program.tool=avrdude
scratchmonkey_hvpp.program.extra_params=-P

Готово. В списке программаторов IDE должны добавиться три программатора:

При программировании должны работать индикация и TPI программирование.

Так как ScratchMonkey использует avrdude, то он будет работать и с оболочками дуды. Например с AVR8-Barn-O-Mat (барномат), необходимо только в установках указать пути расположения файлов avrdude, тогда при следующем запуске «барномата» в списках программаторов увидим ScratchMonkey. Оболочки удобны при заливке HEX-файлов.

Источник

Операционные системы и программное обеспечение