Ошибка компиляции для плат Arduino
Ошибка компиляции для плат Arduino
Ошибка компиляции для плат Arduino возникает в момент проверки скетча, если исходный код программы написан некорректно или компилятор не может найти указанные файлы библиотек, переменные или методы. Чаще всего такие ошибки связаны с небрежностью или невнимательностью программиста, но бывают просто-таки мистические ситуации, когда, казалось бы, все правильно, а вот компилятор «дурит». Чудес не бывает и любые странные ошибки в конце концов можно найти и исправить. Давайте попробуем это сделать вместе.
Установка Arduino IDE
Если вы скачали архив, то просто распакуйте его и запустите Arduino.exe.
Если вы скачали установочный файл то вам необходимо выполнить стандартную установку. Процесс установки очень прост и не займет много времени, но для полноты статьи я распишу его подробно.
Запускаем установочный файл. Соглашаемся с условиями лицензионного соглашения (естественно после прочтения).
Соглашаемся с условиями
Выбираем необходимые модули программы. Первые два должны быть отмечены обязательно. Остальные на ваше усмотрение.
Выбор компонентов Arduino ide
Далее указываем папку в которую хотим установить программу. Желательно, что бы путь к этой папке не содержал кириллических символов.
Выбор пути установки программы
Во время установки может появиться окно с предложением установки драйвера USB-to-serial. Соглашаемся и ждем окончания установки. На этом весь процесс завершен. Осталось настроить среду разработки и можно творить.
2 Причина 2 Неверно выбран COM-порт
Проверим, что правильно указали COM-порт в IDE Arduino. Проверить, какой порт присвоен системой нашей плате Ардуино можно в диспетчере устройств Windows. Платы Arduino находятся в разделе Порты (COM и LPT) и определяются обычно как устройства Arduino или USB-Serial.
В среде разработки Arduino идём в меню Инструменты Порт и убеждаемся, что указан верный порт. Если нет, указываем нужный.
Выбор COM-порта в IDE Arduino
Проблемы при прошивке GRBL в старые Ардуино UNO
При разработке ПО для работы с GRBL столкнулся с тем, что свежая GRBL, например 0.9, и тем более 1.1, не шьются в мою старую Ардуино UNO, купленную еще 2009 году. Эта Arduino пережила многое и стояла на самом первом станке с ЧПУ. Глючная, тормозная, но живучая.
Беда пришла, когда я попробовал прошить в ардуину GRBL 1.1. Не получилось. То есть библиотека подключилась, файл grblUpload.ino открылся, проект откомпилировался. Но загружаться в Arduino отказался. При этом прошивка легко устанавливалась на еще более сурового китайца (Ардуино Нано). Кроме того, в эту Ардуино УНО по-прежнему шились мои собственные скетчи.
Настройка подробной диагностика ошибок при прошивке в Arduino IDE
Что делать, если GRBL не шьется в Ардуино? Нужно посмотреть, с чем связаны проблемы, для этого необходимо получить расширенную диагностику процесса прошивки. Чтобы это сделать, заходим в Arduino IDE, далее главное меню – Файл->Настройки, и ставим галку Показать подробный вывод – Загрузка.
Теперь при заливке прошивки в Ардуино мы увидим больше информации. В моем случае следующее:
Диагностика ошибок при прошивке GRBL в Ардуино
диагностика того, что прошло штатно
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: reading input file “C:UsersAndreyAppDataLocalTemparduino_build_872288/grblUpload.ino.hex”
avrdude: writing flash (29762 bytes):
Writing | ################################################avrdude: stk500_recv():
programmer is not responding
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_recv(): programmer is not responding – много-много раз
avrdude: stk500_recv(): programmer is not responding
Проблема загрузки в плату. Помощь по загрузке: http://www.arduino.cc/en/Guide/Troubleshooting#upload.
Как сделать из Ардуино Нано программатор
То есть, имеем Китайскую Ардуино УНО, на которую устанавливаются простые прошивки и не устанавливается GRBL, выдавая avrdude: stk500_recv(): programmer is not responding. Форумы подсказали, что необходимо перезаписать Bootloader. А для этого нужна ещё одна плата Ардуино. У меня нашлась Ардуино Нано (на неё, как писал выше, GRBL установился без вопросов).
Чтобы превратить Arduino Nano в программатор подключаем Nano к компьютеру и заливаем в неё скетч из Главное меню-> Файл->Примеры->ArduinoISP.
Прошивка bootloader’a в Arduino UNO
Отключаем Нано от компьютера. Соединяем UNO и Nano, как на рисунке, через панели ICSP. На ICSP панели 1 или точка стоят напротив первого пина.
Теперь подключаем Ардуино Nano к компьютеру. Открываем Arduino IDE. В главном меню выбираем Инструменты->Плата Arduino/Genuino UNO.
Осталось нажать Главное меню->Инструменты->Записать загрузчик. У меня сразу не заработало: полезли ошибки в консоли. Пару раз нажал Главное меню->Инструменты->Записать загрузчик, и, о чудо, сработало.
После описанных танцев с бубном скетч с GRBL начал заливаться в Ардуино УНО без ошибок. И GRBL уверенно работает на этой Arduino UNO.
Как прошить Arduino Pro Mini (от А до Я)
Опубликовано: 31.08.2017 20:48
Введение
Приветствую Вас, читатели нашего ресурса. Сегодня мы поговорим об одном контроллере из серии Arduino, а именно об Arduino Pro Mini. Это маленький, компактный контроллер, имеющий все преимущества Arduino, но при этом очень компактный, можно сказать самый маленький из всех существующих Arduino контроллеров на данный момент. Многих так же привлекает и цена его Китайский копий, а стоят они от одного до двух долларов за штуку (местами и того меньше), что так же заставляет задуматься об его приобретении. Но существует и одна проблема, его не так-то уж и просто прошить, особенно Китайские копии, которые оснащают процессором Atmel ATmega168P, которыми некогда не оснащали официальные контроллеры Arduino Pro Mini и как следствие Arduino IDE отказывается их прошивать, сообщая о неправильной сигнатуре процессора.
Вот об этом мы сегодня и поговорим. Как прошить, что для этого нужно, ну и как заставить Arduino IDE работать с китайскими копиями.
Что для этого нужно?
Arduino Pro Mini очень компактный, а компактность требует жертв и жертва это – USB интерфейс который полностью выкосили в данном контроллере т.е. подключить Pro Mini к компьютеру напрямую у вас не получится и как следствие для этого понадобится либо специальный переходник USB в TTL или другой контроллер Arduino.
Далее мы разберем три способа как прошить Pro Mini и для всех трех способов нам что-то понадобиться:
- Первый способ. Прошиваем через адаптер USB в TTL – нужен сам адаптер в количестве одной штуки.
- Второй способ. Прошиваем через Arduino UNO – нужна Arduino UNO, но не простая, а в классическом исполнении, это та Arduino, в которой процессор выполнен в DIP корпусе и вставлен в черный разъем.
- Третий способ. Прошиваем через SPI интерфейс – нужна любая Arduino: UNO, Nano, Mega, Leonardo – не важно, главное чтобы был USB разъем для подключения к ПК.
Первый способ. Прошиваем через адаптер USB в TTL
Первым и самым простым способом загрузить свой скетч в Arduino Pro Mini – это приобрести специальный адаптер USB в TTL или как его называют UART переходник. Как правило, этот переходник это и есть та часть, которую вырезали из Arduino Nano, превратив ее в Arduino Pro Mini. Стоимость подобных переходников копеечная, а выбор и того больше. Китайцы наштопали их столько, что глаза разбегаться какой из них выбрать. При этом цена сего девайса не более одного вечно зеленого. После того как вы соедините Pro Mini и UART переходник проводами или шлейфом, остаётся только воткнуть его (переходник) в ПК, установить драйвер (не для всех переходников они требуются) и на этом собственно все. Ваш ПК определит переходник как очередной COM-порт, который появляется при подключении любой Arduino к ПК. Выбираете его, плату, с которой будете работать (Arduino Pro Mini) и спокойно загружаете свой скетч.
Единственным нюансом в данных переходниках, является наличие или отсутствие контактов RST или DTR. Рекомендую покупать переходники, на которых эти контакты есть. Они значительно упрощают жизнь и делают процесс прошивки беспроблемным. Если же вы купили уже переходник, на котором подобных контактов нет, то при каждой загрузке скетча в Arduino вам придется нажимать на кнопку Reset, что не всегда получается сделать вовремя, и это вносит свои неудобства.
Подключение переходник вы можете посмотреть по таблице ниже:
USB в TTL (UART) | Arduino Pro Mini |
---|---|
RX | RX |
TX | TX |
GND | GND |
5V | VCC |
RST или DTR или GRN | RST или DTR |
Второй способ. Прошиваем через Arduino UNO
Для этого способа нам понадобиться классическая Arduino UNO. Классическая эта та, в которой корпус микросхемы выполнен в DIP корпусе и вставлен в специальный разъем. Вот эту микросхему нам надо аккуратно поддеть отверткой. Тут важно не сломать процессор, поддевайте аккуратно, не погнув ноги.
После того как мы вытащили процессор из Arduino UNO мы по сути получили тот самый переходник USB в TTL, осталось только соединить проводами наш новый переходник и Arduino Pro Mini по следующей схеме:
Arduino UNO (без процессора) | Arduino Pro Mini |
---|---|
RX | RX |
TX | TX |
GND | GND |
5V | VCC |
RST | RST |
После того как вы соединили две Arduino воедино, можно приступать к прошивке Arduino Pro Mini. Подключаем Arduino UNO по USB к ПК. Выбираем в настройках Arduino IDE COM-порт, указываем, что мы теперь работаем не с Arduino UNO, а с Arduino Pro Mini и все, заливаем наши скетчи. Способ довольно интересный, если вы не боитесь испортить Arduino и рядом не оказалось переходника USB в TTL.
Третий способ. Прошиваем через SPI интерфейс
Третьим и самым неудобным способом загрузить свой скетч в Arduino Pro Mini это прошить его при помощи ICSP интерфейса. Данный интерфейс присутствует на большинстве плат Arduino. Основные контакты данного интерфейса выведены на порты с 10 по 13, а так же выведены отдельно в виде шести контактной колодки с подписью ICSP. Располагается колодка, как правило, в центральной правой части Arduino.
Прошивка Arduino Pro Mini в этом случае делиться на два этапа:
- Прошивка платы Arduino как ISP программатора.
- Настройка Arduino IDE и загрузка скетча в Arduino Pro Mini.
Первым делом мы должны подготовить наш будущий программатор. Возьмем для примера всю туже Arduino UNO. Далее пошагово:
- Запускаем Arduino IDE.
- Файл – Примеры – 11.ArduinoISP – ArduinoISP.
- Инструменты – Плата – Arduino UNO.
- Инструменты – Порт – Выбираем COM-порт.
- Компилируем и заливаешь в Arduino UNO.
Далее нам необходимо соединить две Arduino проводами по следующей схеме:
Arduino UNO (ISP) | Arduino Pro Mini |
---|---|
5V | VCC |
GND | GND |
10 | RST |
11 (MOSI) | 11 (MOSI) |
12 (MISO) | 12 (MISO) |
13 (SCK) | 13 (SCK) |
Теперь опять открываем Arduino IDE. Открываем в ней скетч который вы хотите залить в Pro Mini и выполняете следующие действия:
2. Инструменты – Плата – Arduino Pro Or Pro Mini
3. Инструменты – Процессор – ATmega168 (5V, 16 MHz)
4. Инструменты – Порт – Выбираете порт
5. Инструменты – Программатор – Arduino as ISP
6. Скетч – Загрузить через программатор
Как видите загружать скетч в этом режиме надо через специальное меню “Загрузить через программатор”, а не через кнопку “Загрузить” на главной форме Arduino IDE. В этом и связано все неудобство. Если вы нажмете кнопку “Загрузить” как это делаете обычно, то вы зальете скетч в Arduino UNO, а не Arduino Pro Mini, что затрет там скетч программатора. Так же в этом режиме недоступен класс Serial, то есть отлаживать свой скетч обмениваясь сообщениями по COM-порту у вас так же не получится. Ну и еще одна ложка дегтя в том, что после данной перепрошивки, в большинстве случаев, перепрошить Arduino Pro Mini через переходник у вас так же больше не получиться. Исправляется это заливкой нового bootloader-а через меню “Инструменты” – “Записать Загрузчик”.
Добавляем китайский Pro Mini в Arduino IDE
Как я уже говорил в данной статье, Китайские клоны порой оснащают процессорами которыми не оснащали официальные версии Arduino Pro Mini и как следствие при прошивке их вы можете увидеть следующую или подобную ошибку.
Исправляется это легко:
- Для начала необходимо открыть папку в которой расположена Arduino IDE.
- Затем переходим в следующую папку “Папка с Arduino IDEhardwarearduinoavr”.
- Ищем там файл “boards.txt” и открываем его в текстовом редакторе.
- Ищем в файле следующую строку “pro.menu.cpu.16MHzatmega168.build.mcu=atmega168”.
- И заменяем ее на “pro.menu.cpu.16MHzatmega168.build.mcu=atmega168p”.
- Перезапускаем Arduino IDE и на этом все.
- Если у вас к примеру 328 процессор то делаем все так же, только ищем строку с цифрами 328.
Заключение
В данной статье я привел аж три варианта загрузки скетчей в Arduino Pro Mini. Лично я использую второй. Мне он больше нравиться.
Что будете использовать вы – выбирать вам. Оставьте в комментарии какой вариант вы предпочитаете.
Загрузка скетчей через SPI интерфейс
Интерфейс SPI присутствует на всех платах Arduino. Используются контакты D10-D13 (D50-D53 на Arduino Mega), которые на многих платах продублированы на шестиконтактной колодке ICSP. Колодка располагается в правой части Arduino (см. рис. 6).
Сначала необходимо на плату Arduino (например Arduino Uno) загрузить скетч Файл → Образцы → ArduinoISP (рис. 7). Ее мы будем использовать в качестве программатора.
Далее соединяем две платы Arduino согласно таблице 1.
Схема соединений показана на рис. 8.
В Arduino IDE открываем необходимый скетч. Выбираем в меню Инструменты à Arduino Pro Or Pro Mini, порта подключения и программатора (Arduino as ISP). И теперь внимание. Метод загрузки нажатием на кнопку Загрузить не подходит, потому что при этом скетч будет загружен на первую плату, которая выступает в качестве программатора. Чтобы этого не произошло, загружаем через пункт меню Эскиз → Загрузить через программатор (рис. 9).
Далее рассмотрим еще один способ загрузки скетчей – через плату Arduino Uno.
Ардуино загрузка скетча(на примере Arduino Nano)
Загрузка скетча в Arduino Nano, ничем не отличается от загрузки на другие платформы, например Uno или Mega. Для загрузки можно использовать программу Arduino IDE специально разработанную компанией для этих целей. На момент написания статьи последней версией была 1.8.9. Она полностью поддерживает русский язык и теперь в мониторе порта можно читать русские буквы. Встатье даны ссылки где скачать Arduino IDE, драйвера и многое другое. Читать полную статью.
Вступите в группу, и вы сможете просматривать изображения в полном размере
Пояснения к скетчу “Blink”
Ниже представлен код скетча “Blink”.
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain.
// Pin 13 has an LED connected on most Arduino boards.
// the setup routine runs once when you press reset:
// initialize the digital pin as an output.
// the loop routine runs over and over again forever:
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
Первое, на что стоит обратить внимание: в данном скетче множество “комментариев”. Обратите внимание, что комментарии не являются инструкцией по работе программы. Это исключительно пояснения отдельных функций и задач, которые выполняются на определенном этапе кода. Это не обязательная часть кода. Все между символами /* и */ в верхней части скетча – это комментарии, в которых описаны задачи программы. Так же есть комментарии, которые ограничиваются одной строкой. Они начинаются с символов // и заканчиваются по умолчанию в конце строки. Первая важная, по сути, часть данного кода это строка:
В комментариях над строкой указано, что мы присваиваем имя пину, к которому подключен светодиод. На большинстве плат Arduino это будет 13 пин. Дальше используется функция “Setup”. Опять-таки, в комментариях указано, что функция срабатывает после нажатия кнопки “reset”. Также эта функция срабатывает, когда плата перезагрузится по каким-либо другим причинам. Например, подача питания или после загрузки скетча.
// the setup routine runs once when you press reset:
// initialize the digital pin as an output.
Каждый скетч Arduino обязан включать в себя функцию “setup” и часть, в которую вы можете добавлять собственные инструкции, заключенные между < >. В нашем примере в функции присутствует только одна команда, в которой указано, что пин, который мы используем, настраивается на “вывод” (“Output”). Также обязательным для любого скетча является функция цикла “Loop”. В отличие от функции “Setup ”, которая отрабатывает один раз после перезагрузки, функция “Loop” после окончания работы команд, вновь запустится.
// the loop routine runs over and over again forever:
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
В теле функции “Loop” светодиод включается (HIGH), данное значение задерживается на 1000 миллисекунд (1 секунда), светодиод отключается (LOW) и остается выключенным на 1 секунду, после чего цикл повторится.
Ответы
Прошиваете через внешний программатор stk500?Похоже,что нет отклика от программатора.
Нет, просто проводом подключил к самой плате. Может я не тот загрузчик выбрал в настройках Arduino IDE? Вот мои настройки, вроде всё правильно
Вы не правильно выбрали устройство для перепрошивки. Я свой анет давно перепрошивал и уже не помню, но там уж точно не stk500.
Да вроде всё по инструкции сделал, фото настроек выше
Загрузчик первым делом залили на плату? Это необходимо сделать, если плата перепрошивается первый раз в жизни.
Так, тут поподробнее, какой загрузчик?
У вас прям на фото есть кнопка “записать загрузчик”. Вот ее перед началом всех манипуляций со штопанием платы нажать нужно. Только говорю сразу, для корректных показаний температуры выбирайте термодатчик под номером 11.
Вот такое выдаёт(
Тогда все по порядку. подключение к компу в какой порт и каким кабелем, в винде сама плата как определилась?
Порт COM6, определилась как USB-SERIAL CH340 (COM6)
а в какой порт на компе подрубали? если на лицевой панели, то переткните в порт сзади, так же комплектный анетовский кабель нормального качества.
COM6 на лицевой, переподключил на задний, та же ошибка, Кабель использую комплектовский
Так же смотрите чтоб в пути к папке с марлином не было никаких русских букв. Самый лучший вариант c:/marlin/
чтобы записать загрузчик вам нужна ещё одна плата Ардуино. гугль в помощь.
Вот здесь есть немного инфы
Если плата изначально предназначена сразу для установки на принтер,значит в контроллер прошит и загрузчик и программа. Если при прошивке пишет,что не может прошить загрузчик,возможно конфликтует марлин и контроллер,который распаян на плате. Или дальше USB-SERIAL CH340 к контроллеру ничего не идёт.
вы это серьёзно? как раз на анетовских прошивках этого НЕТ!
Нет чего,загрузчика?Самой программы?У меня никогда не было анетовской платы,сравнить не с чем.
нет загрузчика, позволяющего шить через СОМ-порт.
там ресурсов – впритык и поэтому пара килобайт, которые занимает загрузчик – совсем не лишние.
более того – Марлин влазит далеко не со всеми примочками – часть приходится отключать.
Вы это серьёзно? (с) 😉 Не скажу за все anet, но на a8 есть загрузчик и прекрасно шьётся через com порт. Однажды запорол загрузчик, пришлось ISP программатором прошиваться. Зато прошил omniboot и освободил немного памяти.
А на счёт места в памяти – да, вы правы, его там впритык. Я в итоге просто сменил борду.
в менеджере плат нужно добавить sanguino. для этого добавьте адрес в настройках ардуино https://raw.githubusercontent.com/Lauszus/Sanguino/master/package_lauszus_sanguino_index.json и загрузите библиотеку под sanguino.
и не забываем флешку вытащить из принтера
Сделал, то же самое пишет
Так же в последнее время заметил что принтер стал сбрасывать настройки после перезапуска, то-есть я выставляю настройки уровня стола например на 30мм, возвращаю все оси домой, но ось Z упирается прямо в стол, там и близко нет 3см, после перезапуска захожу в настройки стола и вижу снова 0мм. Так же сбрасывается время печати. Может это как-то поможет
У меня была точно такая же проблема. Сначала не все библиотеки были установлены в Arduino IDE, а второй раз когда я на кой то чёрт записал туда именно загрузчик через Arduino IDE. Пришлось брать Arduino Nano и восстанавливать.
Сейчас если нужно перешить принтер, то я использую AVRDUDESS. Ей заливаю скомпилированный Arduino IDE .bin файл.
Если не справитесь, пишите в личку.
У Вас в строке “Программатор” установлено “Arduino as ISP”. А какие еще варианты там есть? Потому что эта настройка означает, что ардуино пытается использовать плату как программатор, а не использзовать для прошивки бутлоадер. Об этом же говорят и выводимые ошибки.
Так можно долго гадать!
Что мешает приобрести программатор USBASP и прошить нормально через ISP разъем? Эти программаторы продаются уже чуть ли не в пивных ларьках. Да и смастерить его из той же Arduino Uno-подобной платы проще простого.
Если в ATmega1284 памяти в притык для прошивки. Какой смысл гадать есть там бутлоадер или нет?
Информацией по программированию подобных микроконтроллеров интернет просто переполнен.
Уже заказал себе nano, буду через неё шить, да и в хозяйстве пригодится
Вообще такая ошибка возникает, когда avrdude не получает нормально доступа к порту или не верно указан тип программатора. Я уже давно забил на этот калечный arduino.cc и прошиваю через platformio. Если надо – могу дать ini файл для anet.
Для написания комментариев, пожалуйста, авторизуйтесь.