Какой программатор должен стоять при прошивке Arduino Nano?

Всем привет! Что-то я наколдовал с настройками и теперь не могу загрузить прошивку ни на одну из моих плат arduino.
Подскажите, какой должен быть установлен программатор при стандартной прошивке arduino nano через кабель?
- Вопрос задан более года назад
- 2209 просмотров
Комментировать
Решения вопроса 2
Никакой. Точнее сказать, не важно, что в этом пункте выбрано. Вы же не используете программатор.
Возможно в пункте «Процессор» следует выбрать «ATmega328P (Old bootloader)»
Ответ написан более года назад
Комментировать
Нравится 2 Комментировать
Константин Зайцев @KonstantineZ
Не важно, эта настройка для внешнего программатора через SPI (шестиконтактная колодка).
Если ардуинки брали давно, рекомендую попробовать выбрать Процессор > ATMega328P (Old Butloader)
Ответ написан более года назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Программирование
- +3 ещё
Профиль HSP на HC-05?
- 1 подписчик
- 21 янв.
- 54 просмотра
Прошивка AVR (ATMEGA328) различными программаторами (в том числе и из-под Arduino)
Мир «Arduino» чрезвычайно разросся за последние несколько лет. Еще, казалось бы, совсем недавно возможность собрать что-то из цифровой электроники своими руками представлялось фантастической идеей, воплотить которую могут, пожалуй, только гении, то сегодня соединить несколько датчиков между собой и записать программу в микроконтроллер может почти любой с руками растущими чуть выше пояса. В сети полно ресурсов ломящихся от мегабайтов полезных статей о том, как запрограммировать тот или иной алгоритм под Arduino (тут, конечно, стоит понимать, что в экосистему Arduino попадают далеко не только оригинальные платы от итальянцев). А вот если вам захочется копнуть немного дальше и глубже, то вы столкнетесь с информационным вакуумом, отделяющим мир обычных любителей от мира продвинутых электронщиков. И, казалось бы, между этими двумя мирами — настоящая пропасть, перешагнуть через которую отважится не каждый. Но я попробовал, получилось и возникло желание как-то зафиксировать свой опыт, дабы в последствии им можно было бы делиться с окружающими или же вернуться к записи и освежить воспоминания, если вдруг что-то позабылось.
Итак, в качестве хобби я решил разработать для своей компании электронное устройство с «сердцем» в виде микропроцессора ATMEGA328P. Да-да, именно на основе той микросхемы, что применяется в Arduino. Только вот никакой обвязки вокруг микросхемы нет. В ней некуда подключать USB, полностью отсутствует и внешний стабилизатор питания, не говоря уже о каких-либо индикаторных светодиодах. И это чудо как-то нужно программировать, как-то заливать в него свою прошивку, как-то оживлять. Я уделил данному вопросу некоторое внимание в своей статье по детальному анализу среды разработки Arduino «Arduino IDE: разбираемся с меню Tools и некоторыми другими функциями», а в этой статье я лишь продолжу изыскания по своим наработкам.

Интерфейс Atmel Studio с импортированным Blink из Arduino
Прошивать ATMEGA можно при помощи Atmel Studio, специальной среды разработки для AVR. Среда обладает неплохим набором инструментов для полноценной разработки чего-либо под фирменные микроконтроллеры. В 7-й версии «из коробки» доступно создание проектов на С, С++ и на Assembler. Более того, возможно создание проекта из скетча Arduino. При всем при этом у разработчика в руках оказывается отладчик, с возможностью дизассемблирования кода, просмотра всех регистров и любого уголочка памяти микроконтроллера. Прямо-таки золотая мечта любого ардуиниста. А если учесть, что программировать и отлаживать код, в большинстве сценариев, можно на эмуляторе микроконтроллера, то очевидно, что Atmel Studio кроет Arduino IDE с заметными преимуществами. Но… Atmel Studio — профессиональный инструмент и для подавляющего большинства энтузиастов окажется слишком затратным по времени для изучения. Поэтому дальше речь пойдет больше про Arduino IDE в связке с AVRDUDE. Тем не менее, если вы вдруг, после знакомства с Atmel Studio почувствовали нестерпимый зуд от желания познакомиться с этой IDE поближе, то You Are Welcome. А мы же продолжим далее.
Способы программирования «голой» ATMEGA328
Программировать ATMega328, впрочем, и другие микроконтроллеры AVR, можно как напрямую из-под Arduino IDE, так и через AVRDUDE. При использовании AVRDUDE необходимо скомпилировать в Arduino IDE прошивку в файл с расширением hex. В этом случае прошить микроконтроллер можно через ISP (что означает это и другие сокращения я подробно разжевал в статье про Arduino IDE, ссылка выше по тексту). Для прошивки микроконтроллера напрямую из-под Arduino IDE, как прошиваются любые Arduino и совместимые с ними платы, необходима предварительная установка bootloader в микроконтроллер (осуществляется через ISP), а в дальнейшем можно прошивать и через USB-TTL преобразователь.
Для нормальной прошивки через USB-TTL на нем должен присутствовать вывод DTR, который программно-аппаратным способом сбрасывает микроконтроллер и тот загружается в bootloader. Который, в свою очередь, уже загружает прошивку через USB-TTL. Если подобного вывода нет, то при начале загрузки нужно применять человеческо-аппаратный способ перезагрузки микроконтроллера, т.е. жать пальцем на сброс. Если наловчиться, то таким образом можно вполне успешно прошивать AVR из-под Arduino IDE без разводки DTR на USB-TTL преобразователе.
Прошивка загрузчика (bootloader) возможна через ISP, хотя в некоторых случаях вы можете приобрести микроконтроллер в виде микросхемы, но с уже прошитым загрузчиком. Стоят такие микросхемы немного дороже, чем полностью пустые, но при этом нет необходимости мудрить с ISP программатором, думать о FUSE и загрузчике, все происходит намного проще. USB-TTL необходим не только для загрузки скетчей напрямую из Arduino IDE, но и для общения с микроконтроллером через последовательный порт (тот самый наш любимый Serial.println). А если учесть, что единственный вменяемый способ отладки в Arduino IDE — вывод в Serial, то без USB-TTL не обойтись никак. И получается, что для нормальной работы потребуется и ISP-программатор, и USB-TTL преобразователь. Поэтому стоит озаботиться тем и другим сразу.
Приобретая для разработки или опытов микроконтроллеры ATMEGA желательно сразу взять их с запасом. Стоят они недорого, а окирпичиваются они на начальном этапе обучения работы с ними ой как легко и просто. Да, конечно, восстановить микросхему можно, только вот придется применять еще один вид программатора — высоковольтный. Но рассмотрение подобного процесса слегка выходит за пределы данной статьи. Поэтому при прописывании FUSE стараемся не допускать ошибки и внимательно читаем описание самих микроконтроллеров от производителя. Я уже провел небольшую работу и выбрал неплохой (стандартный) загрузчик и произвел настройку FUSE для ATMEGA328P. Все необходимые материалы собрал в архив. Распаковывать его нужно в директорию, в которой у вас хранятся ваши скетчи в Arduino IDE, в той же директории располагается и папка libraries, куда Arduino IDE складывает все инсталлируемые библиотеки. Важно, для работы ATMEGA328 я использую встроенный, внутренний резонатор, а не внешний кварц. Если у вас другая конфигурация, то FUSE надо изменить под нее.
Для удобства программирования «голых» микросхем пришлось собрать небольшую плату с рычажной «панелькой» для микросхем.

