Программатор из arduino uno: Использование Arduino UNO в качестве программатора / Хабр
|Содержание
У Вас есть Arduino? Значит у Вас есть программатор! – RoboCraft
Все таки, поговорка «Век живи — век учись!» придумана неспроста! В свое время, начав интересоваться микроконтроллерами семейства AVR (и в частности, Arduino) я забеспокоился об инструменте для программирования оных. Т.е., программаторах. А ведь программатор (ну, может не в столь явном виде) у меня всегда был под рукой. Это плата Arduino.
ISP (In-system programming) — это способность микроконтроллера получать прошивку находясь уже непосредственно в собранной схеме. Программатором (устройством передающим прошивку от компьютера в контроллер) в нашем случае будет выступать Arduino.
Аргументы для сомневающихся (делать/не делать)
За:
1) этот шилд даст вторую жизнь «морально устаревшим» платам Arduino на Atmega8
2) У Вас появиться прекрасная возможность писать программы для микроконтроллеров серии Attiny в привычном Arduino IDE
3) это самый «копеечный» программатор (при условии наличия у Вас Arduino)
4) этот шилд ОЧЕНЬ прост в изготовлении, не содержит дефицитных деталей и не требует настройки
5) позволяет (в какой-то мере) сохранить порядок на Вашем рабочем месте 🙂
Против:
— я не нашел
Если готовы, то поехали.
Чтобы Arduino стала ISP программатором на нее необходимо залить специальную прошивку. Эта прошивка поставляется вместе с Arduino IDE. Напомню. Еще без какой-либо периферии Arduino подключаем к компьютеру и загружаем Arduino IDE. Выбираем [File] -> [Examples] -> [ArduinoISP]
Ну и далее, люди делают что-то примерно такое:
Кстати, я тоже так делал :). Собственно, после чего и появилась эта задумка. Вариант «клубкового» соединения, естественно, имеет право на жизнь. Но, скажем так:
-> Неудобно
-> ненадежно
-> некрасиво и все такое 🙁
Логично было бы предположить, что умные люди смекнули «что к чему» и наладили выпуск готовых ARDUINO ISP Shield-ов. Вот парочка примеров:
Я тоже хочу такую вещь! Но, «Это не наш метод! Мы все сделаем сами!!!»
Итак, я вспомнил все микроконтроллеры, с которыми мне приходилось сталкиваться. Это были Atmega8 (168/328), Atmega16, Attiny2313(4313), Attiny13(45/85). Итого, (для меня, по крайне мере) ограничимся корпусами DIP8, DIP20 и DIP28. Здоровенная Atmega16 — «пока нервно курит в сторонке». Поставим дополнительно стандартный ICSP разъем на 10 контактов, для возможности подключения внешнего адаптера. И для красоты установим светодиоды, отображающие текущее состояние программатора. Распиновку берем из скетча ArduinoISP:
// This sketch turns the Arduino into a AVRISP // using the following arduino pins: // // pin name: not-mega: mega(1280 and 2560) // slave reset: 10: 53 // MOSI: 11: 51 // MISO: 12: 50 // SCK: 13: 52 // // Put an LED (with resistor) on the following pins: // 9: Heartbeat - shows the programmer is running // 8: Error - Lights up if something goes wrong (use red if that makes sense) // 7: Programming - In communication with the slave
Схема. Хм, конечно сложно это назвать схемой, но все же:
Разводка печатной платы много времени не заняла. Я фактически расположил нужные корпуса и разъемы на плату, подписал нужные выводы и тупо их соединял 🙂 Вот, что получилось:
Лут:
После запайки:
Вторая сторона:
Обращаю Ваше внимание, на наличие трех SMD перемычек (резисторы 0R).
Вот готовое изделие:
!!!ВАЖНЫЙ МОМЕНТ!!! Очень рекомендую установить панельки с цанговыми контактами!
Итак, все у нас готово для проведения «ходовых» испытаний. Подключаем наш шилд к ЗАРАНЕЕ «прошитую» Ардуино
.
Проверяем работоспособность с помощью GUI оболочки для AVRDUDE:
Для «гурманов», зеленой полоской я выделил соответствующие параметры для консольного варианта 🙂
Обращаю ваше внимание на правильный выбор типа программатора и типа соединения. Уточнить можно в IDE (выше приведен скриншот для самопальной COM-портовой платы).
Ниже картинки для варианта с CraftDuino (у меня CraftDuino общается через виртуальный COM N14. Естественно, у Вас может быть другой)
Все хорошо!! Радуемся и хлопаем в ладоши 🙂 (честно говоря, получившаяся плата мне ОЧЕНЬ нравится. Я пишу эту статью и верчу ее в руках).
Пара полезных ссылок, о том, как подружить микроконтроллеры Attiny со средой программирования Arduino:
Attiny13
Attiny2313
Ну а дальше уже сами 🙂 Как говорится, Google Вам в помощь!
Весь материал проекта забираем ТУТ.
Все удачи и хорошего настроения!
Про Ардуино и не только: Arduino as ISP
Arduino as ISP — программатор из Ардуино
Есть у меня пара идей для будущих публикаций, но в них будет использоваться программатор. Поэтому сегодня я расскажу о том, как превратить Ардуино в ISP программатор, для чего он нужен и как им пользоваться. А в качестве примера будет описана процедура прошивки загрузчика в Ардуино.
Что такое ISP?
ISP (In-System Programming) расшифровывается как внутрисхемное программирование. Это технология, которая позволяет программировать микроконтроллер, установленный в устройство. До появления этой технологии микроконтроллеры программировались перед установкой в устройство, а для их перепрограммирования требовалось их извлечение из устройства.
Существует 2 основных подхода внутрисхемного программирования:
- С использованием программатора. В этом случае программатор работает напрямую с памятью микроконтроллера, самостоятельно размещая байты прошивки по нужным адресам. Микроконтроллер в этом процессе не участвует.
- С использованием загрузчика. Загрузчик, он же бутлоадер (от английского bootloader) — это программа, записанная обычно в конце ПЗУ микроконтроллера, которая берет на себя функции программатора. При включении микроконтроллера управление сначала передается загрузчику. Он проверяет наличие определенных условий, сообщающих о необходимости перейти в режим программирования. Если условия не выполнены, то управление передается основной программе, в противном случае загрузчик принимает данные по заранее определенному интерфейсу и размещает их в ПЗУ. Таким образом микроконтроллер перепрограммирует сам себя.
Одной из важнейших особенностей Ардуино является возможность программирования непосредственно через USB порт, без дополнительного программатора. Сразу после включения Ардуино запускается загрузчик, который работает несколько секунд. Если за это время загрузчик получает команду программирования от IDE по последовательному интерфейсу UART, то он принимает и загружает новую программу в память микроконтроллера.
Использование загрузчика существенно упрощает процесс перепрограммирования микроконтроллера, что особенно полезно при отладке. Но за удобство приходится платить. Во-первых, загрузчик занимает часть ПЗУ и для программы пользователя остается меньший объем памяти. Во-вторых, загрузчик не может изменить Fuse-биты и Lock-биты (в отличие от программаторов). Ну и, конечно, не обойтись без программатора, если вы хотите обновить бутлоадер или загрузить его в чистый МК. Таким образом существует ряд задач, которые могут быть выполнены только с использованием программатора. Если же у вас нет аппаратного программатора, то вместо него можно воспользоваться Ардуино, о чем и будет рассказано дальше.
Arduino as ISP. Прошивка загрузчика в Ардуино.
Итак, мы решили превратить Ардуино в программатор. Для примера попробуем прошить загрузчик в целевую плату Ардуино. Сначала подготовим плату, которую будем использовать в качестве программатора. Для этого загрузим в нее скетч ArduinoISP, его можно найти в стандартных примерах:
Теперь подсоединим к ней плату, в которую хотим прошить загрузчик. При прошивке используются линии SPI (Serial Peripheral Interface — последовательный периферийный интерфейс). Выводы MOSI, MISO и SCK обеих плат должны быть соединены, а вывод SS Ардуино-программатора подключается к выводу Reset целевой платы. И еще 2 провода нужны чтобы запитать целевую плату. Также может потребоваться предотвратить автоматическую перезагрузку платы-программатора, для этого между ее выводами Reset и GND нужно установить электролитический конденсатор на 10мкФ. Сначала можно попробовать без конденсатора, если же прошивка не начнется, то попробуйте добавить в схему конденсатор. По моим наблюдениям конденсатор нужен при использовании дешевых Ардуино-клонов (без контроллера ATmega8u2) в качестве программатора.
Если мы работаем с двумя платами 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 | 5В |
Nano | 11 или ICSP-4 | 12 или ICSP-1 | 13 или ICSP-3 | 5В |
Pro Mini | 11 | 12 | 13 | 3.3В или 5В |
Mega1280, Mega2560 | 51 или ICSP-4 | 50 или ICSP-1 | 52 или ICSP-3 | 5В |
Leonardo | ICSP-4 | ICSP-1 | ICSP-3 | 5В |
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В |
Подключение Uno в качестве программатора к плате Nano через ICSP |
Обратите внимание на нумерацию выводов ICSP платы Nano: она начинается с правого нижнего угла. Поэтому на приведенной схеме Arduino Nano перевернута.
Теперь необходимо вернуться в Arduino IDE и изменить в ней параметры:
- В меню Инструменты > Плата выбираем вариант, соответствующий нашей целевой плате.
- В меню Инструменты > Программатор выбираем Arduino as ISP.
Подключаем плату-программатор к компьютеру, открытый в данный момент скетч значения не имеет, выбираем пункт меню Инструменты > Записать загрузчик и дожидаемся сообщения об успешном завершении операции. На этом прошивка бутлоадера в Ардуино завершена. Кроме того процедура прошивки бутлоадера включает в себя установку фьюзов микроконтроллера. Подробнее о фьюзах будет рассказано в следующей публикации.
Резюмируя вышеописанное, выделим основные шаги для прошивки загрузчика с использованием Ардуино в качестве ISP программатора:
- Запускаем Arduino IDE, открываем из примеров скетч ArduinoISP и загружаем его в плату Ардуино, которую будем использовать как программатор.
- Подключаем к Ардуино-программатору целевую плату по приведенной схеме.
- Меняем плату в Arduino IDE на целевую.
- Выбираем в IDE программатор Arduino as ISP.
- Записываем загрузчик в целевую плату командой из меню IDE.
Прошивка скетча с использованием Arduino as ISP
Еще один пример использования программатора — это загрузка скетча в целевую плату. Разумеется, это проще сделать привычным способом, подключив ее напрямую к компьютеру, но это может оказаться невозможным, например, при выходе из строя контроллера ATmega8u2/ATmega16u2 или преобразователя USB/UART. Если при этом основной микроконтроллер Ардуино остался рабочим, то мы можем прошить его, используя программатор. Для этого выполняем все шаги, описанные выше, но на последнем этапе вместо записи загрузчика необходимо:
- Открыть в Arduino IDE интересующий скетч.
- Загрузить скетч в целевую плату командой из меню IDE: Скетч > Загрузить через программатор.
Таким образом можно подарить вторую жизнь плате Ардуино, которую компьютер уже не видит через USB.
УНО R3 | Документация Arduino
Arduino UNO — плата микроконтроллера на базе ATmega328P . Он имеет 14 цифровых входных/выходных контактов (из которых 6 могут использоваться как выходы ШИМ), 6 аналоговых входов, керамический резонатор 16 МГц, соединение USB, разъем питания, разъем ICSP и кнопку сброса. Он содержит все необходимое для поддержки микроконтроллера; просто подключите его к компьютеру с помощью USB-кабеля или включите адаптер переменного тока в постоянный или аккумулятор, чтобы начать работу. Вы можете возиться со своим UNO, не слишком беспокоясь о том, что сделаете что-то не так, в худшем случае вы можете заменить чип за несколько долларов и начать все сначала.
ATmega328P
Классический высокопроизводительный микроконтроллер AVR® с низким энергопотреблением.
Сменный чип
ATmega328P легко заменяется, так как он не припаян к плате.
EEPROM
ATmega328P также имеет 1 КБ EEPROM, память, которая не стирается при выключении питания.
Коннектор батареи
Arduino UNO имеет штекерный разъем, который прекрасно работает со стандартной батареей 9В.
Здесь вы найдете технические характеристики Arduino UNO R3.
Name | Arduino UNO R3 |
---|---|
SKU | A000066 |
ATmega328P | |
USB-B | |
Built-in LED Pin | 13 |
Digital I /O Контакты | 14 |
Аналоговые входные контакты | 6 |
PWM. 0029 | Yes |
SPI | Yes |
I/O Voltage | 5V |
Input voltage (nominal) | 7-12V |
DC Current per I/O Pin | 20 mA |
Power Supply Connector | Barrel Plug |
Main Processor | ATmega328P 16 MHz |
USB-Serial Processor | ATmega16U2 16 MHz |
ATmega328P | 2KB SRAM, 32KB FLASH, 1KB EEPROM |
Weight | 25 g |
Width | 53.4 mm |
Length | 68.6 mm |
Software & Cloud
Следующие программные инструменты позволяют программировать доску как в режиме онлайн, так и в автономном режиме.
Arduino IDEArduino CLIWeb Editor
Оборудование
Перечисленное ниже оборудование совместимо с данным продуктом.
экраны
4 экрана реле
Motor Shield Rev3
Первые шаги
Краткое руководство
Все, что вам нужно знать, чтобы начать работу с новой платой Arduino.
Предлагаемые библиотеки
Wire
Эта библиотека позволяет вам взаимодействовать с устройствами I2C/TWI.
SPI
Библиотека SPI позволяет вам взаимодействовать с устройствами SPI, используя Arduino в качестве контроллера.
Servo
Библиотека Servo позволяет плате Arduino управлять серводвигателями RC (для хобби).
Основы Arduino
Встроенные примеры
Встроенные примеры — это скетчи, включенные в среду разработки Arduino IDE и демонстрирующие все основные команды Arduino.
Узнайте
Откройте для себя интересные статьи, принципы и методы, связанные с экосистемой Arduino. Справочник по языку
Язык программирования Arduino
можно разделить на три основные части: функции, значения (переменные и константы) и структура.
Аналоговый вход
Используйте потенциометр для управления миганием светодиода.
Аналоговый
Вход
Светодиод
LDR
Потенциометр
Аналоговый считываемый серийный номер
Считайте потенциометр, распечатайте его состояние в последовательном мониторе Arduino.
Основы
Аналоговый
Вход
Потенциометр
Включение и выключение светодиода каждую секунду.
Основы
Светодиод
Выход
Цифровое чтение серийного номера
Чтение переключателя, вывод состояния на серийный монитор Arduino.
Основы
Ввод
Кнопочный
Цифровой
Анатомия платы Arduino Uno
Обзор классической Arduino UNO.
Основы
UNO
Обзор компонентов Arduino UNO
Углубленный взгляд на классическую плату Arduino UNO.
Обзор
UNO
Управление выходом ШИМ с помощью потенциометра через MATLAB®
Узнайте, как уменьшить яркость светодиода, подключенного к UNO R3, с помощью MATLAB®.
MATLAB
Interactive Viewer
Взаимодействие со схемами, печатной платой и 3D-моделью продукта.
Схема контактов
Схема, показывающая функции и расположение контактов на изделии.
Загрузки
Техническое описание
Полная распиновка
Схемы
CAD-файлы
Обзор компонентов Arduino UNO | Документация по Arduino
Подробный обзор классической платы Arduino UNO.
АВТОР: Arduino
Глядя на плату сверху вниз, это схематичное изображение того, что вы увидите (части платы, с которыми вы можете взаимодействовать в ходе обычного использования, выделены):
Ардуино УНО.
Начиная по часовой стрелке от верхнего центра:
- Аналоговый эталонный контакт (оранжевый)
- Цифровая земля (светло-зеленый)
- Цифровые контакты 2–13 (зеленый)
- Цифровые контакты 0–1/Последовательный вход/выход — TX /RX (темно-зеленый) — эти контакты нельзя использовать для цифрового ввода-вывода (digitalRead и digitalWrite), если вы также используете последовательную связь (например, Serial. begin).
- Кнопка сброса — S1 (темно-синяя)
- Встроенный последовательный программатор (сине-зеленый)
- Аналоговые входы, контакты 0-5 (голубой)
- Контакты питания и заземления (питание: оранжевый, заземление: светло-оранжевый)
- Вход внешнего источника питания (9–12 В пост. тока) — X1 (розовый)
- Переключает внешнее питание и питание USB (установите перемычку на два контакта, ближайших к нужному источнику питания) — SV1 (фиолетовый)
- USB (используется для загрузки скетчей в платы и для последовательной связи между платой и компьютером; может использоваться для питания платы) (желтый)
Микроконтроллеры
ATmega328P (используется на самых последних платах)
- Контакты цифрового ввода/вывода: 14 (из которых 6 обеспечивают выход ШИМ)
- Контакты аналогового ввода: 6 (DIP) или 8 (SMD)
- DC
- Ток на контакт ввода/вывода: 40 мА
- Флэш-память: 32 КБ
- SRAM: 2 КБ
- EEPROM: 1 КБ
ATmega168 (используется на большинстве Arduino Diecimila и ранних версиях I168 8005)
05 Выводы O: 14 (из которых 6 обеспечивают выход PWM)
- Контакты цифрового ввода/вывода: 14 (из которых 3 обеспечивают выход ШИМ)
- Контакты аналогового ввода: 6
- Ток постоянного тока на контакт ввода/вывода: 40 мА
- Флэш-память : 8 КБ
- SRAM: 1 КБ
- EEPROM: 512 байт
Цифровые контакты
В дополнение к конкретным функциям, перечисленным ниже, цифровые контакты на плате Arduino могут использоваться для ввода и вывода общего назначения с помощью команд pinMode(), digitalRead() и digitalWrite(). Каждый вывод имеет внутренний подтягивающий резистор, который можно включать и выключать с помощью функции digitalWrite() (со значением HIGH или LOW соответственно), когда вывод сконфигурирован как вход. Максимальный ток на вывод составляет 40 мА.
- Серийный номер: 0 (RX) и 1 (TX). Используется для приема (RX) и передачи (TX) последовательных данных TTL. На плате Arduino Diecimila эти контакты подключены к соответствующим контактам последовательного чипа FTDI USB-to-TTL. На Arduino BT они подключены к соответствующим контактам модуля Bluetooth® WT11. На Arduino Mini и LilyPad Arduino они предназначены для использования с внешним последовательным модулем TTL (например, с адаптером Mini-USB).
- Внешние прерывания: 2 и 3. Эти контакты можно настроить для запуска прерывания по низкому значению, переднему или заднему фронту или изменению значения. Подробности смотрите в описании функции attachInterrupt().
- ШИМ: 3, 5, 6, 9, 10 и 11. Обеспечьте 8-битный вывод ШИМ с помощью функции AnalogWrite(). На платах с ATmega8 выход ШИМ доступен только на контактах 9, 10 и 11.
- Сброс BT: 7. (только для Arduino BT) Подключен к линии сброса модуля Bluetooth®.
- SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Эти контакты поддерживают связь SPI, которая, хотя и обеспечивается базовым оборудованием, в настоящее время не включена в язык Arduino.
- Светодиод: 13. На Diecimila и LilyPad есть встроенный светодиод, подключенный к цифровому контакту 13. Когда контакт имеет ВЫСОКОЕ значение, светодиод горит, когда контакт НИЗКИЙ, он выключен.
Аналоговые контакты
В дополнение к конкретным функциям, перечисленным ниже, аналоговые входные контакты поддерживают 10-разрядное аналого-цифровое преобразование (АЦП) с использованием функции AnalogRead(). Большинство аналоговых входов также можно использовать в качестве цифровых контактов: аналоговый вход 0 — как цифровой контакт 14, аналоговый вход 5 — как цифровой контакт 19.. Аналоговые входы 6 и 7 (присутствующие на Mini и BT) не могут использоваться в качестве цифровых контактов.
- I2C: 4 (SDA) и 5 (SCL). Поддержка связи I2C (TWI) с использованием библиотеки Wire (документация на веб-сайте Wiring).
Контакты питания
- VIN (иногда обозначается как «9V»). Входное напряжение платы Arduino при использовании внешнего источника питания (в отличие от 5 вольт от USB-соединения или другого регулируемого источника питания). Вы можете подавать напряжение через этот контакт или, если подаете напряжение через разъем питания, получить к нему доступ через этот контакт. Обратите внимание, что разные платы принимают разные диапазоны входного напряжения, см. документацию к вашей плате. Также обратите внимание, что LilyPad не имеет контакта VIN и принимает только регулируемый вход.
- 5В. Регулируемый источник питания, используемый для питания микроконтроллера и других компонентов на плате. Это может происходить либо от VIN через встроенный регулятор, либо от USB или другого регулируемого источника питания 5 В.
- 3V3. (Только для Diecimila) Питание 3,3 В, генерируемое встроенной микросхемой FTDI.