Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

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


    Универсальный мини программатор из Ардуино Uno своими руками, прошивка ArduinoISP

    Какое-то время у меня валялась Arduino Uno. И вот нашлось ей применение. Сделал удобный шилд для прошивки ходовых контроллеров в разных корпусах. Теперь данная отладочная плата активно используется. Шилд позволяет прошивать довольно много контроллеров от ATMEL, которые все еще популярны среди самодельщиков по многим параметрам. Итак, под катом изготовление шилда для прошивки микроконтроллеров Atmega8 (168/328), Attiny13(45/85), причем, как в DIP корпусах, так и в QFP и SOIC, используя адаптеры.



    Ссылку я дал на похожую отладочную плату Arduini Uno, поскольку уже и не помню где брал свою. Моя платка с закосом под оргинал (конечно же это копия — поскольку брал в Китае):


    Собственно, тут уже было немало обзоров на эту плату, поэтому перейдем сразу к шилду.
    Схема шилда, довольно простая:

    Конденсатор C4 позволяет не перезагружаться самой Arduino Uno во время прошивки, без него такое бывает и прошить не удается. На схеме видно два разъема для подключения контроллеров в корпусах dip28 и dip8. Для dip28 предусмотрен кварц с конденсаторами С2 и С3. Также на плате предусмотрен стандартный разъем ICSP для подключения, например, своих плат и их прошивки. Как и при типовом использовании, вывод 10 Arduino соединен с RESET программируемых контроллеров. Выводы 11, 12,13, представляющие ICSP соединены с аналогичными на подключаемых микроконтроллерах. На подключаемые контроллеры подается питание и земля от Arduino Uno. К выводам Arduino 7,8,9 через токоограничительные резисторы в 1КОм подключены индикационные светодиоды.
    Наш шилд позволит прошивать популярные контроллеры: Atmega8 (168/328), Attiny13(45/85), причем, как в DIP корпусах, так и в QFP и SOIC, используя адаптеры.

    Платка получилась такая:


    Желающие могут скачать файл платы, в формате для Sprint Layout. Также можно скачать готовые для заказа в Китае (или на местном производстве) gerber-файлы.

    На плате видны две версии отверстий для dip28 в узком и широком корпусе, это сделано для подключения адаптера QFP32 в DIP28, обзор которого я делал здесь. Кроме того, если припаять разъем для узкой версии контроллера, то в отверстия для широкой версии можно припаять линейки штырьков и сразу тестировать прошитый контроллер. Для dip8 я также предусмотрел, помимо адаптера, отверстия для штырьков. Также имеются две версии ICSP разъемов широкий (10 контактов) и узкий (6 контактов), ну и все остальные детали, присутствующие на схеме. Светодиоды, резисторы и конденсаторы (22пФ) я использовал SMD 1206. Светодиоды распределил так: Зеленый — READY, Красный — ERROR, Желтый — PROG. Также предусмотрел штырьки для дополнительного питания и земли, которые могут потребоваться при тестировании прошиваемого контроллера.

    Платы я заказывал в dirtypcbs.com, скорее всего я бы изготовил их ЛУТ-ом, но данный сервис разрешает панелизацию, а у меня как раз нашлось подходящее место на плате в заказе, да и спешки особой не было. Заводская плата выглядит все-таки гораздо лучше. Вот так они выглядят:


    Припаиваем детали, я изготовил 2 версии, для широкого dip28:


    Здесь я не стал припаивать штырьки и разъемы, так как планирую эту плату использовать для прошивки контроллеров с помощью адаптеров в корпусах SOIC и QFP.
    Для узкого dip28:


    Как видно из фото, для подключения микросхем в dip корпусах я использовал цанговые разъемы, мне они нравятся больше.
    Адаптер QFP32 в DIP28 для подключения в широкую версию шилда:

    Встает отлично:

    Весь бутерброд, включая Arduino Uno:


    Для узкой версии со вставленным контроллером ATtiny85:

    Для прошивки контроллеров в SOIC8 корпусе я использую также адаптер:

    Для того чтобы наша конструкция стала программатором, следует без шилда загрузить в Arduino Uno прошивку ArduinoISP, идущую в комплекте с любой версией Arduino IDE:

    С таким шилдом стало очень удобно и быстро прошивать и тестировать контроллеры в различных корпусах, не боясь нарушить соединения как здесь:

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

    На этом заканчиваю. Спасибо всем, кто дочитал до конца! Надеюсь, что кому-то приведенная информация окажется полезной. Всех со странным праздником: Старым Новым Годом!

    Как запрограммировать микросхему микроконтроллера ATtiny85 с помощью Arduino Uno

    Чип микроконтроллера ATtiny85 — это доступная и мощная альтернатива другим микроконтроллерам Arduino, особенно если вы хотите сократить свой проект. Чип имеет 8 контактов, шесть из которых являются контактами ввода-вывода (включая сброс), а два — контактами питания. Но как его запрограммировать, если у него нет USB-интерфейса, как у других плат микроконтроллеров? Итак, в этой статье я расскажу вам о процессе программирования для ATtiny85 9.0004 из Arduino IDE с помощью Arduino Uno. По сути, мы будем использовать Arduino UNO в качестве программатора ATtiny85 .

     

    Компоненты, необходимые для программирования ATtiny85
    • Arduino UNO
    • ATtiny85 ИС
    • Светодиод
    • Резистор 220 Ом
    • Макет
    • Проволочные перемычки

     

    Чип микроконтроллера ATtiny85 — введение

     

    ATtiny85 компании Atmel — это высокопроизводительный 8-разрядный микроконтроллер с низким энергопотреблением, основанный на усовершенствованной архитектуре RISC. Этот чип микроконтроллера оснащен флэш-памятью ISP 8 КБ, EEPROM 512 байт, SRAM 512 байт, 6 линиями ввода-вывода общего назначения, 32 рабочими регистрами общего назначения, одним 8-разрядным таймером/счетчиком с режимами сравнения, одним 8-разрядным высокоскоростным таймер/счетчик, USI, внутренние и внешние прерывания, 4-канальный 10-разрядный аналого-цифровой преобразователь, программируемый сторожевой таймер с внутренним генератором, три программно выбираемых режима энергосбережения и debugWIRE для встроенной отладки. ATtiny85 Распиновка приведена ниже:

    Большинство контактов ввода-вывода микросхемы имеют более одной функции. Ознакомьтесь с приведенной ниже таблицей, чтобы узнать описание контакта ATtiny85 для каждого контакта.

     

     

    Номер контакта

    Название контакта

    Описание контакта

    1

    PB5(PCINT5/ADC0/dW)

    PCINT5 : Прерывание смены контакта 0, Source5

    СБРОС : Сброс Pin

    АЦП0: Входной канал АЦП 0

    dW: отладка ПРОВОД В/В

    2

    PB3 (PCINT3/XTAL1/CLKI/ADC3)

    PCINT3: Прерывание смены контакта 0, Source3

    XTAL1: Кварцевый генератор Pin1

    CLKI: Внешний тактовый вход

    АЦП3: Входной канал АЦП 3

    3

    PB4 (PCINT4/XTAL2/CLKO/OC1B/ADC2)

    PCINT4: Прерывание смены контакта 0, источник 4

    XTAL2: Кварцевый осциллятор, контакт 2

    CLKO: Выход системных часов

    OC1B:  Таймер/Счетчик 1 Сравнить Совпадение B Выход

    АЦП2: Входной канал АЦП 2

    4

    ЗЕМЛЯ

    Контакт заземления

    5

    PB0(MOSI/DI/SDA/AIN0/OC0A/AREF/PCINT0)

    MOSI: SPI Master Data Output / Slave Data Input

    DI: Ввод данных USI (трехпроводной режим)

    SDA: Ввод данных USI (двухпроводной режим)

    AIN0: Аналоговый компаратор, положительный вход

    OC0A: Timer/Counter0 Compare Match A output

    AREF: Внешнее аналоговое задание

    PCINT0: Прерывание смены контакта 0, источник 0

    6

    PB1(MISO/D0/AIN1/OC0B/OC1A/PCINT1)

    MISO: SPI Master Data Input / Slave Data Output

    DO: Вывод данных USI (трехпроводной режим)

    AIN1: Аналоговый компаратор, отрицательный вход

    OC0B: Таймер/счетчик 0 Сравните совпадение выхода B

    OC1A: Сравнение таймера/счетчика 1 Совпадение с выходом A

    PCINT1: Прерывание смены контакта 0, источник 1

    7

    PB2 (SCK/USCK/SCL/ADC1/T0/INT0/PCINT2)

    SCK: Последовательный тактовый вход

    USCK: Часы USI (трехпроводной режим)

    SCL: Часы USI (двухпроводной режим)

    АЦП1: Входной канал АЦП 1

    T0: Таймер/счетчик 0 Источник тактового сигнала

     

    INT0: Внешнее прерывание 0 Вход

    PCINT2: Прерывание смены контакта 0, источник 2

    8

    ВКЦ

    Напряжение питания Контакт

    Шаг 1: Настройка Arduino Uno в качестве интернет-провайдера:

    Поскольку ATtiny85 — это всего лишь микроконтроллер, для его программирования требуется ISP (внутрисистемное программирование). Таким образом, чтобы запрограммировать ATtiny85, нам нужно сначала настроить Arduino Uno в качестве интернет-провайдера, чтобы он действовал как программатор для ATtiny85. Для этого подключите Arduino Uno к ноутбуку и откройте среду разработки Arduino IDE. После этого перейдите к Файл > Пример > ArduinoISP   и загрузите код Arduino ISP.

    Шаг 2: Схема для программирования ATtiny85:

    Полная схема программирования ATtiny85 с Arduino Uno приведена ниже: IC. Полные соединения приведены в таблице ниже:

    Пин ATtiny85

    Пин-код Arduino Uno

    Вкк

    ЗЕМЛЯ

    ЗЕМЛЯ

    Контакт 2

    13

    Контакт 1

    12

    Контакт 0

    11

    Сброс

    10

    Шаг 3: Программирование ATtiny85 с помощью Arduino IDE:

    Чтобы запрограммировать ATtiny85 с помощью Arduino IDE, сначала нам нужно добавить поддержку ATtiny85 в Arduino IDE. Для этого перейдите в Файл > Настройки и добавьте ссылку ниже в URL-адреса менеджера дополнительных досок и нажмите «ОК». x-boards-manager/package_damellis_attiny_index.json

    После этого перейдите к Tools > Board > Board Manager , найдите «attiny» и установите последнюю версию.

    После его установки вы сможете увидеть новую запись в меню Board под названием ‘Attiny25/45/85’ .

    Теперь перейдите к File > Examples > Basics и откройте пример Blink.

    Измените номер контакта с LED_BUILTIN на 0.

    Теперь вернитесь к Tools -> Board и выберите «Attiny25/45/85», затем выберите ATtiny85 в разделе Tools > Processor .

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

    Вот как можно запрограммировать микроконтроллер ATtiny85 с помощью Arduino IDE и Arduino Uno. Рабочее видео представлено ниже. Если у вас есть какие-либо вопросы, оставьте их в разделе комментариев. Вы также можете опубликовать свои технические вопросы на нашем форуме по электронике, чтобы получить более полное представление.

    Используйте Arduino в качестве ISP-программатора для программирования микроконтроллеров AVR, отличных от Arduino. Hardware Fun

    Tweet

    программатор ISP для программирования этих микроконтроллеров вместо использования отдельного специального программатора AVR.

    Ответ однозначный да, и я использую его все время, так как у меня валяется много Ардуино. Я подумал о написании учебника, чтобы он был полезен для других, кто хочет это сделать.

    В этом уроке я покажу, как вы можете запрограммировать микроконтроллер AVR, отличный от Arduino, такой как AtMega 16/16A, используя Arduino в качестве программатора ISP.

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

    По умолчанию Arduino IDE поставляется со скетчем ISP. Все, что вам нужно сделать, это открыть его в Arduino IDE (или с помощью моего make-файла Arduino), затем подключить Arduino к компьютеру, а затем загрузить скетч в Arduino.

    На этом этапе вам не следует подключать что-либо еще к Arduino, и вы найдете скетч Arduino ISP в Файл -> Примеры -> ArduinoISP

    Установка ядра Arduino для вашего микроконтроллера

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

    Если вы хотите запрограммировать ATMega 16/16A, то вы можете использовать мое «дополнительное ядро ​​​​Arduino». Я также написал отдельный учебник, объясняющий, как его использовать. Или, если вы хотите программировать микроконтроллеры ATtiny, вы можете использовать ядро ​​ATtiny от Дэвида Меллиса, одного из соучредителей Arduino.

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

    Подключение схемы

    Следующим шагом является подключение микроконтроллера к Arduino. На приведенной ниже схеме показано, как подключить ATMega 16/16A. В целом принцип остается тем же и для других микроконтроллеров.

    Запрограммируйте ATMega 16, используя Arduino в качестве ISP Programmer

    Ниже приведены различные соединения контактов

    • Arduino Pin 13 — ATMega 16 Pin 8 (или SCK другого микроконтроллера)
    • Arduino Pin 12 на ATMega 16 Pin 7 (или MISO другого микроконтроллера)
    • Arduino Pin 11 — ATMega 16 Pin 6 (или MOSI другого микроконтроллера)
    • Arduino Pin 10 на ATMega 16 Pin 9 (или СБРОС другого микроконтроллера)
    • Arduino 5+ на ATMega 16 Pin 10 (или Vcc другого микроконтроллера)
    • Arduino Gnd на ATMega 16 Pin 11 (или Gnd другого микроконтроллера)
    • Конденсатор 10 мкФ между контактом сброса Arduino и контактом Gnd (+ve ветвь конденсатора должна подключаться к контакту сброса)
    • Светодиод через соответствующий резистор на любом выводе микроконтроллера, которым вы будете управлять через код

    Вот как выглядит мое соединение

    Запрограммируйте ATMega 16, используя Arduino в качестве ISP Programmer

    Запишите загрузчик/предохранитель

    Следующий шаг — запишите загрузчик и/или предохранители.

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

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