Собранная плата выглядит не так монстроидально, все провода спрятаны под платой.
Плата примитивна до безобразия. На ней присутствуют два светодиода (не забываем про резисторы), один подключен к разъему USB, второй к пину 7 Arduino (у микросхемы это 13-я ножка, предпоследняя в нижнем ряду). Единственная кнопка на плате заведена на 1-ю ножку микросхемы и соединяет ее с «землей» платы. Используется кнопка, как не трудно догадаться, для сброса микроконтроллера через сигнал Reset. Дополнительно на плате разведен 6-ти пиновый разъем для подключения ISP-программатора, а также шестипиновый разъем для подключения USB-TTL. Разъем USB применяется лишь для подачи внешнего питания на микросхему (фирменные ISP-программаторы проверяют наличие внешнего питания на микросхеме, но при этом сами ее не запитывают, поэтому требуется подключение внешнего питания).

Схема платы для программирования голеньких микросхем ATMEGA328.
Для питания микросхемы я использую напряжение 5V получаемое от USB, на такое же напряжение сделана и разводка у разъема USB-TTL. ATMEGA328P работает при напряжениях от 1.8 и до 5.5 вольт, так что сильно по поводу питания в плате заморачиваться не стоит, однако при работе не следует питать микроконтроллер напряжением ниже, чем 2.5 вольта если применяются операции записи во внутреннюю память. Могут быть сбои.
Для проверки того, что все собранно верно я слегка модифицировал обычный Blink из поставки Arduino IDE. Такой код так же удобно прошивать сразу вместе с загрузчиком, дабы убедиться, что все прошло так как следует.
// the setup function runs once when you press reset or power the board void setup() < // initialize digital pin LED_BUILTIN as an output. pinMode(7, OUTPUT); Serial.begin(19200); Serial.println("Blinker2Mod"); >// the loop function runs over and over again forever void loop() < digitalWrite(7, HIGH); // turn the LED on (HIGH is the voltage level) delay(500); // wait for a second digitalWrite(7, LOW); // turn the LED off by making the voltage LOW delay(500); // wait for a second Serial.println("Blink. "); >
Ну, что же, все вводные данные есть, можно приступать и к программированию.
Прошиваем AVR при помощи AVRISP mkii
Прошить ATMEGA328P можно при помощи AVRDUDE и скомпилированного при помощи Arduino исходного кода. Поскольку AVRDUDE является основным прошивальщиком в Arduino для прошивки без загрузчика, то он уже имеется в системе и обычно располагается в папке с установленной Arduino IDE, далее в hardware, tools, avr и там в папке bin. Можно найти его и поиском в системе на наличие файла avrdude.exe. AVRDUDE — утилита командной строки, поэтому работать с ней придется руками. Компилируем файл, указываем все параметры. А если ошибемся, то могут прописаться неверные fuses и чип скорее всего придется выкинуть.

Интерфейс с установленными FUSEs, выбранным файлом для прошивки
А можно применить AVRDUDESS, специальную графическую оболочку, существенно облегчающую работу по прошивке AVR руками. При работе с AVRDUDESS важно проверить установку всех fuses, так как то, что было прописано в настройках платы в Arduino тут уже не имеет никакого значения, все нужно переустанавливать с нуля или считать с работающей микросхемы. Кстати, при помощи AVRDUDE или AVRDUDESS можно не только прошить AVR, но и считать прошивку, в откомпилированном виде, с микросхемы, если такая функция не была отключена при предыдущей прошивке, разумеется.
Для получения скомпилированной прошивки, в Arduino IDE выбираем меню Sketch, а в нем Export Compiled Binary, не забыв выбрать в качестве платы нашу ATmega328 on a Breadboard. В разных версия IDE пункт экспорта находился в разных меню, поэтому есть определенная сложность в его определении при обновлении версий.

Откомпилированные файлы модифицированного мигателя. Версия с загрузчиком почти в половину больше.
Перед прошивкой еще раз проверяем все настройки в интерфейсе программы, выбираем верный чип, проверяем, что он читается, выбираем нужную прошивку и жмем на Go. Если последующая загрузка через bootloader не предполагается, то прошивать можно версию файла без загрузчика, экономится место и микросхема быстрее стартует (так как нет загрузчика, то управление передается сразу на основной код).
Прошиваем AVR при помощи AVRISP mkii из Arduino
Но прошивать AVR можно не только при помощи AVRDUDESS, но и напрямую из Arduino. В старых версиях Arduino IDE все было немного сложнее, для AVRISP требовался специальный драйвер, не идущий вместе с Atmel Studio, а свой собственный, нужно было вносить изменения в конфигурационные файлы Arduino IDE, но сейчас все стало намного проще.

AVRISP от SeedStudio
По факту в железе я использую AVRISP 2.0 STK500 от SeedStudio. Программатор подключается по USB и работает в системе с драйвером USB-Serial CH340. Для работы с этим драйвером и программатором напрямую из-под Arduino IDE необходимо:
- Выбрать в качестве платы нашу ATmega328P on a Breadboard.
- Выбрать правильный COM-порт, на котором обосновался программатор.
- Выбрать Atmel STK500 Development board в качестве программатора.
Затем в меню Sketch используем пункт Upload using Programmer. Скетч компилируется в бинарный код, а затем загружается через AVRDUDE и программатор в микроконтроллер. При помощи AVRISP можно только загрузить прошивку, никакого общения через последовательный порт (Serial.println) при помощи ISP не будет. Все работает только в одну сторону.
Если у вас возникли проблемы при закачке прошивки через ISP-программатор из-под Arduino IDE, то можно ознакомиться с оригинальной темой на Arduino.cc посвященной как раз решению подобного. И еще раз повторюсь по поводу разницы между Atmel AVR Development board и AVRISP mkii. Первое это плата, позволяющая заниматься разработкой на основе микроконтроллеров семейства AVR. А AVRISP это часть этой платы, интегрированный программатор, который, может существовать и в виде отдельного, более дешевого, устройства. Соответственно сейчас имеет смысл обращаться внимание на Atmel Development board версии 2 и выше, а также программатор AVRISP mkii. Хотя с другой стороны, сама Atmel уже не продается AVRISP mkii и вместо него рекомендует приобретать Atmel-ICE, позволяющий не только прошивать микросхемы, но и отлаживать код прямо в чипе.
Прошиваем AVR при помощи «красного» модуля на CP2102 и с 5 выводами
В наименовании CP2102 модуль USB2TTL скорее не название модуля, а название чипа, который и производит преобразование из USB в TTL и обратно. Сам чип изготавливается Silicon Labs. На сайте производителя можно ознакомиться со спецификацией на модуль или же скачать драйвера (у меня на Win10 драйвера оказались уже в наличии, чип определяется как Silicon Labs CP210x USB to UART Bridge и занимает доступный COM-порт).
Несмотря на то, что сам чип оснащен множеством выходов, а о них ниже, изготовитель модуля распаял только 2 из них, всего же на плате со стороны UART-интерфейса располагается 5 выходов.

Типы вводов/выводов UART. Out выход с чипа в UART, In вход с UART в чип USB2TTL.
Согласно спецификации чипа, для успешной работы необходимо подключить только TXD и RXD, собственно, как раз асинхронные (последовательные, где данные передаются в виде последовательности по одному проводнику) шины по обмену данными. Одна шина для приема, одна для передачи. Помимо TXD и RXD на плате модуля присутствует вывод «земля», питание 5V и питание 3.3V со встроенного стабилизатора.

