Какой программатор выбрать для arduino uno в ide

от admin

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.

j0h's user avatar

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.

Программаторы, ISP, фьюзы

В этом уроке мы рассмотрим загрузку прошивки в ардуино через внешние “программаторы”. Давайте вспомним, о чем уже говорили в одном из первых уроков: загрузка прошивки в Arduino возможна двумя способами:

  • “Напрямую” во flash память микроконтроллера при помощи ISP (In System Programming) внутрисистемного программатора.
  • При помощи загрузчика (bootloader), который живёт в конце Flash памяти МК, принимает программный код по протоколу TTL (UART) и записывает его во Flash память.

Загрузчик (bootloader)

Загрузчик живёт в самом конце Flash памяти МК и позволяет записывать прошивку, отправляемую через UART. Загрузчик стартует при подаче питания на МК, ждёт некоторое время (вдруг кто-то начнёт слать код прошивки по UART), затем передаёт управление основной программе. И так происходит каждый каждый раз при старте МК.

  • Загрузчик позволяет прошивать МК через UART;
  • Загрузчик замедляет запуск МК, т.к. при каждом запуске ждёт некоторое время для потенциальной загрузки прошивки;
  • Загрузчик занимает место во Flash памяти. Стандартный старый для Arduino NANO занимает около 2 кБ, что весьма существенно!
  • Именно загрузчик мигает светодиодом на 13 пине при включении, как индикация работы.

Программатор

Помимо записи прошивки во flash память, программатор позволяет:

  • Считывать содержимое Flash памяти (скачать прошивку на компьютер)
  • Полностью очищать чип от всех данных и настроек
  • Записывать и читать загрузчик
  • Считывать/записывать EEPROM память
  • Читать и настраивать фьюзы (fuses, fuse-bits) и лок биты.

Программатор – ваш единственный друг при работе с “голым” микроконтроллером, то есть для его низкоуровневой настройки и загрузки прошивки.

USB-TTL (UART)

Этот способ реализован прямо на платах Arduino при помощи USB-TTL (USB-UART) преобразователя, именно поэтому мы можем подключить плату к компьютеру и загрузить код. USB-TTL позволяет только загрузку данных во flash, остальные возможности (как у ISP программатора) ему недоступны. В то же время он ограничен только возможностями загрузчика, но в этом уроке мы рассматриваем только стандартные. Также USB-TTL мост позволяет микроконтроллеру общаться с компьютером по последовательному соединению (тот самый Serial и монитор com порта). Есть платы без бортового USB-TTL, например Arduino Pro Mini. Для работы с ними нужно купить внешний USB-TTL преобразователь. Также загрузка прошивки через UART возможна и в “голый” микроконтроллер при условии наличия там загрузчика, который запишет принятый код во flash. Про запись загрузчика мы поговорим ниже. UART “загружатор” подключается к пинам RX и TX Ардуино (или микроконтроллера), RX->TX и TX->RX, также обязательно подключается земля GND. Если у прошиваемой платы нет своего питания, то подключается и питание. Загрузчик отрабатывает при запуске МК, поэтому непосредственно перед загрузкой прошивки МК должен быть сброшен (перезагружен), и для этого на платах USB-UART есть вывод DTR (Data Terminal Ready), который подключается к пину RST Reset и собственно выполняет сброс перед перед загрузкой прошивки. На платах Pro Mini есть отдельный пин DTR.

USB-TTL Arduino
DTR DTR
RX TX
TX RX
GND GND
VCC/5V/3.3V VCC

blank Китайцы выпускают USB-TTL модули в широком ассортименте, но в целом они все одинаковые по своей сути. Ссылка на результат поиска на aliexpress, и ссылка на все USB-TTL в моём любимом магазине WAVGAT. Что использую я? В основном платку на CP2102. Перед заказом модуля обязательно убедитесь в том, что у него есть выход DTR, иначе этот модуль можно будет использовать только для “общения” с контроллером через COM порт. Для работы с таким преобразователем нужно установить драйвер для чипа, на базе которого собран модуль, это может быть CP2102, CH340/341, FT232, PL2303 и другие. Прошивка загружается как обычно: выбираем порт, на котором сидит преобразователь, версию загрузчика и жмём загрузить, всё! Важный момент: на некоторых китайских версиях плат Arduino Pro Mini не распаян пин DTR, т.е. он не идёт на RST и автоматический сброс перед загрузкой прошивки не выполняется. В этом случае сброс нужно производить вручную, кнопкой RST, непосредственно перед загрузкой прошивки… Загрузка прошивки посредством загрузчика (bootloader) возможна с любого UART устройства, даже через Bluetooth. Но об этом мы поговорим в отдельном уроке.

ISP программатор

USBasp

Дешёвые ISP программаторы также есть в ассортименте у китайцев, рекомендую брать USBasp как самый распространенный. Поискать на алиэкспресс, мне нравится версия в корпусе. USBasp имеет не очень удобный выход 10-пин на шлейфе, поэтому рекомендуется купить также переходник 10-пин на 6-пин, который позволяет сразу подключаться к ISP header’у, который есть на большинстве плат Arduino. Внимание! Очень часто встречается брак в виде непропая контактов, поэтому во избежание проблем рекомендуется пропаять переходник и отмыть флюс (зубная щётка + бензин калоша).

  • Подключить usbasp к компьютеру
  • Скачать и установить драйвера на usbasp (скачать с моего сайта, скачать с Яндекс диска, ещё есть тут и тут)
  • Открыть диспетчер устройств и убедиться, что программатор определился системой
  • Открыть Arduino IDE
  • Выбрать usbasp в Инструменты > Программатор

Решение проблем

Решение большинства проблем с загрузкой через программатор (независимо от того, что написано в логе ошибки):

  • Вытащить и обратно вставить usbasp в usb порт
  • Вставить в другой usb порт
  • Переустановить драйвер на usbasp
  • Проверить качество соединения USBasp с МК
  • Перепаять переходник и отмыть флюс

Для прошивки микроконтроллера, тактирующегося низкой частотой (менее 1 МГц внутренний клок):

  • USBasp: на плате есть перемычка JP3, которая включает режим низкой скорости загрузки. В новых версиях прошивки для USBasp скорость выбирается автоматически, но китайцы продают старую версию. Как прошить новую – ищите в интернете.

Основные ошибки в логе Arduino IDE

avrdude: error: could not find USB device with vid=0x16c0 pid=0x5dc vendor=’www.fischl.de’ product=’USBasp’ Причина – компьютер не видит USB ASP

  • Проверить и сменить USB порт
  • Попытаться переустановить драйвер
  • Проверить пайку USB разъема на плате программатора
  • Проверить наличие и целостность элементов вблизи usb разъема программатора, кварцевый резонатор
  • Возможно программатор криво прошит – при возможности попытаться перепрошить
  • Возможно микроконтроллер на плате программатора – брак или же мертв, попытаться заменить и прошить

avrdude: error: program enable: target doesn’t answer. Причина – usbasp не видит подключаемый микроконтроллер

  • Проверить правильность и целостность соединения с МК
  • Попытаться снизить частоту прошивки, джампером или же указав более низкую скорость в среде программирования
  • Проверить пайку разъема 10 pin и переходника 10 pin – 6 pin
  • Возможно прошиваемый микроконтроллер попался с браком, или же мертв.

Arduino as ISP

Почти любая другая плата Arduino может стать ISP программатором, для этого нужно просто загрузить в неё скетч ArduinoISP:

  • Открыть скетч Файл > Примеры > 11. ArduinoISP > ArduinoISP
  • Всё! Ваша Arduino теперь стала ISP программатором
  • Подключаем к ней другую Arduino или голый чип по схеме ниже
  • Выбираем Arduino as ISP в Инструменты > Программатор
  • И можем писать загрузчики, фьюзы или загружать прошивку напрямую во Flash

ISP программатор подключается к четырем пинам микроконтроллера, не считая питания: один из пинов передает сброс, остальные – для передачи данных. Чтобы плата-программатор не сбрасывалась при загрузке, на неё нужно:

    Либо поставить поставить конденсатор ёмкостью

По использованию других плат Arduino в качестве программатора читай на официальном сайте.

Решение проблем

Для прошивки микроконтроллера, тактирующегося низкой частотой (менее 1 МГц внутренний клок):

  • Arduino ISP: нужно изменить частоту загрузки прошивки в скетче Arduino ISP и снова прошить его в ардуино-программатор (см. строку в скетче 45 и ниже);

Работа в Arduino IDE

Прошивка загрузчика

Из Arduino IDE при помощи ISP программатора мы можем записать другой загрузчик (по факту загрузчик + фьюзы) и загрузить скетч, а также настроить/прошить фьюзы и лок-биты, но не очень удобным способом. Когда мы выбираем плату в Инструменты > Плата и загрузчик в Инструменты > Плата (загрузчик, bootloader), Arduino IDE автоматически делает “активным” нужный загрузчик. Нажимая Инструменты > Записать загрузчик мы прошиваем загрузчик, соответствующий выбранной плате и её настройкам. Также одновременно с загрузчиком прошиваются фьюзы и лок-биты, соответствующие выбранной плате в Arduino IDE. Как и где их поменять, смотрите чуть ниже. Рассмотрим на примере записи загрузчика для atmega328, стоящей на китайской плате Arduino NANO. На данный момент китайцы прошивают в МК старую версию загрузчика, которая называется old bootloader в меню платы. Оригинальные платы идут с более современным загрузчиком, поэтому при работе с китайскими платами нам приходится выбирать old bootloader для загрузки прошивки через бортовой usb порт. Подключим usbasp по схеме выше, выберем его как программатор в Инструменты > Программатор, выберем плату Arduino NANO, загрузчик для atmega328 (первый в списке). Нажмём записать загрузчик. Всё! Теперь плату можно шить через бортовой usb порт, выбирая первый загрузчик. Он кстати легче, быстрее “прошивает” и сама прошивка быстрее “запускается”.

Как убрать загрузчик?

В стандартном “ядре” Arduino не предусмотрен вариант “без загрузчика”. Для того, чтобы вручную убрать поддержку загрузчика, нужно уметь работать с boards.txt и фьюзами: нужно будет изменить фьюз BOOTRST и подправить максимальный размер скетча. Есть более простой вариант – найти и установить ядро, в котором реализован выбор загрузчика с вариантом “без загрузчика”, например для ATmega328 это miniCore и наше GyverCore. Нужно установить поддержку ядра по рассмотренной ранее инструкции, выбрать плату, указать вариант “без загрузчика” и нажать “Записать загрузчик”. В МК будут прошиты соответствующие фьюзы.

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

В Arduino IDE можно зашить скетч через программатор, для этого надо нажать Скетч > Загрузить через программатор. Это очень удобно в том случае, когда МК используется без загрузчика, или просто голый МК.

Фьюзы

Конфигуратор платы в Arduino IDE устроен следующим образом: каждой плате в Инструменты > Плата соответствует свой набор настроек, включая фьюзы, которые прошиваются вместе с загрузчиком . Некоторые из них:

  • Загрузчик (путь к файлу)
  • Скорость загрузки (через загрузчик)
  • Объем доступной flash и sram памяти
  • Весь набор фьюзов и лок-биты

Файл конфигурации называется boards.txt и найти его можно в папке с ядром Arduino: C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt. Документацию на boards.txt можно почитать здесь. При желании можно вывести нужные фьюзы через калькулятор (читайте выше), изменить их в boards.txt (главное не запутаться, для какой выбранной конфигурации платы делается изменение) и прошить в МК, нажав Инструменты > Записать загрузчик.

  • Фьюзы подписаны как low/high/extended fuses, можно вставлять полученное в калькуляторе значение.
  • Локбиты работают следующим образом: unlock_bits это локбиты, которые прошьются до записи загрузчика (при нажатии на кнопку Записать загрузчик). А вот после прошивки загрузчика будут автоматически прошиты lock_bits, которые и определят доступ к памяти контроллера во время его работы. Чтобы защитить прошивку от чтения – ставим lock_bits 0x3C.

Такая работа с фьюзами максимально неудобна, но есть и другие варианты:

  • Ядро GyverCore для atmega328, в нем мы сделали кучу готовых настроек фьюзов прямо в настройках платы, читайте в уроке про GyverCore. Несколько загрузчиков, включая вариант без загрузчика, выбор источника тактирования и другие настройки в один клик мышкой.
  • Программа AVRdudeprog, про нее поговорим ниже

Фьюзы (Pro)

Фьюзы (фьюз-биты) являются низкоуровневыми настройками микроконтроллера, которые хранятся в специальном месте в памяти и могут быть изменены только при помощи ISP программатора. Это такие настройки как выбор источника тактирования, размер области памяти под загрузчик, настройка отсечки по напряжению и прочее. Фьюз-биты собраны по 8 штук в байты (т.н. байты конфигурации), как типичный регистр микроконтроллера AVR. Таких байтов может быть несколько, они называются low fuses, high fuses, extended fuses. Для конфигурации байтов рекомендуется использовать калькулятор фьюзов (например, вот такой), в котором просто ставятся галочки на нужных битах, и на выходе получается готовый байт в hex виде. Рассмотрим на примере ATmega328p:

Важный момент: в AVR биты у нас инверсные, то есть 1 это выкл, 0 это вкл. Расставляя галочки в калькуляторе, мы формируем байт, галочка стоит – бит включен, но в результирующем байте включенные биты являются нулями. Об этом стоит задумываться при ручном составлении фьюз-байта, при использовании калькулятора можете об этом даже не вспоминать. Что позволяют настроить биты?

  • CKSEL0CKSEL3 – выбор источника и частоты тактирования (уточняй в даташите на свой МК, какая конфигурация за что отвечает)
  • SUT0SUT1 – задержка старта МК после перезагрузки
  • CKOUT – дублирование тактирования на один из пинов (см. в даташите на какой)
  • CKDIV8 – делит тактовую частоту на 8
  • BOOTRST – если включен, МК запускается с загрузчика
  • BOOTSZ0BOOTSZ1 – задаёт размер сектора загрузчика
  • EESAVE – защита EEPROM от стирания во время выполнения полной очистки чипа
  • WDTON – если включить, то Watchdog будет принудительно включен без возможности отключения
  • SPIEN – опасный бит , при его отключении пропадает возможность прошивки через ISP, и возможность выключить этот бит в том числе*
  • DWEN – вкл/выкл отладочный интерфейс DebugWire. На других моделях бывает и JTAG, и его бит – JTAGEN
  • RSTDISBL – опасный бит , при его включении можно использовать ногу RST как обычный цифровой пин, но пропадает возможность прошивки через ISP и выключить этот бит как следствие*
  • BODLEVEL0BODLEVEL3 – настройка контроля напряжения (МК сбросится при падении ниже установленного напряжения)

* – прошивка возможна при помощи высоковольтного программатора

Лок-биты (Pro)

Лок-биты (lock-bits) позволяют управлять доступом к памяти микроконтроллера, что обычно используется для защиты устройства от копирования. Лок-биты собраны опять же в конфигурационный лок-байт, который содержит: BOOTLOCK01, BOOTLOCK02, BOOTLOCK11, BOOTLOCK12, LOCKBIT1, LOCKBIT2 (для ATmega328). Калькулятор лок-битов можно использовать этот. BOOTLOCK биты позволяют запретить самому МК запись (самопрограммирование) во flash память (область программы и область загрузчика)

А вот локбиты LOCKBIT позволяют запретить запись и чтение flash и EEPROM памяти извне, при помощи программатора, т.е. полностью защитить прошивку от скачивания и копирования:

Таким образом включив LOCKBIT1 (лок-байт будет 0x3E) мы запретим внешнюю запись во Flash и EEPROM память, т.е. при помощи ISP программатора, а включив LOCKBIT1 и LOCKBIT2 (лок-байт: 0x3C) полностью заблокируем заодно и чтение данных из памяти микроконтроллера. Повторюсь, всё описанное выше относится к ATmega328p, для других моделей МК читайте в соответствующих даташитах.

Avrdudeprog

Avrdudeprog – утилита от русского программиста, являющаяся удобной оболочкой для avrdudue. Скачать AVRDUDE_PROG можно с официального сайта (прямая ссылка на загрузку, на всякий случай зеркало на моём ЯД и FTP этого сайта). В рамках этого урока, программа умеет следующее:

  • Чтение/запись/очистка flash памяти
  • Чтение/запись/очистка eeprom памяти
  • Полная очистка чипа
  • Калькулятор фьюзов и локбитов (чтение/запись)

Более подробный обзор на avrdudeprog можно посмотреть здесь . Давайте посмотрим на калькулятор фьюзов. Выбираем свой микроконтроллер и программатор (можно добавить другие модели микроконтроллеров и программаторов, читай тут). Переходим во вкладку Fuses, нажимаем прочитать. При успешном чтении увидим текущий набор настроек своего чипа. Можно их поменять и загрузить. Важно! Галку инверсные биты не трогаем! Лок-биты и отключение RST заблокирует микроконтроллер, не трогайте их, если такой цели нет! Можно загружать прошивку или загрузчик из .hex файла, указав путь к ней на первой вкладке в окне Flash. Очень удобная утилита для низкоуровневой работы с МК.

Программатор на Ардуино Нано и Уно: прошивка через USB

На плате 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.

Если драйверы не были обнаружены и установлены системой, вам необходимо:

  1. Откройте панель управления.
  2. Зайдите в раздел «Система и безопасность».
  3. Переходим во вкладку «Система».
  4. Откройте диспетчер устройств.
  5. Откройте вкладку с портами COM и LPT.
  6. Если на плате нет порта USB UART FT232R или секции с разъемами COM и LPT, перейдите на вкладку «Другие устройства» и перейдите в раздел «Неизвестное устройство».
  7. Щелкните правой кнопкой мыши FT232R USB UART.
  8. Выберите «Обновить драйвер».
  9. Нажмите «Искать драйверы на моем компьютере».
  10. Выберите драйвер USB FTDI в папке с драйверами Arduino.

Если все сделано правильно, система сама завершит установку программного обеспечения AN.

Схема электрическая

Наиболее важными элементами платы Arduino Nano являются программатор (разъем ISCP) и микроконтроллер (ATmega328P). Каждый, кто будет работать с этой платой, должен знать их конструктивные, принципиальные схемы и назначение контактов.

Схема ISCP «Ардуино Нано»

Разъем ISCP (или SPI) — это программатор, через который скетч (код микроконтроллера платы) загружается в ATmega328P. Имеет 6 контактов. Проем первого из них выполнен в форме квадрата для удобства пользования.

  1. MISO: главный вход, подчиненный выход во время передачи данных.
  2. + VCC: напряжение питания.
  3. SCK: последовательный тактовый сигнал.
  4. MOSI: главный выход, подчиненный вход во время передачи данных.
  5. Восстановить: восстановить.
  6. GND: общий провод.

Принципиальная схема контроллера платы

Контроллер карты — ATmega328P. Ядром микросхемы является центральный процессор, к которому подключены 2 шины (шина данных и шина ввода / вывода), элементы управления (например, вывод сброса, отвечающий за сброс микроконтроллера) и память.

Типы памяти в контроллере:

  • SRAM;
  • Стремительный;
  • EEPROM.

На шину данных поступают следующие элементы:

  1. Сторожевой таймер.
  2. АЦП.
  3. Внешнее прерывание.
  4. Первый и второй счетчики таймера.
  5. USART и I2C (Atmel называет этот интерфейс TWI).

Подключено к шине данных ввода / вывода:

  1. Порты ввода / вывода.
  2. Счетчик нулевого часа.
  3. Интерфейс SPI.

Контроллер может быть реализован как в пакетах MLF, так и в пакетах PDIP. Arduino Nano имеет версию микроконтроллера MLF.

SinaProg

SinaProg — это уже более профессиональная и универсальная программа, разработанная неизвестными иранскими программистами. Однако сразу скажу, что эта программа является не чем иным, как графической оболочкой для утилиты AVRDude, о которой мы поговорим дальше.

Универсальная оболочка для AVRDude

  1. Выбираем файл прошивки
  2. Конфигурация программатора: выбираем…
  3. Ардуино,
  4. Приносит
  5. Скорость передачи

Последняя версия — 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 вам потребуются:

  1. Подключите карту к ПК через USB. Система определит устройство как USB 2.0 SERIAL.
  2. Загрузите и установите драйвер CH340G.

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

Виды памяти

ATmega328P поддерживает 3 типа памяти:

  1. Стремительный. Он работает как постоянное запоминающее устройство.
  2. БАРАН.
  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:

  1. Установите Arduino IDE (доступно на официальном сайте Arduino).
  2. Загрузите плагин ArduBlock с сайта разработчика.
  3. Переименуйте загруженный файл в ardublock-all.
  4. Создайте папки Arduino, затем инструменты, ArduBlock и инструмент в разделе «Документы.
  5. Переместите загруженный и переименованный файл в папку инструментов.

Для работы с этим плагином вам необходимо:

  1. Запустите среду программирования.
  2. Перейдите на вкладку «Инструменты».
  3. Щелкните раздел 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.

Микросхема платы FT232R.

Сердце платформы — микроконтроллер ATmega328P

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

Светодиодная индикация

На плате есть 4 встроенных светодиода, каждый из которых имеет свое назначение:

  1. Светодиоды RX и TX мигают во время передачи данных по UART.
  2. Диод L загорается при подаче на него высокого сигнала и гаснет при низком уровне.
  3. Светодиод ON горит, когда на плату подано питание.

Кроме того, практически любой вывод микроконтроллера можно подключить к другим светодиодам, 7-сегментным индикаторам или даже дисплеям.

Разъем mini-USB

Через разъем mini-USB карту можно подключить к персональному компьютеру. AN также может получать питание от внешних источников через этот интерфейс.

Линейный понижающий регулятор напряжения 5 В

В качестве регулятора используется микросхема LM1117MPX-5.0. Преобразует сигнал питания AN в сигнал питания микроконтроллера ATmega и других логических вентилей, которые не поддерживают напряжение более 5 В. Например, транзисторные логические элементы (TTL) получают питание от сигнала такой величины.

ICSP-разъем для ATmega328

Этот интерфейс позволяет стандартным образом загружать прошивку на микроконтроллер. Специальная петля подключена с одной стороны к программатору, подключенному к ПК, а с другой — к разъему ICSP.

ATmega328

Ошибка компиляции

