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

На плате видны две версии отверстий для dip28 в узком и широком корпусе, это сделано для подключения адаптера QFP32 в DIP28, обзор которого я делал здесь. Кроме того, если припаять разъем для узкой версии контроллера, то в отверстия для широкой версии можно припаять линейки штырьков и сразу тестировать прошитый контроллер. Для dip8 я также предусмотрел, помимо адаптера, отверстия для штырьков. Также имеются две версии ICSP разъемов широкий (10 контактов) и узкий (6 контактов), ну и все остальные детали, присутствующие на схеме. Светодиоды, резисторы и конденсаторы (22пФ) я использовал SMD 1206. Светодиоды распределил так: Зеленый — READY, Красный — ERROR, Желтый — PROG. Также предусмотрел штырьки для дополнительного питания и земли, которые могут потребоваться при тестировании прошиваемого контроллера.
Платы я заказывал в dirtypcbs.com, скорее всего я бы изготовил их ЛУТ-ом, но данный сервис разрешает панелизацию, а у меня как раз нашлось подходящее место на плате в заказе, да и спешки особой не было. Заводская плата выглядит все-таки гораздо лучше. Вот так они выглядят:
Припаиваем детали, я изготовил 2 версии, для широкого dip28:
Здесь я не стал припаивать штырьки и разъемы, так как планирую эту плату использовать для прошивки контроллеров с помощью адаптеров в корпусах SOIC и QFP.
Для узкого dip28:
Как видно из фото, для подключения микросхем в dip корпусах я использовал цанговые разъемы, мне они нравятся больше.
Адаптер QFP32 в DIP28 для подключения в широкую версию шилда:
Встает отлично:
Весь бутерброд, включая Arduino Uno:
Для узкой версии со вставленным контроллером ATtiny85:
Для прошивки контроллеров в SOIC8 корпусе я использую также адаптер:
Для того чтобы наша конструкция стала программатором, следует без шилда загрузить в Arduino Uno прошивку ArduinoISP, идущую в комплекте с любой версией Arduino IDE:
С таким шилдом стало очень удобно и быстро прошивать и тестировать контроллеры в различных корпусах, не боясь нарушить соединения как здесь:
Пример загрузки программы мигания диодом с помощью шилда и проверка его работы на месте:
Загрузка скетча в плату Ардуино
Давайте сначала разберемся с тем, что происходит внутри ардуино, когда мы решаем изменить внутреннюю программу, управляющую им.
Что происходит, когда мы жмем кнопку «Загрузить»
Плата Ардуино – это микроконтроллер AVR (Atmega8/168/328 или Atmega1280/2560), который прошивается загрузчиком. В микроконтроллер записывается программа, называемая прошивкой, которая позволяет получать сигналы с датчиков, обрабатывать нажатия кнопок, общаться с различными устройствами через интерфейсы, управлять исполнительными процессами.
Обычно прошивка записывается в кристалл микроконтроллера при помощи специальных устройств, называемых программаторами. Для разных микроконтроллеров существуют различные программаторы – от специализированных до универсальных. Важным отличием Ардуино от других контроллеров является возможность залить прошивку через обычный USB кабель. Это достигается при помощи специальной программы – загрузчика (Bootloader). Для прошивки не требуются лишние провода, не нужно подключать дополнительные устройства или нажимать что-то на плате.
При подключении платы Ардуино к источнику питания, внутри него начинается активная деятельность микропрограмм. При запуске микроконтроллера управление получает загрузчик. Первые 2 секунды он проверяет, поступил ли новый код от пользователя. Кроме того загрузчик подает импульсы на пин, к которому подключен светодиод, и он начинает мигать. Это означает, что загрузчик установлен и работает исправно. Когда подается скетч, загрузчик записывает его во флеш-память микроконтроллера. Затем эта программа подается на выполнение. Если данные не поступили, загрузчик запускает предыдущую программу. Во время выполнения программы внутри Ардуино выполняется ряд операций по инициализации и настройке среды окружения, и только после этого начинается выполнение кода.
Вызов setup и loop при загрузке
В самом коде имеются несколько основных функций, на их примере можно рассмотреть работу микроконтроллера.
Команда void setup() – в ней записываются данные, которые микроконтроллер выполняет в момент загрузки, а после может про них забыть. В этой функции указываются номера пинов, к которым подключается устройство, подключаются и инициализируются библиотеки, устанавливается скорость работы с последовательным портом.
Функция void loop – в нее помещаются команды, которые должны выполняться, пока включена плата. Микроконтроллер начнет выполнять программы, начиная с первой, и когда дойдет до конца, сразу вернется в начало, чтобы повторить эту же последовательность бесконечное число раз.
Загрузка скетча в Arduino IDE
В Ардуино IDE компиляция скетча начинается при нажатии кнопки Verify, после этого скетч может быть загружен в память Ардуино через USB с помощью кнопки Upload. Перед загрузкой кода программы нужно установить все параметры в меню Tools. В этом меню выбираются порт, к которому подключена плата, и платформу. В окне Arduino IDE внизу будет отображен ход компиляции скетча.
Обзор возможных вариантов загрузки скетча
Кратко весь алгоритм можно записать следующим образом: Написание кода >> компиляция >> загрузка в микроконтроллер. При загрузке скетча используется Bootloader (Загрузчик). Он представляет собой небольшую программу, которая загружается в микроконтроллер на Ардуино. С помощью этой программы можно загружать скетч, не используя дополнительные аппаратные средства. При работе загрузчика на плате будет мигать светодиод.
1. Загрузка в Arduino IDE. Самый простой и удобный вариант загрузки кода. Все, что нужно сделать – это написать или найти нужный скетч и загрузить его.
- Ускоренная загрузка скетча в Arduino IDE. С помощью этого метода можно увеличить скорость загрузки в микроконтроллер в два раза. Для этого нужно лишь зайти в Настройки и снять галочку с пункта Проверка кода. Пропуская шаг проверки, будет уменьшено количество байтов, которые передаются во время загрузки. При этом все равно некоторые из видов проверок будут осуществлены, но они не занимают долгого времени. Отключать проверку кода не рекомендуется, если Ардуино помещается в какой-либо ответственный проект (например, в спутник). Также можно провести проверку, если подключение производится через очень длинный USB кабель (порядка 10 метров).
Уменьшение времени загрузки при помощи отключения проверки работает с любой платой Ардуино, которая использует USB соединение. Все эти микроконтроллеры используют загрузчик avrdude. Платы, которые используют загрузчик Catarina, не нуждаются в отключении проверки кода, так как этот загрузчик работает быстрее.
- Загрузка скетча в Ардуино через Bluetooth. Этот способ используется, когда нужно обойтись без физического соединения Ардуино и компьютера – например, в силовых цепях или радиочастотных цепях.
Для реализации загрузки потребуется Bluetooth-модуль, который оснащен платой-адаптером для Ардуино. Этот модуль нужно подключить к компьютеру через переходник USB-UART-TTL. Работа с модулем осуществляется с помощью AT-команд.
- Загрузка при помощи Андроид-устройства. Для осуществления такого типа загрузки кода понадобятся провода USB-A – USB-B и USB-Host (OTG-кабель), Ардуино и устройство на базе Андроид с поддержкой режима host. На Андроид-устройство нужно установить программу ArduinoDroid или ArduinoCommander из Google Play. Все устройства нужно соединить при помощи кабелей, после этого можно включать Ардуино и загружать на него код. Нужно запустить установленную программу. При включении начнется обновление IDE, на что понадобится некоторое время.
Сначала работа будет рассмотрена на примере программы ArduinoCommander. После ее запуска нужно нажать USB-Device. Затем нужно наддать Autodetect, чтобы Андроид-устройство выполнило поиск Ардуино и отобразило его на экране. Как только Ардуино появится на экране, нужно на него нажать. Чтобы перейти в меню, нужно щелкнуть в нижнем правом углу. В этом меню можно загрузить скетч с SD-карты.
ArduinoDroid представляет собой среду разработки, компилятор и загрузчик одновременно. Начать компиляцию скетча нужно нажав на кнопку Lightning-Button. После завершения компиляции нужно нажать на кнопку загрузки. Загрузка занимает несколько секунд. По окончании загрузки ардуино запустит на выполнение новый код.
- Программирование при помощи Raspberry Pi. Можно загружать скетчи двумя способами – при помощи Arduino IDE и при помощи пакета arduino-mk. Пакет позволяет собирать и загружать скетчи Ардуино из командной строки.
Структура памяти Ардуино, где располагается скетч и данные
На микроконтроллере Ардуино имеется 3 вида памяти – флеш-память, которая используется для хранения скетчей, ОЗУ для хранения переменных и EEPROM для хранения постоянной информации. Из этих типов памяти флеш-память и EEPROM являются энергонезависимыми, то есть информация сохраняется при выключении питания. ОЗУ используется только для хранения данных, которые имеют отношение к исполняемой программе.
Микроконтроллер ATmega168, который используется на части плат Ардуино, имеет 16 Кб флеш-памяти, 1024 байта для ОЗУ и 512 байт EEPROM. Важно обратить внимание на малый объем ОЗУ. Большие программы могут полностью ее израсходовать, что приведет к сбою в программе. По этой причине нужно следить за тем, сколько строк занимает программа, и по возможности удалять лишнее. Уменьшить объем кода можно несколькими способами:
- Можно отправить часть информации на компьютер.
- Для таблиц и других крупных массивов использовать минимальный тип данных для хранения.
- Данные, которые остаются неизменными, можно объявить константами при помощи слова const перед объявлением переменной.
- Меньше использовать рекурсию. При ее вызове в памяти, называемой стеком, выделяется фрагмент, в котором хранятся различные данные. Если часто вызывать рекурсию, стеки будут занимать большой объем памяти и могут израсходовать ее.
- Неизменяемые строки можно сохранять во флеш-памяти во время работы программы. Для этого используется функция PROGMEM.
На объем памяти не влияют размер имени переменных и комментарии. Компилятор устроен таким образом, что не включает эти данные в скомпилированный скетч.
Для измерения объема занимаемой памяти ОЗУ используется скетч из библиотеки MemoryFree. В ней имеется специальная функция freeMemory, которая возвращает объем доступной памяти. Также эта библиотека широко используется для диагностики проблем, которые связаны с нехваткой памяти.
Оптимизация флеш-памяти. Как только будет окончена процедура компиляции, в окне появится информация о занимаемой памяти кодом. Если скетч занимает большую часть памяти, нужно произвести оптимизацию использования флеш-памяти:
- Использование констант. Аналогично как и для ОЗУ задавать неизменяющиеся значения константами.
- Удалить ненужные Serial.println. Эта команда используется, когда нужно увидеть значения переменных в разных местах программы, нередко эта информация просто не нужна.
При этом команды занимают место в памяти, поэтому, убедившись в корректной работе программы, некоторые строки можно удалить.
- Отказ от загрузчика – можно программировать микроконтроллер через контакты ICSP на плате с использованием аппаратных программаторов.
Флеш память является безопасным и удобным способом хранения данных, но некоторые факторы ограничивают ее использование. Для флеш-памяти характерна запись данных блоками по 64 байта. Также флеш-память гарантирует сохранность информации для 100000циклов записи, после чего информация искажается. Во флеш-памяти имеется загрузчик, который нельзя удалять или искажать. Это может привести к разрушению самой платы.
EEPROM память используется для хранения всех данных, которые потребуются после отключения питания. Для записи информации в EEPROM нужно использовать специальную библиотеку EEPROM.h, которая входит в число стандартных библиотек в Arduino IDE. Чтение и запись информации в EEPROM происходит медленно, порядка 3 мс. Также гарантируется надежность хранения данных для 100000 циклов записи, потому лучше не выполнять запись в цикле.
Варианты прошивки Ардуино
Прошивка с помощью Arduino IDE
Прошить плату при помощи среды разработки Arduino IDE можно в несколько шагов. В первую очередь нужно скачать и установить саму программу Arduino IDE. Также дополнительно нужно скачать и установить драйвер Ch441. Плату Ардуино нужно подключить к компьютеру и подождать несколько минут, пока Windows ее опознает и запомнит.
После этого нужно загрузить программу Arduino IDE и выбрать нужную плату: Инструменты – Плата. Также нужно выбрать порт, к которому она подключена: Инструменты – Порт. Готовая прошивка открывается двойным кликом, чтобы ее загрузить на плату, нужно нажать кнопку «Загрузить» вверху панели инструментов.
В некоторых ситуациях может возникнуть ошибка из-за наличия кириллицы (русских букв) в пути к папке с кодами. Для этого файл со скетчами лучше создать и сохранить в корне диска с английским наименованием.
Прошивка с помощью программатора
Одни из самых простых способов прошивки платы – при помощи программатора. Заливка будет производиться в несколько этапов.
В первую очередь нужно подключить программатор к плате и к компьютеру. Если программатор не опознается компьютером, нужно скачать и установить драйверы.
После этого нужно выбрать плату, для которой нужно прошить загрузчик. Это делается в меню Сервис >> Плата.
Затем нужно выбрать программатор, к которому подключен контроллер. В данном случае используется USBasp.
Последний шаг – нажать на «записать загрузчик» в меню Сервис.
После этого начнется загрузка. Завершение произойдет примерно через 10 секунд.
Прошивка Arduino через Arduino
Для того чтобы прошить одну плату с помощью другой, нужно взять 2 Ардуино, провода и USB. В первую очередь нужно настроить плату, которая будет выступать в качестве программатора. Ее нужно подключить к компьютеру, открыть среду разработки Arduino IDE и найти в примерах специальный скетч ArduinoISP. Нужно выбрать этот пример и прошить плату.
Теперь можно подключать вторую плату, которую нужно прошить, к первой. После этого нужно зайти в меню Инструменты и выставить там прошиваемую плату и тип программатора.
Можно начать прошивать устройство. Как только прошивка будет открыта или написана, нужно перейти в меню Скетч >> загрузить через программатор. Для заливания прошивки не подходит стандартная кнопка загрузки, так как в этом случае прошивка будет загружена на первую плату, на которой уже имеется прошивка.
Заключение
В этой статье мы рассмотрели различные аспекты загрузки скетчей в Arduino Uno и Nano. Прошивка плат на базе микроконтроллеров ATmega328 и ATmega256, как правило, не сложна и может выполняться одним нажатием кнопки в Arduino IDE. За эту простоту мы должны благодарить встроенную программу-загрузчик, выполняющую за нас все основные действия на низком уровне.
Еще одним вариантом перепрошивки контроллера является использование другой платы адуино или специальных программаторов, использующих микросхемы CP2102 Ch440, FTDI и другие. Этот метод требует дополнительных усилий и затрат, но позволяет гибко изменять параметры прошивки. Какой из двух вариантов выбрать – решать вам. Для новичков, безусловно, первым шагом станет использование Arduino IDE, благо, ее создатели сделали все, чтобы упростить этот процесс.
Ардуино в качестве программаторов AVR контроллеров
С последней версией Arduino IDE перестал работать USBASP, с помощь которого прошивал массу контролеров.
У USBASP пора обновить прошивку, а может быть и схему, а я буду использовать в качестве программатора обычный Arduino. Тем более я уже использовал эту схему для программирования ATTiny13.
Для Arduino на ATmega168/328 схема будет выглядеть так — между собой соединяем D11, D12, D13, а D10 контроллера программатора соединяем с RESET программируемого контроллера. Устанавливаем кварц для прошивки контроллеров, работающих от внешнего резонатора.
Для удобства работы собираю программатор на макетке. Для микросхем в корпусе DIP28 использую панель DIP с нулевым усилием.
Также на плате устанавливаю разъем под Arduino Pro Mini, на которых делаю все последние Arduino-проекты
Получаю такую платку
Устанавливаю на плату микроконтроллеры
Можно приступать к прошивке/
Для этого в Ардуину нужно записать скетч ISP-программатора
Затем выбираем тип программатора
И все. Программатор собран и настроен.
Немного о применении
- Загрузка скетча с 0-го адреса без загрузчика. Экономит память микроконтроллера и время загрузки. Особенно интересно в микросхемах с малой памятью — Atmega8 и различных Attiny.
- Установка загрузчика на «голую» Atmega328, чтобы в дальнейшем заливать в нее скетчи через RX/TX, как в обычную Ардуину.
- Замена загрузчика, например, на OPTIBOOT, нормально поддерживающий режимы сна и сторожевой таймер.
- Установка фьз-битов. Полезно при создании «батареечных проектов», когда отключается BOD — контроль входного напряжения и микроконтроллеру устанавливается режим работы с пониженной частотой, опять же для уменьшения напряжения питания до 2.8-3.3В и энергопотребления.
- Восстановление «мертвых» микроконтроллеров после неудачных экспериментов
Если нужно залить прошивку одной Ардуины через другую, то делается все тоже самое, только без платы. Соединяются вывод ардуин согласно схеме и точно так же программируется.
со своего сайта.
Arduino Uno в качестве программатора AVR
РадиоКот >Схемы >Цифровые устройства >Примочки к ПК >Arduino Uno в качестве программатора AVR
Всем мяу, статья про то как Arduino использовать в качестве программатора для AVR микроконтроллеров. Началось всё с того, что в спешке на выход своего программатора я подал 12в, прощально мигнув светиком проггер умер. Вот такой был.Вспомнив, что есть у меня Ардуина решил использовать её, хрень то универсальная. Драйвера и Arduino IDE скачать можно по ссылке https://arduino.cc/en/Main/Software Подключаем ардуину устанавливаем дрова, в диспетчере устройств смотрим компорт на который повисла ардуина, если далеко, то меняем на поближе. В Arduino IDE выбираем нужный порт и нужную плату. Заливам скетч(в архиве ArduinoISP.pde), прям в скетче написаны пины ардуины 10-reset, 11-MOSI, 12-MISO, 13-SCK
питание контроллера берем прям с платы. Один нюанс, дабы ардуина не сделала автосброс контроллера после прошивки нужно поставить кондер 10мкф25в на пины ардуины reset и GND.