Красный модуль на чипе CP2102 с пятью выводами.
Для чего может быть использован этот модуль? Во-первых, для подачи питания от USB на плату для прошивки «голенького» микроконтроллера. Напомню, что для прошивки программатором через ISP интерфейс необходимо наличие внешнего питания на микроконтроллере. Так же можно использовать его для обмена между ПК и микроконтроллером через последовательный порт. Например, можно к микроконтроллеру подключить терминал и передать команду в микроконтроллер или же просто посмотреть диагностический вывод. Терминал можно использовать как встроенный в Arduino IDE, а можно взять и отдельный, к примеру PuTTY.
При установленном загрузчике в микроконтроллер его можно прошить и из-под Arduino IDE, однако, ввиду того что на модуле не разведен до отдельного вывода сигнал DTR, то нужно наловчиться нажимать кнопку сброса на микроконтроллере (точнее на плате под него). При достаточном умении можно так приноровиться, что операция по прошивке будет происходить с первого раза.
Как подключать выходы? Поскольку ATmega328 работает в диапазоне напряжений от 1.8 и до 5.5 В, то при работе от ПК я подключаю выход 5В, он идет без стабилизатора на плате (стабилизатор на 3.3В на модуле слабенький). Так же подключаю «землю» и выходы TXD/RXD. И с последними есть небольшая хитрость. Их нужно подключать перекрестно. Выход платы TXD подключаем на вход RXD микроконтроллера. А вход платы RXD подключаем к выходу TXD микроконтроллера. Не забываем, что xXD входы/выходы сугубо однонаправленные.
Прошиваем AVR при помощи «черного» модуля на CH430 и с 6 выводами
Модуль USB2TTL с гордым наименованием CH340 скорее, так же, не название модуля, а название чипа, который и производит преобразование из USB в TTL и обратно. Сам чип изготавливается китайской компанией WCH. На сайте производителя можно ознакомиться со спецификацией на модуль (все на китайском) или же скачать драйвера (у меня на Win10 драйвера оказались уже в наличии, чип определяется как USB-SERIAL CH340 и занимает доступный COM-порт). Вообще, судя по спецификации, чипы CH340 многостаночники, они предназначены не только для связи USB и UART, но и для подключения IrDA (инфракрасный порт) и принтеров, работающих по последовательной шине.
Несмотря на то, что в спецификации на сам чип указано его несметное количество входов и выходов, но производитель модуля распаял только 2 из них для подключения к UART, а всего выводов со стороны UART 6. К списку выводов CP2102 добавился VCC с перемычкой, которая может быть установлена на замыкание VCC и V3 выходов, а может быть полностью удалена. Когда перемычка установлена, то используется питание 3.3В, когда же она снята, то все работает на 5В. Честно говоря, я так и не понял магическое действие перемычки между VCC и 3V. Питание на плату для прошивки я все равно подаю 5В и при этом положение перемычки на работоспособность никак не влияет.

«Черный модуль» на основе CH430.
Применение «черного» модуля точно такое же, как и «красного». Прошивать ATmega328 можно только при установленном загрузчике, да и то придется потренироваться в нажатии кнопки reset. В качестве источника питания модуль работает без нареканий, данные по последовательному порту пересылаются в обе стороны. Подключение осуществляется аналогично, с перехлестом TX/RX входов/выходов.
Прошиваем AVR при помощи «синего» модуля на CP2102 и с 6 выводами с DTR
Модуль USB2TTL с гордым наименованием CP2102 и скорее не названием модуля, а названием чипа, который и производит преобразование из USB в TTL и обратно. Сам чип изготавливается Silicon Labs. На сайте производителя можно ознакомиться со спецификацией на модуль или же скачать драйвера (у меня на Win10 драйвера оказались уже в наличии, чип определяется как Silicon Labs CP210x USB to UART Bridge и занимает доступный COM-порт).

Модуль на основе CP2102 с 6-ю выводами включая DTR
Несмотря на то, что сам чип оснащен множеством выходов, а о некоторых из них ниже, изготовитель модуля распаял только 3, всего же на плате со стороны UART-интерфейса располагается 6 выходов. В отличии от «красного» модуля помимо TX/RX тут выведен еще и DTR. При первом подключении на выходе DTR у меня оказалось 0 вольт, что соответственно означало нажатую и удерживаемую кнопку Reset. Микроконтроллер не стартовал. Пришлось перезагрузить модуль и на DTR все встало на свои места. Так же обнаружилась несовместимость при подключенном контакте DTR с подключенным AVR ISP. Пришлось DTR временно отключать для возможности осуществления прошивки.
При наличии загрузчика, уже установленного в микроконтроллере, загрузка скетчей Arduino возможно и из Arduino IDE. Если загрузчик не установлен, то его необходимо предварительно установить.
PS. С синим модулем на CP2102 есть небольшая странность. Я так и не научился нормально заливать прошивку с его помощью. Да, он успешно «нажимает» на Reset при начале загрузки, но «кнопку» не отпускает и Arduino IDE при попытке прошивки выпадает по таймауту. Даже 10 кОм подтягивающий к питанию резистор на контакт сброса микроконтроллер не помог. Хотя, если через секунду-другу отключать контакт DTR руками, то прошивка происходит нормально. С чем связана такая особенность, я так и не разобрался.
PSS. Так же на этом модуле, а у меня их два, замечено, что вывод 3.3В вовсе не выдает 3.3, а шарашит на всех 5В. Что может быть критично при работе с микросхемами с пониженным напряжением.
Прошиваем AVR при помощи FabISP мимикрирующего под USBTiny44/USBTiny85 с 6 выводами ISP
Модуль FabISP является детищем FabLab MIT (того самого, Массачусетского Технологического). По сути FabLab — мастерская при университетах, где студенты могут сваять что-то своими руками. Вот один из студентов и навяаял внутрисхемный программатор для AVR на основе USBTinyIPS. Ознакомиться с его творчеством, равно как и скачать драйвера под программатор можно на страничке отчета студента по проделанной работе. Страничка уже находится в архиве, поэтому не ясно как долго она просуществует. Но FabISP используется в учебных курсах и видимо не скоро совсем уйдет с арены.

FabISP в исполнении китайских товарищей.
Интересная особенность. Через 6-ти пиновый кабель, который, кстати не поставляется вместе с модулем, FabISP может питать и микроконтроллер. В таком случае не требуется дополнительное питание, как у AVRISP mkii. Так же хочу заметить, что оригинальный FabISP требует предварительной прошивки и программатора, по типу того же AVRIPS. Но с Китая модули (GY ARDUINO ISP V2) приходят уже прошитыми, что существенно облегчает задачу.

Прошивка ATmega328P посредством AVRDUDESS через FabLAB USBTiny
Я не стал устанавливать драйвера со странички студента, а установил их от Lady Ada (изобретателя USBTiny). После установки драйверов программатор определился как Atmel USB Devices – USBtiny. Для того, чтобы программатором можно было пользоваться, необходимо распаять, если она у вас не распаяна, перемычку SJFAB (в некоторых нотациях это перемычка обзывается как SJ1). Перемычка используется для возможности программирования самого программатора. Более того на плате присутствует и вторая перемычка SJ2 (или же SJVCC). Она отвечает за подачу питания на микроконтроллер с программатора. Если ее распаять, то для микроконтроллера потребуется внешнее питание. Ознакомиться со схемой можно все с того же сайта MIT.
При прошивке через FabISP необходимо обратить внимание, что поскольку программатор использует порт USB, то в AVRDUDESS необходимо так же выбрать порт USB. Никакого моста на последовательные порты не создается. При прошивке в Arduino IDE в качестве программатора выбираем USBTiny. Порт выбирать не требуется. В среде отсутствует возможность выбрать USB, поэтому опция просто игнорируется, AVR находит программатор самостоятельно.
Соответственно, при помощи FabISP можно прошивать внутрисхемно, в том числе и загрузчик, как при помощи AVRDUDE, так и напрямую из Arduino IDE (порт можно не указывать, загружаем через меню Sketch – Upload Using Programmer или Burn bootloader, в качестве программатора выбираем USBtinyISP).
Прошиваем AVR при помощи USBtinyISP
Следующий модуль на рассмотрении для применения при прошивке — китайский синий модуль гордо обзывающийся USBtinyISP. Модуль построен на микросхеме ATTINY2313A-PU. По сути программатор есть ни что иное, как полная копия оригинального программатора USBtiny от AdaFruit. Только слегка изменена форма платы, вместо трехвыводного кварца используется двухвыводной, да и корпуса нет. В целом все тоже самое.

