Программатор из 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 разъем.

Плата АрдуиноMOSIMISOSCKУровень
Uno, Duemilanove11 или ICSP-412 или ICSP-113 или ICSP-3
Nano11 или ICSP-412 или ICSP-113 или ICSP-3
Pro Mini1112133.3В или 5В
Mega1280, Mega256051 или ICSP-450 или ICSP-152 или ICSP-3
LeonardoICSP-4ICSP-1ICSP-3 
DueICSP-4ICSP-1ICSP-3 3.
ZeroICSP-4ICSP-1ICSP-33.3В
10111 или ICSP-412 или ICSP-113 или ICSP-33.3В
Подключение Uno в качестве программатора к плате Nano через ICSP

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

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

  1. В меню Инструменты > Плата выбираем вариант, соответствующий нашей целевой плате.
  2. В меню Инструменты > Программатор выбираем 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)

  • Аналоговые входы: 6 (DIP) или 8 (SMD)
  • Постоянный ток на контакт ввода/вывода: 40 мА
  • Флэш-память 16 КБ:
  • SRAM: 1 КБ
  • EEPROM: 512 байт
  • 9 ATmega8 (используется на некоторых старых платах)

    • Контакты цифрового ввода/вывода: 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *