Arduino ide какой программатор выбрать

Arduino ide какой программатор выбрать

  • Уроки
  • Введение в Arduino
  • Работа с Arduino IDE

Работа с Arduino IDE

Рассмотрим основную программу, с которой будем работать – Arduino IDE. IDE расшифровывается как интегрированная среда разработки, и в нашем случае представляет собой блокнот, в котором мы пишем код, препроцессор и компилятор, которые проверяют и компилируют код, и инструменты для загрузки, которые загружают код выбранным способом. IDE написана на java, поэтому не удивляйтесь её долгому запуску, большому объему занимаемой оперативки и медленной работе. Несмотря на огромный опыт работы с ардуино я до сих пор продолжаю писать код в Arduino IDE, потому что я к ней привык. Помимо перечисленных проблем стандартная IDE выделяется на фоне “взрослых” сред разработки отсутствием дерева/файловой структуры проекта (что не нужно для простых проектов), отсутствием рефакторинга, отсутствием автоматического дополнения кода (хотя его обещают вот-вот добавить и уже есть beta) и очень медленной компиляцией кода. Этих недостатков лишены аналоги Arduino IDE, о них поговорим в конце урока. Помимо отсутствия озвученных недостатков там есть некоторые полезные фишки, например все define-ы файла с кодом отображаются в отдельном блоке и с ними очень удобно работать.

Интерфейс

Сначала рассмотрим общий вид программы, т.е. как она выглядит после запуска. В самом центре – блокнот, то самое место, где пишется код. По умолчанию уже написаны два стандартных блока, setup и loop. К ним вернёмся в разделе уроков программирования. Всё остальное можно увидеть на скриншоте ниже.

  • Проверить – компиляция (сборка, проверка на ошибки…) кода без его загрузки в плату. То есть код можно написать и проверить на ошибки даже не подключая плату к компьютеру
  • Загрузить – компиляция и загрузка прошивки в плату
  • Создать/открыть/сохранить – тут всё понятно
  • Монитор порта – кнопка открывает монитор последовательного пора для общения с платой
  • Меню вкладок – работа с вкладками, о них поговорим ниже
  • Текущее состояние – тут выводится краткая информация о последнем действии: загрузка завершена, ошибка загрузки, автоформатирование завершено и т.д.
  • Лог работы – тут выводится лог компиляции и вообще все системные сообщения, отчёты об ошибках и размере скомпилированного кода
  • Конфигурация оборудования – выводится название выбранной платы, версии микроконтроллера и номер выбранного COM порта

Пробежимся по пунктам меню, которые я считаю первостепенно важными, с остальными можно познакомиться самостоятельно по ходу работы с программой. Версия моей IDE – 1.8.8, в новых что-то может отличаться

Вкладка “Файл”

  • Новый
  • Открыть
  • Открыть недавние
  • Папка со скетчами – список скетчей, которые сохранены туда, куда программа предлагает их сохранять по умолчанию (Документы/Arduino)
  • Примеры – список установленных библиотек с подсписком примеров к каждой. Весьма полезная штука
  • Закрыть
  • Сохранить
  • Сохранить как…
  • Настройки страницы (для печати)
  • Печать
  • Настройки
  • Выход

Далее сразу рассмотрим окно настроек:

Окно настроек

Куча интересных настроек на свой вкус. Из них отмечу

  • Размещение папки скетчей – куда по умолчанию сохраняются скетчи
  • Показать подробный вывод – показывает подробный лог при компиляции и загрузке, нужно при поиске багов и непонятных глюков/ошибок
  • Использовать внешний редактор – запрещает редактирование кода из Arduino IDE, чтобы редактировать его в других редакторах, например Notepad++. Редактируем там, а загружаем через IDE. Зачем это? Писать код в том же Notepad++ гораздо удобнее и приятнее, чем в Arduino IDE. К сожалению.
  • Дополнительные ссылки для менеджера плат – сюда вставляются ссылки на пакеты для работы с другими платами, например такими основанными на ESP8266 или ATtiny85.