Китайский синий программатор-клон USBtinyISP
Программатор подцепляется стандартными драйверами от Lady Ada (см. вариант про FabISP) и определяется как USB-устройство. На плате разведено питание 5V, что позволяет программировать микроконтроллеры без внешнего питания. Впрочем, отключается оно перемычкой на плате.
Из особенностей платы можно упомянуть наличие двух колодок для подключения программируемого микроконтроллера. Один со стандартным 6-pin, второй 10-pin. По факту они идентичны и подключение 10-pin не добавит никакой супер способности, так как все выводы больше 6-го заполнены «землей».
Прошиваем AVR при помощи FT232RL FT232 FTDI синего программатора с переключателем напряжений, 6-pin выводом
Данный программатор весьма и весьма популярен, в виду своего раннего происхождения и множеством удобных функций. Он появился на свет так давно, что на нем распаян разъем Mini-USB, который мне пришлось побегать поискать, чтоб его подключить к USB-порту. Модуль построен на чипе FTDI FT232RL.
Из интересного на плате обнаружен не только набор выводов USB2TTL, но и 6-pin вывод ISP, который именно так и подписан. Так же необходимо помнить, что фирма производитель FTDI с некоторого момента времени начала внедрять в свою продукцию функцию FTDIChip-ID™, которая позволяет идентифицировать уникальный номер микросхемы через программный интерфейс. Эдакая защита от китайских подделок. Соответственно с родными микросхемами работают любые драйвера производителя, а с поддельным только до версии 2.08.14. Так же следует обратить внимание, что для данной микросхемы присутствуют два вида драйверов: для виртуального последовательного порта (VCP) и для прямого доступа к функциям D2XX. Штатная поставка драйверов D2XX включает и VCP, тогда как VCP ограничивается только USB2TTL функциями.

Синий программатор на основе микросхемы от FTDI с переключателем, TTL и ISP.
На плате присутствует переключатель напряжений 3.3V и 5V, он работает, но только для TTL уровней. На выводы питания, как TTL, так и ISP всегда подается 5V. При установке драйверов D2XX в системе образуется два устройства. Одно это виртуальный COM-порт, второе это USB Serial Converter.
В целом, TTL часть программатора работает так же, как и у всех остальных USB2TTL модулей, а вот с IPS пришлось помучаться. Помучаться, но безрезультатно. Для прошивки через AVRDUDE и программатор на FT232RL требуется собранный AVRDUDE с поддержкой pthread. Данная поддержка по умолчанию присутствует под Linux, но в Windows ее необходимо устанавливать дополнительно. А затем перекомпилировать AVRDUDE из исходных кодов. Удовольствие сомнительное, тем более что другие программаторы лишены этой неприятности. Хотя, у FT232RL присутствует и положительная сторона — наличие сразу двух интерфейсов ISP и TTL.
Подключаем AVR при помощи Hama USB-2-Serial кабелем на чипе Prolific PL2303RA
Подключиться к микроконтроллеру можно и обычным USB-COM кабелем. В принципе, на старых ПК, где еще присутствовали COM-разъемы и настоящие, железные порты, можно было обмениваться информацией с микроконтроллером напрямую.

Кабель-конвертер интерфейса USB2TTL от Hama
Для подключения достаточно всего 3-х проводов: GND, RXD и TXD. При желании можно подключить так же и прочие выводы для большего удобства. В общем, ничего интересного.
Подключаем AVR при помощи NoName USB-2-TTL кабелем на чипе Prolific PL2303HXA
Ничем не примечательный кабель черного цвета и немного большим, чем обычно, разъемом USB, стоит копейки, но позволяет не хуже других подключаться по последовательному интерфейсу к AVR (и прочим системам, умеющим работать по Serial). Однако, в кабеле кроется хитрость. А именно то, что компания производитель чипа, на основе которого и реализовано подключение по USB, закончила его поддержку в далеком 2012 году. И подключая кабель к системам на основе Win10 можно получить неработающее устройство по причине несовместимого драйвера, который установился автоматически.

Выбор требуемого драйвера в настройках устройства в Win10 для чипов разного времени выпуска.
И в чем загвоздка? В том, что некоторые китайские компании до сих пор продолжают выпускать поддельные чипы. И соответственно устройства на их основе. И с новыми драйверами они не работают. Для того, чтобы появилась возможность работы с таким устройством, необходимо установить старый драйвер и в ручном режиме назначить его к проблемному устройству. Кстати, узнать версию чипа можно при помощи специализированной программулины от Prolific, которая опознает чип. Только вот, для ее работы опять же нужен драйвер.
После установки соответствующего драйвера кабель может выполнять свои функции. Кстати, в одной системе (Win10) может быть установлено несколько драйверов Prolific и все устройства, при условии ручного подключения драйверов, продолжают работать.
Прошиваем AVR при помощи Arduino AVP ISP Shield от DIYMORE
Шилд от DIY More, пожалуй, самый интересный образчик сегодняшнего обзора. Не секрет, что в ISP программатор можно превратить любую плату Arduino (и даже обычный микроконтроллер ATmega328). Все дело в том, что для того, чтобы стать программатором ISP, нужно иметь цифровые выходы, которые можно превратить в выходы ISP: MISO, SCK, RST, MOSI. На всех оригинальных и не очень, платах Arduino Uno (и многих других) вообще специально разведен ISP 6-пин коннектор. Через него можно запрограммировать сам микроконтроллер на плате.

DIYMORE AVR ISP shield установленный на RoboDyn Uno R3. В панельке ATmega328P.
На официальном сайте итальянцев есть даже несколько инструкций как превратить обычную плату Arduino в ISP программатор: «Как превратить Arduino в ISP программатор» и «И как программировать ATmega328 без всего остального». У меня уже есть плата с удобной колодкой для установки микросхем, соответственно я могу воспользоваться ей, для прошивки микроконтроллера (соединив кабелем ISP разъемы). Этот вариант уже рассматривался, тем более, что в сети обнаружился весьма интересный вариант в виде платы-расширения для Arduino Uno с удобной колодкой для установки микросхемы, светодиодами, динамиком ISP 6-пин выводом, местом для установки 6-пин UART вывода, место для установки 10-пин ISP вывода.
Плата устанавливается как плата расширения на Arduino Uno. Причем не обязательно это должен быть оригинал от итальянцев. Все отлично взгромоздилось на клон от Robot Dyn. А затем все так же замечательно и прошилось.
Итак, чтобы воспользоваться AVR ISP shield сперва в Arduino-носитель нужно закачать скетч ArduinoISP. Скетч входит в стандартную поставку Arduino IDE и располагается в примерах. Залить скетч можно как обычным способом, через загрузчик (по USB), так и через ISP на плате Arduino при помощи одного из вышеописанных программаторов ISP. Напомню, что если загружать скетч из Arduino IDE посредством Upload using programmer, то скетч загрузится в плату без загрузчика. И для того, чтобы им потом плату можно было прошивать по USB придется отдельно загрузить в нее загрузчик. Данная операция осуществляется в том числе и через Arduino IDE (Burn bootloader), разумеется, с использованием ISP программатора. Однако, если скомпилировать скетч через Export compiled Binary, то можно загрузить через ISP-программатор и AVRDUDESS (или просто AVRDUDE) прошивку вместе с загрузчиком.
Но, рекомендуется идти простым путем, а именно загрузкой по USB из среды Arduino IDE скетча ArduinoISP. После загрузки можно устанавливать плату, важно не воткнуть ее со смещением, и микроконтроллер сверху (выемкой в сторону ручки). В качестве программатора выбирается ArduinoISP, так же необходимо выбрать нужный тип микроконтроллера. Прошивка осуществляется через Upload using programmer (через обычную кнопку загрузки скетч закачается в носитель).
Еще одна особенность AVR ISP Shield. На ней, как и на плате Arduino Uno присутствует вывод ISP 6-пин. И если установить плату AVR ISP Shield на Arduino Uno, то задаешься вопросом — к какому микроконтроллеру дает доступ этот разъем? К тому, что установлен в колодку или к тому, что стоит в Arduino? Ответ находится очень просто — экспериментом. Разъем на AVR ISP Shield дает доступ только к микроконтроллеру, что установлен на колодке. Запрограммировать плату Arduino-носитель через шилд не выйдет. Нужно его снять и подключиться к разъему ISP самой платы Arduino. С другой стороны, AVR ISP Shield можно использовать вообще без Arduino-носителя (Uno), просто подключив 6-ти пиновый разъем к ISP-программатору (не забыв про питание). Точно так же можно подключить и USB2TTL, дабы получать вывод с Serial.
Пробрасывает ли AVR ISP Shield вывод в последовательный порт на плату носитель с установленной ArduinoISP? Нет, такой функции не предусмотрено, хотя ее ничто не мешает реализовать. Ну почти ничего. Во-первых, необходимо физически соединить выводы с колодки на AVR ISP Shield к необходимым pin-ам, а затем произвести проброску чтения с этих пинов в скетче ArduinoISP с выводом их в стандартный Serial. Текущие версии фреймворка Arduino позволяют провернуть подобную операцию. Связь будет односторонней, только с микроконтроллера на плате и в порт носителя, но тем не менее, подобный подход позволит в одном устройстве соединить сразу две функции. Что, согласитесь, удобно.
Выводы
Благодаря своей невыносимой популярности, прошить AVR от Atmel можно тысячью и одним способом. И приведенные выше «адаптеры», и программные продукты — лишь маленькая часть всего многообразия систем и средств по прошивке. В обзор не попал интересный ISP-программатор USBasp. Хотя его с успехом заменяет TinyISP. Однако, в последних ревизиях, от 2011 года в USBasp вроде бы как была задекламирована функция совмещения в одном устройстве и ISP-программатора, и Serial интерфейса. На некоторых картинках в сети даже попадаются подписи с выведенными Rx/Tx на десятипиновую колодку, но похоже, что кроме железной поддержки требуется еще и программная реализация. А так хотелось бы иметь в одной устройстве программатор вместе с последовательным интерфейсом. Хотя, некоторые производители, например, Pololu выпускают подобные устройства, да и программатор на FTDI-чипе не исключение, хотя его и не удалось запустить под Windows.
За время испытания, у меня не вышло разобраться с проблемой с не отпусканием «кнопки» сброса при программировании через загрузчик и USB2TTL адаптер. Причины сего так и остались покрытыми мраком. Приходилось вручную отключать пин DTR, и только после этого происходила загрузка в штатном режиме.
Опубликовано 04.08.2019 автором kvv213 в следующих категориях:
DIY Soft железо статья
How can I tell what programmer to use?

I have a bunch of different dev boards for different projects. What I have been getting very confused about is what board needs what programmer from the Tools > Programmer menu. I wish the selection had the option to be partially automated for the board selection. But it’s evidently not. Part of my problem is that if you choose the wrong programmer, some boards seem to work. Others read but won’t write, or will write to some spaces, but not others. Or, you might get other cryptic errors that sound a lot like failed hardware. Have a look at this message for an example: OK, so let’s say I have some random dev board. How can I know what programmer I should use? Assume the manufacturer’s documentation mentions nothing about it.
1,588 1 1 gold badge 12 12 silver badges 17 17 bronze badges
asked Jul 3, 2017 at 20:46
874 4 4 gold badges 10 10 silver badges 27 27 bronze badges
I’m voting to close this question as off-topic because the question arrises from a fundamental misunderstanding — as explained below, the programmer selection is not applicable in the ordinary case, and where needed would depend on the physical programmer purchased, not the target board.
Dec 31, 2017 at 16:44
I’m voting to leave open because this is a common cause of confusion for beginners and is very much on topic for Arduino Stack Exchange.
Jan 1, 2018 at 23:57
2 Answers 2
Generally the Tools > Programmer selection is only used for Tools > Burn Bootloader and Sketch > Upload Using Programmer and is not used for standard uploads. So for standard uploads you can set it to anything you like because it will have no effect.
The most notable exception is the Adafruit Trinket, which does require you to select Tools > Programmer > USBTinyISP even though you are uploading through the USB socket on the Trinket board without a separate ISP programmer.
You will also find some 3rd party hardware packages that are not written for boards with an Arduino style serial bootloader and so treat a standard upload as an «Upload Using Programmer» for the sake of convenience. Examples are MicroCore and the «Barebones ATmega Chips (no bootloader)» hardware package. In this case the correct Programmer menu selection is dependent on which model of ISP programmer you are using.
So regarding the question «How can I tell what programmer to use?»: If you’re doing a standard upload, start by assuming it doesn’t matter. If that doesn’t work, read the documentation!
If you’re doing a Tools > Burn Bootloader or Sketch > Upload Using Programmer (or holding shift while pressing the «Upload» button) then you should select the model of the ISP programmer you’re using.
Программатор на Ардуино Нано и Уно: прошивка через USB


Вопросы и ответы
Автор fast12v0_oarduin На чтение 20 мин Просмотров 2к. Опубликовано 10.11.2021
Установка программного обеспечения Atmel FLIP
На плате Arduino два микроконтроллера: ATMEGA328P (328P) и ATMEGA16U2 (16U2). Вы можете обновить прошивку 16U2, чтобы стать программистом AVRISP MKII, а затем использовать Atmel Studio для прошивки 328P.
Я пробовал разные варианты, но столкнулся с разными проблемами. Многие из рекомендаций в моем случае не сработали, особенно с точки зрения прошивки загрузчика через программное обеспечение Arduino.
Перед запуском прошивки Arduino вам понадобится программное обеспечение Atmel FLIP (Microchip) для обновления прошивки внутри 16U2.
Загрузите Flip с веб-сайта Microchip — отсюда. Установить. Проблем возникнуть не должно, просто следуйте инструкциям мастера установки.
Берем плату Arduino, отключаем питание и USB. Короткое замыкание контактов 5-6 на ICSP1 (при сбросе 16U2 будет низкий уровень).
Распиновка ICSP1
Это будет выглядеть так:
Затем подключите Arduino к USB. Отсоедините контакты ICSP1 (5-6). В этот момент 16U2 переходит в режим DFU. Новое устройство USB должно быть распознано.
Если драйвер не устанавливается автоматически, установите его из: C: Program Files AtmelFlip3.4.7usb»
Перейдите в диспетчер устройств: Win + Pause -> Оборудование -> Диспетчер устройств. Проверьте, правильно ли установлен драйвер. Его можно найти в Atmel USB -> ATmega16U2.
Особенности установки драйверов
При установке драйверов для Arduino Nano в ОС Windows система автоматически обнаружит необходимое программное обеспечение, если вы использовали установочный файл с официального сайта Arduino.
Если драйверы не были обнаружены и установлены системой, вам необходимо:
- Откройте панель управления.
- Зайдите в раздел «Система и безопасность».
- Переходим во вкладку «Система».
- Откройте диспетчер устройств.
- Откройте вкладку с портами COM и LPT.
- Если на плате нет порта USB UART FT232R или секции с разъемами COM и LPT, перейдите на вкладку «Другие устройства» и перейдите в раздел «Неизвестное устройство».
- Щелкните правой кнопкой мыши FT232R USB UART.
- Выберите «Обновить драйвер».
- Нажмите «Искать драйверы на моем компьютере».
- Выберите драйвер USB FTDI в папке с драйверами Arduino.
Если все сделано правильно, система сама завершит установку программного обеспечения AN.
Схема электрическая
Наиболее важными элементами платы Arduino Nano являются программатор (разъем ISCP) и микроконтроллер (ATmega328P). Каждый, кто будет работать с этой платой, должен знать их конструктивные, принципиальные схемы и назначение контактов.
Схема ISCP «Ардуино Нано»
Разъем ISCP (или SPI) — это программатор, через который скетч (код микроконтроллера платы) загружается в ATmega328P. Имеет 6 контактов. Проем первого из них выполнен в форме квадрата для удобства пользования.
- MISO: главный вход, подчиненный выход во время передачи данных.
- + VCC: напряжение питания.
- SCK: последовательный тактовый сигнал.
- MOSI: главный выход, подчиненный вход во время передачи данных.
- Восстановить: восстановить.
- GND: общий провод.
Принципиальная схема контроллера платы
Контроллер карты — ATmega328P. Ядром микросхемы является центральный процессор, к которому подключены 2 шины (шина данных и шина ввода / вывода), элементы управления (например, вывод сброса, отвечающий за сброс микроконтроллера) и память.
Типы памяти в контроллере:
- SRAM;
- Стремительный;
- EEPROM.
На шину данных поступают следующие элементы:
- Сторожевой таймер.
- АЦП.
- Внешнее прерывание.
- Первый и второй счетчики таймера.
- USART и I2C (Atmel называет этот интерфейс TWI).
Подключено к шине данных ввода / вывода:
- Порты ввода / вывода.
- Счетчик нулевого часа.
- Интерфейс SPI.
Контроллер может быть реализован как в пакетах MLF, так и в пакетах PDIP. Arduino Nano имеет версию микроконтроллера MLF.
SinaProg
SinaProg — это уже более профессиональная и универсальная программа, разработанная неизвестными иранскими программистами. Однако сразу скажу, что эта программа является не чем иным, как графической оболочкой для утилиты AVRDude, о которой мы поговорим дальше.
Универсальная оболочка для AVRDude
- Выбираем файл прошивки
- Конфигурация программатора: выбираем…
- Ардуино,
- Приносит
- Скорость передачи
Последняя версия — 2.1.1
Запуск Arduino Nano
Чтобы начать работу с картой, необходимо подключить ее по USB к ПК. Сигнал питания будет поступать через тот же порт. Как только он будет подключен к плате, загорится синий сигнальный светодиод (в модели v.2.x он расположен в нижней части платы, в модели v.3.x — вверху).
Настройка Arduino
Чтобы настроить карту для работы с написанным кодом, в среде программирования необходимо:
- перейдите в Инструменты;
- пойти в Совет;
- выберите пункт Arduino Duemilanove или Nano w / * модель микроконтроллера * (для v.2.x — ATmega168, для v.3.x — ATmega328);
- перейдите в Инструменты;
- перейти к последовательному порту;
- нажмите Загрузить.
После нажатия кнопки «Загрузить» микроконтроллер будет сброшен и новый скетч будет загружен.
При возникновении проблем с прошивкой необходимо перейти в раздел «Устранение неполадок» и узнать, как их исправить.
Avrdude
Чаще всего загрузчики используют одну и ту же утилиту: AVRDude (AVR Downloader-Uploader), которая уже давно включена во многие среды разработки для Arduino, например, включена в Arduino IDE.
Это самая мощная утилита для работы с микросхемами AVR, но все же это утилита командной строки, что для многих неудобно.
Загрузка HEX прошивки на Arduino
Последняя версия — 6.3.
Прошивка и память Arduino v3 0 CH340G
Стандартная версия платы Arduino Nano, работающая на микросхеме ATmega328P, может быть прошита только через программатор с интерфейсом SPI.
Кроме того, выпускается модель AN, на которой также установлена микросхема CH340G. Преимущество этой сборки в том, что плату можно прошить без подключения программатора SPI через порт USB. Это делается с помощью встроенного загрузчика и преобразователя USB-COM.
При необходимости такую модель Nano также можно прошить через интерфейс SPI.
Для загрузки прошивки через mini-USB вам потребуются:
- Подключите карту к ПК через USB. Система определит устройство как USB 2.0 SERIAL.
- Загрузите и установите драйвер CH340G.
Как только драйвер будет установлен, система правильно определит карту и может быть перепрошита программистом. Светодиод ON на плате загорится, а светодиод будет мигать.
Виды памяти
ATmega328P поддерживает 3 типа памяти:
- Стремительный. Он работает как постоянное запоминающее устройство.
- БАРАН.
- EEPROM. Эта память также предназначена только для чтения, но ее можно перепрограммировать.
Микроконтроллер Atmel имеет 32 КБ флэш-памяти (30 КБ свободно, так как 2 КБ занято загрузчиком), 2 КБ ОЗУ и 1 КБ EEPROM.
Связь с устройствами
Связь с устройствами в Arduino Nano осуществляется через:
- Интерфейс SPI;
- Интерфейс UART;
- Интерфейс TWI (аналог Atmel I2C с линиями SCL и SDA).
Кроме того, контакты микроконтроллера подведены к краям платы, поэтому удобно подключать устройства с помощью кабелей или штыревых разъемов.
Arduino IDE, AVRDude
Давайте посмотрим, как загрузить прошивку только с помощью Arduino IDE на компьютер с Windows.
Напоминаю, что вместе с Arduino IDE устанавливается также AVRDude, с которой мы будем скачивать прошивку.
Установка программного обеспечения
- Установите Arduino IDE, если он не установлен
- В некоторых случаях вам потребуется установить дополнительный драйвер для вашей карты (если карта является китайским клоном). Драйвер нужен только в том случае, если вы не видите свою плату в среде Arduino IDE.
Подготовка
- Подключаем карту к компьютеру
- Запустите Arduino IDE
- Определите, к какому порту подключен Arduino, через меню, как показано ниже:
Выбор COM-порта Arduino
- Определите, в какой папке установлена Arduino IDE
Обычно — «C: Program files (x86) Arduino»
Загрузка прошивки ардуино
- Откройте командную строку и введите следующую команду, предварительно адаптировав ее к вашим условиям:
«C: Program Files (x86) Arduinohardwaretoolsavr / bin / avrdude» — «C: Program Files (x86) Arduinohardwaretoolsavr / etc / avrdude.conf» -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash: w: Шестнадцатеричная прошивка : Я
Обрати внимание на:
- Путь к IDE Arduino (желтый),
- Номер порта (синий),
- Скорость передачи данных (зеленый)
- Имя (путь) файла прошивки (фиолетовый)
поэтому ваша карта не может работать на 115200, и вам нужно установить скорость 57600.
Нажмите CTRL + C, чтобы остановить процесс.
Получение помощи
Если у вас что-то пошло не так, и вы являетесь нашим клиентом, перейдите на страницу поддержки.
Часто задаваемые вопросы о прошивке
Какой COM-порт выбирать?
Этот вопрос обычно возникает, когда программа не может автоматически выбрать COM-порт, к которому подключен Arduino.
Прежде всего, для обнаружения ардуино на вашем компьютере должны быть установлены его драйверы. Они поставляются с IDE Arduino. Для более дешевых китайских колонок может потребоваться установка драйвера CH340.
Итак, драйверы установлены, теперь выберем правильный порт.
Дверь можно посмотреть в Arduino IDE…
Выбор COM-порта в Arduino IDE
. или, если вы работаете в Windows, в диспетчере устройств:

