Arduino — in system programmer (isp)

Содержание

1Программатор для Arduino

  • Разъём типа USB-A используется, понятно, для подключения программатора к компьютеру.
  • ISP-соединитель нужен для подключения к программируемой плате.
  • Джампер JP1 контролирует напряжение на выводе VCC ISP-коннектора. Оно может быть 3,3 В или 5 В. Если целевое программируемое устройство имеет собственный источник питания, нужно убрать перемычку.
  • Джампер JP2 используется для перепрошивки самого программатора; в данной статье этот вопрос не рассматривается.
  • Перемычка JP3 нужна, если тактовая частота целевого устройства ниже 1,5 МГц.
  • Светодиоды показывают: G – питание подаётся на программатор, R – программатор соединён с целевым устройством.

USBasp-программатор и назначение его частей

Микроконтроллеры семейства TinyAVR

Тип

Напр.

питания
В

Такт.

Частота
МГц

I/O Flash EEPROM SRAM Интер-
фейсы
АЦП Таймеры ISP Корпус
 ATtiny11 2.7-5.5 6 6 1K 1x8bit PDIP8 SOIC8
 ATtiny12 1.8-5.5 6 6 1K 64 1x8bit I PDIP8 SOIC8
 ATtiny13 1.8-5.5 20 6 1K 64 64 4x10bit 1x8bit
2xPWM
I PDIP8 SOIC8
 ATtiny15L 2.7-5.5 6 6 1K 64 4x10bit 2x8bit I PDIP8 SOIC8
 ATtiny2313 1.8-5.5 20 15 2K 128 128 SPI
UART
1x8bit
1x16bit
I PDIP20 SOIC20 MLF32
 ATtiny24 1,8…5,5 20 12 2K 128 128 USI
4xPWM
RTC
8x10bit 1x8bit
1x16bit
S PDIP14 MLF20 SOIC14
 ATtiny25 2,7…5,5 20 32 2K 128 128 SPI
UART
4x10bit 1x8bit
1x8bit high speed
I PDIP8 SOIC8
 ATtiny25 Automotive 2,7…5,5 16 32 2K 128 128 SPI
UART
4x10bit 1x8bit
1x8bit high speed
I SOIC8
 ATtiny25V 1.8 — 5.5 10 32 2K 128 128 SPI
UART
4x10bit 1x8bit
1x8bit high speed
I PDIP8 SOIC8
 ATtiny26 2.7-5.5 16 16 1K 128 128 SPI
UART
11x10bit 2x8bit I PDIP20 SOIC20 MLF32
 ATtiny261 1.8-5.5 20 16 2K 128 128 PWM
USI
11x10bit 1x8bit
1x16bit
I PDIP20 SOIC20 MLF32
 ATtiny461 1.8-5.5 20 16 4K 256 256 PWM
USI
11x10bit 1x8bit
1x16bit
I PDIP20 SOIC20 MLF32
 ATtiny28L 1.8-5.5 4 20 2K 1x8bit PDIP28 TQFP32 MLF32
 ATtiny44 1,8…5,5 20 12 4K 256 256 USI
4xPWM
RTC
8x10bit 1x8bit
1x16bit
S PDIP14 MLF20 SOIC14
 ATtiny45 2,7…5,5 20 32 4K 256 256 SPI
UART
4x10bit 1x8bit
1x8bit high speed
I PDIP8 SOIC8
 ATtiny45 Automotive 2,7…5,5 20 32 4K 256 256 SPI
UART
4x10bit 1x8bit
1x8bit high speed
I SOIC8
 ATtiny45V 1.8 — 5.5 10 32 4K 256 256 SPI
UART
4x10bit 1x8bit
1x8bit high speed
I PDIP8 SOIC8
 ATtiny84 1,8…5,5 20 12 8K 512 512 USI
4xPWM
RTC
8x10bit 1x8bit
1x16bit
S PDIP14 MLF20 SOIC14
 ATtiny85 2,7…5,5 20 32 8K 512 256 SPI
UART
4x10bit 1x8bit
1x8bit high speed
I PDIP8 SOIC8
 ATtiny85 Automotive 2,7…5,5 20 32 8K 512 256 SPI
UART
4x10bit 1x8bit
1x8bit high speed
I SOIC8
 ATtiny85V 1.8 — 5.5 10 32 8K 512 256 SPI
UART
4x10bit 1x8bit
1x8bit high speed
I PDIP8 SOIC8
 ATtiny861 1.8-5.5 20 16 8K 256 256 PWM
USI
11x10bit 1x8bit
1x16bit
I PDIP20 SOIC20 MLF32

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

30 Дек 2015

С последней версией Arduino IDE перестал работать USBASP, с помощь которого прошивал массу контролеров.

У USBASP пора обновить прошивку, а может быть и схему, а я буду использовать в качестве программатора обычный Arduino.  Тем более я уже использовал эту схему для программирования ATTiny13.

Для Arduino на ATmega168/328 схема будет выглядеть так — между собой соединяем D11, D12, D13, а D10 контроллера программатора соединяем с RESET программируемого контроллера. Устанавливаем кварц для прошивки контроллеров, работающих от внешнего резонатора.

Для удобства работы собираю программатор на макетке. Для микросхем в корпусе DIP28 использую панель DIP с нулевым усилием.

Также на плате устанавливаю разъем под Arduino Pro Mini, на которых делаю все последние Arduino-проекты

Получаю такую платку

Устанавливаю на плату микроконтроллеры

Можно приступать к прошивке/

Для этого в Ардуину нужно записать скетч ISP-программатора

Затем выбираем тип программатора

И все. Программатор собран и настроен.

Немного о применении

  1. Загрузка скетча с 0-го адреса без загрузчика. Экономит память микроконтроллера и время загрузки. Особенно интересно в микросхемах с малой памятью — Atmega8 и различных Attiny.
  2. Установка загрузчика на «голую» Atmega328, чтобы в дальнейшем заливать в нее скетчи через RX/TX, как в обычную Ардуину.
  3. Замена загрузчика, например, на OPTIBOOT, нормально поддерживающий режимы сна и сторожевой таймер.
  4. Установка фьз-битов. Полезно при создании «батареечных проектов», когда отключается BOD — контроль входного напряжения и микроконтроллеру устанавливается режим работы с пониженной частотой, опять же для уменьшения напряжения питания до 2.8-3.3В и энергопотребления.
  5. Восстановление «мертвых» микроконтроллеров после неудачных экспериментов

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

Posted in Arduino, Самодельный контроллер, Технологии | Метки: Arduino, ATMEGA328, AVR

Программная эмуляция

Платформа Arduino Nano Every с микроконтроллером ATmega4809 поддерживает программную эмуляцию для полной совместимости с платой предшественника Arduino Nano с микроконтроллером ATmega328.

  • Включение совместимости:
    Инструменты
    Registaers Emulation
    ATMEGA328

  • Отключение совместимости:
    Инструменты
    Registaers Emulation
    None (ATMEGA4809)

Эмуляция будет полезна, только если одновременно выполнены следующие пункты:

  1. Ваш проект собран на базовой плате Arduino Nano.
  2. Вы решили перейти с платы Arduino Nano на плату Arduino Nano Every.
  3. В коде прошивки использованы не базовые функции языка C++, а именно регистры микроконтроллера ATmega328.
  4. Вам лень менять код.

Во всех остальных случаях рекомендуем не включать эмуляцию.

ATmega support

The sizes of networking library and the SD library allows the use of ArduinoOTA library only with ATmega MCUs with at least 64 kB flash memory.

Side note: There are other network upload options for here excluded ATmega328p: (Ariadne bootloader for Wiznet chips, WiFiLink firmware for the esp8266) or AvrDudeTelnet upload (Linux only).

For upload with ArduinoOTA library over InternalStorage, Optiboot bootloader with function is required. MegaCore and MightyCore by MCUDude have Optiboot binaries with function ready to be burn to your ATmega.

For SDStorage a ‘SD bootloader’ is required to load the uploaded file from the SD card. There is no good SD bootloader. 2boots works only with not available old types of SD cards and zevero/avr_boot doesn’t yet support USB upload of sketch. The SDStorage was tested with zevero/avr_boot. The ATmega_SD example shows how to use this ArduinoOTA library with SD bootloader.

To use remote upload from IDE with SDStorage or InternalStorage, copy platform.local.txt from extras/avr folder, next to platform.txt in the boards package used (Arduino-avr or MCUdude packages). You can find the location of boards packages in Arduino IDE Preferences as the location of the preferences.txt file at the bottom of the Preferences dialog. It is clickable and opens the folder. There find the boards package in packages folder.

The IDE upload tool is installed with Arduino AVR core package. At least version 1.2 of the arduinoOTA tool is required. For upload from command line without IDE see the command template in extras/avr/platform.local.txt.

2Установка драйвера для программатора

Подключим программатор к USB-порту компьютера. Скорее всего, через какое-то небольшое время операционная система сообщит, что ей не удалось найти драйвер для данного устройства.

Сообщение об отсутствии драйвера для USBasp программатора

В этом случае скачаем драйвер для программатора с официального сайта. Распакуем архив и установим драйвер стандартным способом. В диспетчере устройств должен появиться программатор USBasp. Теперь программатор готов к работе. Отключаем его от компьютера.

Установка драйвера для USBasp программатора

Если вы испытываете трудности с установкой драйвера для USBasp программатора, то вам поможет статья «Как установить драйвер для программатора USBasp в Windows 8 и Windows 10».

«ArduinoISP-Turbo» – патч скетча ISP-программатора из Arduino UNO.

В очередной раз проводя оптимизации и ревизию материалов на сайте, перечитав эту статью подумал, что совсем не использую описанное выше – программаторов и так тьма разнообразных … Но решил еще раз проверить описанное. К удивлению пришлось немного повозиться. Но все же все заработало, и причем даже лучше чем ожидалось ;-)) Об этом и пойдет речь далее – 8 лет спустя после написания первой части.

Для эксперимента взял древнюю UNO с интерфейсным контроллером mega8u2 и Arduino IDE 1.8.9, обновил (перезалил) прошивку интерфейсного контроллера (.\hardware\arduino\avr\firmwares\atmegaxxu2\UNO-dfu_and_usbserial_combined.hex) и загрузчик основного mega328p (.\hardware\arduino\avr\bootloaders\optiboot\optiboot_atmega328.hex), подготовленный кабель из запасов тоже нашелся. В комплекте среды разработки в качестве примера идет уже совсем другой (обновленный) скетч ArduinoISP, чем представлены и доступны по ссылкам выше. Можно воспользоваться им в неизменном виде, не забывая указывать помимо вида программатора (stk500v1) и номера COM-порта еще и скорость порта (по-умолчанию 19200, без указания скорости не работает!). Но на таких «оборотах» работать крайне медленно/скучно/бессмысленно – и мотивация выбора такой черепашьей скорости в скетче, типа чтоб можно было прошить контроллер tiny85 на 1MHz тактовой частоты настроенный – не сильно устраивает (с такими контроллерами не работаю), да если даже и работал бы … То зачем занижать скорость работы COM-порта? 115200 нужно выставлять обязательно (максимальная «стандартная» скорость – в разы быстрее чем 19200). Но останавливаться на этом также не стоит. Прошивка в софтовом преобразователе USB<->COM (интерфейсном контроллере ардуины) вполне себе переваривает и 921600! Но в этом случае помимо скорости порта (чтобы получить эффект) нужно увеличивать и скорость SPI-шины между ардуиной-программатором и целевым контроллером (дефолтных 1000000/6 – катастрофически мало). Раз есть требование /6 тактовую частоту – то так и сделаем: все контроллеры ардуино по-умолчанию имеют кварц на 16MHz, что даже /6 превосходит скорость порта в 921600 … Результатом остался доволен, корректировки можно внести самостоятельно или скачать сразу откорректированный скетч ArduinoISP-Turbo. Не забываем указывать актуальную скорость (указанную в исходнике скетча), в последнем случае 921600. Контроллер mega328p (другая ардуина) таким скетчем-программатором считывается полностью за 3.5сек и записывается за 10сек.

MiGeRA (июнь 2020)

4Загрузка скетча в Arduinoс помощью программатора USBasp

Откроем скетч, который хотим загрузить в память микроконтроллера. Для примера пусть это будет мигание светодиодом: Файл Образцы 01. Basics Blink.

Подключаем программатор с подключённым к нему Arduino Pro Mini к компьютеру. Для того чтобы загрузить скетч в Ардуино с помощью программатора, можно поступить несколькими способами.

  1. Через меню Файл Загрузить через программатор.
  2. Используя сочетание клавиш Ctrl + Shift + U.
  3. Зажав клавишу Shift, нажать на кнопку со стрелкой вправо , которая обычно используется для загрузки скетча в память Ардуино стандартным способом.

Загрузка скетча в Arduino Pro Mini с помощью программатора USBasp

Это абсолютно эквивалентные способы, выбирайте самый удобный для себя. Это всё, программа «залита» в память микроконтроллера.

Обратите внимание

Если Arduino IDE выдаст предупреждение: warning: cannot set sck period. please check for usbasp firmware update. Не паникуйте, скетч всё равно записался в память микроконтроллера и будет работать.

О плате

Ардуино Нано — это аналог Arduino Uno, которая также работает на чипе ATmega328P, но отличается формфактором платы, которая в 2-2,5 раза меньше, чем Уно (53 х 69 мм). Размеры подобны пачке сигарет, и позволяют легко собирать сложные схемы навесным монтажом, но после стадии создания макета идёт сборка действующих экземпляров, а для этого лучше подходит как раз Нано.

Размер Arduino Nano: 19 x 43 мм

Сравнение плат Arduino Uno и Arduino Nano

Отличие такой миниатюрной платы, заключается в отсутствии вынесенного гнезда для внешнего питания, но вместо него с легкостью можно подключиться напрямую к пинам. В плате используется чип FTDI FT232RL для USB-Serial преобразования и примененяется mini-USB кабель для связи с ардуино вместо стандартного. Связь с различными устройствами обеспечивают UART, I2C и SPI интерфейсы.

В остальном, способы взаимодействия и характеристики чипов совпадают с базовой моделью Уно, которая больше подходит для экспериментов, чем для реальных проектов. Нет более насущной проблемы для любителя электроники, чем желание красиво и компактно оформить своё устройство.

Платформа имеет контакты в виде пинов, поэтому ее легко устанавливать на макетную плату. Arduino Nano используется там где важна компактность, а возможностей Mini либо не хватает, либо не хочется заниматься пайкой.

Смотрите по теме: Индикатор уровня воды c помощью Arduino Nano

4Загрузка скетча в Arduinoс помощью программатора USBasp

Откроем скетч, который хотим загрузить в память микроконтроллера. Для примера пусть это будет мигание светодиодом: Файл Образцы 01. Basics Blink.

Подключаем программатор с подключённым к нему Arduino Pro Mini к компьютеру. Для того чтобы загрузить скетч в Ардуино с помощью программатора, можно поступить несколькими способами.

  1. Через меню Файл Загрузить через программатор.
  2. Используя сочетание клавиш Ctrl + Shift + U.
  3. Зажав клавишу Shift, нажать на кнопку со стрелкой вправо , которая обычно используется для загрузки скетча в память Ардуино стандартным способом.

Загрузка скетча в Arduino Pro Mini с помощью программатора USBasp

Это абсолютно эквивалентные способы, выбирайте самый удобный для себя. Это всё, программа «залита» в память микроконтроллера.

Обратите внимание

Если Arduino IDE выдаст предупреждение: warning: cannot set sck period. please check for usbasp firmware update. Не паникуйте, скетч всё равно записался в память микроконтроллера и будет работать.

Классические AVR-микроконтроллеры

Тип

Напр.

питания, В

Такт. Частота, МГц I/O Flash EEPROM SRAM Интер-
фейсы
АЦП Таймеры ISP Корпус
 AT90PWM1 2.7-5.5 16 19 8K 0.5 512 SPI
PWM
8x10bit 1x8bit
1x16bit
I SO24
 AT90PWM2 2.7-5.5 16 53 8K 512 512 SPI
debugWIRE
PSC
8x10bit 2 I SO24
 AT90PWM3 2.7-5.5 16 53 8K 512 512 SPI
debugWIRE
PSC
11x10bit 2 I SO32, QFN32
 AT90S1200 2.7-6.0
4.0-6.0
4
12
15 1K 64 1x8bit I DIP20 SO20 SSOP20
 AT90S2313 2.7-6.0
4.0-6.0
4
10
15 2K 128 128 UART 1x8bit
1x16bit
I DIP20 SO20
 AT90LS2323 2.7-6.0 4 3 2K 128 128 1x8bit I DIP8 SO8
 AT90S2323 4.0-6.0 10 3 2K 128 128 1x8bit I DIP8 SO8
 AT90LS2343 2.7-6.0 4 5 2K 128 128 1x8bit I DIP8 SO8
 AT90S2343 4.0-6.0 10 5 2K 128 128 1x8bit I DIP8 SO8
 AT90LS4433 2.7-6.0 4 20 4K 256 128 UART
SPI
6x10bit 1x8bit
1x16bit
I DIP28 TQFP32
 AT90S4433 4.0-6.0 8 20 4K 256 128 UART
SPI
6x10bit 1x8bit
1x16bit
I DIP28 TQFP32
 AT90LS8515 2.7-6.0 4 32 8K 512 512 UART
SPI
2x8bit
1x16bit
I DIP40 TQFP44 PLCC44
 AT90S8515 4.0-6.0 8 32 8K 512 512 UART
SPI
2x8bit
1x16bit
I DIP40 TQFP44 PLCC44
 AT90LS8535 2.7-6.0 4 32 8K 512 512 UART
SPI
8x10bit 2x8bit
1x16bit
I DIP40 TQFP44 PLCC44
 AT90S8535 4.0-6.0 8 32 8K 512 512 UART
SPI
8x10bit 2x8bit
1x16bit
I DIP40 TQFP44 PLCC44

Arduino ‘network port’

The Arduino IDE detects the Arduino ‘network port’ using mDNS system. This requires the use of UDP multicast. From networking libraries supported for OTA upload only Ethernet, WiFiNina, WiFi101 and the esp libraries support multicast. For these libraries ArduinoOTA.h at defaults starts the mDNS service.

In some networks or on some computers UDP mDNS doesn’t work. You can still use the ArduinoOTA library for upload from command line or with the fake programmer trick described elsewhere in this README.

It is possible to suppress use of the mDNS service by the library. Only define NO_OTA_PORT before the include like this:

Перепрошиваем Arduino ATMEGA16U2 в оригинальное ПО

Почти сделано. Нам нужно вернуть оригинальное программное обеспечение в ATMEGA16U2.

Отключите Arduino от питания и USB. Замкните на ICSP1 контакты 5-6. Подключите USB-кабель. Разомкните пины ICSP1 5-6.

Запустите программное обеспечение FLIP. Перейдите в: Пуск -> Все программы -> Flip -> Flip. Далее: Настройки -> Связь -> USB.

Нажмите «Открыть». Перейдите в: Файл -> Загрузить файл HEX.

Выберите файл:

С:\Program Files\Arduino\hardware\arduino\firmwares\atmegaxxu2\arduino-usbserial\Arduino-usbserial-atmega16u2-Uno-Rev3.hex

Нажмите «Выполнить».

Отсоедините USB-кабель и подключите его снова. Новое устройство USB должно быть распознано. Если драйвер не установлен автоматически, вы найдете его в: С:\Program Files\Arduino\drivers.

Перейдите в Диспетчер устройств: Win + Pause -> Оборудование -> Диспетчер устройств. Проверьте, правильно ли загружен драйвер. Вы должны увидеть его в: Ports -> Arduino Uno.

Теперь мы можем проверить любой скетч из примеров, типа Blink. Запустите программное обеспечение Arduino (Пуск -> Arduino).

Нажмите: Open (стрелка вверх) -> -> 01.Basics -> Blink.

Выберите COM-порт а: Инструменты -> Последовательный порт -> COM (выберите порт, на котором была распознана плата).

Нажмите значок «Загрузить» (стрелка вправо). Светодиод должен начать мигать.

Всё готово. Мы узнали как прошить Ардуино и успешно перепрограммировали ATMEGA328P без использования какого-либо внешнего программатора.

Что такое ISP?

ISP (In-System Programming) расшифровывается как внутрисхемное программирование. Это технология, которая позволяет программировать микроконтроллер, установленный в устройство. До появления этой технологии микроконтроллеры программировались перед установкой в устройство, а для их перепрограммирования требовалось их извлечение из устройства.

Существует 2 основных подхода внутрисхемного программирования:

  • С использованием программатора. В этом случае программатор работает напрямую с памятью микроконтроллера, самостоятельно размещая байты прошивки по нужным адресам. Микроконтроллер в этом процессе не участвует.
  • С использованием загрузчика. Загрузчик, он же бутлоадер (от английского bootloader) — это программа, записанная обычно в конце ПЗУ микроконтроллера, которая берет на себя функции программатора. При включении микроконтроллера управление сначала передается загрузчику. Он проверяет наличие определенных условий, сообщающих о необходимости перейти в режим программирования. Если условия не выполнены, то управление передается основной программе, в противном случае загрузчик принимает данные по заранее определенному интерфейсу и размещает их в ПЗУ. Таким образом микроконтроллер перепрограммирует сам себя.

Использование загрузчика существенно упрощает процесс перепрограммирования микроконтроллера, что особенно полезно при отладке. Но за удобство приходится платить. Во-первых, загрузчик занимает часть ПЗУ и для программы пользователя остается меньший объем памяти. Во-вторых, загрузчик не может изменить Fuse-биты и Lock-биты (в отличие от программаторов). Ну и, конечно, не обойтись без программатора, если вы хотите обновить бутлоадер или загрузить его в чистый МК. Таким образом существует ряд задач, которые могут быть выполнены только с использованием программатора. Если же у вас нет аппаратного программатора, то вместо него можно воспользоваться Ардуино, о чем и будет рассказано дальше.

1Программатор для Arduino

  • Разъём типа USB-A используется, понятно, для подключения программатора к компьютеру.
  • ISP-соединитель нужен для подключения к программируемой плате.
  • Джампер JP1 контролирует напряжение на выводе VCC ISP-коннектора. Оно может быть 3,3 В или 5 В. Если целевое программируемое устройство имеет собственный источник питания, нужно убрать перемычку.
  • Джампер JP2 используется для перепрошивки самого программатора; в данной статье этот вопрос не рассматривается.
  • Перемычка JP3 нужна, если тактовая частота целевого устройства ниже 1,5 МГц.
  • Светодиоды показывают: G – питание подаётся на программатор, R – программатор соединён с целевым устройством.

USBasp-программатор и назначение его частей

Прошивка ATmega328

У микроконтроллера нет собственного USB-порта. К компьютеру его можно подключить одним из двух способов:

Рассмотрим их подробнее.

Прошивка ATmega328 через USB-UART преобразователь

Для сборки программатора нам понадобится:

Соберите следующую схему

Аппаратная часть готова. Теперь скачайте и установите на компьютер интегрированную среду разработки Arduino — Arduino IDE — и прошейте свой контроллер.

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

Для сборки программатора нам понадобится:

Аппаратная часть готова. Теперь скачайте и установите на компьютер интегрированную среду разработки Arduino — Arduino IDE и прошейте свою Arduino.

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

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

Мы не будем использовать какие-либо SMD-компоненты для создания своей версии Arduino Uno, потому что не у всех есть паяльная станция, а иногда найти SMD-компоненты очень сложно. Кроме того, наш метод в большинстве случаев дешевле, чем компоненты SMD. Для тех кто, только начинает разбираться в электронике — технологию поверхностного монтажа печатных плат также называют ТМП (технология монтажа на поверхность), SMT (англ. surface mount technology) и SMD-технология (от англ. surface mounted device — прибор, монтируемый на поверхность), а компоненты для поверхностного монтажа также называют «чип-компонентами».

Установка программного обеспечения Atmel FLIP

На плате Arduino есть два микроконтроллера — ATMEGA328P (328P) и ATMEGA16U2 (16U2). Вы можете обновить прошивку 16U2, сделав его программатором AVRISP MKII, а затем использовать Atmel Studio для прошивки 328P.

Я пробовал разные варианты, но возникали разные проблемы. Многие рекомендации плохо работали в моем случае особенно в части перепрошивки загрузчика через ПО Arduino.

Переда началом прошивки Ардуино потребуется программное обеспечение Atmel (Microchip) FLIP для обновления прошивки внутри 16U2.

Скачиваем Flip с сайта Microchip — отсюда. Устанавливаем. Не должно возникнуть никаких проблем, просто следуйте инструкциям мастера установки.

Возьмите плату Arduino, отсоедините питание и USB. Замкните на ICSP1 пины 5-6 (16U2 RESET будет в низком состоянии).

Распиновка ICSP1

Выглядеть это будет так:

Далее подключите Arduino к USB. Разъедините пины на ICSP1 (5-6). В этот момент 16U2 переходит в режим DFU. Новое устройство USB должно быть распознано.

Если драйвер не устанавливается автоматически, установите его из: C:\Program Files\AtmelFlip3.4.7usb»

Перейдите в Диспетчер устройств: Win + Pause -> Оборудование -> Диспетчер устройств. Проверьте, правильно ли установлен драйвер. Он будет расположен под USB-устройствами Atmel -> ATmega16U2.

Шаг 4. Создаем печатную плату

Как только схема завершена, пришло время сделать печатную плату. Мы использовали веб-сайт JLCPCB (ссылка), чтобы сделать печатную плату. Эти ребята являются одними из лучших в производстве печатных плат в последние дни.

После завершения проектирования схемы преобразуйте ее в печатную плату и спроектируйте печатную плату на веб-сайте easyEDA (ссылка). Будьте терпеливы. Ошибка на этом шаге испортит вашу печатную плату. Проверьте несколько раз перед генерацией файла gerber. Вы также можете проверить 3d модель вашей платы здесь. Нажмите на создание файла gerber и оттуда вы можете напрямую заказать эту плату через JLCPCB. Загрузите файлы gerber, выберите правильную спецификацию, ничего не меняйте в этом разделе. Оставьте как есть. Это достаточно хорошие настройки для старта. Разместите заказ. Вы получите его через 1-2 недели.

Using an Arduino Nano to program a ATmega328P chip

There are many guides online on how to use an Arduino to program a ATmega chip, two goods ones are:Using an Arduino as an AVR ISP (In-System Programmer)Nick Gammon’s guide

If you google “using Arduino as a programmer” you will find most of the results are for using an UNO, very few are for the Nano. One Nano guide I did find is at Lets Make Robots This explains how to set up the Nano but it does not clearly show how to program a stand alone Atmega chip.

I assumed the Nano was the same as the Duemilanove and used the “Using an Arduino as an AVR ISP (In-System Programmer)” guide on the Arduino site. Unfortunately I couldn’t get it to work. After much google research I found that I needed to keep the reset pin on the Arduino Nano high by using a capacitor between the ground and the reset pin. I later found this is specific to certain Arduinos only.