Site Loader

Про Ардуино и не только: 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.


    Как прошить ардуино плату другой ардуиной Arduino 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

    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.

    101

    11 или ICSP-4

    12 или ICSP-1

    13 или ICSP-3

    3.3В


    Обратите внимание на нумерацию выводов 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.

     

    Похожие статьи

    Arduino — что это такое? Популярно для начинающих

    Arduino это недорогая, доступная в смысле покупки электронная плата с микроконтроллером и выводами входов-выходов.

    Arduino выпускаются в различных версиях, но поддерживают один и тот же, простой язык программирования. Огромный успех Ардуино, с уважением к другим микроконтроллерам, связан с тем, что аппаратное и программное обеспечение были опубликованы в открытом бесплатном для общего пользования виде: вы можете читать, изучать и даже расширять его возможности как в плане программного обеспечения, так и с точки зрения аппаратных средств. Вся информация об Ардуино доступна под лицензией «Creative Commons Attribution-ShareAlike 3.0 License».
    Простейший трекер для домашней солнечной электростанции

    Трекер повышает КПД солнечных панелей

    Как известно, солнечные панели имеют максимальный КПД в том случае, когда они расположены перпендикулярно падающим на них солнечным лучам. Но солнце перемещается по небосводу и стационарно установленные панели из-за этого теряют часть своей эффективности. Чтобы повысить их эффективность, используют трекеры — специальные устройства, которые поворачивают панели «вслед» за солнцем:

    Теги: Как прошить ардуино, другой ардуиной, Arduino ISP, прошивка ардуино без программатора, прошивка ардуино isp, прошить ардуино, прошить arduino платой ардуино, ардуино, прошить isp, DenisGeek, Denis_geek, Club_arduino

    ArduinoISP | Советы, приемы и приемы Arduino

    ArduinoISP

    Сохранить Подписаться

    Пожалуйста, войдите, чтобы подписаться на это руководство.

    После входа в систему вы будете перенаправлены обратно к этому руководству и сможете подписаться на него.

    Введение

    Многие люди начинают изучать микроконтроллеры с Arduino, но затем хотят создавать свои собственные проекты, не жертвуя своей платой разработки. Или, может быть, они хотят сделать свой собственный вариант Arduino, совместимый с IDE. В любом случае, распространенная проблема заключается в том, как записать загрузчик на новый чип AVR. Поскольку AVR поставляются пустыми, их необходимо настроить для совместимости с Arduino IDE, но для этого вам понадобится программатор AVR (например, USBtinyISP).

    Хорошей новостью является то, что вы можете записать загрузчик, используя существующую плату Arduino, приложив немного усилий. На сайте arduino.cc есть даже миниучебник.

    Этот учебник является продолжением предыдущего. Сначала мы покажем, как можно сделать постоянный загрузчик-загрузчик, припаяв 28-контактный ZIF-разъем к proto-shield и используя выходную линию PWM Arduino для генерации тактового сигнала. Это позволит вам «спасти» многие микросхемы, которые были настроены на неправильный тип генератора, или изменить те, которые настроены с внешнего генератора (большинство загрузчиков Arduino) на внутренний (например, lilypad).

    Детали

    Вам понадобится…

    • Arduino
    • Комплект протощита
    • 28-контактная розетка ZIF (с нулевым усилием вставки) (можно использовать обычную розетку, но идеально подходит ZIF)
    • Немного проволоки
    • Пустой ATmega328P

    Если вы купили комплект у Adafruit, у вас будет несколько дополнительных элементов, таких как пьезо-зуммер, светодиоды, кнопки и т. д., которые вы можете использовать для автономной версии этого проекта, просто пока игнорируйте их!

    Сборка

    Сначала разместите разъем ZIF на протощите, например:

    .

    Припаяйте все 28 контактов для надежного соединения!

    Припаяйте следующие провода к разъему ZIF

    • Контакт 1 к цифровому 10 — Синий Не забудьте согнуть провод снизу, чтобы подключить его к контакту разъема ZIF при пайке!!!
    • Контакт 7 на 5 В — красный
    • Штырек 8 на массу — черный
    • Контакт 9 к цифровому 9 — Серый
    • Контакт 17 к цифровому 11 — коричневый
    • Контакт 18 к цифровому 12 — оранжевый
    • Контакт 19 к цифровому 13 — желтый
    • Контакт 20 к +5 В — красный
    • Штырек 22 на массу — черный

    Следуйте инструкциям protoshield, чтобы припаять красный светодиод к позиции LED1 , зеленый светодиод к позиции LED2 . Также припаяйте два резистора 1.0K рядом со светодиодами. Мы будем использовать светодиоды в качестве индикаторов. Затем припаяйте провод от вывода LED2 (белый) к аналоговому 0 и провод от вывода LED1 (белый) к цифре 8.

    Наконец, вам нужно будет припаять разъем, чтобы на него можно было установить экран, сломать штекер 0,1 дюйма и вставить его в разъемы Arduino. Затем поместите экран сверху, чтобы припаять его на место.

    Загрузить код

    Время загрузить скетч! Возьмите код из нашего репозитория Github и вставьте его в новый скетч. Затем загрузите его в Arduino.

    У нас есть сообщение, что эта процедура не работает с Arduino 1.5.2. Вместо этого используйте последнюю основную версию Arduino!

    Подсоедините экран сверху, поднимите защелку, вставьте чип и опустите защелку. Убедитесь, что ориентация чипа такая (чтобы с помощью рычага с левой стороны вы могли прочитать текст):

    Когда USB-кабель все еще подключен (и выбран тот же последовательный порт, что и раньше), выберите Tools→Burn Bootloader→w/Arduino as ISP

    В более новых версиях Arduino IDE выберите Arduino как ISP в меню Tools→Programmer , затем выберите Записать загрузчик из меню Инструменты.

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

    Вот оно! Не забывайте, что вы можете записать несколько разных видов загрузчиков, таких как Uno, Duemilanove, Lilypad, так что в зависимости от вашей ситуации вы можете использовать один вместо другого.

    Бонус! Использование с AVRdude

    Вы можете очень легко использовать ArduinoISP из командной строки с AVRdude, стандартной программой, используемой для программирования AVR, запустив:

     avrdude -c arduino -p atmega328 -P COMPORT -b 19200 -U flash:w:filetoburn.hex 

    Instead of atmega328 you can also program atmega8 atmega88 atmega48 atmega168, etc

    хаков Arduino

    Это руководство было впервые опубликовано 12 января 2013 г. обновлено 12 января 2013 г.

    Эта страница (ArduinoISP) последний раз обновлялась 29 октября 2022 г.

    Текстовый редактор на базе tinymce.

    ISP Shield для Arduino


    Evil Mad Science ISP Shield 2.0 — это дополнение к Arduino, которое позволяет использовать Arduino (или совместимый с Shield клон, например Diavolino) в качестве AVR ISP (внутрисистемного программатора). Это можно использовать для записи загрузчиков на «сырые» микросхемы AVR непосредственно в среде программирования Arduino, либо в предоставленном разъеме ZIF, либо на внешней целевой плате. Подробнее об этом процессе можно прочитать здесь.

    Конечно, это не ограничивается только загрузчиками. Комбинация Arduino+ISP Shield представляет собой полноценный ISP AVR, способный программировать любой микроконтроллер AVR, имеющий интерфейс программирования ISP.

    Экран ISP продается в виде набора для пайки. Он включает в себя печатную плату, набор разъемов для стека, 28-контактный разъем DIP ZIF и кристалл 16 МГц (для встроенного программирования микросхем ATmega168/328), 6-контактный разъем для программирования внешних целей, а также некоторые небольшие, но важные детали, такие как Светодиоды, резисторы и кнопка сброса. Имеются также перемычки заголовка конфигурации для подачи (или отключения) питания на внешнее устройство и выбора (или отказа от выбора) блокировки автоматического сброса.

    Evil Mad Science ISP Shield — это аппаратный проект с открытым исходным кодом, разработанный для совместимости с опцией «Arduino as ISP» в последних версиях Arduino IDE. Он основан на ряде предыдущих аппаратных реализаций, наиболее близка к версии Андре Кнорига из Fritzing.

    Полная документация по этому комплекту, включая инструкции по сборке, файлы дизайна и базовую информацию об использовании, доступна на вики Evil Mad Scientist.

    Если вы планируете программировать внешние целевые устройства, вы можете рассмотреть возможность добавления к вашему заказу 6-контактного плоского кабеля DIL и/или 10-контактного плоского кабеля DIL и 10-контактных разъемов DIL (продаются отдельно).

    Особое примечание к уровню навыка : Это простой набор для пайки, но «Arduino как интернет-провайдер» — относительно незрелый процесс, и есть некоторые шероховатости. Соответственно, мы рекомендуем ISP Shield 2.0 как новичкам, так и продвинутым пользователям, но с некоторыми оговорками:

    Предупреждение 1: Arduino как интернет-провайдер лучше всего работает с отключенным автоматическим сбросом. ISP Shield v2 добавляет перемычку для отключения функции автоматического сброса на большинстве Arduino-совместимых плат. Тем не менее, вы будете должны иметь возможность самостоятельно решать, когда отменить автоматический сброс.

alexxlab

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

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