Прошивки для ардуино

Как прошить Arduino Pro Mini (от А до Я)

Опубликовано: 31.08.2017 20:48

Введение

Приветствую Вас, читатели нашего ресурса. Сегодня мы поговорим об одном контроллере из серии Arduino, а именно об Arduino Pro Mini. Это маленький, компактный контроллер, имеющий все преимущества Arduino, но при этом очень компактный, можно сказать самый маленький из всех существующих Arduino контроллеров на данный момент. Многих так же привлекает и цена его Китайский копий, а стоят они от одного до двух долларов за штуку (местами и того меньше), что так же заставляет задуматься об его приобретении. Но существует и одна проблема, его не так-то уж и просто прошить, особенно Китайские копии, которые оснащают процессором Atmel ATmega168P, которыми некогда не оснащали официальные контроллеры Arduino Pro Mini и как следствие Arduino IDE отказывается их прошивать, сообщая о неправильной сигнатуре процессора.

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

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

Arduino Pro Mini очень компактный, а компактность требует жертв и жертва это — USB интерфейс который полностью выкосили в данном контроллере т.е. подключить Pro Mini к компьютеру напрямую у вас не получится и как следствие для этого понадобится либо специальный переходник USB в TTL или другой контроллер Arduino.

Далее мы разберем три способа как прошить Pro Mini и для всех трех способов нам что-то понадобиться:

  • Первый способ. Прошиваем через адаптер USB в TTL – нужен сам адаптер в количестве одной штуки.
  • Второй способ. Прошиваем через Arduino UNO – нужна Arduino UNO, но не простая, а в классическом исполнении, это та Arduino, в которой процессор выполнен в DIP корпусе и вставлен в черный разъем.
  • Третий способ. Прошиваем через SPI интерфейс – нужна любая Arduino: UNO, Nano, Mega, Leonardo – не важно, главное чтобы был USB разъем для подключения к ПК.

Первый способ. Прошиваем через адаптер USB в TTL

Первым и самым простым способом загрузить свой скетч в Arduino Pro Mini — это приобрести специальный адаптер USB в TTL или как его называют UART переходник. Как правило, этот переходник это и есть та часть, которую вырезали из Arduino Nano, превратив ее в Arduino Pro Mini. Стоимость подобных переходников копеечная, а выбор и того больше. Китайцы наштопали их столько, что глаза разбегаться какой из них выбрать. При этом цена сего девайса не более одного вечно зеленого. После того как вы соедините Pro Mini и UART переходник проводами или шлейфом, остаётся только воткнуть его (переходник) в ПК, установить драйвер (не для всех переходников они требуются) и на этом собственно все. Ваш ПК определит переходник как очередной COM-порт, который появляется при подключении любой Arduino к ПК. Выбираете его, плату, с которой будете работать (Arduino Pro Mini) и спокойно загружаете свой скетч.

Единственным нюансом в данных переходниках, является наличие или отсутствие контактов RST или DTR. Рекомендую покупать переходники, на которых эти контакты есть. Они значительно упрощают жизнь и делают процесс прошивки беспроблемным. Если же вы купили уже переходник, на котором подобных контактов нет, то при каждой загрузке скетча в Arduino вам придется нажимать на кнопку Reset, что не всегда получается сделать вовремя, и это вносит свои неудобства.

Подключение переходник вы можете посмотреть по таблице ниже:

USB в TTL (UART) Arduino Pro Mini
RX RX
TX TX
GND GND
5V VCC
RST или DTR или GRN RST или DTR

Второй способ. Прошиваем через Arduino UNO

Для этого способа нам понадобиться классическая Arduino UNO. Классическая эта та, в которой корпус микросхемы выполнен в DIP корпусе и вставлен в специальный разъем. Вот эту микросхему нам надо аккуратно поддеть отверткой. Тут важно не сломать процессор, поддевайте аккуратно, не погнув ноги.

Arduino UNO. Процессор выполнен в DIP корпусе.Аккуратно поддеваем и вытаскиваем процессор отверткой.

После того как мы вытащили процессор из Arduino UNO мы по сути получили тот самый переходник USB в TTL, осталось только соединить проводами наш новый переходник и Arduino Pro Mini по следующей схеме:

Arduino UNO (без процессора) Arduino Pro Mini
RX RX
TX TX
GND GND
5V VCC
RST RST

После того как вы соединили две Arduino воедино, можно приступать к прошивке Arduino Pro Mini. Подключаем Arduino UNO по USB к ПК. Выбираем в настройках Arduino IDE COM-порт, указываем, что мы теперь работаем не с Arduino UNO, а с Arduino Pro Mini и все, заливаем наши скетчи. Способ довольно интересный, если вы не боитесь испортить Arduino и рядом не оказалось переходника USB в TTL.

Третий способ. Прошиваем через SPI интерфейс

Третьим и самым неудобным способом загрузить свой скетч в Arduino Pro Mini это прошить его при помощи ICSP интерфейса. Данный интерфейс присутствует на большинстве плат Arduino. Основные контакты данного интерфейса выведены на порты с 10 по 13, а так же выведены отдельно в виде шести контактной колодки с подписью ICSP. Располагается колодка, как правило, в центральной правой части Arduino.

Прошивка Arduino Pro Mini в этом случае делиться на два этапа:

  1. Прошивка платы Arduino как ISP программатора.
  2. Настройка Arduino IDE и загрузка скетча в Arduino Pro Mini.

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

  1. Запускаем Arduino IDE.
  2. Файл — Примеры — 11.ArduinoISP — ArduinoISP.
  3. Инструменты — Плата — Arduino UNO.
  4. Инструменты — Порт — Выбираем COM-порт.
  5. Компилируем и заливаешь в Arduino UNO.

Далее нам необходимо соединить две Arduino проводами по следующей схеме:

Arduino UNO (ISP) Arduino Pro Mini
5V VCC
GND GND
10 RST
11 (MOSI) 11 (MOSI)
12 (MISO) 12 (MISO)
13 (SCK) 13 (SCK)

Теперь опять открываем Arduino IDE. Открываем в ней скетч который вы хотите залить в Pro Mini и выполняете следующие действия:

2. Инструменты — Плата — Arduino Pro Or Pro Mini
3. Инструменты — Процессор — ATmega168 (5V, 16 MHz)
4. Инструменты — Порт — Выбираете порт
5. Инструменты — Программатор — Arduino as ISP
6. Скетч — Загрузить через программатор

Как видите загружать скетч в этом режиме надо через специальное меню «Загрузить через программатор», а не через кнопку «Загрузить» на главной форме Arduino IDE. В этом и связано все неудобство. Если вы нажмете кнопку «Загрузить» как это делаете обычно, то вы зальете скетч в Arduino UNO, а не Arduino Pro Mini, что затрет там скетч программатора. Так же в этом режиме недоступен класс Serial, то есть отлаживать свой скетч обмениваясь сообщениями по COM-порту у вас так же не получится. Ну и еще одна ложка дегтя в том, что после данной перепрошивки, в большинстве случаев, перепрошить Arduino Pro Mini через переходник у вас так же больше не получиться. Исправляется это заливкой нового bootloader-а через меню «Инструменты» — «Записать Загрузчик».

Добавляем китайский Pro Mini в Arduino IDE

Как я уже говорил в данной статье, Китайские клоны порой оснащают процессорами которыми не оснащали официальные версии Arduino Pro Mini и как следствие при прошивке их вы можете увидеть следующую или подобную ошибку.

avrdude: Expected signature for ATmega168 is 1E 94 06 Double check chip, or use -F to override this check. Найден неправильный микроконтроллер. Вы указали правильную плату в меню Инструменты -> Плата?

Исправляется это легко:

  • Для начала необходимо открыть папку в которой расположена Arduino IDE.
  • Затем переходим в следующую папку «Папка с Arduino IDE\hardware\arduino\avr\».
  • Ищем там файл «boards.txt» и открываем его в текстовом редакторе.
  • Ищем в файле следующую строку «pro.menu.cpu.16MHzatmega168.build.mcu=atmega168».
  • И заменяем ее на «pro.menu.cpu.16MHzatmega168.build.mcu=atmega168p».
  • Перезапускаем Arduino IDE и на этом все.
  • Если у вас к примеру 328 процессор то делаем все так же, только ищем строку с цифрами 328.

Заключение

В данной статье я привел аж три варианта загрузки скетчей в Arduino Pro Mini. Лично я использую второй. Мне он больше нравиться.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

>SinaProg

Основная задача утилиты SinaProg заключается в прошивке микроконтроллерного оборудования.

Arduino.ru

Универсальный 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, который создал для нас этот уникальный софт для ардуино.

Итак, какие функции умеет выполнять Arduino под управлением этой «подопытной обезьяны» (ScratchMonkey). Из мануала —

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.

Рис.1

Рис.1

Рис.3

Для начала этот программатор нужно “прописать” в ArduinoIDE . Делаем так: в папке ScratchMonkey/hardware/scratchmonkey , находим и открываем файл programmers.txt , копируем из него строки:

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

Рис.4

Рис.5

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

Рис.6

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

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

Рис.7

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

Рис.8

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

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

Рис.10