Определение COM-порта, к которому подключен Arduino, через Диспетчер устройств Windows.
Определенно не COM1. Следовательно, в моем случае это будет COM3.
Способы программирования
плата может быть запрограммирована с использованием рукописного или графического кода.
Метод графического программирования заключается в использовании плагина ArduBlock (поддерживает русский язык), который интегрирован в Arduino IDE. Программа изначально отформатирована как блок-схема, а затем автоматически конвертируется в код Arduino IDE (подходит для начинающих программистов).
Чтобы установить подключаемый модуль Arduino IDE:
- Установите Arduino IDE (доступно на официальном сайте Arduino).
- Загрузите плагин ArduBlock с сайта разработчика.
- Переименуйте загруженный файл в ardublock-all.
- Создайте папки Arduino, затем инструменты, ArduBlock и инструмент в разделе «Документы.
- Переместите загруженный и переименованный файл в папку инструментов.
Для работы с этим плагином вам необходимо:
- Запустите среду программирования.
- Перейдите на вкладку «Инструменты».
- Щелкните раздел ArduBlock.
Под программированием карты мы также подразумеваем, как загрузить прошивку в микроконтроллер. Самый популярный метод — это внутрисхемное программирование (ISP), при котором ATmega прошивается через программатор, подключенный через интерфейс SPI к плате и через USB-кабель к ПК. Этим же методом можно перепрошить AN.
Карты, использующие чип CH340, можно прошивать через USB.
Вы можете проверить производительность кода в таких программах, как:
- Протей;
- AutoCAD 123D;
- Tinkercad.
Все утилиты имеют удобный графический интерфейс и большой набор компонентов. В Proteus и AutoCAD вы можете проектировать печатные платы. Для работы с Tinkercad вам нужен только браузер и стабильное интернет-соединение, так как это программное обеспечение работает онлайн.
Варианты прошивки Ардуино
Прошивка с помощью Arduino IDE
Вы можете прошить плату с помощью Arduino IDE всего за несколько шагов. Прежде всего, вам необходимо скачать и установить саму программу Arduino IDE. Вам также необходимо скачать и установить драйвер CH341. Плату Arduino необходимо подключить к компьютеру и подождать несколько минут, чтобы Windows распознала и запомнила ее.
Далее необходимо скачать программу Arduino IDE и выбрать нужную плату: Инструменты — Плата. Вам также необходимо выбрать порт, к которому он подключен: Инструменты — Порт. Готовая прошивка открывается двойным щелчком; чтобы загрузить его на карту, необходимо нажать кнопку «Загрузить» вверху панели инструментов.
В некоторых ситуациях может возникать ошибка из-за наличия кириллических символов (русских букв) в пути к папке с кодами. Для этого лучше всего создать и сохранить файл с наброском в корне диска с английским именем.
Прошивка с помощью программатора
Один из самых простых способов прошить карту — использовать программатор. Заливка будет проходить в несколько этапов.
Прежде всего необходимо подключить программатор к плате и к компьютеру. Если программатор не распознается компьютером, вам необходимо скачать и установить драйверы.
Далее нужно выбрать карту, для которой вы хотите прошить загрузчик. Это делается в меню Сервис >> Карта.

Затем нужно выбрать программатор, к которому подключен контроллер. В этом случае используется USBasp.

Последний шаг — нажать «записать загрузчик» в меню «Инструменты.

После этого начнется загрузка. Завершение займет около 10 секунд.
Прошивка AVRISP MKII в Arduino ATmega16U2
Мы готовы обновить прошивку до 16U2.
Загрузите шестнадцатеричный файл AVRISP MKII отсюда. Отключите Arduino от USB-кабеля и источника питания. Короткий контакт 5-6 ICSP1. Подключите Arduino к USB. Откройте контакты 5-6 ICSP1.
Запустите программное обеспечение FLIP: Пуск -> Все программы -> Flip. Зайдите в: Настройки -> Связь -> USB. Щелкните Открыть».
Перейдите в: Файл -> Загрузить файл HEX. Затем выберите LUFA-BOTH-AVRISP-MKII.hex и нажмите «Выполнить».
ATMEGA16U2 теперь называется AVRISP MKII и работает в режиме Atmel Studio. Arduino AVRISP MKII может работать в двух режимах: Atmel Studio или Avrdude. Ниже я расскажу только о режиме Atmel Studio, так как с режимом Avrdude у меня было много проблем.
Установка Atmel Studio
Загрузите и установите Atmel Studio (включая драйверы) отсюда. После установки подключите Arduino к USB-кабелю. Оба светодиода (RX и TX) должны мигнуть дважды (это означает, что 16U2 находится в режиме Atmel Studio). Новое устройство будет распознано.
Установите драйверы. Если они не распознаются автоматически, вы найдете их в USB-драйверах: C: Program Files Atmel.
Зайдите в Диспетчер устройств, нажмите: Win + Pause -> Оборудование -> Диспетчер устройств. Проверьте, правильно ли установлен драйвер. Он должен быть в Jungo Connectivity -> AVRISP MKII.
Теперь мы готовы прошить Arduino ATMEGA328P. Переходим к следующему шагу.
Перепрошивка загрузчика Arduino в ATMEGA328P через ATMEGA16U2
Довольно сложная часть нашего мероприятия по прошивке Arduino. Вам нужно будет припаять несколько проводов. По сути, нам нужно подключиться так:
- ICSP1 MISO2.Pin.1 -> ICSP MISO.Pin.1
- ICSP1 SCK2.Pin.3 -> ICSP SCK.Pin.3
- ICSP1 MOSI2.Pin.4 -> ICSP MOSI.Pin.4
- JP2 PB4.Pin.1 -> ICSP RESET.Pin.5
Подключите плату Arduino к USB-кабелю. Светодиоды RX и TX должны мигнуть дважды. Драйверы должны быть правильно распознаны (Jungo Connectivity -> AVRISP mkII). Запустите Atmel Studio. Перейдите в: Пуск -> Все программы -> Atmel -> Atmel Studio.
Перейдите в: Инструменты -> Программирование устройства. Выбирать:
- Инструмент -> AVRISP mkII
- Устройство -> ATmega328P
- Интерфейс -> ISP
Нажмите кнопку «Применить».
Установите частоту интернет-провайдера на 16,1 кГц. Нажмите кнопку «Установить».
Программатор не будет работать, если вы установите очень низкую тактовую частоту ISP. Вы получите сообщение об ошибке: «ispProgramMem: статус ошибки получен: 0x81 получено, ожидается 0x00 (истек срок извлечения вывода RDY / nBSY)». По-английски это будет звучать так: «ispProgramMem: статус ошибки получен: получено 0x81, ожидается 0x00 (срок действия выборки вывода RDY / nBSY истек)». Однако максимальная скорость интернет-провайдера также ограничена и не может превышать 1/4 частоты устройства.
Перейдите в раздел «Подпись устройства» и нажмите кнопку «Читать». Вы должны увидеть правильную «подпись устройства»: 0x1E950F. Нажмите «Воспоминания» и найдите шестнадцатеричный файл загрузчика Arduino. Он внутри:
C: Program Files Arduino hardware arduinobootloaders optiboot optiboot_atmega328.hex
Нажмите кнопку «Программа». Если вы используете новый, незапрограммированный ATMEGA328P, также необходимо запрограммировать ПРЕДОХРАНИТЕЛИ. Перейдите в раздел «Предохранители» и используйте следующие значения: low_fuses = 0xff; high_fuses = 0xDE; расширенный_fuses = 0x05.
Вы успешно прошили 328P с помощью загрузчика Arduino. На следующем этапе мы вернем оригинальную прошивку 16U2.
Элементы платы
Arduino Nano состоит из множества элементов, в том числе:
- микросхемы;
- пассивные элементы (резисторы, конденсаторы, диоды);
- разъемы;
- регуляторы.
Микросхема платы FT232R
Микросхема допускает подключение платы по USB. Чип, установленный в AN, не может работать напрямую с интерфейсом USB, поэтому FT232R преобразует его в интерфейс UART.

Сердце платформы — микроконтроллер ATmega328P
ATmega328P — контроллер основной платы. В него загружается набросок, написанный программистом, и контроллер отправляет команды различным элементам платы. Например, микроконтроллер мигает диодами, реле переключается, а пьезоэлемент издает звуки.
Светодиодная индикация
На плате есть 4 встроенных светодиода, каждый из которых имеет свое назначение:
- Светодиоды RX и TX мигают во время передачи данных по UART.
- Диод L загорается при подаче на него высокого сигнала и гаснет при низком уровне.
- Светодиод ON горит, когда на плату подано питание.
Кроме того, практически любой вывод микроконтроллера можно подключить к другим светодиодам, 7-сегментным индикаторам или даже дисплеям.
Разъем mini-USB
Через разъем mini-USB карту можно подключить к персональному компьютеру. AN также может получать питание от внешних источников через этот интерфейс.
Линейный понижающий регулятор напряжения 5 В
В качестве регулятора используется микросхема LM1117MPX-5.0. Преобразует сигнал питания AN в сигнал питания микроконтроллера ATmega и других логических вентилей, которые не поддерживают напряжение более 5 В. Например, транзисторные логические элементы (TTL) получают питание от сигнала такой величины.
ICSP-разъем для ATmega328
Этот интерфейс позволяет стандартным образом загружать прошивку на микроконтроллер. Специальная петля подключена с одной стороны к программатору, подключенному к ПК, а с другой — к разъему ICSP.