В том же архиве есть прога для прошивки avrdude, но так как она консольная и фьюзы через консоль прошивать та ещё задача, там же лежит ГУИшная морда AVR Burn-O-Mat, касаемо её работы сначала нужно запустить файл install_giveio.bat, а потом start.bat появится вот такое окно, про него рассказывать не буду т.к все и так понятно. Заходим в настройки, здесь прописываем пути к файлам avrdude.exe и avrdude.conf выбираем программатор avrisp и порт который мы выбирали в Arduino IDE, в самом низу дописываем доп команду -b 19200 это скорость порта, без этой строки нифига не получится, жмём применить и ок.
Дальше по накатанной, шьём hex открываем окно Fuses
здесь тоже ничего нового, fuse как CodeVision снятая галка=1, есть режим пользователя и эксперта, различие в красных строчках в пользователе залочен SPIEN и RSTDISBL.
Собственно на этом всё, спасибо за внимание!
А да, фотка девайса с которого всё началось
Файлы:
Скетч AVRISP и морда для avrdude
Все вопросы в Форум.
Как вам эта статья? |
Заработало ли это устройство у вас? |
MiGeRA’s Home Page | Arduino ISP
Скетч-программатор.
Тема, на мой взгляд, интересная и позволяет мотивировать покупку нескольких Ардуино 😉 Жаль что обобщенной информации по ней не много. Есть разные заметки, в том числе на официальном сайте и форуме. Попытка обобщить их предпринята мной. И представлена это будет в основном в виде комментариев к линкам на оригинальные статьи (знакомство с которыми в любом случае имхо не лишнее) …
http://arduino.cc/en/Tutorial/ArduinoISP — Использование Arduino как программатора AVR ISP (Using an Arduino as an AVR ISP) — далее мой вольный перевод этой статьи (желтой подсветкой), курсивом мои дополнения . ..
«
Это руководство рассказывает как использовать ардуину в качестве программатора AVR ISP (in-system programmer). Что дает возможность прошивки загрузчика (bootloader) в контроллер AVR (например ATmega168 or ATmega328 для дальнейшего их использования как Ардуино). Код прошивки ардуины, используемой в качестве программатора базируется на исходниках от Randall Bohn.
Замечание: На текущий момент невозможно использовать Arduino Uno в качестве программатора ISP потому что прошитый в ее контроллер загрузчик (optiboot bootloader) не поддерживает скетч, превращающий ардуину в программатор. Но это пока … работы в направлении фикса ведутся …
Инструкция:
Для использования Ардуино-платы для прошивки загрузчика (bootloader) в чистый AVR контроллер нужно выполнить следующие шаги.
- Загрузить в рабочую ардуину скетч (идет в комплекте с Arduino IDE), превращающий ее в программатор. Называется он «ArduinoISP» и находится в корне раздела «Examples».
- Подключить «Ардуино-программатор» к целевому контроллеру по схемам приведенным ниже (со схемами можно ознакомиться в оригинальной статье по ссылке выше). Правда, к сожалению, наглядными и понятными их не назовешь и «кто-кому-чего дает» там с первого, да и со второго взгляда не совсем ясно. Идея тех рисунков в общем такая: нижняя по картинке ардуина выполняет роль программатора, верхняя — роль «панельки» для чистого (прошиваемого) контроллера (и не более). Также не понятно почему бы не использовать для подключения разъем ISP на плате ардуины — да электрически разницы никакой (на него выведены часть ног с торцов платы) — но с точки зрения организационной так вроде как правильнее 😉 К подключению вернемся еще чуть позже …
- Выберите через меню Tools > Board модель платы, в которой будет работать прошиваемый контроллер — т.е. фактически тип зашиваемого загрузчика (т.е. выбрать нужно не тип ардуины, используемой в качестве программатора!). См. описание плат Ардуино (так рекомендовано в оригинале).
- Выберите Burn Bootloader > Arduino as ISP command.
«
Чуть подробнее о подключении контроллера к «Ардуино-программатору».
Разъем ISP на плате ардуины имеет следующую распиновку (рисунок слева).
Контакты MOSI, MISO и SCK вы ведены на пины «DIGITAL» 11,12 и 13 соответственно. Контакт RESET прикручен к соответствующей ноге контроллера на плате ардуины, поэтому чтобы его «подергать» с платы «Ардуино-программатора» используется «цифровой пин» 10 на плате программатора (согласно скетчу ArduinoISP). Также скетчем предусмотрена установка информирующих светодиодов (не является обязательной) на ноги 7, 8 и 9 (Programming, Error и HeartBeat).
Еще раз о распиновке классического кабеля ISP от целевого MCU -> «Arduino ISP»:
1 -> 12 (MISO)
2 -> VCC
3 -> 13 (MOSI)
4 -> 11 (SCK)
5 -> 10 (RESET)
6 -> GND
Номера контактов кабеля (слева) к целевому MCU соответствуют номерам ног разъема ISP ардуины.
Далее.
http://www.arduino.cc/playground/Code/Programmer2 — Описание и скетч, превращающий ардуину в программатор AVR совместимый с stk500v1 (скетч старинный, но вроде как с него началась идея Ардуино-программатора). Для работы с avrdude используется команда вида: avrdude -v -cstk500v1 -PCOMxx -b19200 … — причем указание скорости связи является обязательным и ключевым моментом!
http://arduino.cc/playground/Code/MegaISP — До сих пор развивающийся скетч Ардуино-программатора от Randall Bohn.
Пока немного и сумбурно … со временем откорректирую и дополню …
MiGeRA (январь 2012)
«ArduinoISP-Turbo» – патч скетча ISP-программатора из Arduino UNO.
В очередной раз проводя оптимизации и ревизию материалов на сайте, перечитав эту статью подумал, что совсем не использую описанное выше – программаторов и так тьма разнообразных … Но решил еще раз проверить описанное. К удивлению пришлось немного повозиться. Но все же все заработало, и причем даже лучше чем ожидалось ;-)) Об этом и пойдет речь далее – 8 лет спустя после написания первой части.
Для эксперимента взял древнюю UNO с интерфейсным контроллером mega8u2 и Arduino IDE 1.8.9, обновил (перезалил) прошивку интерфейсного контроллера (.\hardware\arduino\avr\firmwares\atmegaxxu2\UNO-dfu_and_usbserial_combined.hex) и загрузчик основного mega328p (.\hardware\arduino\avr\bootloaders\optiboot\optiboot_atmega328.hex), подготовленный кабель из запасов тоже нашелся. В комплекте среды разработки в качестве примера идет уже совсем другой (обновленный) скетч ArduinoISP, чем представлены и доступны по ссылкам выше. Можно воспользоваться им в неизменном виде, не забывая указывать помимо вида программатора (stk500v1) и номера COM-порта еще и скорость порта (по-умолчанию 19200, без указания скорости не работает!). Но на таких «оборотах» работать крайне медленно/скучно/бессмысленно – и мотивация выбора такой черепашьей скорости в скетче, типа чтоб можно было прошить контроллер tiny85 на 1MHz тактовой частоты настроенный – не сильно устраивает (с такими контроллерами не работаю), да если даже и работал бы … То зачем занижать скорость работы COM-порта? 115200 нужно выставлять обязательно (максимальная «стандартная» скорость – в разы быстрее чем 19200). Но останавливаться на этом также не стоит. Прошивка в софтовом преобразователе USB<->COM (интерфейсном контроллере ардуины) вполне себе переваривает и 921600! Но в этом случае помимо скорости порта (чтобы получить эффект) нужно увеличивать и скорость SPI-шины между ардуиной-программатором и целевым контроллером (дефолтных 1000000/6 – катастрофически мало). Раз есть требование /6 тактовую частоту – то так и сделаем: все контроллеры ардуино по-умолчанию имеют кварц на 16MHz, что даже /6 превосходит скорость порта в 921600 … Результатом остался доволен, корректировки можно внести самостоятельно или скачать сразу откорректированный скетч ArduinoISP-Turbo. Не забываем указывать актуальную скорость (указанную в исходнике скетча), в последнем случае 921600. Контроллер mega328p (другая ардуина) таким скетчем-программатором считывается полностью за 3.5сек и записывается за 10сек.
MiGeRA (июнь 2020)
Как прошить ардуино плату другой ардуиной Arduino ISP
Что такое ISP?
ISP (In-System Programming) расшифровывается как внутрисхемное программирование. Это технология, которая позволяет программировать микроконтроллер, установленный в устройство. До появления этой технологии микроконтроллеры программировались перед установкой в устройство, а для их перепрограммирования требовалось их извлечение из устройства.
Существует 2 основных подхода внутрисхемного программирования:
· С использованием программатора. В этом случае программатор работает напрямую с памятью микроконтроллера, самостоятельно размещая байты прошивки по нужным адресам. Микроконтроллер в этом процессе не участвует.
· С использованием загрузчика. Загрузчик, он же бутлоадер (от английского bootloader) — это программа, записанная обычно в конце ПЗУ микроконтроллера, которая берет на себя функции программатора. При включении микроконтроллера управление сначала передается загрузчику. Он проверяет наличие определенных условий, сообщающих о необходимости перейти в режим программирования. Если условия не выполнены, то управление передается основной программе, в противном случае загрузчик принимает данные по заранее определенному интерфейсу и размещает их в ПЗУ. Таким образом микроконтроллер перепрограммирует сам себя.
Одной из важнейших особенностей Ардуино является возможность программирования непосредственно через USB порт, без дополнительного программатора. Сразу после включения Ардуино запускается загрузчик, который работает несколько секунд.