На компе запускается еще один ArduinoIDE и включается монитор предварительно выбранного порта. В мониторе будет выводиться информация ввиде как на рис. 11 слева. Расшифровка этой информации также показана на рисунке. Режим отладки «включается» в файле SmoConfig.h, где в одной из строк
#undef DEBUG_ISP
#undef DEBUG_HVSP
#undef DEBUG_HVPP
#undef DEBUG_TPI
#undef DEBUG_COMM
#undef нужно заменить на #define. Залить скетч заново в Arduino. Следует отметить, что процессы чтения/записи в режиме отладки замедляются раз в 100.

Рис.11

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

Рис.12

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

Кому интересно как это делается можно посмотреть здесь , но сначала нужно пропатчить ( внести изменения в исходники avrdude). Patch –файл можно найти в папке ScratchMonkey — avrdude.patch.

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

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

ScratchMonkey ISP/TPI

ScratchMonkey HVSP

ScratchMonkey HVPP

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

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

Успехов.

Файлы:
Пропатченная дуда
Схемы

Превращаем 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, подключив всё, как я писал, например вот тут:
Прошивка и программирование ATtiny13 при помощи Arduino.
Если в двух словах, то подключаем пины Reset, MOSI, MISO, SCK микроконтроллера, который будем прошивать/считывать прошивку/изменять фьюзы так, как указано в скетче в комментариях, а именно:
… // pin name: not-mega: mega(1280 and 2560) // slave reset: 10: 53 // MOSI: 11: 51 // MISO: 12: 50 // SCK: 13: 52 …
Вот пример подключения к ардуине ATmega8:

Ну и по аналогии… Ищем карту пинов, например, в даташите (техдокументация на МК) интересующего нас микроконтроллера, вот, к примеру, первая ссылка из гугла по запросу «ATmega8 pdf».
Ладно, не буду больше томить, .
;
Калькулятор фьюзов;
Прошивка и программирование ATtiny13 при помощи Arduino;
Все мои публикации.
PS У меня было такое, что ATtiny13 перестала прошиваться, на попытки её программирования, после того, как я попробовал запустить её на частоте 128 kHz, откопал где-то вот такой, слегка модифицированный код ArduinoISP который заставляет прошивку/изменение фьюзов происходить медленнее в несколько раз и может ещё какая-то магия, не разбирался, честно.

Ionovi4 ›
Блог ›
COM программатор Громова. Первая программа!

Привет всем. Начал решился таки я осваивать помаленьку тему про микроконтроллеры семейства Atmel. Купил по паре моделей Atmega8a, Atmega16a, Attyni13a в DIP корпусе. Встал вопрос как прошить? Выбора особого не было, LPT нет разъема в ПК, остается USB и COM. Конечно же USB удобней всего, прошивать с ноута и все такое… Понравился программатор USBasp, но для его работы, надо Мегу8 прошить, опять же нужен программатор. Решил пока таки USBasp отложить на некоторое время, в собрать простой как LPT программатор, всем известный COM программатор Громова. Подробная инструкция по его сборке находится Собственно собирается он легко, но аккуратность не помешает.

После того как программатор был собран, решил его опробовать. Взял Attiny13a, нашел пример простой работы микроконтроллера. Написал программу в CodeVisionAVR, проверил работу в PROTEUSе, все работает. Осталось залить прошивку в микроконтроллер (МК). МК подключал к программатору через макетную плату, очень удобно и быстро, конечно в дальнейшем сделаю как полагается на плате, под различные МК. Подключил прогромматор как требовалось в DataSheet. Питание 5v подавал на МК от USB (открезал старый провод от мыши!)

Пробовал прошивать тем же CodeVisionAVR, но чет не увидел он мой МК, мб конечно я настроил не правильно или еще что-то. Потом скачал PonyProg, тоже не увидел МК. Начал грешить что руки из попы, собрал не правильно программатор, перепроверил, нет все верно. Скачал UniProf и О ЧУДО! МК определился на COM 1, как Attiny13! УРА! Все же теперь думаю чет не так в CodeVisionAVR настроил, потом разберусь как нить. Вообщем считал МК, пустой, все ячейки «——«, открыл прошивку hex, появились записи. Нажал прошить, повалились ошибки. Почитал инструкцию еще раз, оказывается надо было считать Fuse Bit и записать как они были ничего не меняя. Снова попытка прошить, и УРА! Прошился! После того как МК был успешно прошит, собрал схему со светодиодами и кнопкой для проверки, Чудесным образом все заработало, светодиоды по нажатию кнопки переключались по порядку, 1, 2, 3, и с начала 1, 2, 3.

.

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

Вот он простой код программы:
#include <tiny13.h>
#include <delay.h>