Ошибка компиляции
Возникает на этапе сборки и компиляции прошивки, ошибки компиляции вызваны проблемами в коде прошивки, то есть проблема чисто программная. Слева от кнопки «скачать» находится кнопка с галочкой: проверить. Во время проверки компилируется прошивка и выявляются любые ошибки. Ардуино в этом случае может вообще не подключаться к компьютеру.
- В некоторых случаях ошибка возникает при наличии кириллицы (русских букв) в пути к папке со скетчем. Решение: Добавить отдельную папу для скетчей в корень диска с английским названием.
- В черном окне в нижней части IDE Arduino вы можете прочитать полный текст ошибки.
- В готовых скетчах, скачанных из Интернета, часто возникает ошибка с описанием «имя файла» без такого файла или каталога. Это означает, что в скетче используется библиотека «имя файла», и вы должны поместить ее в Program Files / Arduino / libraries. Во всех моих проектах всегда есть папка с используемыми библиотеками, которые нужно установить. Кроме того, библиотеки можно искать в Google по «имени файла».
- При использовании некоторых специальных методов и функций неправильная вкладка в «Инструменты / Вкладка» может стать ошибкой«.
- Если вы напишете прошивку, любые синтаксические ошибки в коде будут выделены и внизу черного окошка можно будет прочитать более подробное описание в чем косяк.
Примеры проектов с Arduino Nano
реализовывать проекты в AN удобно за счет наличия библиотек, упрощающих написание кода.
Подключение светодиодов к Arduino Nano
запитать светодиодный диод можно, например, с помощью вывода 13 через ограничительный резистор 220 Ом. Чтобы этот диод вспыхнул, вам нужно написать следующий код:
Для создания пиксельного изображения, где пиксель равен 1 диоду, используется адресная лента WS2812.
Структура памяти Ардуино, где располагается скетч и данные
- Микроконтроллер Arduino имеет 3 типа памяти: флэш-память, которая используется для хранения эскизов, RAM для хранения переменных и EEPROM для хранения постоянной информации. Из этих типов памяти флэш-память и EEPROM являются энергонезависимыми, что означает, что информация сохраняется при отключении питания. ОЗУ используется только для хранения данных, относящихся к исполняемой программе.Микроконтроллер ATmega168, используемый на некоторых платах Arduino, имеет 16 КБ флэш-памяти, 1024 байта ОЗУ и 512 байтов EEPROM. Важно обратить внимание на небольшой объем оперативной памяти. Большие программы могут использовать его полностью, что приводит к сбою программы. По этой причине необходимо следить за тем, сколько строк занимает программа, и по возможности удалять ненужные. Есть несколько способов уменьшить объем кода:
- Вы можете отправить некоторую информацию на свой компьютер.
- Для таблиц и других больших массивов используйте наименьший тип данных для хранения.
- Данные, которые остаются неизменными, можно объявить константой, используя слово const перед объявлением переменной.
- Меньше использования рекурсии. Когда вы его вызываете, в памяти выделяется фрагмент, называемый стеком, в котором хранятся различные данные. Если рекурсия вызывается часто, стеки будут занимать большой объем памяти и могут ее использовать.
- Нередактируемые строки могут храниться во флэш-памяти во время работы программы. Для этого используется функция ПРОГРАММА.
На размер памяти не влияет размер имен переменных и комментариев. Компилятор устроен таким образом, что он не включает эти данные в скомпилированный скетч.
Для измерения объема используемой оперативной памяти используется скетч из библиотеки MemoryFree. В нем есть специальная функция freeMemory, которая возвращает объем доступной памяти. Кроме того, эта библиотека широко используется для диагностики проблем, связанных с нехваткой памяти.
Оптимизация флеш-памяти. Как только процедура компиляции будет завершена, в окне отобразится информация о памяти, занятой кодом. Если скетч занимает большую часть памяти, необходимо оптимизировать использование флеш-памяти:
- Использование констант. Как и RAM, он устанавливает неизменные значения через константы.
- Удалите ненужный Serial.println. Эта команда используется, когда вам нужно увидеть значения переменных в разных местах программы, часто эта информация просто не нужна. В этом случае команды занимают место в памяти, поэтому, убедившись, что программа работает правильно, некоторые строки можно удалить.
- Отказ от загрузчика — вы можете запрограммировать микроконтроллер через контакты ICSP на плате с помощью аппаратных программаторов.
Флэш-память — это безопасный и удобный способ хранения данных, но некоторые факторы ограничивают ее использование. Флэш-память характеризуется записью данных блоками по 64 байта. Кроме того, флеш-память гарантирует защиту информации на 100 000 циклов записи, после которых информация искажается. Флэш-память содержит загрузчик, который нельзя удалить или подделать. Это может разрушить саму доску.
Память EEPROM используется для хранения всех необходимых данных после выключения питания. Для записи информации о EEPROM необходимо использовать специальную библиотеку EEPROM.h, которая является одной из стандартных библиотек в Arduino IDE. Чтение и запись информации в EEPROM происходит медленно, около 3 мс. Надежность хранения данных гарантируется даже при 100 000 циклов записи, поэтому циклами записи лучше не писать.
Технические характеристики платы
Питание 5 дюймов Входной сигнал 7-12 В (постоянный ток) Количество DP 14 (6 для ШИМ) Количество точек доступа восемь Максимальный ток DP 40 мА Флэш-память формата 16/32 Кб Баран 1/2 Кб Память в формате EEPROM 512 байт / 1 КБ Тактовая частота микроконтроллера 16 МГц Размеры (править Ширина — 19 мм, длина — 42 мм Масса 7 г Подробный обзор возможностей карты представлен в даташите — технической документации. Также указаны подробные характеристики и описание НА.

Порты ввода/вывода и питание
Порты ввода / вывода включают:
- цифровые разъемы;
- аналоговые разъемы;
- разъемы, излучающие сигнал ШИМ;
- разъемы для работы с ADC, I2C (TWI), SPI, UART.
Для работы с каждым интерфейсом на языке C для Arduino существует отдельная библиотека, что упрощает написание кода программистом.
Блок питания может быть подключен к плате модели «Nano» 3 способами:
- Через разъем mini-USB. Этот способ удобен тем, что разработчику не нужно подавать на плату дополнительное питание. Этот источник питания поддерживает системы, позволяющие регулировать входной ток.
- Через нерегулируемые источники 6-20 В.
- Через регулируемый источник питания 5 В.
Плата Arduino Nano запрограммирована таким образом, что если источник питания подключен ко всем доступным контактам, микроконтроллер выберет сигнал с самым высоким значением напряжения и заблокирует остальные контакты питания.
Питание от внешнего источника
Питание от нерегулируемых источников 6-20 В обеспечивается подключением блока источника сигнала к контакту 30 и общему проводу соответственно.
Наибольшей популярностью у разработчиков пользуется способ подключения блока питания через регулируемый блок питания на 5В. Для его использования в схему также должен быть включен преобразователь с выходным напряжением 5 В, а преобразование энергии всегда приводит к дальнейшим потерям и ухудшению качества сигнала. Подключение этого источника осуществляется через вывод 27 и общий провод.
к микроконтроллеру можно подключить источник сигнала, превышающего допустимую амплитуду. Но тогда его нужно подключить к плате через ограничивающий резистор, чтобы диоды могли ограничивать сигнал по амплитуде и не пробивались, иначе сгорит контроллер на плате.