Arduino as ISP. Прошивка загрузчика в Ардуино.
Итак, мы решили превратить Ардуино в программатор. Для примера попробуем прошить загрузчик в целевую плату Ардуино. Сначала подготовим плату, которую будем использовать в качестве программатора. Для этого загрузим в нее скетч ArduinoISP, его можно найти в стандартных примерах:
Теперь подсоединим к ней плату, в которую хотим
прошить загрузчик. При прошивке используются линии SPI (Serial Peripheral
Interface — последовательный периферийный интерфейс). Выводы MOSI, MISO и
SCK обеих плат должны быть соединены, а вывод SS Ардуино-программатора
подключается к выводу Reset целевой платы. И еще 2 провода нужны чтобы запитать
целевую плату. Также может потребоваться предотвратить автоматическую
перезагрузку платы-программатора, для этого между ее выводами Reset и GND нужно
установить электролитический конденсатор на 10мкФ. Сначала можно попробовать
без конденсатора, если же прошивка не начнется, то попробуйте добавить в схему
конденсатор. По моим наблюдениям конденсатор нужен при использовании дешевых
Ардуино-клонов (без контроллера ATmega8u2) в качестве программатора.
Если мы работаем с двумя платами Arduino Uno, то схема их подключения может выглядеть следующим образом:
Если используются не Uno, а другие платы Ардуино, то перед подключением программатора к целевой плате необходимо уточнить расположение на них выводов MOSI, MISO и SCK. Их расположение для различных плат приведено ниже в таблице. Как вы можете видеть, не на всех платах Ардуино линии SPI мультиплексированны с цифровыми выводами, поэтому для подключения к данному интерфейсу необходимо использовать разъем ICSP. Ниже показан пример подключения Uno в качестве программатора к плате Nano через ICSP разъем.
Плата Ардуино |
MOSI |
MISO |
SCK |
Уровень |
Uno, Duemilanove |
11 или ICSP-4 |
12 или ICSP-1 |
13 или ICSP-3 |
5В |
Nano |
11 или ICSP-4 |
12 или ICSP-1 |
13 или ICSP-3 |
5В |
Pro Mini |
11 |
12 |
13 |
3. |
Mega1280, Mega2560 |
51 или ICSP-4 |
50 или ICSP-1 |
52 или ICSP-3 |
5В |
Leonardo |
ICSP-4 |
ICSP-1 |
ICSP-3 |
5В |
Due |
ICSP-4 |
ICSP-1 |
ICSP-3 |
3.3В |
Zero |
ICSP-4 |
ICSP-1 |
ICSP-3 |
3.3В |
101 |
11 или ICSP-4 |
12 или ICSP-1 |
13 или ICSP-3 |
3.3В |
Обратите внимание на нумерацию выводов ICSP платы Nano: она начинается с правого нижнего угла. Поэтому на приведенной схеме Arduino Nano перевернута.
Теперь необходимо вернуться в Arduino IDE и изменить в ней параметры:
1.
В меню Инструменты > Плата выбираем
вариант, соответствующий нашей целевой плате.
2. В меню Инструменты > Программатор выбираем Arduino as ISP.
Подключаем плату-программатор к компьютеру, открытый в данный момент скетч
значения не имеет, выбираем пункт меню Инструменты > Записать
загрузчик и дожидаемся сообщения об успешном завершении операции. На
этом прошивка бутлоадера в Ардуино завершена. Кроме того процедура прошивки
бутлоадера включает в себя установку фьюзов микроконтроллера. Подробнее о
фьюзах будет рассказано в следующей публикации.
Резюмируя вышеописанное, выделим основные шаги для прошивки загрузчика с использованием Ардуино в качестве ISP программатора:
· Запускаем Arduino IDE, открываем из примеров скетч ArduinoISP и загружаем его в плату Ардуино, которую будем использовать как программатор.
· Подключаем к Ардуино-программатору целевую плату по приведенной схеме.
· Меняем плату в Arduino IDE на целевую.
· Выбираем в IDE программатор Arduino as ISP.
· Записываем загрузчик в целевую плату командой из меню IDE.
Прошивка скетча с использованием Arduino as ISPЕще один пример использования программатора — это загрузка скетча в целевую плату. Разумеется, это проще сделать привычным способом, подключив ее напрямую к компьютеру, но это может оказаться невозможным, например, при выходе из строя контроллера ATmega8u2/ATmega16u2 или преобразователя USB/UART. Если при этом основной микроконтроллер Ардуино остался рабочим, то мы можем прошить его, используя программатор. Для этого выполняем все шаги, описанные выше, но на последнем этапе вместо записи загрузчика необходимо:
· Открыть в Arduino IDE интересующий скетч.
· Загрузить скетч в целевую плату командой из меню IDE: Скетч > Загрузить через программатор.
Таким образом можно подарить вторую жизнь плате Ардуино, которую компьютер уже не видит через USB.
Как прошить Arduino Pro Mini
Загрузить прошивку на этот микроконтроллер можно несколькими способами:
- Через другую плату ардуино, у которой есть встроенный USB-UART
- С помощью специального программатора
- Используя USBasp-программатор
Последние два способа очень похожи. Они отличаются лишь типом программатора. Поэтому в этой статье мы рассмотрим только прошивку с помощью другой Arduino и с помощью специального программатора.
Прошивка ардуино про мини с помощью Arduino Uno или Nano
Для того что бы прошить одну ардуинку через другую, нам понадобятся 2 платы Arduino, соединительные провода, USB кабель и компьютер. Я покажу как прошить Arduino Pro Mini с помощью Arduino Nano, но по этой же инструкции можно использовать и другие платы Arduino, такие как Uno, Mega и тд.
Для начала надо настроить нашу плату, которая будет выступать в роли программатора. Для этого подключим ее к USB компьютера и перейдем в Arduino IDE. В примерах уже есть готовый скетч, написанный специально для этой цели.
Выбор программатораВыбираем этот скетч и прошиваем. Теперь мы готовы подключать Arduino Pro Mini. Подключаем следующим образом:
Arduino Nano -> Arduino Pro Mini
- +5v -> Vcc
- GND -> GND
- D10 -> RST
- D11 -> D11
- D12 -> D12
- D13 -> D13
У меня это выглядит так:
Arduino Pro Mini через Arduino NanoДалее нам нужно выставить в меню «Инструменты» нашу прошиваемую плату и тип программатора «Arduino as ISP»:
Теперь мы можем прошить нашу Arduino Pro Mini. Откройте или напишите нужную вам прошивку. Будьте внимательны! Стандартная кнопка загрузки скетча нам не подходит. По умолчанию она заливает прошивку без использования программатора. Таким образом мы прошьем микроконтроллер, который должен выступать в качестве программатора. Чтобы этого не произошло нужно перейти в меню Скетч >> Загрузить через программатор.
Готово!
Прошивка Arduino Pro Mini с помощью специального программатора
Купить специальный программатор можно здесь. Стоит он меньше одного доллара. Если вы часто используете ардуино про мини, то этот программатор сильно упростит и ускорит прошивку.
Для преобразования USB-to-Serial используется микросхема Ch440. Что бы она определялась компьютером правильно необходимо установить специальный драйвер. Скачать и установить драйвер Ch440
Прошить ардуино с помощью программатора очень просто. Нужно подключить программатор к Arduino Pro Mini следующим образом:
Arduino <-> Программатор
- Vcc <-> Vcc
- GND <-> GND
- RX1 <-> TXD
- TX0 <-> RXD
Подключаем программатор к компьютеру и проверяем, что он не требует драйверов. Если же он определяется как «неопознанное устройство» скачайте и установите драйвер. Его легко найти, набрав в поисковике «*модель вашего программатора* драйвер». Например «CP2102 драйвер». Далее запускаем Arduino IDE. Выбираете модель вашей платы. Потом переходим в меню Инструменты -> Программатор и выбираете ваш программатор. Далее открываете нужный вам скетч и загружаете его с помощью пункта в меню Скетч -> Загрузить через программатор.
Использование Arduino в качестве программиста ISP для программирования микроконтроллеров AVR, отличных от Arduino
После прочтения моего недавнего руководства по использованию кода Arduino в микроконтроллерах, отличных от Arduino, один из моих читателей спросил меня, можно ли использовать Arduino в качестве программиста ISP для программирования этих микроконтроллеров вместо использования отдельного специализированного программатора AVR.
Ответ однозначно положительный, и я использую его постоянно, так как у меня есть много Arduinos. Я подумал о написании учебника, чтобы он был полезен другим, желающим это сделать.
В этом руководстве я покажу, как можно запрограммировать микроконтроллер AVR, отличный от Arduino, например AtMega 16 / 16A, используя Arduino в качестве программиста ISP.
Загрузка скетча Arduino ISP
По умолчанию Arduino IDE поставляется со скетчем ISP. Все, что вам нужно сделать, это открыть его в вашей Arduino IDE (или использовать мой make-файл Arduino), затем подключить Arduino к компьютеру и затем загрузить эскиз на ваш Arduino.
На этом этапе вам не следует подключать к Arduino что-либо еще, и вы найдете эскиз Arduino ISP в Файл -> Примеры -> ArduinoISP
Установка ядра Arduino на микроконтроллер
Следующий шаг — найти поддержку ядра Arduino для микроконтроллера, который вы хотите запрограммировать, а затем установить его.
Если вам нужна программа ATMega 16 / 16A, то вы можете использовать мое «дополнительное ядро Arduino». Я также написал отдельное руководство, объясняющее, как его использовать. Или, если вы хотите запрограммировать микроконтроллеры ATtiny, вы можете использовать ядро ATtiny Дэвида Меллиса, одного из соучредителей Arduino.
В большинстве случаев вам просто нужно поместить эти файлы ядра в каталог / hardware
в папке скетчей, но проконсультируйтесь с документацией по фактической основной библиотеке, которую вы используете.
Подключить цепь
Следующим шагом является подключение микроконтроллера к вашей Arduino. На схеме ниже показано, как подключить ATMega 16 / 16A. В целом принцип остается таким же и для других микроконтроллеров.
Программирование ATMega 16 с использованием Arduino в качестве ISP Programmer
Ниже приведены различные соединения контактов
- Вывод 13 Arduino на вывод 8 ATMega 16 (или SCK другого микроконтроллера)
- Вывод 12 Arduino на вывод 7 ATMega 16 (или MISO другого микроконтроллера)
- Вывод 11 Arduino на вывод 6 ATMega 16 (или MOSI другого микроконтроллера)
- Вывод 10 Arduino на вывод 9 ATMega 16 (или СБРОС другого микроконтроллера)
- Arduino 5+ на контакт 10 ATMega 16 (или Vcc другого микроконтроллера)
- Arduino Gnd к ATMega 16 Pin 11 (или Gnd другого микроконтроллера)
- Конденсатор 10 мкФ между контактом сброса Arduino и контактом Gnd (положительная ветвь конденсатора должна идти к контакту сброса) Светодиод
- через соответствующий резистор на любом контакте микроконтроллера, которым вы будете управлять с помощью кода
Вот так выглядит мое подключение
Программирование ATMega 16 с использованием Arduino в качестве ISP Programmer
Запись загрузчика / предохранитель
Следующим шагом будет записать загрузчик и / или предохранители. Для большинства ядер вам не нужно использовать загрузчик.
Дополнительное ядро My Arduino не требует никакого загрузчика, а требует установки только некоторых предохранителей.
Вы можете записать загрузчик и / или предохранители, выбрав Инструменты -> Записать загрузчик. Прежде чем сделать это, убедитесь, что вы выбрали правильный тип платы.
Загрузите свой эскиз
Теперь все готово, и все, что вам нужно сделать, это написать свой скетч, а затем загрузить его. Об остальном позаботится эскиз ISP, который вы записали в Arduino.
Чтобы использовать последовательный монитор с вашим микроконтроллером, вы можете использовать мой другой учебник, который показывает, как вы можете использовать другой Arduino в качестве моста.
Загрузите свой скетч с помощью makefile
Мой make-файл Arduino также поддерживает загрузку эскизов через программатор Arduino ISP. Следуйте всем обычным инструкциям, а затем определите ALTERNATE_CORE
и ISP_PORT
в своем make-файле и запустите make ispload
target.
Happy Hacking 😉
5.4. Программирование AVR с использованием Arduino IDE
.Примечание: Мы не ожидаем, что это руководство будет полезно для типичных Arduino-совместимых плат, которые обычно поставляются с загрузчиком, который можно использовать для загрузки эскизов. Если вы хотите использовать программатор в качестве адаптера USB-последовательный порт вместе с Arduino IDE для загрузки эскизов на плату с помощью существующего загрузчика, см. Раздел 6.3.
В следующем руководстве описаны шаги, необходимые для программирования AVR в Windows с использованием программного обеспечения Arduino (IDE) и Pololu USB AVR Programmer v2.Икс. В этом руководстве мы будем использовать программатор для прямой загрузки скетчей (программ) в AVR, используя его интерфейс ISP. Это может быть полезно, если вы хотите запрограммировать чистый чип AVR с помощью Arduino IDE.
- Загрузите и установите программное обеспечение Arduino.
- Откройте IDE Arduino. Будет автоматически сгенерирована новая программа-шаблон.
- В меню Инструменты найдите меню Programmer , а затем выберите плату разработки Atmel STK500 .Если вы не видите записи для STK500, вам следует выполнить обновление до Arduino 1.6.5 или новее.
- В меню Порты выберите порт, который соответствует порту программирования программатора. Если вы не уверены, какой из перечисленных последовательных портов является портом программирования, см. Раздел 4.5.
- В меню Boards выберите запись, соответствующую микроконтроллеру AVR или плате, которую вы хотите запрограммировать. Если в меню «Доски» нет записей, которые точно соответствуют цели, которую вы пытаетесь запрограммировать, то может быть одна достаточно близкая для работы.Например, если вы программируете ATmega328P, работающую на частоте 16 МГц, то запись для «Arduino / Genuino Uno», вероятно, будет работать, поскольку он использует тот же процессор и тактовую частоту. При необходимости вы можете добавить новую запись в меню «Платы», найдя файл «hardware / arduino / avr /boards.txt» внутри вашей установки Arduino IDE и отредактировав его.
- В меню Sketch выберите Загрузить с помощью Programmer . Это специальная версия команды загрузки, которая заставляет программное обеспечение Arduino запускать AVRDUDE с использованием настроек для STK500 вместо использования обычного загрузчика платы.Он должен загрузить программу шаблона по умолчанию в ваш AVR. Если все сработало, появится сообщение «Загрузка завершена». появится в строке состояния.
Если на этапе загрузки возникает ошибка, первым шагом к ее отладке должно быть включение подробного вывода во время загрузки. В среде Arduino IDE в меню File выберите Preferences , затем установите флажок загрузить в строке с надписью Показать подробный вывод во время и нажмите OK .Теперь, когда вы попытаетесь загрузить снова, вы увидите подробную информацию о том, как Arduino IDE пытается загрузить вашу программу. Одна из самых важных вещей, на которую следует обратить внимание, — это команда, используемая для вызова AVRDUDE: вы должны убедиться, что она говорит «-cstk500», использует правильный COM-порт и указывает правильный микроконтроллер AVR с помощью параметра «-p». Для получения дополнительной помощи по устранению неполадок см. Раздел 5.6.
Программирование микроконтроллера Atmega328p с Arduino IDE
Введение
За последние несколько руководств мы упомянули несколько сценариев, в которых использование любой платы Arduino в проекте может быть излишним из-за стоимости, размера и других технических причин, таких как высокое энергопотребление.В последнем руководстве мы обсудили альтернативный способ использования Arduino, то есть использование только микроконтроллера Atmega328p , который устраняет все недостатки использования платы Arduino, сохраняя при этом одно из самых больших преимуществ платформы Arduino; простота программирования.
Микроконтроллер Atmega328pМы подробно рассказали о подготовке микроконтроллера Atmega328p к программированию путем прошивки загрузчика Arduino на Atmega328p, и сегодняшнее руководство будет продолжением этого руководства, так как мы рассмотрим, как программировать загружаемый микроконтроллер Atmega328p с помощью Arduino IDE.
Микроконтроллер Atmega328p, как и любой другой микроконтроллер, может оказаться довольно сложной задачей для новичка. Обычно они требуют определенного набора инструментов, включая программатор (оборудование) и платформу разработки (например, Atmel Studio) для написания кода. Эти платформы разработки, в отличие от Arduino IDE, обычно требуют высокого уровня знаний C или других языков программирования, без ярлыков и упрощенных функций, которые предоставляет Arduino.
Чтобы устранить эту трудность, микроконтроллер снабжен загрузчиком Arduino, что делает его готовым к программированию с использованием более простой и удобной в использовании Arduino IDE.
Чтобы запрограммировать микроконтроллер с помощью Arduino IDE, микроконтроллер должен быть подключен к компьютеру через какое-то оборудование. Обычно это делается двумя основными способами:
- Использование переходника USB — последовательный / TTL
- Использование платы Arduino
Каждый из этих подходов предоставляет микроконтроллеру интерфейс, который обеспечивает взаимодействие между компьютером и микроконтроллером.
Мы рассмотрим каждый из этих подходов один за другим и рассмотрим компоненты и настройки, необходимые для загрузки кода в микроконтроллер.
Использование переходника USB — последовательный / TTL
Адаптер USB-to-Serial / TTLПервый подход предполагает подключение адаптера USB-to-Serial к микроконтроллеру. Адаптер USB to Serial / TTL преобразует сигналы данных с USB на компьютере в последовательный / TTL для микроконтроллера и наоборот. Это обеспечивает связь микроконтроллера (последовательного интерфейса) с Arduino IDE, работающей на ПК (USB). Эта установка по сравнению со вторым, безусловно, самая дешевая, поскольку эти адаптеры обычно очень дешевы.
Необходимые компоненты
Для этого подхода требуются следующие компоненты;
- Микроконтроллер Atmega328P с установленным загрузчиком Arduino
- Макет
- Адаптер USB — последовательный / TTL
- кварцевый генератор 16 МГц
- 22pf конденсаторы x2
- Конденсатор 100 нФ
- Провода перемычки
- Резистор 100 Ом
- светодиод
Схема
Подключите адаптер USB к последовательному / TTL к микроконтроллеру, как показано на схемах ниже.Не забывайте, что эта процедура будет работать только в том случае, если микроконтроллер был прошит загрузчиком в соответствии с процедурой, описанной в последнем руководстве.
Схема 1: USB-последовательный адаптер и Atmega328PБольшинство адаптеров можно настроить для работы с логическим уровнем 5 В или 3,3 В. Убедитесь, что ваш настроен для работы с уровнем напряжения 5 В, поскольку питание на микроконтроллер составляет 5 В.
Код загрузки
Загрузка кода в микроконтроллер после того, как вы закончите с подключениями, не требует дополнительной работы, что вы бы сделали, если бы вы использовали плату Arduino.После ввода кода выберите порт, к которому подключен ваш адаптер, затем , тип платы и нажмите кнопку загрузки. Загрузка занимает всего несколько секунд, как и плата Arduino.
Примечание: при программировании микроконтроллера Atmega328p с использованием Arduino IDE соответствующий тип платы, который вы должны выбрать, — это плата « Arduino Duemilanove или Nano w / ATmega328 ».
Для тестирования настройки мы будем использовать пример мигания Arduino. Выберите пример и нажмите «Загрузить».Через некоторое время вы должны увидеть, как подключенный светодиодный индикатор начнет мигать.
Использование платы Arduino
Второй подход предполагает использование платы Arduino одним из двух аналогичных способов;
- Путем замены микроконтроллера на Arduino Uno на программируемый
- Используя любую из плат Arduino в качестве внутрисистемного программиста.
Первый режим — это самый простой способ загрузить код в микроконтроллер, поскольку он включает в себя простую замену микроконтроллера на Uno на тот, который нужно запрограммировать.Однако это может быть не лучшим вариантом при прототипировании, поскольку перемещение чипа от Arduino к проекту, назад и вперед, может привести к повреждению контактов микроконтроллера. Другим недостатком этого является то, что он работает только с Arduino Uno, поскольку все другие платы Arduino используют микроконтроллеры типа SMD, что делает замену непрактичной, а разработку дорогостоящей.
Так что никакой схемы для этого нет, просто поменяйте местами микроконтроллер и нажмите «Загрузить».
Второй метод предполагает использование Arduino Uno в качестве внутрисистемного программатора .
Необходимые компоненты
Для использования этого подхода вам потребуются следующие компоненты;
- Arduino Uno
- Макет
- Адаптер USB — последовательный / TTL
- кварцевый генератор 16 МГц
- 22pf конденсаторы x2
- Провода перемычки
- резистор 10к
- Резистор 100 Ом
- светодиод
Схема
Подключите компоненты, как показано на схемах ниже.
Программирование Atmeg328p с Arduino UnoПри использовании этого подхода важно удалить микроконтроллер платы Arduino, чтобы предотвратить помехи.
Код загрузки
Процесс загрузки кода такой же, как уже описанный. Введите код для загрузки или выберите пример -> выберите тип платы (Duemilanove или Nano W / atmeg328), выберите правильный порт и нажмите кнопку загрузки. Код будет загружен в микроконтроллер.
После успешной загрузки кода с использованием любого из подходов, описанных выше, преобразователь Arduino или USB — Serial / TTL может быть отключен, а проект подключен к батарее для автономной работы, как показано на изображении ниже.
Программируемый микроконтроллер Atmega328pВот и все, ребята из этого руководства, спасибо за подписку.
Не стесняйтесь оставлять вопросы и комментарии в разделе комментариев, я постараюсь ответить на них как можно скорее.
До следующего раза!
Arduino IDE — Полное руководство по настройке и началу работы
Теперь, когда вы знакомы с выводами и оборудованием Arduino Uno, пришло время погрузиться в программное обеспечение. Мы знаем, что когда у нас есть доска, чтобы что-то с ней делать, нам нужно ее запрограммировать.Это означает, что в микроконтроллер нужно добавить какой-то код. В этом есть два аспекта. Первый — это понимание того, как программировать Arduino. Второй — узнать больше о Arduino IDE . IDE — это платформа, которая, помимо прочего, занимается написанием, отладкой и загрузкой кода. В этом посте мы остановимся на последнем. Давайте познакомимся с IDE Arduino и настроим нашу рабочую станцию.
Что такое Ардуино?
Повторюсь из нашего введения в Arduino: Arduino — это компания, выпускающая оборудование и программное обеспечение с открытым исходным кодом.Эта компания предоставляет платы для разработки, такие как UNO, которые помогают нам поиграть с микроконтроллерами. Компания разрабатывает комплекты микроконтроллеров для разработки цифровых устройств.
Эти платы Arduino могут получать входные данные от различных устройств, таких как датчики. Они содержат микроконтроллеры, которые могут обрабатывать входные данные в соответствии с закодированной в них программой. С помощью этих данных он может управлять выходами, такими как мигание светодиода, активация двигателя постоянного тока и т. Д.
Кроме того, доступно множество плат Arduino.Они различаются по своим характеристикам. Некоторые платы разработки Arduino перечислены ниже:
- Arduino-Uno
- Leonardo
- Arduino 101
- Esplora
- Arduino Micro
- Arduino Nano
- Mega 2560
- Arduino Zero
- Arduino Due
Как запрограммировать Ардуино?
Плата Arduino программируется с использованием Arduino IDE. Короче говоря, первое, что вы делаете, — это запускаете программу Arduino IDE на своем компьютере.Затем вы открываете новый файл эскиза, щелкнув New. Напишите код. Скомпилируйте это. Выберите доску для программирования. А затем загрузите код на доску.
Это общая процедура. Давайте теперь углубимся в детали.
Какой язык мы используем для программирования Arduino?
Мы используем Embedded C для написания программ Arduino. Встроенный C находит приложения в тех случаях, когда кодирование очень близко к оборудованию. Это означает, что язык напрямую взаимодействует с оборудованием.Это демонстрирует его сходство с C ++ с добавлением некоторых методов и функций. Язык программирования Arduino имеет некоторые встроенные функции, отличные от обычных функций, используемых в обычном C ++. Он может поддерживать как языки C, так и C ++.
Что такое IDE Arduino?
Интегрированная среда разработки Arduino (IDE) — это программное обеспечение с открытым исходным кодом, специально разработанное для написания и компиляции кода в плату разработки Arduino. Кодировать в IDE Arduino на удивление легко, даже если у вас нет никаких предварительных знаний об Arduino.Если вы начинаете с базовых знаний программирования на C, то освоение программирования на Arduino не займет более 12 часов.
Код Arduino называется скетчем. Кроме того, после компиляции этот скетч создаст файл Hex, который может управлять оборудованием.
Как установить Arduino IDE в Windows?
Программное обеспечение Arduino IDE доступно онлайн для всех операционных систем, таких как MAC OS, Windows, Linux. Кроме того, он также может работать на платформе Java.Выполните следующие действия, чтобы установить IDE Arduino на устройство с Windows.
- Загрузите правильную и последнюю версию программного обеспечения Arduino IDE с веб-сайта Arduino в соответствии со спецификациями вашего ПК. Он доступен как для 32-битных, так и для 64-битных систем.
- После загрузки программного обеспечения IDE откройте файл .exe. Затем продолжите установку и дождитесь завершения процесса установки драйвера.
- Нажмите кнопку «Я согласен» в лицензионном соглашении.
- Выберите все компоненты для установки и нажмите кнопку «Далее».
- Затем выберите место, в которое вы хотите установить программу, указав путь или просмотрев путь. Лучше оставить значение по умолчанию.
- После завершения установки нажмите кнопку «закрыть». В окне установки будут извлечены и установлены все необходимые файлы.
- Кроме того, создайте папку ярлыков на рабочем столе или в любом другом месте.Теперь IDE Arduino установлена на ваш компьютер. Просто нажмите на нее, откроется IDE.
Понимание интерфейса Arduino IDE
Среда IDE в основном разделена на три раздела:
- Выпадающие меню / панель инструментов
- Экран редактора
- Окно ошибки
Раскрывающееся меню / панель инструментов
Он содержит пять важных меню и несколько кнопок быстрого доступа. Раскрывающиеся меню:
Каждое из них содержит несколько опций.Познакомимся с ними.
1) Файл
Опции | Функция |
Новый | Создает новый эскиз |
Открыть | уже существующие эскизы. просматривая компьютерные драйверы и папки. |
Открыть недавние | Предоставьте самые свежие эскизы. |
Sketchbook | Показывает все эскизы, которые доступны в папке альбомов |
Примеры | Все примеры кодов, предоставляемые Arduino IDE.Все эти примеры расположены в виде дерева. Чтобы вы могли легко получить к ним доступ с помощью тем или библиотеки. |
Закрыть | Закрыть текущий эскиз. |
Сохранить | Сохраняет эскиз с тем же именем. |
Сохранить как | Вы можете сохранить эскиз под другим именем |
Параметры страницы | Он показывает окно параметров страницы для печати |
Печать | Позволяет принтеру распечатать текущий эскиз |
Настройки | При нажатии на эту опцию откроется окно настроек, в котором вы можете настроить такие параметры, как язык интерфейса IDE. |
Выйти | Закрывает все окна IDE |
2) Редактировать
Параметры | Функция | назад
U Вы можете вернуться назад или назад на 903 вперед для одного или нескольких шагов при редактировании с помощью Undo и Redo соответственно | |
Cut | Удаляет выбранное содержимое из эскиза и вставляет его в буфер обмена |
Copy | Дублирует выбранное содержимое и вставляет его в буфер обмена |
Копировать для форума | Копирует код и вставляет его в буфер обмена в форме, подходящей для публикации на форуме |
Копировать как HTML | Копирует код и вставляет его в буфер обмена в форме который подходит для веб-страниц, как в HTML |
Вставить | Вставляет содержимое из буфера обмена в позиции курсора |
Выбрать все | Выбрать весь эскиз |
Комментарий / раскомментировать | Помещает и удаляет символ комментария // в начале выбранной строки |
Увеличить / уменьшить отступ | Он может добавлять и удалять пробелы в начале выбранной строки. |
Найдите | Используя это, вы можете найти требуемый текст в своем эскизе. |
Найти следующее | Выделить следующее вхождение указанной строки |
Найти предыдущее | Выделить предыдущее вхождение указанной строки |
3) Эскиз
Опции | Функция |
Проверить / компилировать | Он проверяет ошибки, присутствующие в вашем скетче, и информирует вас о пространстве памяти, занятом переменными, через окно консоли. |
Загрузить | Он автоматически компилирует и загружает код в выбранное оборудование Arduino через порт |
Загрузить с помощью программатора | Он перезапишет загрузчик, присутствующий на плате. Используйте инструмент Burn Bootloader, чтобы восстановить его. Чтобы загрузчик мог занять всю флеш-память. |
Экспорт скомпилированного двоичного файла | Он сохранит файл как файл .hex и отправит его на вашу плату Arduino с помощью других инструментов. |
Показать папку эскиза | Откроется текущая открытая папка эскиза |
Включить библиотеку | Это позволяет вставить файл библиотеки с вашего устройства. |
Добавить файл | Позволяет добавить исходный файл к скетчу. |
4) Инструменты
Автоформат | Исправит отступы фигурных скобок. |
Архивный эскиз | Сохраняет текущий эскиз в виде zip-файла. |
Исправить кодировку и перезагрузить | Он устранит несоответствия между картами символов редактора и картами символов операционной системы |
Serial Monitor | Он откроет последовательный монитор, который является экраном вывода |
Board | Выберите правильную плату, которую вы используете в то время |
Порт | Он содержит все последовательные устройства, которые подключены к вашему устройству |
Программатор | Он используется для выбора программатора оборудования во время программирования плата без последовательного USB-подключения. |
Записать загрузчик | Позволяет записать загрузчик в микроконтроллер. |
5) Справка
Он используется для получения документов, поставляемых вместе с Arduino IDE. Чтобы вы могли получить доступ к просмотру,
- Начало работы (помощь Galileo и Edison)
- Окружающая среда
- Устранение неполадок (справка Galileo и Edison)
- Ссылка
- Найдите ссылку
- FAQ
- Посетите Arduino.cc
- Об Arduino
Под выпадающими меню вы можете увидеть панель с пятью основными и важными опциями. Это,
Что такое библиотеки?
Библиотеки — это просто набор кода, который помогает вам легко связывать оборудование с любыми периферийными устройствами, такими как датчики, модули, экраны и т. Д. Вы можете использовать встроенные функции библиотек, чтобы сделать проект кодирования более удобным. Думайте об этом как о файлах, которые добавляют дополнительные функции к вашим способностям кодирования.Эти файлы уменьшают трудозатраты на код, предоставляя функции кода индивидуального режима. Например, если вы хотите связать ЖК-дисплей с Arduino Uno, вы можете просто использовать библиотеку, в которой определенные функции предопределены. Вы можете просто вставить эти функции в том виде, в котором они есть, и вам не придется кодировать все с нуля. Интуитивно понятный.
Как установить библиотеку в Arduino IDE?
Есть несколько способов установить библиотеку для Arduino IDE. Вам нужно будет делать это всякий раз, когда вы используете уникальное устройство или щит из множества доступных щитов Arduino.
Как установить библиотеку из менеджера библиотек в Arduino IDE?
- Откройте программу Arduino IDE.
- Перейдите в меню эскиза и выберите опцию «Включить библиотеку».
- Щелкните «Управление библиотеками».
- Вы увидите список уже установленных библиотек, нажмите на нужную библиотеку.
- Выберите последнюю версию нужной библиотеки.
Как импортировать библиотеку из zip файла?
- Откройте программу Arduino IDE.
- Перейдите в меню эскиза и выберите опцию «Включить библиотеку».
- Щелкните Добавить параметры библиотеки .zip.
- Затем выберите правильную библиотеку .zip, перейдя по ней.
- Откройте файл библиотеки .zip. Теперь вы можете найти эту библиотеку в опции «Включить библиотеку».
Как установить файл библиотеки вручную?
- Загрузите файл библиотеки в формате .zip, который доступен в Интернете. Он содержит файл .cpp, файл.h, пример папки и файл .txt.
- Разверните его и сохраните в соответствующем каталоге.
- Перейдите в меню «Файл» и нажмите «Настройки» и укажите местоположение блокнота.
- Измените каталог в папке с альбомом.
- Щелкните папку .zip и распакуйте ее.
- Скопируйте файл библиотеки с тем же именем библиотеки и вставьте его в папку альбома для рисования.
- Теперь вы можете найти эту библиотеку в опции «Включить библиотеку».
Как установить платы в диспетчере плат Arduino IDE?
Всякий раз, когда вы переходите от использования Arduino Uno к Mega, Nano или любой другой плате Arduino, вам нужно будет выбрать ее в меню «Платы».Фактически, если вы используете стороннюю плату с Arduino IDE (да, это возможно), вам необходимо установить плату в свой Boards Manager, чтобы иметь возможность использовать ее должным образом. Есть несколько способов сделать это.
Как установить платы из менеджера досок?
- Откройте программу Arduino IDE.
- Перейдите в меню «Инструменты» и выберите «Доски».
- Затем щелкните Диспетчер плат. Он покажет список досок.
- Выберите плату, которую нужно подключить.
- Щелкните параметр «Установить». Теперь плата установлена в вашу Arduino IDE.
Как установить платы по URL?
В некоторых случаях вы не могли найти устройство, которое хотите подключить, через диспетчер платы. В таких случаях вам необходимо добавить их вручную, используя URL-адрес.
- Откройте программу Arduino IDE.
- Зайдите в меню «Файлы» и нажмите на опцию настроек.
- Вставьте URL-адрес установочного пакета платы.Вы сможете найти это на официальной странице продавца, у которого вы приобрели плату.
- Нажмите кнопку ОК.
- Перейдите в меню «Инструменты» и нажмите «Платы», затем нажмите «Диспетчер плат».
- Теперь вы можете найти эту доску, выполнив поиск в строке поиска и щелкнув опцию «Установить».
Как выбрать плату?
- Откройте программу Arduino IDE.
- Перейдите в меню «Инструменты» и выберите «Доски». Он покажет список плат
- Выберите плату, которая связана с устройством, щелкнув по ней.
Как выбрать программистов в Arduino IDE?
Вы также можете использовать внешний программатор, такой как AVR-ISP, STK500, где можно записать эскизы на оборудование без использования загрузчика.
- Откройте программу Arduino IDE.
- Перейдите в меню «Инструменты» и выберите «Программист». Он покажет список программистов.
- Выберите плату, которая подключена к устройству, щелкнув по ней.
Как выбрать процессор в Arduino IDE?
Выберите свой процессор.Для некоторых плат необходимо указать процессор конкретной платы. Потому что в зависимости от моделей некоторые платы Arduino могут иметь разные характеристики встроенного процессора.
- Откройте программу Arduino IDE.
- Перейдите в меню «Инструменты» и выберите «Процессор». Он покажет список процессоров.
- Выберите нужный процессор, щелкнув по нему.
Как выбрать последовательный порт в Arduino IDE?
Компьютер имеет несколько портов, которые он использует для подключения к интерфейсным устройствам.Обычно порты COM1 и COM2 зарезервированы. Если вы не уверены в том, на каком порту работает ваш Arduino, просто наведите указатель мыши на меню и отключите плату. Список COM, который исчезает, — это ваша плата. Повторно подключитесь и выберите этот конкретный COM-порт, и все будет в порядке.
- Откройте программу Arduino IDE.
- Перейдите в меню «Инструменты» и выберите параметр «Порт». Вы увидите все доступные порты.
- Эта опция активируется только после подключения платы.
- Выберите правильный порт, который подключен к плате, щелкнув по нему.
Как загрузить пример кода в Arduino IDE?
- Откройте программу Arduino IDE.
- Перейдите в меню «Файл» и выберите «Примеры», а не «Основные».
- Вы можете увидеть примеры программ. Теперь выберите нужный пример программы.
- Щелкните вариант загрузки. Теперь ваша доска должна работать в соответствии с загруженной программой.
Как скомпилировать код в Arduino IDE? Метод 1 Метод 2
- Откройте программу Arduino IDE.
- Вы можете скомпилировать код, щелкнув опцию проверки в раскрывающихся меню.
- Когда вы нажимаете на опцию загрузки, он автоматически скомпилирует ваш скетч.
Как выполнить код в Arduino IDE?
- Откройте программу Arduino IDE.
- Щелкните меню «Файл» и выберите «Новый эскиз».
- Напишите код, который нужно выполнить.
- Нажмите на опцию «Проверить», чтобы скомпилировать эскиз.
- Нажмите на опцию «Загрузить» и загрузите эскиз на доску. Теперь плата начнет работать согласно коду.
Что такое последовательный монитор в Arduino IDE?
Монитор последовательного порта — это просто экран вывода, который может отображать данные, отправленные платой Arduino / Genuino через USB. Вы можете отправить данные на доску, введя текст и нажав на опцию отправки.Кроме того, вы можете выбрать скорость передачи в соответствии со скоростью передачи, используемой в скетче. Подключение к монитору последовательного порта упростит вашу плату.
Что такое последовательный плоттер в Arduino IDE?
Последовательный плоттер используется для построения и навигации по графику с использованием данных, отправленных с платы. Эта функция очень помогает понять изменение данных в разных условиях. Например, это помогает понять поведение датчиков в разных ситуациях.Кроме того, это автономный инструмент, который позволяет визуализировать данные в виде графиков. Прежде всего, это полезно при устранении неполадок кода.
Характеристики последовательного плоттера:
- Он может строить несколько графиков
- Примечательно, что он работает в автономном режиме
- График с автоматическим изменением размера
- Кроме того, он может поддерживать графики отрицательных значений
- Он может автоматически прокручиваться по оси x
- Прежде всего, вы можете назначить разные цвета для каждой переменной.
Вот шаги для доступа к последовательному плоттеру в Arduino IDE.
- Сначала откройте программу Arduino IDE.
- Перейдите в меню «Инструменты» и выберите опцию «Последовательный плоттер». Это позволит вам увидеть график данных.
Какая скорость передачи данных в Arduino IDE?
Скорость передачи — это количество переходов сигналов, которые происходят за одну секунду. В противном случае он определяется как скорость, с которой должны быть дискретизированы максимумы и минимумы для декодирования сигнала.Он включает в себя
- служебные данные протокола, такие как стартовые / стоповые биты.
- Кроме того, это данные для конкретного приложения.
Мы можем использовать разные скорости передачи данных: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200.
Как обнаруживать ошибки программирования и устранять их в Среда Arduino
Плата Arduino не распознана
Это происходит, когда вы используете Ch440g USB-преобразователь последовательного порта вместо FTDI (FT232RL).Кроме того, драйверы для микросхем USB — Serial уже поставляются с установочным файлом Arduino IDE. Таким образом, для использования чипов USB to Serial, отличных от стандартного, вам необходимо загрузить драйвер для этого чипа.
Ошибка недопустимой подписи устройства
Это происходит, когда подпись устройства на плате отличается от подписи платы, выбранной в среде IDE.
Как исправить эту проблему?
Это устраняется выбором правильной платы.
Код не запускается при сбросе питания
Это происходит, когда плата Arduino не запускает загруженный в нее код даже после включения питания.
Как исправить эту проблему?
Обычно, когда Arduino включается, загрузчик проверяет наличие нового скетча с компьютера в первые несколько секунд. Если этого не происходит, запускается уже существующий скетч. Если ваш код отправляет последовательные данные, время ожидания загрузчика не истечет, поэтому уже существующий код не запустится.
В этом случае дайте некоторую задержку, чтобы прекратить отправку последовательных данных в первые несколько секунд. Следовательно, это позволит загрузчику запустить уже существующий скетч.
Плата не синхронизирована
Эта ошибка отображается как; « avrdude: stk500_getsync (): не синхронизируется: resp = 0x00 ». Чтобы вы не могли загрузить код на свою доску.
Как исправить эту проблему?
- Проверьте, не подключены ли цифровые выводы 0 и 1 платы Arduino к экранам.
- Дополнительно убедитесь, что выбраны правильный порт и плата.
- Нажмите кнопку сброса и повторно загрузите код.
- Перезагрузите Arduino IDE
- Наконец, попробуйте заменить плату Arduino и проверьте.
Launch5j Ошибка
Это происходит из-за несовместимости библиотеки среды выполнения JAVA (JRE).
Как исправить эту проблему?
Это устраняется отключением Bluetooth или Wi-Fi на вашем ПК.
Слишком большой эскиз
Это происходит, когда размер эскиза превышает размер флэш-памяти платы. Для Arduino Uno объем флэш-памяти составляет 32 кб. Кроме того, 2 КБ используется загрузчиком. Так что ваш скетч не должен превышать 32 кб.
Как исправить эту проблему?
Исправлено использованием целочисленного типа данных вместо float. Таким образом, при объявлении переменных используйте квалификатор const. Кроме того, улучшите алгоритм, чтобы уменьшить сложность пространства.
Скетч загружен успешно, но ничего не происходит
Это происходит, когда код загружен успешно. Однако правление не отвечает.
Как исправить эту проблему?
В частности, убедитесь, что выбрана правильная плата. Однако это может произойти из-за того, что размер памяти эскиза превышает емкость платы. Следовательно, это исправляется уменьшением размера эскиза.
Последовательный порт уже используется
Это происходит, когда вы пытаетесь загрузить скетч на плату Arduino при открытом последовательном мониторе.
Как исправить эту проблему?
Это исправляется простым закрытием последовательного монитора или экрана плоттера во время загрузки кода.
Что такое ошибки компиляции?
Возникает при составлении эскиза. Обычно он содержит синтаксические ошибки. Таким образом, он отображается на черном экране под экраном редактора.
Как найти ошибки компиляции в вашем коде?
Это происходит из-за неправильной пунктуации, отсутствия пунктуации, орфографических ошибок и неправильного использования заглавных букв.Это происходит, когда вы используете переменную, которая не была объявлена ранее. Следовательно, вы должны внимательно прочитать указания об ошибках компиляции, чтобы исправить их. Некоторые из ошибок компиляции:
- Отсутствуют точки с запятой
- Отсутствуют фигурные скобки
- Отсутствуют круглые скобки
- Отсутствуют запятые
- Орфографические ошибки и неправильные заглавные буквы
- Отсутствие инициализации переменных
Заключение
Этот пост был разумным достаточное введение в IDE Arduino.Мы рассмотрели все, начиная от установки и заканчивая устранением стандартных ошибок. Если у вас есть какие-либо сомнения или вы чувствуете, что в этот пост необходимо включить некоторые более конкретные функции IDE, сообщите нам об этом в комментариях. В любом случае, любые конкретные знания, касающиеся IDE, будут включены в сообщения в нашем курсе Arduino всякий раз, когда возникнет необходимость.
Все, что вам нужно знать о коде Arduino
С момента запуска платформы с открытым исходным кодом Arduino бренд зарекомендовал себя в центре обширного сообщества разработчиков программного обеспечения с открытым исходным кодом.Экосистема Arduino состоит из разнообразного сочетания аппаратного и программного обеспечения. Универсальность Arduino и ее простой интерфейс делают ее лучшим выбором для широкого круга пользователей по всему миру, от любителей, дизайнеров и художников до прототипов продуктов.
Плата Arduino подключается к компьютеру через USB, где она подключается к среде разработки Arduino (IDE). Пользователь записывает код Arduino в IDE, а затем загружает его в микроконтроллер, который выполняет код, взаимодействуя с входами и выходами, такими как датчики, двигатели и источники света.
И новички, и эксперты имеют доступ к огромному количеству бесплатных ресурсов и материалов для их поддержки. Пользователи могут найти информацию о том, как настроить свою плату или даже о том, как кодировать на Arduino. Открытый исходный код Arduino сделал его особенно удобным для новых и опытных пользователей. В Интернете доступны тысячи примеров кода Arduino. В этом посте мы познакомим вас с некоторыми основными принципами программирования для Arduino.
Спланируйте следующий проект Arduino >>
Среда кодирования Arduino и основные инструменты
Какой язык представляет собой Arduino?
Код Arduino написан на C ++ с добавлением специальных методов и функций, о которых мы поговорим позже.C ++ — это язык программирования, понятный человеку. Когда вы создаете «эскиз» (имя, данное файлам кода Arduino), он обрабатывается и компилируется на машинный язык.
Arduino IDE
Интегрированная среда разработки Arduino (IDE) — это основная программа редактирования текста, используемая для программирования Arduino. Здесь вы будете набирать код, прежде чем загружать его на доску, которую хотите запрограммировать. Код Arduino обозначается как , наброски .
Примечание. Важно использовать последнюю версию Arduino IDE.Время от времени проверяйте обновления здесь.
Пример кода Arduino
Как видите, IDE имеет минималистичный дизайн. В строке меню всего 5 заголовков, а также ряд кнопок под ними, которые позволяют вам проверять и загружать свои эскизы. По сути, IDE переводит и компилирует ваши эскизы в код, понятный Arduino. Как только ваш код Arduino скомпилирован, он загружается в память платы.
Все, что нужно сделать пользователю, чтобы начать компилировать свой скетч, — это нажать кнопку (руководство по этому поводу можно найти ниже).
Если есть какие-либо ошибки в коде Arduino, появится предупреждающее сообщение, предлагающее пользователю внести изменения. Большинство новых пользователей часто испытывают трудности с компиляцией из-за строгих требований к синтаксису Arduino. Если вы сделаете какие-либо ошибки в пунктуации при использовании Arduino, код не скомпилируется, и вы получите сообщение об ошибке.
Последовательный монитор и последовательный плоттер
Последовательный монитор Arduino можно открыть, щелкнув значок увеличительного стекла в верхней правой части среды IDE или под инструментами.Последовательный монитор используется в основном для взаимодействия с платой Arduino с помощью компьютера и является отличным инструментом для мониторинга и отладки в реальном времени. Чтобы использовать монитор, вам нужно использовать класс Serial.
В коде, который вы загружаете с сайта circuito.io, есть тестовая секция, которая помогает вам тестировать каждый компонент с помощью последовательного монитора, как вы можете видеть на снимке экрана ниже:
Последовательный плоттер Arduino — еще один компонент Arduino IDE, который позволяет в реальном времени создавать график ваших последовательных данных.Последовательный плоттер значительно упрощает анализ данных с помощью визуального дисплея. Вы можете создавать графики, графики отрицательных значений и проводить анализ сигналов.
Отладка кода и оборудования Arduino
В отличие от других программных платформ, Arduino не имеет встроенного отладчика. Пользователи могут либо использовать стороннее программное обеспечение, либо использовать последовательный монитор для печати активных процессов Arduino для мониторинга и отладки.
Используя класс Serial, вы можете печатать на последовательном мониторе, отлаживать комментарии и значения переменных.На большинстве моделей Arduino будут использоваться последовательные контакты 0 и 1, подключенные к USB-порту.
Структура кода
Библиотеки
В Arduino, как и в других ведущих платформах программирования, есть встроенные библиотеки, которые обеспечивают базовую функциональность. Кроме того, можно импортировать другие библиотеки и расширить возможности и функции платы Arduino. Эти библиотеки примерно делятся на библиотеки, которые взаимодействуют с конкретным компонентом, или на те, которые реализуют новые функции.
Чтобы импортировать новую библиотеку, вам нужно перейти в Sketch> Import Library
Кроме того, в верхней части вашего файла .ino вам нужно использовать «#include» для включения внешних библиотек. Вы также можете создавать собственные библиотеки для использования в изолированных эскизах.
Определения выводов
Чтобы использовать выводы Arduino, вам необходимо определить, какой вывод используется и его функции. Удобный способ определить используемые контакты:
‘#define pinName pinNumber’.
Функциональные возможности являются входными или выходными и определяются с помощью метода pinMode () в разделе настройки.
Объявления
Переменные
Всякий раз, когда вы используете Arduino, вам необходимо объявить глобальные переменные и экземпляры, которые будут использоваться позже. Вкратце, переменная позволяет вам присвоить имя и сохранить значение, которое будет использоваться в будущем. Например, вы можете сохранить данные, полученные от датчика, чтобы использовать их позже. Чтобы объявить переменную, вы просто определяете ее тип, имя и начальное значение.
Следует отметить, что объявление глобальных переменных не является абсолютной необходимостью.Однако желательно объявить переменные, чтобы упростить использование значений в дальнейшем.
Экземпляры
В программировании класс представляет собой набор функций и переменных, которые хранятся вместе в одном месте. Каждый класс имеет специальную функцию, известную как конструктор , которая используется для создания экземпляра класса. Чтобы использовать функции класса, нам нужно объявить для него экземпляр.
Setup ()
Каждый скетч Arduino должен иметь функцию настройки.Эта функция определяет начальное состояние Arduino при загрузке и запускается только один раз.
Здесь мы определим следующее:
- Функциональность контактов с использованием функции pinMode
- Начальное состояние контактов
- Инициализация классов
- Инициализация переменных
- Логика кода
Loop ()
Функция цикла также является обязательным для каждого скетча Arduino и запускается после завершения setup (). Это основная функция, и, как следует из названия, она запускается в цикле снова и снова.Цикл описывает основную логику вашей схемы.
Например:
Примечание. Использование термина «void» означает, что функция не возвращает никаких значений.
Как программировать Arduino
Базовая логика кода Arduino представляет собой структуру «если-то» и может быть разделена на 4 блока:
Настройка — обычно записывается в разделе настройки кода Arduino и выполняет вещи, которые нужно сделать только один раз, например, калибровка датчика.
Вход — в начале цикла читать входы.Эти значения будут использоваться в качестве условий («если»), таких как показания внешнего освещения от LDR с использованием analogRead ().
Manipulate Data — этот раздел используется для преобразования данных в более удобный вид или выполнения вычислений. Например, AnalogRead () дает значение 0-1023, которое можно сопоставить с диапазоном 0-255, который будет использоваться для ШИМ. (См. AnalogWrite ())
Выход — этот раздел определяет окончательный результат логика («затем») в соответствии с данными, рассчитанными на предыдущем шаге.Рассматривая наш пример LDR и PWM, включайте светодиод только тогда, когда уровень окружающего освещения опускается ниже определенного порога.
Библиотеки кода Arduino
Структура библиотеки
Библиотека — это папка, состоящая из файлов с файлами кода C ++ (.cpp) и файлов заголовков C ++ (.h).
Файл .h описывает структуру библиотеки и объявляет все ее переменные и функции.
Файл .cpp содержит реализацию функции.
Импорт библиотек
Первое, что вам нужно сделать, это найти библиотеку, которую вы хотите использовать, из множества библиотек, доступных в Интернете. После загрузки на свой компьютер вам просто нужно открыть Arduino IDE и щелкнуть Sketch> Include Library> Manage Libraries. Затем вы можете выбрать библиотеку, которую хотите импортировать в среду IDE. После завершения процесса библиотека будет доступна в меню эскиза.
В коде, предоставленном circuito.io, вместо добавления внешних библиотек, как упоминалось ранее, мы предоставляем им папку с прошивкой.В этом случае IDE знает, как их найти при использовании #include.
От программного обеспечения к оборудованию
О программных возможностях Arduino можно много сказать, но важно помнить, что платформа состоит как из программного, так и из аппаратного обеспечения. Они работают в тандеме, чтобы запустить сложную операционную систему.
Код → Скомпилировать → Загрузить → Выполнить
В основе Arduino лежит возможность компилировать и запускать код.
После написания кода в IDE вам необходимо загрузить его в Arduino.Нажатие кнопки «Загрузить» (значок со стрелкой вправо) скомпилирует код и загрузит его, если он прошел компиляцию. После завершения загрузки программа запустится автоматически.
Вы также можете сделать это шаг за шагом:
- Сначала скомпилируйте код. Для этого просто щелкните значок проверки (или щелкните эскиз> Проверить / Компилировать в строке меню.
Как видите, значок проверки находится в верхнем левом углу под тегом «Файл» в разделе меню.
Как только вы это сделаете, Arduino начнет компиляцию. По завершении вы получите сообщение о завершении, которое выглядит следующим образом:
Как видите, зеленая линия внизу страницы сообщает вам, что вы «закончили компиляцию». Если ваш код не запускается, вы получите уведомление в том же разделе, а проблемный код будет выделен для редактирования.
После того, как вы скомпилировали свой набросок, пора его загрузить.
- Выберите последовательный порт, к которому в настоящее время подключена ваша Arduino.Для этого нажмите в меню Инструменты> Последовательный порт, чтобы указать выбранный вами последовательный порт (как показано выше). Затем вы можете загрузить скомпилированный эскиз.
- Чтобы загрузить эскиз, щелкните значок загрузки рядом с галочкой. В качестве альтернативы вы можете перейти в меню и щелкнуть Файл> Загрузить. Ваши светодиоды Arduino будут мигать после передачи данных.
По завершении вы увидите сообщение о завершении, в котором сообщается, что Arduino завершила загрузку.
Настройка IDE
Для подключения платы Arduino к компьютеру вам понадобится USB-кабель.При использовании Arduino UNO USB передает данные программы прямо на вашу плату. USB-кабель используется для питания вашего Arduino. Вы также можете запустить Arduino от внешнего источника питания.
Перед загрузкой кода необходимо настроить некоторые параметры.
Выберите свою плату. Вам необходимо указать, какую плату Arduino вы собираетесь использовать. Сделайте это, щелкнув Инструменты> Доска> Ваша доска.
Выберите свой процессор — существуют определенные платы (например, Arduino pro-mini), для которых вам нужно указать, какая у вас модель процессора.В разделе инструменты> процессор> выберите имеющуюся модель.
Выберите свой порт — чтобы выбрать порт, к которому подключена ваша плата, перейдите в Инструменты> Порт> COMX Arduino (это последовательный порт Arduino).
Как установить сторонние платы (например, NodeMCU)
Некоторые модели плат не предварительно установлены в Arduino IDE, поэтому вам необходимо установить их перед загрузкой кода.
Чтобы установить дополнительную плату, такую как NodeMCU, вам необходимо:
- Нажмите «Инструменты»> «Платы»> «Диспетчер плат».
- Найдите плату, которую хотите добавить, в строке поиска и нажмите «установить».
Некоторые платы нельзя найти через Board Manager. В этом случае вам нужно будет добавить их вручную. Для этого:
- Щелкните «Файлы»> «Настройки».
- . В поле «Диспетчер дополнительных плат» вставьте URL-адрес установочного пакета вашей платы. Например, для nodeMCU добавьте следующий URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json
- Нажмите OK
- Перейдите в инструменты> Доски> Диспетчер плат
- Найдите плату, которую вы хотите добавить в строке поиска и нажмите «установить».
По завершении этого шага вы увидите установленные платы в списке плат под инструментами.
Примечание: процесс может незначительно отличаться для разных плат.
Arduino: чрезвычайно универсальная платформа
Arduino — это гораздо больше, чем просто микроконтроллер. Благодаря обширной среде IDE и широкому спектру аппаратных конфигураций Arduino действительно представляет собой разнообразную платформу. Разнообразие библиотек и интуитивно понятный дизайн делают его любимым как для новых пользователей, так и для опытных разработчиков.Существуют тысячи ресурсов сообщества, которые помогут вам начать работу с аппаратным и программным обеспечением.
По мере развития навыков вы можете столкнуться с проблемами, требующими отладки, что является слабым местом Arduino IDE. К счастью, есть несколько инструментов и методов для отладки оборудования и программного обеспечения Arduino. В следующей статье мы рассмотрим, как отлаживать Arduino (и как тестировать код Arduino), а также как использовать симуляторы и эмуляторы.
5 причин, почему каждый должен изучать Arduino!
Вы слышали о плате микроконтроллера Arduino… может быть, нет.Но если да, возможно, вы не знаете, для чего он нужен.
Как и Raspberry Pi, Arduino может помочь вам разобраться в программировании, но это устройство больше ориентировано на электронику.Его легко использовать и легко изучить. Хотите знать, полезно ли изучение Arduino? Вот пять причин, по которым вы должны начать изучать Arduino уже сегодня.
Сложно ли научиться Arduino?
Программирование, электроника, создание крутых вещей с кодом и компонентами; это в основном то, что вы можете ожидать от использования Arduino.
Как и в случае с изучением всего нового, для использования Arduino требуется момент переориентации.Но в конечном итоге разобраться с этим несложно. Подумайте, сможете ли вы выполнить следующие основные задачи:
- Подключить кабели?
- Подключить компоненты?
- Использовать клавиатуру?
Если ответ на все три вопроса — «да», значит, вы сможете изучить Arduino.Это все практики, которых может достичь большинство людей — и большинство людей должно уметь изучать Arduino.
Если у вас еще нет Arduino, стоит взять стартовый комплект Arduino UNO.
Зачем изучать Ардуино?
Итак, вы знаете, что Arduino проста в использовании.Но зачем вам тратить время на изучение этой платы микроконтроллера? Что ж, это невероятно гибко. С Arduino вы можете делать все, от управления роботом до управления проектом домашней автоматизации — и многое другое.
Ключевые преимущества изучения Arduino:
- Вы можете создавать потрясающие проекты
- Arduino отлично подходит для программирования
- Вы легко научитесь электронике
- Это дешевое хобби для начала
- Arduino может подойти вам лучше, чем Raspberry Pi
Давайте подробнее рассмотрим, почему мы все должны использовать Arduino.
1.Arduino — основа для потрясающих проектов
Основная причина получить Arduino заключается в том, что с его помощью можно делать разные вещи.Если вы считаете себя мастером-мастером, то будете чувствовать себя как дома.
А что вы умеете делать? Все и вся, от глупых и глупых до серьезных и практичных.Ваш единственный предел — ваше воображение.
Arduino можно использовать для следующих проектных идей:
- Управление освещением Philips Hue
- Сборка роботов (см. Видео выше)
- Проекты домашней автоматизации (освещение, гаражные ворота, даже поливочные установки)
- Управление видеоиграми
- Музыкальные проекты (включая соединение органических элементов)
- Системы сигнализации
Это лишь малая часть того, что вы можете сделать с Arduino.
Только начинаете с Arduino? Начните с одного из этих простых проектов Arduino для начинающих.
Но что, если вы не любите делать вещи? Не волнуйтесь, есть еще много причин изучить Arduino.
2.Arduino: отличное введение в программирование
Традиционно кривая обучения программированию была довольно крутой.Не только синтаксис является чужеродным, но может потребоваться некоторое время, чтобы сработала логика программирования. Для многих это разочаровывающий опыт.
Хорошая новость в том, что код Arduino прощает ошибки. Еще предстоит научиться, но это определенно проще, чем пытаться написать код для своего первого мобильного приложения или игры.
Программирование на Arduino возможно на любом языке, но лучше всего начать с Arduino IDE (интегрированная среда разработки).Вы найдете его версии для Windows, macOS, Linux и других платформ. IDE поддерживает C и C ++ и включает библиотеки для различных аппаратных компонентов, таких как светодиоды и переключатели. После завершения программы, известной как «эскиз», она загружается на плату Arduino через USB-кабель. Здесь его можно запустить и он останется в памяти до замены.
Конечно, программирование для Arduino несовершенно.Во-первых, снисходительный характер кода Arduino означает, что легко писать небрежный код и развивать вредные привычки. Вы легко можете не понять, что на самом деле означает этот код.
Программирование на Arduino также является относительно простым, поэтому вы, вероятно, не изучите с его помощью сложные методы кодирования.
Но если вы ищете способ постичь абсолютные основы программирования, Arduino отлично подойдет.
Если идея кодирования вас пугает, есть и другие Arduino-совместимые языки, которые вы можете изучить помимо официального.Например, Scratch 4 Arduino — это визуальная альтернатива, более понятная для новичков. Вы изучите концепции кодирования, не беспокоясь о синтаксисе.
После того, как вы немного поигрались с кодом Arduino, вы могли бы понять, что он вам действительно нравится.
3.Изучить электронику с Arduino
легко
Когда я впервые получил свой Arduino, у меня не было практических знаний в области электроники или схем.Я забыл все, чему научился в школе, и чувствовал себя не в своей тарелке, играя с крошечным микроконтроллером.
Но я быстро понял, что это не должно быть так сложно. Вам нужно изучить основы схем, если вы хотите понять, что делаете. Но где можно узнать об электронике для Arduino?
Мы рекомендуем начать с YouTube, где вы можете найти сотни видеороликов, связанных с Arduino.
Играя с Arduino, вы приобретете новые навыки работы с электроникой в зависимости от того, над какими проектами вы работаете.Если вы никогда раньше не работали с проводами, макетными платами или паяльными пистолетами, то это безопасный и интересный способ обучения.
Не только это, вы также сможете поиграть с множеством крутых электронных компонентов.Большинство стартовых комплектов Arduino содержат светодиоды, резисторы, конденсаторы, акселерометры, двигатели, кнопки, дисплеи и многое другое. Вы почувствуете себя ребенком, который снова и снова играет с деталями Lego.
Но больше всего, когда вы укрепляете уверенность в схемах и компонентах, вы, вероятно, откроете в себе творческую сторону, о существовании которой вы даже не подозревали.Это прекрасный способ проявить практическое творчество.
4.Arduino — дешевое и полезное хобби
Один из самых важных аргументов в пользу Arduino — это то, насколько легко начать работу.Некоторые хобби для начала стоят сотни долларов. Подумайте о живописи, деревообработке или фотографии, где вы можете легко обанкротиться, просто чтобы купить необходимое оборудование и материалы для начала.
И наоборот, хороший стартовый комплект Arduino будет стоить менее 100 долларов.
Становится лучше. Если вы готовы покупать компоненты в Китае и ждать доставки несколько недель, вы можете получить их менее чем за 10 долларов.
Даже вашу плату Arduino можно купить дешево, если вы купите клон.Поскольку аппаратная часть Arduino имеет открытый исходный код, вы можете получить легальную «подделку» Arduino по цене менее 3 долларов за штуку.
По таким низким ценам вы можете реализовать столько проектов, сколько захотите, не беспокоясь о том, что вы обанкротитесь.
5.Присоединяйтесь к команде Arduino против Raspberry Pi
Поскольку Arduino и Raspberry Pi появились примерно в одно время, люди могут подумать, что это одно и то же.По правде говоря, хоть и есть кроссовер, но эти две платы разные.
Arduino — это плата микроконтроллера, а Raspberry Pi — одноплатный компьютер.Arduino должен быть запрограммирован с другого устройства, тогда как Raspberry Pi может запускать операционную систему. Вы можете запрограммировать Arduino с Raspberry Pi, но не наоборот.
Эти различия привели к некоторому разделению сообществ.Что лучше: Arduino или Raspberry Pi?
Чтобы узнать это, вам нужно попробовать их оба.Но вы, вероятно, обнаружите, что если у вас врожденный интерес к электронике и созданию проектов, Arduino решает эту проблему.
Как начать работу с Arduino
К настоящему времени вы должны понять, почему изучение Arduino — хорошая идея.От простого языка программирования и простой интеграции с другими компонентами до доступного хобби, более универсального, чем использование Raspberry Pi, преимущества обучения использованию Arduino очевидны.
Если вы готовы, сейчас самое время прочитать наше руководство для начинающих Arduino.
Начало работы с Arduino: руководство для начинающихArduino — это платформа для создания прототипов электроники с открытым исходным кодом, основанная на гибком, простом в использовании аппаратном и программном обеспечении.Он предназначен для художников, дизайнеров, любителей и всех, кто интересуется созданием интерактивных объектов или сред.
Читать далее
Об авторе Кристиан Коули (Опубликовано 1456 статей)Заместитель редактора по безопасности, Linux, DIY, программированию и техническим вопросам.Он также выпускает The Really Useful Podcast и имеет большой опыт в поддержке настольных компьютеров и программного обеспечения. Автор журнала Linux Format, Кристиан — мастер Raspberry Pi, любитель Lego и фанат ретро-игр.
Более От Кристиана КоулиПодпишитесь на нашу рассылку новостей
Подпишитесь на нашу рассылку, чтобы получать технические советы, обзоры, бесплатные электронные книги и эксклюзивные предложения!
Еще один шаг…!
Подтвердите свой адрес электронной почты в только что отправленном вам электронном письме.
Самодельное оборудование
Arduino Uno: программирование
Это руководство представляет собой обзор того, как код сохраняется и запускается на Arduino Uno, и как использовать новый чип на Arduino или макетной плате.
В этом руководстве предполагается, что вы прочитали предыдущее руководство по компонентам Arduino Uno и макету Arduino.
В процессе мы подробно рассмотрим, как программировать микроконтроллер, записывать загрузчик и использовать Arduino в качестве интернет-провайдера.
Содержание руководства:
- Код загрузки
- Совершенно новые чипы
- Настройки предохранителя
- Записать загрузчик
- Arduino как ISP
- Программирование на макетной плате
Код загрузки
Одна из лучших особенностей многих плат Arduino — это то, как они упрощают процесс загрузки кода.Они делают это, скрывая сложность программирования различных типов микроконтроллеров.
Однако, как только вы начнете создавать свои собственные печатные платы на основе микроконтроллеров, вам потребуется больше знаний о том, как микроконтроллер программируется.
Итак, что именно происходит, когда вы нажимаете кнопку «Загрузить» в среде Arduino IDE?
Чтобы начать с некоторых основ, первое, что нужно понять, это то, что скетч Arduino компилируется в двоичный файл.
Комбинация основных библиотек Arduino, любых используемых вами пользовательских библиотек и компилятора avrdude создаст файл с расширением .hex . Другим микроконтроллерам может потребоваться .bin , который является другим форматом для двоичных данных.
Вы можете экспортировать HEX-файл из Arduino IDE (не загружая его), перейдя в Sketch -> Export compiled Binary
Откройте файл в редакторе кода, и вы увидите двоичный двоичный объект.
Большая часть HEX-файла состоит из двух вещей:
- адресов регистров, которые указывают на место в его памяти Данные
- (ваш скомпилированный код), которые вы хотите сохранить по этому адресу
Память микроконтроллера — это гигантский массив значений 2×2. Если наш код слишком велик, мы заполним память микроконтроллера.Если наш код пуст, мы заполним память нулевыми значениями.
Важно отметить, что если вы скомпилируете свой эскиз для платы с другим микроконтроллером (например, Arduino Leonardo), двоичный файл HEX будет совершенно другим.
Затем этот HEX-файл должен будет переместиться с вашего компьютера на микроконтроллер, чтобы он мог сохранить код по этим адресам и, в конечном итоге, запустить код.
Файл HEX отправляется через USB-соединение к адаптеру uart-to-usb Arduino Uno ( ATmega8u2 ).
Поскольку ATmega8u2 — это отдельное устройство, которое находится между нашим компьютером и целевым микроконтроллером ( ATmega328p ), мы можем назвать ATmega8u2 внутрисистемным программатором (ISP). Это просто означает, что это устройство, единственная цель которого — программировать наш микроконтроллер.
Интернет-провайдер ( ATmega8u2 в нашем случае) затем преобразует эти данные USB в UART и отправляет их целевому устройству ATmega328p для сохранения в памяти.
Примечание : Вы когда-нибудь замечали, что Arduino Uno перезагружается каждый раз, когда вы открываете для него последовательный порт? Важно знать, что адаптер uart-to-usb (ISP) на Arduino Uno будет автоматически сбрасывать ATmega328p каждый раз, когда открывается новый последовательный порт.
Примечание : Также важно знать, что ATmega328p может читать новый код только сразу после его сброса. Именно поэтому разработчики Arduino Uno решили сделать так, чтобы адаптер uart-to-usb (ISP) автоматически сбрасывал чип при открытии последовательного порта.
Ура! Вот так Arduino IDE получает набросок Arduino Uno!
Совершенно новые чипы
При изготовлении плат своими руками мы используем микроконтроллеры, которые покупаем в Интернете.Однако, если вы попытаетесь нажать кнопку «Загрузить» в среде Arduino IDE с новым ATmega328p , вы получите кучу ошибок, и это не сработает.
Когда вы получаете новый микроконтроллер, который вы заказали онлайн, его память полностью пуста, и он все еще находится с заводскими настройками по умолчанию.
Однако на микросхеме есть небольшой фрагмент кода.Его невозможно стереть, и это первое, что делает чип после перезагрузки (или включения).
Этот небольшой фрагмент кода называется загрузчиком производителя и выполняет только одно действие:
- Считать новый код (файлы HEX)
- Сохранить этот новый код в памяти
После сброса (или включения) загрузчик производителя будет ждать, чтобы увидеть, есть ли новый код.Через очень короткий промежуток времени, если нового кода нет, он выйдет и перейдет к выполнению любого кода, сохраненного в памяти.
Atmel, разработчики ATmega328p , решили, что по умолчанию ATmega328p считывает код с контактов SPI. Выводы SPI на Arduino Uno — это выводы D13 ( SCK ), D12 ( MISO ) и D11 ( MOSI ), и именно здесь загрузчик производителя считывает новый код.
Давайте попробуем использовать выводы SPI для программирования этого нового микроконтроллера, как того требует производитель.
Как только мы поместим наш код в микроконтроллер, он будет сохранен в этом пустом пространстве памяти и будет запущен сразу после загрузчика производителя после сброса (или включения).
Компьютеры не могут обмениваться данными через SPI, поэтому нам нужно устройство для преобразования данных USB нашего компьютера в данные SPI.
Устройство, которое нам нужно, — еще один пример внутрисистемного программиста (ISP), и я буду использовать AVR mkII. MKII был разработан для работы со стандартом распиновки ICSP.
Чтобы программировать с помощью устройства ISP, подключитесь к разъемам ICSP 2×3 Arduino Uno в нижней части платы, как на картинке выше.
Обратите внимание на схематический символ контактов заголовка ICSP 2×3.
Выводы заголовка ICSP 2×3 включают выводы SPI SCK (вывод D13 ), MISO (вывод D12 ) и MOSI (вывод D11 ), а также 5V , GND , и RESET контактов.
Примечание : Вывод RESET необходим для того, чтобы можно было запустить загрузочную загрузку производителя.Он начнет работать только после сброса (или включения).
В Arduino IDE я собираюсь сообщить программе, что я использую mkII, выбрав Tools -> Programmer -> AVRISP mkII .
Наконец, нажмите Sketch -> Upload Using Programmer , чтобы использовать устройство ISP для загрузки через SPI.
Загрузите пример скетча Blink, и встроенный светодиод начнет мигать.
Однако я вижу проблему. В эскизе мигания используется задержка в 1 секунду. Однако мой Arduino мигает с задержкой в 2 секунды.
Почему это происходит?
Настройки предохранителя
Проблема в том, что чип использует секретный, более медленный генератор, что делает задержку (1000) медленнее, чем ожидалось.
В чем секрет осциллятора? На печатной плате уже есть осциллятор с частотой 16 МГц, подключенный к микросхеме, но он также есть внутри самого чипа.
По умолчанию все новые чипы ATmega328p будут использовать внутренний (внутри чипа) генератор 8 МГц для запуска кода. Мой новый чип использует эти внутренние часы по умолчанию.
Однако разработчики Arduino Uno поместили на печатную плату внешний (вне чипа) генератор на 16 МГц.Это связано с тем, что внешние генераторы имеют тенденцию быть более точными, а более высокая скорость всегда хорошо.
Когда среда Arduino IDE компилировала код для платы «Arduino Uno», она предполагала, что задержка (1000) будет использовать часы 16 МГц для отсчета времени. Но вместо этого частота 8 МГц в два раза медленнее, поэтому мы видим 2-секундные мигания.
Как это исправить?
ATmega328p имеет некоторые специальные аппаратные настройки, называемые настройками предохранителя .После того, как настройки предохранителя записаны в микросхему, они остаются в том же значении после перезапуска.
Одна из настроек предохранителя ATmega328p — это частота и источник сигнала clock, . Так микросхема узнает, какую скорость и тип генератора он должен использовать.
Чтобы изменить настройки предохранителя (например, тактовую частоту) на соответствующие значения Arduino Uno (внешние часы 16 МГц), новому ATmega328p необходимо предоставить файл HEX с новыми настройками внутри.
Но как отправить файл HEX, содержащий правильные настройки предохранителя?
Мы делаем это, когда «сжигаем» загрузчик Arduino (см. Следующий раздел) …
Примечание : Плата «Arduino Uno» не имеет параметров для настройки параметров предохранителя в среде Arduino IDE. Если вы хотите иметь больший контроль над настройками предохранителей на ATmega328p , я рекомендую использовать это ядро Arduino.
Записать загрузчик
Настройки предохранителя записываются во время процесса «Записать загрузчик».
В дополнение к загрузчику производителя, уже установленному на чипе, Arduino IDE может сохранить пользовательский загрузчик, написанный Arduino.
Если этот пользовательский загрузчик будет сохранен в памяти, а затем запущен, он будет считывать код через контакты UART (Tx / Rx) и сохранять его в памяти.
Это хорошо для нас, потому что тогда мы можем загружать код через USB-разъем платы Arduino Uno (благодаря встроенному адаптеру USB-UART).
Итак, сначала необходимо загрузить пользовательский загрузчик, используя загрузчик производителя и контакты SPI.
При питании Arduino Uno от USB, AVR mkII должен быть подключен к разъему ICSP на Arduno Uno.
Затем следуйте инструкциям на рисунке выше, чтобы «записать» загрузчик для Arduino Uno.
Как только загрузчик будет загружен через SPI, встроенный ATmega328p сможет читать новые скетчи через UART (и, следовательно, через встроенный USB-разъем).
Примечание : Вы также можете загрузить скетч через контакты SPI, как в предыдущем разделе, если хотите.Время задержки теперь будет правильным, потому что при записи загрузчика правильно установлены настройки предохранителя.
Примечание : запись скетча через SPI сотрет пользовательский загрузчик UART из памяти. Это дает то преимущество, что позволяет вашему скетчу Arduino запускаться раньше после сброса (или включения), но это также означает, что вы не можете загружать код через UART.
Примечание : слова «записать», «загрузить», «записать», «сохранить», «прошить» означают одно и то же.Они описывают процесс сохранения прошивки на микроконтроллер или другое подобное устройство.
Arduino как ISP
Если вы прочитаете все это, то, возможно, подумаете, «Так мне нужно покупать одну из этих штуковин для программирования SPI mkII?»
Если у вас несколько Arduino Uno, ответ — «Нет».Вы можете использовать один Arduino Uno для прошивки загрузчика на другой Arduino Uno (круто!).
Во-первых, вам нужно подключить два Arduino Unos, как показано на рисунке ниже. Обратите внимание, что мы подключаем выводы SPI каждого из них.
Примечание : новый чип ATmega328p должен быть на целевой плате . Вот что получит новый загрузчик.
Примечание : на плате программатора уже должна быть установлена ATmega328p , которая была загружена и может вести себя как обычный Arduino Uno.
На картинке выше один Arduino Uno помечен как «программист», а другой — «цель». Программист — это то, что заменит mkII, который я использовал раньше, а целью является Arduino, который будет получать загрузчик.
Обратите внимание, что программатор Arduino имеет вывод D10 , подключенный к выводу RESET цели . Это сделано для того, чтобы плата программатора могла запустить загрузчик (SPI) производителя целевой платы для запуска.
А теперь запись загрузчика второй Arduino можно выполнить за 4 шага:
- Загрузите пример скетча «ArduinoISP» на плату программатора
- Добавьте конденсатор 10 мкФ между контактами RESET платы программатора и контактами GND платы программатора
- Установите «Программист» в Arduino IDE как «Arduino as ISP»
- Нажмите «Записать загрузчик» в меню «Инструменты».
Ниже приведены изображения, на которых показаны некоторые детали каждого шага.
Шаг 1
Первый шаг — сделать так, чтобы программатор Arduino Uno стал внутрисистемным программистом (ISP). Это можно сделать, просто поместив на него код, который ведет себя как обычный интернет-провайдер.
Как и на картинке выше, вы найдете пример скетча ArduinoISP, спрятанный в папке с примерами.
Загрузите этот пример скетча в программатор , как обычно, и убедитесь, что в качестве цели выбрано «Arduino Uno».
Шаг 2
После загрузки примера скетча ArduinoISP добавьте конденсатор 10 мкФ между контактами RESET и GND на программаторе .
Этот конденсатор предотвращает сброс программатора .
Примечание : Если вы используете поляризованный конденсатор (как я на картинке), убедитесь, что отрицательная сторона подключена к контакту GND !!!
Примечание : Вы можете обнаружить, что на самом деле вам не нужен этот конденсатор для его работы.Это зависит от того, какую версию IDE вы используете и какую операционную систему вы установили.
Шаг 3
Теперь мне нужно сообщить IDE Arduino, что программист, который я использую, представляет собой пример скетча «Arduino as ISP».
Есть много программистов (ISP), которых вы можете выбрать из меню Tools -> Programmer .Вы найдете там Arduino как ISP .
Примечание : не путайте его с «ArduinoISP», это совершенно другое слово. Я знаю, это сбивает с толку, но вы хотите выбрать Arduino в качестве ISP .
Шаг 4
Наконец, я могу перейти к Tools -> Burn Bootloader .
Перед нажатием мне нужно убедиться, что в меню «Платы» выбран правильный тип платы target .Для меня это «Arduino Uno», потому что это то, для чего я записываю загрузчик.
Вот и все! Теперь цель Arduino (с новым чипом) имеет правильный загрузчик, правильные настройки предохранителя и может получать код через UART (как и обычный Arduino Uno).
На изображении ниже показано краткое изложение того, что описано в этом руководстве.
Программирование на макетной плате
Что, если я хочу запрограммировать макетный ATmega328p из предыдущего руководства?
Я могу использовать метод «Arduino как ISP», как и раньше.Тем не менее, целевая плата больше не будет другой печатной платой Arduino Uno, а вместо этого будет моей макетной платой ATmega328p .
Нам нужно подключить выводы SPI SCK (вывод D13 ), MISO (вывод D12 ) и MOSI (вывод D11 ), а также 5V , GND и СБРОС контактов, как на изображениях выше.
Однако это немного сложнее, потому что мы используем необработанный пакет.
Чтобы узнать, какие контакты какие, используйте изображение распиновки микроконтроллера ниже.
Провода питания и заземления просты. Я могу просто подключить их к шинам питания и заземления на макетной плате.
Три контакта SPI находятся в нижнем левом углу пакета, на физических контактах 19 , 18 и 17 . Я могу подключить их к моему программатору , контакты платы D13 , D12 и D11 .
RESET на корпусе находится на физическом выводе 1 , в верхнем левом углу корпуса.Я могу подключить это к контакту платы программатора D10 .
См. Схему подключения на картинке ниже.
С помощью этой проводки я могу записать загрузчик на микроконтроллер target на моей макетной плате (потрясающе!). Это одновременно установит настройки предохранителя (чтобы он использовал внешний осциллятор) и сохранит загрузчик UART в своей памяти.
Отлично, мой макетный микроконтроллер загружен!
Теперь у меня есть два варианта. Я могу продолжать загружать свой код через SPI, используя мою плату программатора . Или я могу использовать загрузчик Arduino, который теперь сохранен на чипе, для загрузки через UART (с помощью адаптера UART-USB какого-либо типа).
Если я хочу загрузить через UART, мне нужно сделать еще кое-что.
Во-первых, я собираюсь отсоединить все провода, соединяющие макетную плату с моей платой программатора .
Затем мне нужно найти контакты UART (Tx / Rx) на корпусе микроконтроллера. Глядя на изображение распиновки сверху, я вижу, что они находятся на физических контактах 2 (Rx) и 3 (Tx), чуть ниже контакта RESET .
Я собираюсь вставить туда две перемычки: зеленый для Rx и желтый провод для Tx.
Эти провода нужно будет подключить к адаптеру UART-USB. Они бывают разных форм и типов, но чаще всего идут с 6 выводами заголовка подряд.
Я подключу свой зеленый провод (Rx) к контакту Tx адаптера, а затем подключу желтый провод (Tx) к контакту Rx адаптера.
Затем мне, конечно, нужно будет подключить штырь GND адаптера к шине заземления моей макетной платы.
Наконец, нам нужно сделать еще одно последнее подключение, и оно включает в себя вывод RESET .
Помните, что адаптер UART-USB должен иметь возможность перезапустить ATmega328p , чтобы он мог запустить загрузчик Arduino.Это похоже на нажатие кнопки сброса на микроконтроллере, а затем быстрое отпускание, чтобы он перезапустился.
У этих адаптеров UART-USB есть контакт под названием RTS , который мы можем использовать для переключения контакта сброса. Однако есть проблема.
Штырь RTS на адаптере не «быстро» освобождает штифт сброса, а вместо этого некоторое время удерживает штифт сброса в нажатом состоянии.Если бы мы подключили его напрямую к выводу сброса, микроконтроллер будет находиться в состоянии сброса, и загрузчик никогда не запустится.
Есть простое решение: добавьте небольшой конденсатор между RTS на адаптере и выводом RESET на макетном микроконтроллере.
Примечание : интересно знать, что Arduino Uno уже имеет этот конденсатор на печатной плате.