Возникает на этапе сборки и компиляции прошивки, ошибки компиляции вызваны проблемами в коде прошивки, то есть проблема чисто программная. Слева от кнопки «скачать» находится кнопка с галочкой: проверить. Во время проверки компилируется прошивка и выявляются любые ошибки. Ардуино в этом случае может вообще не подключаться к компьютеру.

  • В некоторых случаях ошибка возникает при наличии кириллицы (русских букв) в пути к папке со скетчем. Решение: Добавить отдельную папу для скетчей в корень диска с английским названием.
  • В черном окне в нижней части 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 способами:

    1. Через разъем mini-USB. Этот способ удобен тем, что разработчику не нужно подавать на плату дополнительное питание. Этот источник питания поддерживает системы, позволяющие регулировать входной ток.
    2. Через нерегулируемые источники 6-20 В.
    3. Через регулируемый источник питания 5 В.

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

    Питание от внешнего источника

    Питание от нерегулируемых источников 6-20 В обеспечивается подключением блока источника сигнала к контакту 30 и общему проводу соответственно.

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

    Какой программатор выбрать для arduino uno в ide

    anthtml

    вообще-то это даже не программатор, а преобразователь USB-RS232, точнее USB-UART, тк для RS232 нужно еще сформировать соответствующие уровни, чего этот преобразователь не делает (по крайней мере мой PL2303 так точно)

    по вопросу программирования — по сути у вас же есть ардуинка, ее ведь можно использовать в качестве программатора.
    ну а если хочется отдельно программатор, то нужно смотреть в сторону AVR ISP, USBasp, но тут уже нужно понимать, что работать вы будете напрямую с контроллером ATMEL AVR, нужно знать про фьюзы и тп.

    Какой программатор выбрать для arduino uno в ide

    Запись загрузчика в Arduino или Iskra с помощью другой платы

    Откройте «Диспетчер устройств».
    Подключите плату-программатор к компьютеру по USB. В диспетчере устройств раскройте вкладку «Порты (COM и LPT), найдите в ней название вашей платы программатора и запомните её номер.
    Запустите среду Arduino IDE
    Выберите интересующую нас плату. Для этого перейдите в меню: Инструменты Плата и выберите плату «Arduino Uno»
    Укажите в Arduino IDE, на каком COM-порту находится плата-программатор. Для этого зайдите в меню: Инструменты Порт и укажите номер COM-порта.
    Аналогично укажите программатор AVRISP mkIIavrisp . Зайдите в меню: Инструменты Программатор и выберите программатор «AVRISP mkII».
    Откройте скетч, который сделает из платы Arduino программатор. Для этого в меню: Файл Образцы и выберите пример «ArduinoISP».
    Загрузите скетч в программатор.

    Загрузчик прошивается через внутрисхемный разъём ICSP. Его распиновка представлена ниже: Соедините плату программатор с исполнительной платой согласно таблице:

    Контакты платы программатора Контакты платы исполнителя
    1 пин разъёма ICSP 1 пин разъёма ICSP
    2 пин разъёма ICSP 2 пин разъёма ICSP
    3 пин разъёма ICSP 3 пин разъёма ICSP
    4 пин разъёма ICSP 4 пин разъёма ICSP
    10 пин контактной колодки 5 пин разъёма ICSP
    6 пин разъёма ICSP 6 пин разъёма ICSP

    Запустите среду Arduino IDE.
    Выберите интересующую нас плату исполнитель. Для этого в меню: Инструменты Плата укажите плату «Arduino Leonardo»
    Проверьте, что выбранный COM-порт остался прежним. Для этого перейдите в меню Инструменты Порт .
    Измените тип программатора на Arduino as ISP . Зайдите в меню Инструменты Программатор и выберите программатор «Arduino as ISP».
    Теперь обе платы и среда настроены. Запишите загрузчик. Для этого в меню Инструменты выберите пункт «Записать загрузчик»
    Если все шаги были пройдены правильно, на плате-программаторе начнут мигать светодиоды RX и TX . В окне статуса Arduino IDE должна появиться надпись «Запись загрузчика завершена»

    У Вас есть Arduino? Значит у Вас есть программатор!

    Все таки, поговорка «Век живи — век учись!» придумана неспроста! В свое время, начав интересоваться микроконтроллерами семейства AVR (и в частности, Arduino ) я забеспокоился об инструменте для программирования оных. Т.е., программаторах . А ведь программатор (ну, может не в столь явном виде) у меня всегда был под рукой. Это плата Arduino.
    ISP ( In-system programming ) — это способность микроконтроллера получать прошивку находясь уже непосредственно в собранной схеме. Программатором (устройством передающим прошивку от компьютера в контроллер) в нашем случае будет выступать Arduino.
    Аргументы для сомневающихся (делать/не делать)
    За:
    1) этот шилд даст вторую жизнь «морально устаревшим» платам Arduino на Atmega8
    2) У Вас появиться прекрасная возможность писать программы для микроконтроллеров серии Attiny в привычном Arduino IDE
    3) это самый «копеечный» программатор (при условии наличия у Вас Arduino)
    4) этот шилд ОЧЕНЬ прост в изготовлении, не содержит дефицитных деталей и не требует настройки
    5) позволяет (в какой-то мере) сохранить порядок на Вашем рабочем месте 🙂

    Против:
    — я не нашел

    Если готовы, то поехали.
    Чтобы Arduino стала ISP программатором на нее необходимо залить специальную прошивку. Эта прошивка поставляется вместе с Arduino IDE. Напомню. Еще без какой-либо периферии Arduino подключаем к компьютеру и загружаем Arduino IDE. Выбираем [File] -> [Examples] -> [ArduinoISP]

    Ну и далее, люди делают что-то примерно такое:

    Кстати, я тоже так делал :). Собственно, после чего и появилась эта задумка. Вариант «клубкового» соединения, естественно, имеет право на жизнь. Но, скажем так:
    -> Неудобно
    -> ненадежно
    -> некрасиво и все такое 🙁

    Логично было бы предположить, что умные люди смекнули «что к чему» и наладили выпуск готовых ARDUINO ISP Shield-ов. Вот парочка примеров:

    Схема. Хм, конечно сложно это назвать схемой, но все же:

    Разводка печатной платы много времени не заняла. Я фактически расположил нужные корпуса и разъемы на плату, подписал нужные выводы и тупо их соединял 🙂 Вот, что получилось:

    Лут:

    После запайки:

    Вторая сторона:

    Обращаю Ваше внимание, на наличие трех SMD перемычек (резисторы 0R).

    Вот готовое изделие:

    . ВАЖНЫЙ МОМЕНТ. Очень рекомендую установить панельки с цанговыми контактами!

    Итак, все у нас готово для проведения «ходовых» испытаний. Подключаем наш шилд к ЗАРАНЕЕ «прошитую» Ардуино
    .

    Проверяем работоспособность с помощью GUI оболочки для AVRDUDE :

    Ниже картинки для варианта с CraftDuino (у меня CraftDuino общается через виртуальный COM N14. Естественно, у Вас может быть другой)

    Загрузчик Ардуино и прошивка через Arduino IDE и программатор

    Загрузка скетча или прошивка контроллера Ардуино – основная операция, с которой рано или поздно сталкивается любой ардуинщик. Именно возможность быстро и без лишних проблем загрузить в память контроллера управляющую программу и стала одной из основных причин успеха платформы Arduino. В этой статье мы узнаем, как прошиваются Arduino Uno, Nano, Mega и другие платы на основе Atmega с использованием Arduino IDE, программатора или другой платы Ардуино.

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

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

    Что происходит, когда мы жмем кнопку «Загрузить»

    Плата Ардуино – это микроконтроллер AVR (Atmega8/168/328 или Atmega1280/2560), который прошивается загрузчиком. В микроконтроллер записывается программа, называемая прошивкой, которая позволяет получать сигналы с датчиков, обрабатывать нажатия кнопок, общаться с различными устройствами через интерфейсы, управлять исполнительными процессами.

    Обычно прошивка записывается в кристалл микроконтроллера при помощи специальных устройств, называемых программаторами. Для разных микроконтроллеров существуют различные программаторы – от специализированных до универсальных. Важным отличием Ардуино от других контроллеров является возможность залить прошивку через обычный USB кабель. Это достигается при помощи специальной программы – загрузчика (Bootloader). Для прошивки не требуются лишние провода, не нужно подключать дополнительные устройства или нажимать что-то на плате. Также при работе через загрузчик нельзя добраться до опасных настроек, которые выведут из строя Ардуино.

    При подключении платы Ардуино к источнику питания, внутри него начинается активная деятельность микропрограмм. При запуске микроконтроллера управление получает загрузчик. Первые 2 секунды он проверяет, поступил ли новый код от пользователя. Кроме того загрузчик подает импульсы на пин, к которому подключен светодиод, и он начинает мигать. Это означает, что загрузчик установлен и работает исправно. Когда подается скетч, загрузчик записывает его во флеш-память микроконтроллера. Затем эта программа подается на выполнение. Если данные не поступили, загрузчик запускает предыдущую программу. Во время выполнения программы внутри Ардуино выполняется ряд операций по инициализации и настройке среды окружения, и только после этого начинается выполнение кода.

    Вызов setup и loop при загрузке

    В самом коде имеются несколько основных функций, на их примере можно рассмотреть работу микроконтроллера.

    Команда void setup() – в ней записываются данные, которые микроконтроллер выполняет в момент загрузки, а после может про них забыть. В этой функции указываются номера пинов, к которым подключается устройство, подключаются и инициализируются библиотеки, устанавливается скорость работы с последовательным портом.

    Функция void loop – в нее помещаются команды, которые должны выполняться, пока включена плата. Микроконтроллер начнет выполнять программы, начиная с первой, и когда дойдет до конца, сразу вернется в начало, чтобы повторить эту же последовательность бесконечное число раз.

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

    В Ардуино IDE компиляция скетча начинается при нажатии кнопки Verify, после этого скетч может быть загружен в память Ардуино через USB с помощью кнопки Upload. Перед загрузкой кода программы нужно установить все параметры в меню Tools. В этом меню выбираются порт, к которому подключена плата, и платформу. В окне Arduino IDE внизу будет отображен ход компиляции скетча. При успешной выгрузке скетча будет получено сообщение «Done uploading». Запуск скетча начинается сразу после окончания загрузки. Для расширения возможностей можно подключать дополнительные внешние библиотеки, разработанные командой Ардуино или сторонними авторами.

    Обзор возможных вариантов загрузки скетча

    Кратко весь алгоритм можно записать следующим образом: Написание кода >> компиляция >> загрузка в микроконтроллер. При загрузке скетча используется Bootloader (Загрузчик). Он представляет собой небольшую программу, которая загружается в микроконтроллер на Ардуино. С помощью этой программы можно загружать скетч, не используя дополнительные аппаратные средства. При работе загрузчика на плате будет мигать светодиод.

    1. Загрузка в Arduino IDE. Самый простой и удобный вариант загрузки кода. Все, что нужно сделать – это написать или найти нужный скетч и загрузить его.

    1. Ускоренная загрузка скетча в Arduino IDE. С помощью этого метода можно увеличить скорость загрузки в микроконтроллер в два раза. Для этого нужно лишь зайти в Настройки и снять галочку с пункта Проверка кода. Пропуская шаг проверки, будет уменьшено количество байтов, которые передаются во время загрузки. При этом все равно некоторые из видов проверок будут осуществлены, но они не занимают долгого времени. Отключать проверку кода не рекомендуется, если Ардуино помещается в какой-либо ответственный проект (например, в спутник). Также можно провести проверку, если подключение производится через очень длинный USB кабель (порядка 10 метров).

    Уменьшение времени загрузки при помощи отключения проверки работает с любой платой Ардуино, которая использует USB соединение. Все эти микроконтроллеры используют загрузчик avrdude. Платы, которые используют загрузчик Catarina, не нуждаются в отключении проверки кода, так как этот загрузчик работает быстрее.

    1. Загрузка скетча в Ардуино через Bluetooth. Этот способ используется, когда нужно обойтись без физического соединения Ардуино и компьютера – например, в силовых цепях или радиочастотных цепях. Для реализации загрузки потребуется Bluetooth-модуль, который оснащен платой-адаптером для Ардуино. Этот модуль нужно подключить к компьютеру через переходник USB-UART-TTL. Работа с модулем осуществляется с помощью AT-команд.
    2. Загрузка при помощи Андроид-устройства. Для осуществления такого типа загрузки кода понадобятся провода USB-A – USB-B и USB-Host (OTG-кабель), Ардуино и устройство на базе Андроид с поддержкой режима host. На Андроид-устройство нужно установить программу ArduinoDroid или ArduinoCommander из Google Play. Все устройства нужно соединить при помощи кабелей, после этого можно включать Ардуино и загружать на него код. Нужно запустить установленную программу. При включении начнется обновление IDE, на что понадобится некоторое время.

    Сначала работа будет рассмотрена на примере программы ArduinoCommander. После ее запуска нужно нажать USB-Device. Затем нужно наддать Autodetect, чтобы Андроид-устройство выполнило поиск Ардуино и отобразило его на экране. Как только Ардуино появится на экране, нужно на него нажать. Чтобы перейти в меню, нужно щелкнуть в нижнем правом углу. В этом меню можно загрузить скетч с SD-карты.

    ArduinoDroid представляет собой среду разработки, компилятор и загрузчик одновременно. Начать компиляцию скетча нужно нажав на кнопку Lightning-Button. После завершения компиляции нужно нажать на кнопку загрузки. Загрузка занимает несколько секунд. По окончании загрузки ардуино запустит на выполнение новый код.

    1. Программирование при помощи Raspberry Pi. Можно загружать скетчи двумя способами – при помощи Arduino IDE и при помощи пакета arduino-mk. Пакет позволяет собирать и загружать скетчи Ардуино из командной строки.

    Структура памяти Ардуино, где располагается скетч и данные

    На микроконтроллере Ардуино имеется 3 вида памяти – флеш-память, которая используется для хранения скетчей, ОЗУ для хранения переменных и EEPROM для хранения постоянной информации. Из этих типов памяти флеш-память и EEPROM являются энергонезависимыми, то есть информация сохраняется при выключении питания. ОЗУ используется только для хранения данных, которые имеют отношение к исполняемой программе.

    Микроконтроллер ATmega168, который используется на части плат Ардуино, имеет 16 Кб флеш-памяти, 1024 байта для ОЗУ и 512 байт EEPROM. Важно обратить внимание на малый объем ОЗУ. Большие программы могут полностью ее израсходовать, что приведет к сбою в программе. По этой причине нужно следить за тем, сколько строк занимает программа, и по возможности удалять лишнее. Уменьшить объем кода можно несколькими способами:

    • Можно отправить часть информации на компьютер.
    • Для таблиц и других крупных массивов использовать минимальный тип данных для хранения.
    • Данные, которые остаются неизменными, можно объявить константами при помощи слова const перед объявлением переменной.
    • Меньше использовать рекурсию. При ее вызове в памяти, называемой стеком, выделяется фрагмент, в котором хранятся различные данные. Если часто вызывать рекурсию, стеки будут занимать большой объем памяти и могут израсходовать ее.
    • Неизменяемые строки можно сохранять во флеш-памяти во время работы программы. Для этого используется функция PROGMEM.

    На объем памяти не влияют размер имени переменных и комментарии. Компилятор устроен таким образом, что не включает эти данные в скомпилированный скетч.

    Для измерения объема занимаемой памяти ОЗУ используется скетч из библиотеки MemoryFree. В ней имеется специальная функция free­Memory, которая возвращает объем доступной памяти. Также эта библиотека широко используется для диагностики проблем, которые связаны с нехваткой памяти.

    Оптимизация флеш-памяти. Как только будет окончена процедура компиляции, в окне появится информация о занимаемой памяти кодом. Если скетч занимает большую часть памяти, нужно произвести оптимизацию использования флеш-памяти:

    • Использование констант. Аналогично как и для ОЗУ задавать неизменяющиеся значения константами.
    • Удалить ненужные Serial.println. Эта команда используется, когда нужно увидеть значения переменных в разных местах программы, нередко эта информация просто не нужна. При этом команды занимают место в памяти, поэтому, убедившись в корректной работе программы, некоторые строки можно удалить.
    • Отказ от загрузчика – можно программировать микроконтроллер через контакты ICSP на плате с использованием аппаратных программаторов.

    Флеш память является безопасным и удобным способом хранения данных, но некоторые факторы ограничивают ее использование. Для флеш-памяти характерна запись данных блоками по 64 байта. Также флеш-память гарантирует сохранность информации для 100000циклов записи, после чего информация искажается. Во флеш-памяти имеется загрузчик, который нельзя удалять или искажать. Это может привести к разрушению самой платы.

    EEPROM память используется для хранения всех данных, которые потребуются после отключения питания. Для записи информации в EEPROM нужно использовать специальную библиотеку EEPROM.h, которая входит в число стандартных библиотек в Arduino IDE. Чтение и запись информации в EEPROM происходит медленно, порядка 3 мс. Также гарантируется надежность хранения данных для 100000 циклов записи, потому лучше не выполнять запись в цикле.

    Варианты прошивки Ардуино

    Прошивка с помощью Arduino IDE

    Прошить плату при помощи среды разработки Arduino IDE можно в несколько шагов. В первую очередь нужно скачать и установить саму программу Arduino IDE. Также дополнительно нужно скачать и установить драйвер CH341. Плату Ардуино нужно подключить к компьютеру и подождать несколько минут, пока Windows ее опознает и запомнит.

    После этого нужно загрузить программу Arduino IDE и выбрать нужную плату: Инструменты – Плата. Также нужно выбрать порт, к которому она подключена: Инструменты – Порт. Готовая прошивка открывается двойным кликом, чтобы ее загрузить на плату, нужно нажать кнопку «Загрузить» вверху панели инструментов.

    В некоторых ситуациях может возникнуть ошибка из-за наличия кириллицы (русских букв) в пути к папке с кодами. Для этого файл со скетчами лучше создать и сохранить в корне диска с английским наименованием.

    Прошивка с помощью программатора

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

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

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

    Загрузчик Ардуино и прошивка через Arduino IDE и программатор

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

    Загрузчик Ардуино и прошивка через Arduino IDE и программатор

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

    Прошивка

    После этого начнется загрузка. Завершение произойдет примерно через 10 секунд.

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

    Для того чтобы прошить одну плату с помощью другой, нужно взять 2 Ардуино, провода и USB. В первую очередь нужно настроить плату, которая будет выступать в качестве программатора. Ее нужно подключить к компьютеру, открыть среду разработки Arduino IDE и найти в примерах специальный скетч ArduinoISP. Нужно выбрать этот пример и прошить плату.

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

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

    Заключение

    В этой статье мы рассмотрели различные аспекты загрузки скетчей в Arduino Uno и Nano. Прошивка плат на базе микроконтроллеров ATmega328 и ATmega256, как правило, не сложна и может выполняться одним нажатием кнопки в Arduino IDE. За эту простоту мы должны благодарить встроенную программу-загрузчик, выполняющую за нас все основные действия на низком уровне.

    Еще одним вариантом перепрошивки контроллера является использование другой платы адуино или специальных программаторов, использующих микросхемы CP2102 CH340, FTDI и другие. Этот метод требует дополнительных усилий и затрат, но позволяет гибко изменять параметры прошивки. Какой из двух вариантов выбрать – решать вам. Для новичков, безусловно, первым шагом станет использование Arduino IDE, благо, ее создатели сделали все, чтобы упростить этот процесс.

Похожие публикации