Вкладка “Правка”

Во вкладке Правка ничего такого особенного нет, всё как в других программах

Вкладка “Скетч”

  • Проверить/компилировать – то же, что кнопка галочка
  • Загрузка – то же, что кнопка загрузка
  • Загрузить через программатор – загрузить скетч напрямую в МК, минуя загрузчик
  • Экспорт бинарного файла – сохраняет скомпилированный файл, который и загружается в МК. Бинарный файл хорош тем, что содержащийся в нём код практически невозможно не то что отредактировать, но даже прочитать как вменяемый код. Именно в таком виде обычно поставляются прошивки для цифровой техники, чтобы никто не видел исходник =)
  • Показать папку скетча
  • Подключить библиотеку – подключает в код библиотеку, с директивой include, всё как нужно
  • Управлять библиотеками… – открывает менеджер библиотек, из которого можно установить библиотеки из официального списка
  • Добавить .zip библиотеку – не рекомендую так делать, потом не найдёте, куда она установилась
  • Добавить файл… – подключает в код внешний файл
  • Вкладка “Инструменты”

    • АвтоФорматирование – выравнивает код по табуляции. Крайне важная фишка, используйте её и комбинацию Ctrl+T как можно чаще
    • Архивировать скетч – сохраняет скетч как .zip архив
    • Исправить кодировку и перезагрузить – полезная штука, когда скачал чей-то код из интернета, а там поехала кодировка
    • Управлять библиотеками… – открывает менеджер библиотек, из которого можно установить библиотеки из официального списка
    • Монитор порта
    • Плоттер по последовательному соединению – встроенный построитель графиков по идущим в порт данным
    • Плата – выбор платы, куда хотим загрузить прошивку
    • Процессор – выбор процессора, который стоит на плате. Обычно он один на выбор, но иногда есть варианты
    • Порт – COM порт, к которому подключена плата. Это всегда порт, отличный от COM1 (системный порт)
    • Программатор – выбор программатора для загрузки кода через программатор
    • Записать загрузчик – прошивает загрузчик, соответствующий выбранной плате и процессору в микроконтроллер при помощи программатора (который ISP)

    Меню вкладок

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

    • Вкладки относятся к одному и тому же проекту, к файлам, находящимся с ним в одной папке
    • Вкладки просто разбивают общий код на части, то есть в одной вкладке фигурная скобка <может открыться, а в следующей – закрыться >. При компиляции все вкладки просто объединяются в один текст по порядку слева направо (с левой вкладки до правой). Также это означает, что вкладки должны содержать код, относящийся только к этому проекту, и сделать в одной вкладке void loop() и в другой – нельзя, так как loop() может быть только один
    • Вкладки автоматически располагаются в алфавитном порядке, поэтому создаваемая вкладка может оказаться между другими уже существующими. Это означает, что разбивать блоки кода по разным вкладкам (как во втором пункте, <на одной вкладке, > на другой вкладке) – крайне не рекомендуется.
    • Также не забываем, что переменная должна быть объявлена до своего вызова, то есть вкладка с объявлением переменной должна быть левее вкладки, где переменная вызывается. Создавая новую вкладку нужно сразу думать, где она появится с таким именем и не будет ли из за этого проблем. Также название вкладок можно начинать с цифр и таким образом точно контролировать их порядок. Во избежание проблем с переменными, все глобальные переменные лучше объявлять в самой первой вкладке.
    • Вкладки сохраняются в папке с проектом и имеют расширение .ino, при запуске любой вкладки откроется весь проект со всеми вкладками.
    • Помимо “родных” .ino файлов Arduino IDE автоматически подцепляет файлы с расширениями .h (заголовочный файл), .cpp (файл реализации) и .pde (старый формат файлов Arduino IDE). Эти файлы точно так же появляются в виде вкладок, но например заголовочный файл .h не участвует в компиляци до тех пор, пока не будет вручную подключен к проекту при помощи команды include. То есть он висит как вкладка, его можно редактировать, но без подключения он так и останется просто отдельным текстом. В таких файлах обычно содержатся классы или просто отдельные массивы данных.

    Аналоги Arduino IDE

    Всем нетерпимо относящимся к кривой официальной IDE могу посоветовать следующие аналоги, работа в которых чем-то лучше, а чем-то хуже официальной IDE:

    • Notepad++ + Arduino IDE – вполне работоспособная связка – прогерский блокнот “на максималках”, в котором ОЧЕНЬ удобно писать код, и Arduino IDE, в которой удобно выбирать железо и загружать прошивку
    • PlatformIO – очень мощная взрослая среда разработки, подробнее можно почитать даже в статье у меня на сайте. Автор – не я. Лично мне платформио не понравилась. Да, есть автодополнение кода и всякие удобные фишки, но конфигурировать проект приходится вручную (в 2019 году не сделать пару кнопок для того же выбора порта – разработчики – АУ. ), также есть проблемы с библиотеками.
    • Programino IDE – вот эта среда мне довольно таки понравилась, есть автодополнение и другие удобные фичи. Единственный минус – она платная, но на всё платное можно нагуглить кряк =) Подробнее на официальном сайте
    • MariaMole – интересная среда, которая вроде как больше не развивается. Количество “плюшек” примерно равно количеству “багов” и недоделок, по крайней мере так было в 2017 году. Подробнее
    • B4R – среда, позволяющая программировать Арудино на языке Basic. Кому интересно – вот официальный сайт
    • Visual Studio Micro – очень мощный и взрослый инструмент, являющийся плагином к Microsoft Visual Studio. Подробнее читать здесь
    • XOD – очень интересная среда разработки, в которой программа составляется из нод (node) – блоков. Полностью другая концепция программирования, посмотрите обязательно. Официальный сайт
    • Atmel Studio – официальная среда для программирования микроконтроллеров AVR. Никаких детских ардуиновских функций – только работа напрямую с МК, только хардкор! Подробнее можно почитать на сайте амперки

    Про Arduino IDE, загрузчики (bootloader), программаторы (avrdude.exe), фьюзы, HEX-файлы. В одном флаконе. Не претендуя на оригинальность.

    Автор: 123ksn
    Опубликовано 12.03.2018
    Создано при помощи КотоРед.

    Читайте также:  Какие сверла нужны для установки межкомнатных дверей

    Про Arduino IDE, загрузчики (bootloader), программаторы (avrdude.exe), фьюзы, HEX-файлы. В одном флаконе. Не претендуя на оригинальность.

    Для предметности разговора начну с картинки

    Нет худа без добра (с).
    Пока использовал заводские платы «Arduino UNO» и «Arduino MiniPRO», я не задумывался о том, как работает система в целом. Я просто писал код, нажимал кнопку «Вгрузить» и всё заливалось в микроконтроллер, далее МК, установленный на плате (ATmega328). В этом и заключается прелесть экосистемы «Arduino».
    Сподвигла написать данный опус проблема. Никак мне удавалось залить исходную программу, далее СКЕТЧ, из Arduino IDE в нестандартный для неё МК «ATmega8L» с кварцем 8МГц стандартным способом, т.е. через USB-порт (на самом деле через преобразователь USB- UART). Это кратко. Теперь начну рассказывать, какую важную информацию я «наковырял» и как решил свою проблему.

    Немного общей теории.
    Для того, что бы залить (прошить, загрузить, UPLOAD) скетч в ATmega8L из Arduino IDE через USB-порт, нужен преобразователь, который преобразует информацию, передаваемую по USB-интерфейсу(каналу, дороге, линиям) в сигналы последовательного канала UART. Т.е. должны получиться определенные уровни сигналов – интерфейс (RS232, RS485) и определенные длительности сигналов (протокол).
    Что бы принять информацию, поступающую в ATmega8L по UART (физически через выводы Rx, Tx) в МК должна быть ПРЕДВАРИТЕЛЬНО загружена программа, которая настраивает определенные выводы МК как Rx и Tx, и умеет обрабатывать полученную через них информацию. Эта программа называется ЗАГРУЗЧИК или по англицки BOOTLOADER.

    (Отступление. ЗАГРУЗЧИКи бывают для разных интерфейсов и, соответственно, протоколов. Программа-программатор, заливающая информацию, должна соответствовать имеющемуся ЗАГРУЗЧИКу. И наоборот — прошитый ЗАГРУЗЧИК должен соответствовать управляющей программе-программатору. Грубо говоря — это «папа» и «мама» одного разъема. Очень часто для МК фирмы ATMEL «папой» является программа avrdude.exe).
    Итак, посредством USBasp-платы и avrdude.exe я залил ЗАГРУЗЧИК в ATmega8L. Залитый ЗАГРУЗЧИК должен учитывать определенные физические характеристики МК. В моем случае это то, что МК работает с внешним кварцем на частоте 8МГц (в рамках данной статьи этой характеристики достаточно). Заливка ЗАГРУЗЧИКа происходит просто и жестко – как указал разработчик МК. Не залить HEX-файл (FIRMWARE) ЗАГРУЗЧИКа при минимальном количестве извилин, прямых руках, исправных деталях и правильном соединении просто невозможно.

    А почему же тогда возникает проблема залить скетч? Ответ есть выше. Предварительно прошитый ЗАГРУЗЧИК должен соответствовать настройкам «программы-заливатору» (от слова «программатор») и, конечно же, преобразователю интерфейса (плате-программатору). Если идиот подключит два проводка от Rx и Tx ATmega8 к двум выводам разъема USB, то ничего не прошьется. Поэтому на платах-преобразователях останавливаться не буду. Единственно напомню, что ISP-программаторы — это программаторы «железа», которые работают на самом низком уровне и позволяют настраивать МК почти как угодно в пределах возможного.

    Вот и нарисовался главный вопрос: Как определить, что имеющийся в МК ЗАГРУЗЧИК соответствует программе-программатору (в рамках данной статьи – Arduino IDE)? Если кратко – то никак. И не поможет вам ни осциллограф, ни анализатор. С помощью анализатора можно увидеть длительности каких-то сигналов и максимум, что можно определить – используемую ЗАГРУЗЧИКом скорость, если он будет что-нибудь выдавать по линии Tx. Но даже если скорость будет согласованная, а считанная информация читабельна, это не скажет нам ровным счетом ничего. Единственный способ подружить ЗАГРУЗЧИК в МК и «программу-заливатор» – это читать и следовать информации разработчика ЗАГРУЗЧИКа.
    И вот здесь мы подходим к главному плюсу и недостатку одновременно Arduino IDE – дружелюбному интерфейсу для начинающего пользователя. Читай: скрытие всех системных настроек программы от пользователя.
    Продолжаю. Итак, мы прочитали информацию от разработчика ЗАГРУЗЧИКа как прошивать его ЗАГРУЗЧИК и как потом загружать HEX-файлы в МК. НО СТОП! В Arduino IDE нет понятия «ЗАГРУЗЧИК», «HEX-файл». Здесь я вынужден прервать рассказ, вернуться к первой картинке и рассказать «с высоты птичьего полета» как устроена Arduino IDE.

    1) Грубо говоря, программная платформа «Arduino IDE» предоставляет нам только убогий (для профи) и замечательный для экосистемы «Arduino» интерфейс для написания скетчев и легкой настройки (плата, порт, программатор). При нажатии кнопки «Проверить»(скетч) в дело вступает «наемный профессионал» — компилятор avr-gcc.exe, который преобразует нашу гениальную программу в вид, принимаемый программой-программатором – HEX-файл. Если скетч преобразовался (скомпилировался) и получился HEX-файл, то можно приступить ко второму шагу(смотри картинку1).
    2) Запустить программу-программатор с определенными параметрами, что бы HEX-файл «скормить», например, через преобразователь USB-UART, ЗАГРУЗЧИКу МК. Из данной схемы видно, что если автор ЗАГРУЗЧИКа использует в качестве программы-программатора, например, классическую «дудку» (avrdude.exe), то нам вовсе необязательно мучится с настройками платформы «Arduino IDE», спрятанными в фиг знает каких файлах и фиг знает в каком формате. Мы можем просто написать свой bat(cmd, скрипт)-файл и запускать его как для компиляции проекта (avr-gcc.exe), так и для заливки HEX-файла в МК (avrdude.exe). А дальше процесс происходит практически на уровне железа.
    3) Драйверы операционной системы преобразуют информацию так, что бы она была понятной подключенным USB-устройствам. В представленной схеме я показал два варианта:
    4) 1-й вариант с USB-UART -преобразователем и МК с обязательным (5.1) ЗАГРУЗЧИКом. 2-й вариант с аппаратным USBasp-программатором и (5.2)МК (ЗАГРУЗЧИК не нужен, хотя может иметься).

    Какие можно сделать выводы, глядя на представленную картинку?
    1. НЕ НАДО устраивать танцы с бубном, если не происходит в Arduino IDE компиляция проекта. Заходим на сайт разработчика компилятора для требуемого МК (ATmega, ESP8266 и т.п.) и читаем, какая среда требуется для компиляции проекта, и с какими опциями надо запустить компиляцию. Часто это будет быстрее и проще, чем пытаться подружить Arduino IDE с нужным МК. Да, для этого надо обладать определенным уровнем знаний не на уровне электрика.
    2. Тоже самое можно сказать и о случае, если не происходит заливка HEX-файла в МК через ЗАГРУЗЧИК. Вводим в командной строке рекомендуемую для данного ЗАГРУЗЧИКа команду и получаем результат. Если результат отрицательный, то почти сразу знаем куда «копать». Либо проблема с драйверами ОС, либо дохлая ножка Rx, либо косяк разработчика и на худой конец – проблема в ДНК пользователя.
    Вроде всё, о чем я рассказал, есть в интернете, но часто для начинающего ардуинщика непонятно, нужна ли ему некая информация и как ею воспользоваться. Это как на первом курсе универа нас пичкают производными, интегралами, матрицами и у студента растет естественное чувство «А нафига нам это надо?». А потом какой-нибудь практик возьмет и покажет, как использовать для решения реальных задач эту «вышку». И наступает «дзен». Вдруг резко всё, что валялось в голове в виде ненужного хлама, раскладывается по полочкам и ты понимаешь, что стал ИНЖЕНЕРОМ.

    К сожалению это не всё, что надо бы знать начинающему ардуинщику. Кое-что расскажу о ЗАГРУЗЧИКЕ (bootloader) подробней.
    Что же надо знать о ЗАГРУЗЧИКе, что бы осознанно им пользоваться?
    1)Размер загрузчика.
    2)Область памяти, в которую он загружается.
    3)Фьюзы, которые должны быть использованы с загрузчиком.
    4)Скорость для UART.
    5)Частоту МК, под которую рассчитан ЗАГРУЗЧИК.
    6)Ну и конечно же, под какой МК рассчитан ЗАГРУЗЧИК.
    7)Внешнее проявление работающего ЗАГРУЗЧИКа.
    8)Критерий для запуска ЗАГРУЗЧИКА.

    1) Загрузчик имеет некий размер. Есть МК, у которых мало памяти, и разместить ЗАГРУЗЧИК просто нет места. Или место есть, но не останется места для программы пользователя. Загрузчик – это все таки только программа-посредник для нашего удобства.
    2) В МК ATmega Загрузчик может заливаться (условно говоря) в одну из 4х верхних областей Flash-памяти.
    3) Соответственно фьюзами задаем область памяти МК, в которой находится ЗАГРУЗЧИК, что бы МК знал, с какого адреса запускать программу в МК после «Reset» или другого события.
    4) В экосистеме «Arduino» используется ЗАГРУЗЧИК по UART. А для этого протокола важна скорость. Если Загрузчик настроен на одну скорость обмена информацией, а программа-программатор(avrdude.exe) на другую, то загрузки HEX-файла в память МК не произойдет.
    5) МК может работать с разными тактовыми частотами. Чем ниже частота – тем меньше потребляемая мощность. Если залить ЗАГРУЗЧИК, не рассчитанный на используемую МК тактовую частоту, то как минимум будет проблема в несогласованной скорости UART. Т.е. скетч вряд ли загрузится в МК, а если ЗАГРУЗЧИК без контроля ошибок, то может загрузиться черт знает что.
    6) Типов МК очень много. ЗАГРУЗЧИК для МК AVR не подходит для МК PIC. Проблемы могут возникнуть даже для одинаковых МК, но в разных корпусах.
    7) Очень не мешает знать, как ведет себя загрузчик в МК без пользовательской программы. Вот получили вы посылку из Китая с Arduino ProMini и как узнать есть в ней загрузчик или нет? А если есть описание, то можно прочитать, что при подаче питания или сбросе должен 5 раз мигнуть желтый светодиод. Не мигает? Значит нет загрузчика или у вас проблемы с платой.
    8) Вообще-то ЗАГРУЗЧИК может активизироваться (начать свою работу, прервав работу основной программы) не только по сигналу сброса, но любым другим способом, который реализовал разработчик, например, замыканием выв. 5 МК на землю.

    А теперь переведем полученную информацию в практическую плоскость.

    1) Как узнать размер ЗАГРУЗЧИКА, находящегося в МК?
    Если речь о загрузчике, залитом в плату ардуино (читай в МК ATmega8/168/328), то можно прочитать с помощью программы-программатора, например, AVRDUDESS и платы-программатора USBasp, Flash-память и фьюзы BOOTSZ0 и BOOTSZ1. Открыв сохраненный HEX-файл текстовым редактором, можно увидеть в младших адресах код пользовательской программы, потом незанятую память (FF) и в самых верхних адресах памяти (см строку 225) код загрузчика с адреса 1C00 и до признака конца 01FF. Таким образом можно узнать длину загрузчика в байтах, а потом перевести в длину в словах.

    Читайте также:  Подсос на ваз 2110 карбюратор

    2)Как узнать размер ЗАГРУЗЧИКА, который мы хотим разместить в МК?
    Открываем в текстовом редакторе HEX-файл, в котором хранится интересующий нас загрузчик. Видим приблизительно такую куртинку

    Здесь пояснения как понимать полученные цифры

    3)Что будет, если залить загрузчик и неправильно выставить фьюзы BOOTSZ0 и BOOTSZ1?
    Надо иметь ввиду, что не любой загрузчик способен перезаписать сам себя. Почему так? Этот вопрос выходит за рамки данной статьи. Более того, вопрос поставлен не «как перезаписать загрузчик в МК средствами платформы Arduino IDE?», а о первичной записи в новый МК загрузчика и установке конкретных фьюзов BOOTSZ0 и BOOTSZ1, предполагая, что остальные фьюзы установлены гарантированно правильно.
    Итак, первый раз загрузчик всегда прошивается аппаратным программатором (ISP), поэтому выставим ли сначала фьюзы BOOTSZ0 и BOOTSZ1, а потом зальем ЗАГРУЗЧИК или наоборот, значения не имеет, так как ISP-программатор будет загружать данные по адресам, указанным в HEX-файле. Но вот потом, после Reset, ATmega8 начнет выполнение программы с адреса 000, если фьюз BOOTRST=1, независимо от BOOTSZ0 и BOOTSZ1

    Из таблицы видно, что если Загрузчик разместим не с нужного адреса или неправильно установим фьюзы, то Загрузчик не запустится должным образом. Под должным образом я подразумеваю запуск нештатным способом за счет других ошибок, которые «исправляют» начальные ошибки. Например, залили в ATmega8 ЗАГРУЗЧИК длиной 510 слов с адреса E02, т.е. как фьюзы BOOTSZ1 и BOOTSZ0 не выставляй, а при сбросе ЗАГРУЗЧИК не запустится (не получит управление МК). Или прошили ЗАГРУЗЧИК размером в 1000 слов с адреса C00, но фьюзы BOOTSZ1 и BOOTSZ0 выставили в 0 и 1. Тогда при сбросе счетчик команд будет установлен в E00 и какой-то участок кода ЗАГРУЗЧИКа запустится, но такой запуск может привести к непредсказуемым результатам.
    4)Что будет, если ЗАГРУЗЧИК от ATmega8 залить в ATmega328?
    С одной стороны ATmega8 и ATmega328 выводно совместимы, с другой – у них разный объем памяти, а ЗАГРУЗЧИК всегда размещается в конце памяти (в старших адресах). Поэтому, если мы перекомпилируем исходник загрузчика для ATmega8 под ATmega328, то нельзя говорить о том, что мы пытаемся залить ЗАГРУЗЧИК от ATmega8 в ATmega328. Другое дело, если мы попытаемся HEX-файл с ЗАГРУЗЧИКом от ATmega8 залить в ATmega328. Здесь ответ однозначный – данные зальются вовсе не в конец памяти ATmega328, где должен располагаться ЗАГРУЗЧИК, а в область пользовательской программы и никогда штатным образом ЗАГРУЗЧИК не получит управление (не запустится).

    И о результате осознания и конечном итоге.
    Теперь я знаю, что ЗАГРУЗЧИК optiboot_flash_atmega8_UART0_57600_8000000L.hex из проекта MiniCore, который я хочу залить в свою ATmega8L зальется с адреса 1E00, т.е. займет сектор памяти 1FFF-1E00=1FF (512байт или 256 слов). Соответственно я должен установить (в ноль) три фьюза следующим образом: BOOTRST=0, BOOTSZ1=0 и BOOTSZ0=1 (см таблицу выше)

    Залил с помощью программы AVRDUDESS и USBasp-программатора
    Как я говорил выше, ЗАГРУЗЧИК и Программа-программатор – это мама и папа одного разъема. И коль я прошил ЗАГРУЗЧИК (маму), то теперь надо настроить «папу»-ArduinoIDE, которой я должен «рассказать» 1) скорость UART, 2)марку МК, 3)Частоту тактирования процессора МК (требуется для правильной компиляции, а не для загрузки), 4)Место, где лежит HEX-файл прошитого ЗАГРУЗЧИКА. Зачем? Не знаю.
    Отредактируем файл boards.txt. В разных версиях ArduinoIDE он имеет разный формат.
    1)Название платы для меню в ArduinoIDE задаётся в строке с «.name=», например: 328.name=ATmega328 или atmegang.name=Arduino NG or older

    2)За выбор названия МК для меню отвечает строка вида «.menu.cpu.atmega8=», например: atmegang.menu.cpu.atmega8=ATmega8 или 8.build.mcu=atmega8
    К сожалению, все параметры для всех версий ArduinoIDE описать невозможно. Поэтому я показал соответствующие разделы файла boards.txt двух версий. Думаю по образцу и подобию Вы сможете доработать свою версию ArduinoIDE под свои ЗАГРУЗЧИКИ.

    Проверим теорию на практике, для чего:
    1)Зальем посредством USBasp в ATmega8 (на беспаечной плате) с кварцем 16МГц штатный загрузчик из состава ArduinoIDE «ATmegaBOOT-prod-firmware-2009-11-07.hex» (размер файла 2,8кБ), загрузка с адреса 1C00. Разъемы от плат-программаторов USBasp и USB-UART от беспаечной платы отключать не буду, что бы не перепутать при подключении. Проще отсоединить/присоединить к программаторам, которые надо обязательно отсоединять. Устанавливаю фьюзы L=FF, H=C0. Отключаю USBasp, смотрю на светодиод, подаю питание. Несколько раз быстро мигнул и более не светится. Значит загрузчик работает. Теперь зальем скетч BLINK штатным способом. Подключаюсь USB-UART и светодиод начинает вести себя совсем по другому- раз в 8 сек светится. Запускаю ArduinoIDE 1.6.6.0, устанавливаю Arduino NG…, ATmega8, порт, программатор AVRISP mkII. AVRDUDE 6.0.1 выдает кучу всякой информации (у меня так настроено), скорость 19200. Скетч прошивается и сразу начинает выполняться. Т.е. провода, фьюзы, настройки выполнены правильно.
    2)По такой же методике выполним заливку загрузчика optiboot_flash_atmega8_UART0_115200_16000000L.hex, переименовав в «01.hex» и положив в каталог optiboot (размер файла 1,34кБ), загрузка с адреса 1E00. Поэтому фьюзы L=FF, H=C2. После заливки загрузчика светодиод начинает мигать несколько раз в секунду. Без программаторов (только питание) не светится, т.е. загрузчик не выдает своего присутствия. Добавляю секцию в файл boards.txt
    ##############################################################
    #поместите HEX-файл в каталог optiboot

    a8_16MHz_E.name=atmega8 (16 MHz_ExtOsc_115k)
    a8_16MHz_E.upload.tool=avrdude
    a8_16MHz_E.upload.protocol=arduino
    a8_16MHz_E.menu.cpu.atmega8.upload.maximum_size=7680
    a8_16MHz_E.menu.cpu.atmega8.upload.maximum_data_size=512
    a8_16MHz_E.upload.speed=115200
    a8_16MHz_E.bootloader.unlock_bits=0x3F
    a8_16MHz_E.bootloader.lock_bits=0x0F
    a8_16MHz_E.menu.cpu.atmega8.bootloader.low_fuses=0xff
    a8_16MHz_E.menu.cpu.atmega8.bootloader.high_fuses=0xc2
    a8_16MHz_E.bootloader.tool=avrdude
    a8_16MHz_E.bootloader.path=optiboot
    a8_16MHz_E.bootloader.file=01.hex
    a8_16MHz_E.build.mcu=atmega8
    a8_16MHz_E.build.f_cpu=16000000L
    a8_16MHz_E.build.core=arduino
    a8_16MHz_E.build.variant=standard
    a8_16MHz_E.build.board=AVR_NG

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

    3)Когда попытался повторить вышеописанное для загрузчика optiboot_flash_atmega8_UART0_115200_8000000L.hex потерпел неудачу. Штатным способом скетч не заливался. После долгих танцев с бубном, на основании которых и появился данный трактат, пришел к выводу, что косяк разработчика, так как те же действия для optiboot_flash_atmega8_UART0_38400_8000000L.hex привели к загрузке скетча штатным способом. Кроме того, посмотрев файл boards.txt, нашел в нем ошибки, например:
    ###################
    #### ATmega8/A ####
    ###################

    8.name=ATmega8
    8.upload.tool=avrdude
    8.upload.protocol=arduino
    8.upload.maximum_size=7680
    8.upload.maximum_data_size=1024. Ошибка
    8.menu.clock.16MHz_external.bootloader.high_fuses=0xc4. ошибка
    И нет для 8МГц скорости 115200, а нерабочий HEX-файл есть. Вот и верь разработчикам.

    Извините, что не могу привести отличия форматов файла boards.txt в разных версиях ArduinoIDE, так как этим вопросом не занимался. Попробовал сделать под имеющуюся версию по образцу и подобию – получилось. Глубже не «копал».

    Спасибо за внимание. Буду рад, если кому-то мои исследования оказались полезными.

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

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

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

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

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

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

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

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

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

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

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

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

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

    Читайте также:  Стиральная машина в прихожей в шкафу

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Заключение

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

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

    Ссылка на основную публикацию
    3 Конфорочные газовые панели 45 гефест
    Тип подключения — газовая Общее кол-во конфорок — 3 Электроподжиг — есть Габариты встраивания (ШxГ) — 42x49 Все характеристики Тип...
    Adblock detector