Произошла ошибка при загрузке скетча arduino uno

Ошибки компиляции Arduino Nano, Uno возникают при проверке или загрузке скетча ► рассмотрим, как исправить основные ошибки программы Ардуино

СОДЕРЖАНИЕ ►

  • Произошла ошибка при загрузке скетча в Ардуино
    • programmer is not responding
    • a function-definition is not allowed arduino ошибка
    • expected initializer before ‘}’ token arduino ошибка
    • ‘что-то’ was not declared in this scope arduino ошибка
    • No such file or directory arduino ошибка
  • Compilation error: Missing FQBN (Fully Qualified Board Name)

Ошибки компиляции Arduino IDE возникают при проверке или загрузке скетча в плату, если код программы содержит ошибки, компилятор не может найти библиотеки или переменные. На самом деле, сообщение об ошибке при загрузке скетча связано с невнимательностью самого программиста. Рассмотрим в этой статье все возможные ошибки компиляции для платы Ардуино UNO R3, NANO, MEGA и пути их решения.

Произошла ошибка при загрузке скетча Ардуино

Самые простые ошибки возникают у новичков, кто только начинает разбираться с языком программирования Ардуино и делает первые попытки загрузить скетч. Если вы не нашли решение своей проблемы в статье, то напишите свой вопрос в комментариях к этой записи и мы поможем решить вашу проблему с загрузкой (бесплатно!).

avrdude: stk500_recv(): programmer is not responding

Что делать в этом случае? Первым делом обратите внимание какую плату вы используете и к какому порту она подключена (смотри на скриншоте в правом нижнем углу). Необходимо сообщить Arduino IDE, какая плата используется и к какому порту она подключена. Если вы загружаете скетч в Ардуино Nano V3, но при этом в настройках указана плата Uno или Mega 2560, то вы увидите ошибку, как на скриншоте ниже.

Ошибка: programmer is not responding

Ошибка Ардуино: programmer is not responding

Такая же ошибка будет возникать, если вы не укажите порт к которому подключена плата (это может быть любой COM-порт, кроме COM1). В обоих случаях вы получите сообщение — плата не отвечает (programmer is not responding). Для исправления ошибки надо на панели инструментов Arduino IDE в меню «Сервис» выбрать нужную плату и там же, через «Сервис» → «Последовательный порт» выбрать порт «COM7».

a function-definition is not allowed here before ‘{‘ token

Это значит, что в скетче вы забыли где-то закрыть фигурную скобку. Синтаксические ошибки IDE тоже распространены и связаны они просто с невнимательностью. Такие проблемы легко решаются, так как Arduino IDE даст вам подсказку, стараясь отметить номер строки, где обнаружена ошибка. На скриншоте видно, что строка с ошибкой подсвечена, а в нижнем левом углу приложения указан номер строки.

Ошибка: a function-definition is not allowed

Ошибка: a function-definition is not allowed here before ‘{‘ token

expected initializer before ‘}’ token   expected ‘;’ before ‘}’ token

Сообщение expected initializer before ‘}’ token говорит о том, что вы, наоборот где-то забыли открыть фигурную скобку. Arduino IDE даст вам подсказку, но если скетч довольно большой, то вам придется набраться терпения, чтобы найти неточность в коде. Ошибка при компиляции программы: expected ‘;’ before ‘}’ token говорит о том, что вы забыли поставить точку с запятой в конце командной строки.

‘что-то’ was not declared in this scope

Что за ошибка? Arduino IDE обнаружила в скетче слова, не являющиеся служебными или не были объявлены, как переменные. Например, вы забыли продекларировать переменную или задали переменную ‘DATA’, а затем по невнимательности используете ‘DAT’, которая не была продекларирована. Ошибка was not declared in this scope возникает при появлении в скетче случайных или лишних символов.

Ошибка Ардуино: was not declared in this scope

Ошибка Ардуино: was not declared in this scope

Например, на скриншоте выделено, что программист забыл продекларировать переменную ‘x’, а также неправильно написал функцию ‘analogRead’. Такая ошибка может возникнуть, если вы забудете поставить комментарий, написали функцию с ошибкой и т.д. Все ошибки также будут подсвечены, а при нескольких ошибках в скетче, сначала будет предложено исправить первую ошибку, расположенную выше.

exit status 1 ошибка компиляции для платы Arduino

Данная ошибка возникает, если вы подключаете в скетче библиотеку, которую не установили в папку libraries. Например, не установлена библиотека ИК приемника Ардуино: fatal error: IRremote.h: No such file or directory. Как исправить ошибку? Скачайте нужную библиотеку и распакуйте архив в папку C:Program FilesArduinolibraries. Если библиотека установлена, то попробуйте скачать и заменить библиотеку на новую.

exit status 1 Ошибка компиляции для Arduino Nano

exit status 1 Ошибка компиляции для платы Arduino Nano

Довольно часто у новичков выходит exit status 1 ошибка компиляции для платы arduino uno /genuino uno. Причин данного сообщения при загрузке скетча в плату Arduino Mega или Uno может быть огромное множество. Но все их легко исправить, достаточно внимательно перепроверить код программы. Если в этом обзоре вы не нашли решение своей проблемы, то напишите свой вопрос в комментариях к этой статье.

missing fqbn (fully qualified board name)

Ошибка возникает, если не была выбрана плата. Обратите внимание, что тип платы необходимо выбрать, даже если вы не загружаете, а, например, делаете компиляцию скетча. В Arduino IDE 2 вы можете использовать меню выбора:
— список плат, которые подключены и были идентифицированы Arduino IDE.
— или выбрать плату и порт вручную, без подключения микроконтроллера.

  • #1

АХТУНГ!
Вставка от модератора:
Подробное руководство по загрузке прошивки в Ардуино от Алекса Гайвера:

Прежде чем строчить сообщения, внимательно ознакомьтесь!!!

=================================================================================================

Arduino: 1.8.8 (Windows 7), Плата:»Arduino Nano, ATmega328P»

Скетч использует 14462 байт (47%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 776 байт (37%) динамической памяти, оставляя 1272 байт для локальных переменных. Максимум: 2048 байт.
Неверная библиотека найдена в C:UsersДимаDocumentsArduinolibrariesconvert: нет заголовочных файлов (.h), найденных в C:UsersДимаDocumentsArduinolibrariesconvert
Неверная библиотека найдена в C:UsersДимаDocumentsArduinolibrariesexamples: нет заголовочных файлов (.h), найденных в C:UsersДимаDocumentsArduinolibrariesexamples
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x83
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x83
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x83
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x83
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x83
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x83
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x83
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x83
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x83
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x83
Проблема загрузки в плату. Помощь по загрузке: http://www.arduino.cc/en/Guide/Troubleshooting#upload .
Неверная библиотека найдена в C:UsersДимаDocumentsArduinolibrariesconvert: нет заголовочных файлов (.h), найденных в C:UsersДимаDocumentsArduinolibrariesconvert
Неверная библиотека найдена в C:UsersДимаDocumentsArduinolibrariesexamples: нет заголовочных файлов (.h), найденных в C:UsersДимаDocumentsArduinolibrariesexamples
Неверная библиотека найдена в C:UsersДимаDocumentsArduinolibrariesconvert: нет заголовочных файлов (.h), найденных в C:UsersДимаDocumentsArduinolibrariesconvert
Неверная библиотека найдена в C:UsersДимаDocumentsArduinolibrariesexamples: нет заголовочных файлов (.h), найденных в C:UsersДимаDocumentsArduinolibrariesexamples

Изменено: 19 Мар 2020

Wan-Derer


Devastator


  • #3

При загрузке скетча,выдает ошибку загрузки в плату — что делать? (пытаюсь собрать подсветку монитора)

Arduino: 1.8.8 (Windows 7), Плата:»Arduino Nano, ATmega328P»

In file included from C:AmbilightGyver_Ambilight_v1.2Gyver_Ambilight_v1.2.ino:26:0:

C:Program Files (x86)ArduinolibrariesFastLED-master/FastLED.h:17:21: note: #pragma message: FastLED version 3.001.005

# pragma message «FastLED version 3.001.005»

^

Скетч использует 6000 байт (19%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 577 байт (28%) динамической памяти, оставляя 1471 байт для локальных переменных. Максимум: 2048 байт.
avrdude: ser_open(): can’t open device «\.COM3»: Отказано в доступе.

Проблема загрузки в плату. Помощь по загрузке: http://www.arduino.cc/en/Guide/Troubleshooting#upload .

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
«Показать подробный вывод во время компиляции»

Wan-Derer


  • #4

@Devastator, порт занят другой программой, возможно Ардулайт или как там её

Devastator


  • #5

Подскажите,что делать

Сменил порт,попытался снова загрузить скетч — Теперь выдало вот это:

Arduino: 1.8.8 (Windows 7), Плата:»Arduino Nano, ATmega328P»

In file included from C:AmbilightGyver_Ambilight_v1.2Gyver_Ambilight_v1.2.ino:26:0:

C:Program Files (x86)ArduinolibrariesFastLED-master/FastLED.h:17:21: note: #pragma message: FastLED version 3.001.005

# pragma message «FastLED version 3.001.005»

^

Скетч использует 6000 байт (19%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 577 байт (28%) динамической памяти, оставляя 1471 байт для локальных переменных. Максимум: 2048 байт.
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00
Произошла ошибка при загрузке скетча

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
«Показать подробный вывод во время компиляции»

Справился,в место Arduino: 1.8.8 поставил Arduino: 1.8.2

Kapitan Nemo


  • #8

Всем доброго времени суток.
Решил сделать систему автополива, собрал и стал загружать прогу на ардуино нано, а он мне вот такую ошибку.
Помогите пожалуйста :cry:

  • проблема.png

    162.2 KB
    Просмотры: 268

Wan-Derer


Kapitan Nemo


  • #10

Изменил, теперь только черные буквы и сверху надпись завершена. А дисплей по прежнему Синий, но после покрутил и теперь на синем фоне белые квадраты в две строчки. Энкодер ещё не ставил.
Что делать не знаю

Wan-Derer


Kapitan Nemo


  • #12

Спасибо, уже нашёл.
Сейчас пойду рыться в коде

  • #13

Привет! Пробую сделать цветомузыку по твоей схеме. Сперва при загрузке скетча вылезла такая ошибка:
Screenshot_2.png

Разобрался с ней через переключение процессора на версию Old Bootloader.
Но далее при компиляции прошивки выскакивают такие строки:

In file included from D:ColorMusic-masterfirmwarecolorMusic_v2.9colorMusic_v2.9.ino:200:0:

C:UsersProfessionalDocumentsArduinolibrariesFastLED/FastLED.h:17:21: note: #pragma message: FastLED version 3.001.008

# pragma message «FastLED version 3.001.008»
^

Скетч использует 20990 байт (68%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 972 байт (47%) динамической памяти, оставляя 1076 байт для локальных переменных. Максимум: 2048 байт.

Это норм или снова что-то не в порядке?
Заранее спасибо!

Изменено: 1 Апр 2019

  • #14

1554746840191.png

Не могу понять почему не могу прошить , вроде драйвер 340 поставил

  • #16

@long, плату arduino nano выбрал?

да , поставил

Wan-Derer


  • #18

@long, не знаю. Я всегда драйвера качаю с сайтов производителей

  • #19

@long, не знаю. Я всегда драйвера качаю с сайтов производителей

а можешь скинуть сайт ?

  • #21

Кто-то сталкивался с проблемой

avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xe0 ??

  • лол404.png

    175.9 KB
    Просмотры: 70

pavel lolkek


  • #22

Что делать ?
Arduino: 1.8.8 (Windows 7), Плата:»Arduino Nano, ATmega328P»

In file included from E:игры пашиARDUINOбиблиотекиColorMusic-masterfirmwarecolorMusic_v2.9colorMusic_v2.9.ino:200:0:

C:Program Files (x86)ArduinolibrariesFastLED-master/FastLED.h:17:21: note: #pragma message: FastLED version 3.001.008

# pragma message «FastLED version 3.001.008»

^

Скетч использует 20996 байт (68%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 966 байт (47%) динамической памяти, оставляя 1082 байт для локальных переменных. Максимум: 2048 байт.
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00
Произошла ошибка при загрузке скетча

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
«Показать подробный вывод во время компиляции»

  • #23

У меня тоже самое, проект светомузыка от Алекса Гувера
In file included from C:ColorMusic-masterfirmwarecolorMusic_v2.10colorMusic_v2.10.ino:200:0: C:Program FilesArduinolibrariesFastLED-master/FastLED.h:17:21

Что делать,то?

Александр Симонов


  • #24

У меня тоже самое, проект светомузыка от Алекса Гувера
In file included from C:ColorMusic-masterfirmwarecolorMusic_v2.10colorMusic_v2.10.ino:200:0: C:Program FilesArduinolibrariesFastLED-master/FastLED.h:17:21

Что делать,то?

https://vk.com/topic-97877471_36099125

  • #25

In file included from C:ColorMusic-masterfirmwareOld versionscolorMusic_v2.9colorMusic_v2.9.ino:200:0:
C:Program FilesArduinolibrariesFastLED-master/FastLED.h:17:21: note: #pragma message: FastLED version 3.001.008
# pragma message «FastLED version 3.001.008»

Проект светомузыка Алекса.
Проекты другие без проблем заливаю а на этом проекте (pragma message «FastLED version 3.001.008»)
что делать то? Два часа бьюсь(((((

Что делать?

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

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

Существует две наиболее частые ситуации:

  1. Arduino IDE ругается, что не может найти указанный файл (No such file or directory). Это говорит о том, что нужно установить какую-то библиотеку. А со своими программами я всегда поставляю все необходимые библиотеки.
  2. Загрузка скетча подвисает, а потом выдает ошибку:
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xe4
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xe4
avrdude: stk500_recv(): programmer is not responding

1я ситуация разобрана здесь.

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

Дело в том, что Arduino IDE предполагает, что все современные Nano и UNO должны работать со скоростью
15200 бит в секунду. А китайские клоны до сих пор довольно часто работают со
скоростью в 2 раза меньше – 57600.

Решить эту проблему можно двумя способами:

  1. Обновить загрузчик на плате
  2. Добавить плату со старым загрузчиком в конфигурацию Arduino IDE

Лично мне кажется, что второй способ – более
универсальный и простой. Поэтому его и опишу.

Итак, зайдите на компьютере в папку, в которую
установлена Arduino IDE. Лично у меня это, как
и большинства, “C:Program Files (x86)Arduino”, если Вы на Windows.

Теперь откройте папку hardwarearduinoavr и
найдите файл boards.txt

В этом файле и находятся все платы, которые Вы выбираете через меню «Инструменты > Плата…»

Выбор платы из списка

Откройте этот файл в текстовом редакторе,
например, в блокноте.

Найдите в нем строчку uno.upload.speed

Настройки плат ардуино

Мы видим, что скорость загрузки равно 115200.
Но у нас плата, которая хочет 57600!

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

Выход, получается, один – добавить плату,
скажем, UNO2,
на случай скорости 57600.

Предлагаю просто вставить себе мои настройки и сохранить файл:

uno2.name=Uno 57600

uno2.vid.0=0x2341
uno2.pid.0=0x0043
uno2.vid.1=0x2341
uno2.pid.1=0x0001
uno2.vid.2=0x2A03
uno2.pid.2=0x0043
uno2.vid.3=0x2341
uno2.pid.3=0x0243

uno2.upload.tool=avrdude
uno2.upload.protocol=arduino
uno2.upload.maximum_size=32256
uno2.upload.maximum_data_size=2048
uno2.upload.speed=57600

uno2.bootloader.tool=avrdude
uno2.bootloader.low_fuses=0xFF
uno2.bootloader.high_fuses=0xDE
uno2.bootloader.extended_fuses=0xFD
uno2.bootloader.unlock_bits=0x3F
uno2.bootloader.lock_bits=0x0F
uno2.bootloader.file=optiboot/optiboot_atmega328.hex

uno2.build.mcu=atmega328p
uno2.build.f_cpu=16000000L
uno2.build.board=AVR_UNO
uno2.build.core=arduino
uno2.build.variant=standard

##############################################################

nano2.name=Nano 57600

nano2.upload.tool=avrdude
nano2.upload.protocol=arduino

nano2.bootloader.tool=avrdude
nano2.bootloader.unlock_bits=0x3F
nano2.bootloader.lock_bits=0x0F

nano2.build.f_cpu=16000000L
nano2.build.board=AVR_NANO
nano2.build.core=arduino
nano2.build.variant=eightanaloginputs

## Arduino Nano w/ ATmega328P
## --------------------------
nano2.menu.cpu.atmega328=ATmega328P

nano2.menu.cpu.atmega328.upload.maximum_size=30720
nano2.menu.cpu.atmega328.upload.maximum_data_size=2048
nano2.menu.cpu.atmega328.upload.speed=57600

nano2.menu.cpu.atmega328.bootloader.low_fuses=0xFF
nano2.menu.cpu.atmega328.bootloader.high_fuses=0xDA
nano2.menu.cpu.atmega328.bootloader.extended_fuses=0xFD
nano2.menu.cpu.atmega328.bootloader.file=optiboot/optiboot_atmega328.hex

Теперь у вас две платы UNO и две Nano:

Выбор платы ардуино в Arduino IDE

Удачи!

Содержание

  1. Синтаксические ошибки
  2. Ошибки компиляции плат Arduino uno
  3. Для чего нужна функция void setup()
  4. Ошибка exit status 1 при компиляции для плат uno, mega и nano
  5. Синтаксис void setup()
  6. Ошибки библиотек
  7. Ошибки компилятора Ардуино
  8. Примеры void setup()
  9. Основные ошибки
  10. Ошибка: «avrdude: stk500_recv(): programmer is not responding»
  11. Ошибка: «No such file or directory / exit status 1»

Синтаксические ошибки

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

Сразу после покупки они получают готовый набор библиотек на C99 и возможность при необходимости извлекать необходимые модули в открытых источниках.

Но и здесь не избежать многих проблем, которые знает каждый программист, и одна из самых неприятных — это ошибка компиляции платы Arduino nano, с которой вам придется столкнуться не один раз. Что означает эта линия, каковы причины ее появления, а главное, как быстро решить эту проблему?

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

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

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

Мы выяснили, к чему приводит этот процесс, давайте выясним, как это происходит:

  1. Первое, что делает компилятор, это загружает все включенные файлы, а также изменяет определенные определения на указанное для них значение. Следовательно, это необходимо, чтобы синтаксический синтаксический анализатор не проходил через один и тот же код несколько раз. Кроме того, в зависимости от среды компилятор может заменять функции вместо их объявления или делать это после передачи синтаксическим анализатором. В случае с C99 используется второй вариант реализации, но это не так важно.
  2. Затем проверьте основной синтаксис. Этот процесс выполняется в исходном скомпилированном файле, и какой-то парсер проверяет, были ли указанные функции описаны выше, подключены ли необходимые библиотеки и так далее. Он также проверяет, приводятся ли типы данных к определенным значениям для правильности. Не забывайте, что C99 использует строгую явную типизацию, и вы не можете помещать какие-либо буквальные значения в объявленную целочисленную строку. Если это замечено, сразу отобразится ошибка.
  3. В зависимости от среды разработки иногда можно протестировать код, который теперь будет скомпилирован в последний раз, запустив интерпретатор соответствующим образом.
  4. Последний представляет собой стек различных операций по преобразованию функций, базовых операндов и прочего в двоичный код, что может занять некоторое время. Кроме того, вся файловая структура переносится в исполняемый файл exe-шники и на этом компиляция завершается.

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

Но синтаксические ошибки являются наиболее частой причиной возникновения ошибки компиляции платы Arduino nano в состоянии выхода 1. В этом случае процесс отладки часто бывает чрезвычайно простым.

Вам будет показана ошибка и строка, а также подсказка от оператора EXCEPTION, который не понравился синтаксическому анализатору. Будь то запятая или незамкнутые функциональные скобки, проблема загрузки в плату Arduino все равно возникнет.

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

Не бойтесь этого — это нормальный процесс. Все претензии отображаются на английском языке, например, часто можно увидеть следующее: не было заявлено в этой области. Что это за ошибка ардуино — на самом деле ответ уже скрыт в сообщении. Функция или переменная просто не были объявлены в области видимости.

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

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

Следовательно, если в меню среды вы выбрали компиляцию для неправильного MK, вероятно, вызываемая функция или метод просто не найдены в постоянной памяти, что возвращает ошибку. Как правило, в настройках указывается плата Arduino uno, поэтому не забывайте ее менять. И обратная ситуация может быть причиной проблемы с загрузкой на плату на Arduino.

Для чего нужна функция void setup()

Скачивая программу, Arduino дает возможность нашему коду участвовать в инициализации системы. Для этого нам нужно сообщить микроконтроллеру команды, которые он будет выполнять при запуске, а затем забыть о них (т.е эти команды будут выполняться только один раз при запуске системы). И для этой самой цели в нашей с вами программе нам нужно выбрать блок, в котором будут храниться эти команды void setup (), а точнее пространство внутри фигурных скобок этой функции, является таким местом внутри скетча Ардуино.

Ошибка exit status 1 при компиляции для плат uno, mega и nano

И наиболее частым сообщением для пользователей, которое появляется в среде разработки, является exit 1. И это наиболее неудобно для отладки приложения, потому что здесь нужно учитывать почти ядро ​​системы, чтобы понять, в чем заключается злополучное зрелище.

В документации указано, что это сообщение указывает на то, что Arduino ide не запускается в требуемой конфигурации, но на самом деле существует еще дюжина случаев, когда вы увидите это сообщение. Однако на самом деле не забудьте проверить системный бит, IDE и посмотреть, какие библиотеки доступны для справки в данный момент.

Синтаксис void setup()

В этом примере слово setup — это имя функции. Именно так и нужно писать именно в этом регистре. Слово перед именем описывает тип возвращаемых данных. В этом случае подпрограмма не возвращает никаких данных, поэтому нам нужно указать слово void. Все команды должны быть заключены в фигурные скобки {}.

Не забудьте поставить подтяжки! Потеря хотя бы одной круглой скобки сразу сделает всю программу непонятной для arduino. Но даже не ставьте лишние скобки — это тоже приведет к ошибке.

Ошибки библиотек

Если при компиляции скетча Arduino произошла ошибка, но ни одно из вышеперечисленных сообщений не отображалось, можно смело искать ошибку в библиотеках MK. Это самая неприятная задача для большинства программистов, ведь приходится залезать в чужой код, а без этого не обойтись.

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

Ошибки компилятора Ардуино

Ранее последний стек действий упоминался при запуске кода через компилятор, а сейчас могут возникнуть самые страшные ошибки — ошибки в самой IDE. Здесь не может быть конкретного решения. Вам никто не запрещает зайти в самое сердце системы и самому там все проверить, но гораздо эффективнее будет вернуться к предыдущей версии программы или, наоборот, обновить.

Примеры void setup()

Чаще всего в пустой конфигурации указываются следующие инструкции:

  • pinMode с указанием номера и типа контакта. Эта инструкция определяет режим работы выводов ардуино.
  • Serial.begin с указанием скорости (чаще всего 9600). Эта инструкция инициализирует работу последовательного порта на указанной скорости.
  • Инструкция по подключению и инициализации различных объектов библиотек arduino. Например, servo.atach (6) сообщит библиотеке, что мы подключили сервопривод к выводу 9, и код библиотеки будет выполнять все последующие действия только с этим портом.
  • Инициализация глобальных переменных, если по какой-то причине это невозможно сделать при определении переменных в глобальной области видимости.
  • Задайте другие настройки и начальные значения для переменных и объектов.

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

Основные ошибки

Ошибка: «avrdude: stk500_recv(): programmer is not responding»

Посмотрим, что у нас за карта? Какой порт мы используем? Сообщите arduino о правильной карте и порте. Возможно, вы используете Nano, и указано Mega. Возможно, вы указали неправильный порт. Все это приводит к сообщению: «программист не отвечает».

Решение:

В Arduino IDE в меню «Сервис» выберите плату. В меню «Сервис → Последовательный порт» выберите порт.

Ошибка: «No such file or directory / exit status 1»

Включенной библиотеки нет в папке библиотек.

Решение:

Скачайте нужную библиотеку и скопируйте ее в папку с программой — например, C: Program Files Arduino libraries. Если есть библиотека, замените файлы в папке.


12-12-2020, 16:15
3 комментариев

Arduino не загружает скетч — одна из тех проблем, с которой часто сталкиваются как начинающие, так и «продвинутые» пользователи. Мы решили вам помочь и собрали основные варианты решения этой ошибки в одной информационной статье. Надеемся, она вам поможет.

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

  1. Программное обеспечение, т.е. Arduino IDE не может найти указанный файл. Выдается ошибка No such file or directory. Решить ее очень просто – следует перенести либо установить библиотеку в папку libraries – это важно (много раз об этом писали). Не забывайте затем перезагрузить ПО. Не рекомендуем выкладывать их в папку C:Program Files (x86)Arduinolibraries. Она при обновлении системы может быть очищена.
  2. Загрузка кодов зависает, выдается приблизительно такая ошибка: 

В этом случае решений может быть несколько. Для начала попробуйте проверить тип платы, которую вы выбрали. Если скетч создан для Nano, непременно переключите контроллер именно на него – стандартный UNO вам не подойдет. Второй шаг – проверяем выставленные параметры скорости (те же Уно и Нано функционируют в пределах 15200 бит). Прописать эти данные следует в конфигурациях приложения. Идем по такому пути:

  • Заходим в наше ПО, ищем папку hardwarearduinoavr > открываем файл boards.txt в текстовом формате, например, Блокноте на Windows.
  • Находим строку: 

В ней выставлены не те скоростные значения, что нам необходимы, но не спешите их менять – контроллеры бывают разные (как китайские, так и оригинальные). Лучше не удалять цифры, а добавить еще один микроконтроллер УНО. Заполняем файл:

uno2.name=Uno 57600
 
uno2.vid.0=0x2341
uno2.pid.0=0x0043
uno2.vid.1=0x2341
uno2.pid.1=0x0001
uno2.vid.2=0x2A03
uno2.pid.2=0x0043
uno2.vid.3=0x2341
uno2.pid.3=0x0243
 
uno2.upload.tool=avrdude
uno2.upload.protocol=arduino
uno2.upload.maximum_size=32256
uno2.upload.maximum_data_size=2048
uno2.upload.speed=57600
 
uno2.bootloader.tool=avrdude
uno2.bootloader.low_fuses=0xFF
uno2.bootloader.high_fuses=0xDE
uno2.bootloader.extended_fuses=0xFD
uno2.bootloader.unlock_bits=0x3F
uno2.bootloader.lock_bits=0x0F
uno2.bootloader.file=optiboot/optiboot_atmega328.hex
 
uno2.build.mcu=atmega328p
uno2.build.f_cpu=16000000L
uno2.build.board=AVR_UNO
uno2.build.core=arduino
uno2.build.variant=standard
 
##############################################################
 
nano2.name=Nano 57600
 
nano2.upload.tool=avrdude
nano2.upload.protocol=arduino
 
nano2.bootloader.tool=avrdude
nano2.bootloader.unlock_bits=0x3F
nano2.bootloader.lock_bits=0x0F
 
nano2.build.f_cpu=16000000L
nano2.build.board=AVR_NANO
nano2.build.core=arduino
nano2.build.variant=eightanaloginputs
 
## Arduino Nano w/ ATmega328P
## --------------------------
nano2.menu.cpu.atmega328=ATmega328P
 
nano2.menu.cpu.atmega328.upload.maximum_size=30720
nano2.menu.cpu.atmega328.upload.maximum_data_size=2048
nano2.menu.cpu.atmega328.upload.speed=57600
 
nano2.menu.cpu.atmega328.bootloader.low_fuses=0xFF
nano2.menu.cpu.atmega328.bootloader.high_fuses=0xDA
nano2.menu.cpu.atmega328.bootloader.extended_fuses=0xFD
nano2.menu.cpu.atmega328.bootloader.file=optiboot/optiboot_atmega328.hex

Теперь у нас 2 устройства, в идеале все должно заработать!

Как видите, если скетч не загружается в Ардуино, можно самостоятельно решить проблему и продолжать проектирование. На этом прощаемся с вами! Всем успешной компиляции и не забывайте следить за нашим интернет-сайтом!

Бывает, что пишешь программы для Ардуино, загружаешь их в память, и всё прекрасно работает. А потом вдруг — раз — и они больше не загружаются. А среда разработки при попытке загрузить скетч выдаёт ошибку: «arduino avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x30». Что такое? Неужели сгорела плата? Не торопитесь отчаиваться: возможно, ещё не всё потеряно. Давайте разбираться.

Инструкция по поиску причины ошибки Arduino «not in sync: resp=0x30»

Ардуино не программируется, хотя раньше всё работало. Попытка загрузить скетч в память заканчивается вот таким сообщением IDE: «not in sync: resp=0x30».

Ошибка "not in sync: resp=0x30" в IDE Arduino

Ошибка «not in sync: resp=0x30» в IDE Arduino

Для такого поведения возможны несколько причин:

  • по какой-то причине произошёл сбой драйвера;
  • неправильно выбран COM-порт;
  • где-то есть электрическая связь, которой быть не должно (короткое замыкание);
  • произошёл сбой загрузчика (bootloader) платы Arduino.

Давайте пройдёмся по всем пунктам этого списка, пока не устраним проблему.

1Причина 1 Сбой драйвера

Откроем диспетчер устройств Windows через меню Пуск Панель управления Оборудование и звук Диспетчер устройств. Есть более короткий вариант: нажимаем клавишу Windows на клавиатуре и, не отпуская её, нажимаем клавишу Pause. Откроется окно свойств системы, в котором с левой стороны есть ссылка на диспетчер устройств.

Находим и раскрываем в диспетчере раздел Порты (COM и LPT). Если драйвер установлен и работает корректно, никаких оверлейных значков типа вопросительного или восклицательного знака на пиктограмме устройства Ардуино быть не должно. Если такие значки имеются, значит, есть проблемы в работе драйвера. Если Arduino или устройства USB-Serial вообще нет в этом разделе диспетчера, значит драйвер даже не установлен. В любом из этих случаев драйвер необходимо установить (или переустановить).

В диспетчере устройств выбираем нашу плату Arduino (или неизвестное устройство, которое появляется при подключении платы Arduino к компьютеру), нажмём на него правой кнопкой мыши и в контекстном меню выберем пункт Обновить драйверы… (Update drivers…).

Arduino в диспетчере устройств

Arduino в диспетчере устройств Windows

Выбираем Выполнить поиск на этом компьютере и указываем путь к директории с драйвером для платы. Далее следуем указаниям мастера настройки нового оборудования.

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

2Причина 2 Неверно выбран COM-порт

Проверим, что правильно указали COM-порт в IDE Arduino. Проверить, какой порт присвоен системой нашей плате Ардуино можно в диспетчере устройств Windows. Платы Arduino находятся в разделе Порты (COM и LPT) и определяются обычно как устройства Arduino или USB-Serial.

В среде разработки Arduino идём в меню Инструменты Порт и убеждаемся, что указан верный порт. Если нет, указываем нужный.

Указываем COM-порт в IDE Arduino

Выбор COM-порта в IDE Arduino

3Причина 3 Замыкание или несанкционированное соединение

Если плата Arduino лежит на токопроводящей поверхности, есть риск, что где-то имеется короткое замыкание. Это может являться причиной ошибки в работе платы и, в частности, мешать нормальному процессу программирования. Проверьте, что плата находится на изолированной поверхности.

Также к этому типу причин я бы отнёс подключение несанкционированных проводов к выводам 0 и 1 платы Ардуино, которые являются портами RX и TX и используются в процессе загрузки скетча в память платы.

4Причина 4 Сбой загрузчика

Если ничего из перечисленного не помогло, попробуем ещё один вариант: перезапишем загрузчик платы (bootloader).

Загрузчик – это специальная управляющая программа для Arduino, которая исполняется при включении устройства и которая задаёт режим работы платы: либо переходит к исполнению программы из памяти Arduino, либо к процедуре программирования компьютером. Загрузчики для всех поддерживаемых плат Arduino хранятся в папке c IDE в поддиректории hardwarearduinoavr и представляют собой бинарные hex-файлы.

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

Схема подключения программатора к Arduino

Схема подключения программатора к Arduino

После подключения программатора в среде программирования Ардуино в меню Инструменты Программатор указываем тип нашего программатора. Например, USBasp. Теперь в том же меню Инструменты выбираем пункт Записать Загрузчик. Этот процесс не занимает много времени.

Если операция прошла успешно, IDE сообщит об этом. А плата Ардуино радостно замигает светодиодом на 13-ом выводе, т.к. в неё, кроме загрузчика, записан скетч по умолчанию – скетч мигания светодиодом Blink.

Если же после всех проделанных манипуляций плата не оживает, возможно, вы и правда сожгли микросхему. Мои соболезнования.

It probably isn’t bricked

I’ve got quite a few Arduinos, and over the last few years have only ever «bricked» one, and I think that was by zapping it with static electricity. Unfortunately that particular one had a SMD (surface mounted) processor chip, so it isn’t easy to try swapping it with another chip.

Stay calm, and try the following steps …


Example board

An «Arduino Uno» is not just one thing that might fail. It has multiple major components, and possibly only one has failed (if any). See this reference photograph:

Arduino Uno major components

Major components are:

  • Atmega16U2 processor — this handles the interface to the USB connection
  • Atmega328P processor — this is the «main» processor which has your sketch on it
  • Voltage regulator — this converts incoming power from the power jack to 5 V
  • Power LED (green) — marked «On»
  • Indicator LED (yellow) marked «L» — connected via an op-amp to digital pin 13
  • Rx and Tx LEDs (yellow) — these indicate if the USB chip (Atmega16U2) is receiving or transmitting

Note that the Rx and Tx LEDs are not connected directly to digital pins 0 and 1 on the board (marked Rx and Tx). They only illuminate if you are doing serial communications via USB, not if you have something (like a GPS) plugged directly into digital pins 0 and 1.

Also note that since the «L» LED is connected via an op-amp, it may illuminate if pin 13 is set to an input in your sketch. This is normal. It doesn’t mean that something is erroneously sending data.


Check the power

USB power

  • Plug the board into your computer with the USB cable and check that the green «On» LED lights up.

  • Use a multimeter and a couple of jumper leads to test between the 5V pin and the GND pin (arrowed at the bottom). You should get a reading of around 5.0 V (I got 5.04 V on mine).

(You can buy a cheap multimeter for around $10 if you don’t have one, but you are better off getting a better one for around $50 — check all the electronics web sites and stores.)

  • Also test between the 3.3 V pin and the GND pin — you should get 3.3 V.

If you do not get 5 V with the USB cable plugged in make sure the other end is connected to your computer. Also try a different cable.

Power jack

  • If you are using, or planning to use, the power jack (marked «power in» on the photo) disconnect the USB, and plug in a power supply — which should be 7 to 12 V DC with positive on the center pin.

  • Measure the 5 V and 3.3 V pins as above. You should still see the same voltages on them.

If you get 5 V with the USB connected, but not with the power supply then the voltage regulator (marked on the photo) is probably damaged. Or, possibly the power supply has failed. Try a different power supply to confirm which it is.


Check the power-on LED flash

If you have the Optiboot bootloader (the Uno normally ships with that) then if you press and release the Reset button, or unplug and plug the USB or power cable back in, the «L» LED should flash quickly 3 times. The «on» and «off» times are 50 ms each, the three flashes should be over within about 1/3 of a second.

If it doesn’t, you may have a problem with the bootloader, or the main processor chip (Atmega328P).


Try uploading a sketch

Important: If you are having trouble uploading sketches remove any connected devices (like shields). Also remove jumper wires plugged into the board sockets. In particular, there should be nothing plugged into digital pins 0 and 1 (Rx and Tx) because that will interfere with communicating with the uploading computer.

Choose one of the simple example sketches (eg. Blink) and try to upload it. This is what you should see:

  • The «L» LED should flash 3 times. This is because the main chip is being reset by a command from the uploading process.

  • The «Rx» LED should flash quickly. This is the instructions from the uploading process trying to activate the bootloader.

  • The «Tx» LED should flash quickly. This is the processor acknowledging the uploaded data.

You may see the above, even if the uploading process fails. This could be because the wrong board type is selected.

If only the «Rx» LED flashes, it could be because of a problem with the bootloader, or the main processor chip (Atmega328P). Someone is knocking, but no-one is at home!

Check the board type

If the LEDs flash, but you get a message like this:

avrdude: stk500_recv(): programmer is not responding

Check the board type:

Board type menu

If you have the wrong board type selected it will probably send the wrong uploading instructions, and time-out or otherwise fail. If you are like me and have different boards lying around it is easy to forget that the last upload you did was for a different board type.

Check the comm port

If the LEDs don’t flash at all, you may have the wrong comm port selected.

Check the comm port:

Comm port menu

Try a different PC / Mac if possible

Try your Arduino on a different PC/Mac if you have one to hand. This can narrow down whether or not you have an issue with the particular computer you have plugged it into, or computers in general.

Do a loopback test

  • Disconnect all shields and other wires
  • Remove the board from the power
  • Connect a jumper wire from RESET to GND (orange wire in photo)
  • Connect a jumper wire from Rx to Tx (white wire in photo)

Wiring:

Loopback test

  • Plug in the USB cable, and start up a terminal program — such as the Terminal Monitor in the Arduino IDE. Type something and send it (eg. hit Enter in the Terminal Monitor).
  • Everything you type should be echoed back.

If everything is echoed back: That confirms you have the right comm port, the USB cable is OK and the USB interface chip (Atmega16U2) is probably OK.

If nothing is echoed back, check:

  • You have the correct comm port.
  • Try a different cable. Some cheap USB cables only have power wires and not data wires.
  • Check the device driver for the Arduino is installed. You probably don’t need to do this if that board worked previously on this computer, but it can be worth doing if this is the first time you plugged this board into this computer.

Test the Atmega16U2 chip

If your board fails the loop-back test, and you are certain the USB cable is OK, then you can test the Atmega16U2 chip itself. There is an ICSP (In Circuit Serial Programming) header on the board, adjacent to the Atmega16U2 chip, and near the USB socket.

Disconnect the power first (unplug the USB cable and any power cable).

Then you can connect the ICSP header via 6 jumper wires to a known good Uno, as shown in the photo:

Test the Atmega16U2 chip

The pin-outs for the ICSP header are (from the top):

ICSP header

Pin 1 on the ICSP header near the Atmega16U2 chip is marked with a small white dot, near the «F» in «AREF». Pin 1 on the ICSP header near the ATmega328P chip is marked with a small white dot, below the «N» in «ON».

Connect up:

Good board         Target Uno

  MISO                MISO    (pin with dot - pin 1)
  VCC                 VCC
  SCK                 SCK
  MOSI                MOSI
  D10                 /RESET
  GND                 GND

Double-check your wiring.

Then on the «known good» board install the «Atmega_Board_Detector» sketch as described on the Atmega bootloader programmer page. The code is at GitHub — nickgammon/arduino_sketches. If you click the Download button on that page you will get a number of useful sketches. The one you want is called «Atmega_Board_Detector».

Once installed, open the serial monitor, set it to 115200 baud, and you should see something like this:

Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul  9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x94 0x89
Processor = ATmega16U2
Flash memory size = 16384 bytes.
LFuse = 0xEF
HFuse = 0xD9
EFuse = 0xF4
Lock byte = 0xCF
Clock calibration = 0x51
Bootloader in use: No
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 4096 bytes starting at 3000

Bootloader:

3000: 0x4B 0xC0 0x00 0x00 0x64 0xC0 0x00 0x00 0x62 0xC0 0x00 0x00 0x60 0xC0 0x00 0x00
3010: 0x5E 0xC0 0x00 0x00 0x5C 0xC0 0x00 0x00 0x5A 0xC0 0x00 0x00 0x58 0xC0 0x00 0x00
3020: 0x56 0xC0 0x00 0x00 0x54 0xC0 0x00 0x00 0x52 0xC0 0x00 0x00 0xEE 0xC4 0x00 0x00
...
3FE0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
3FF0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

MD5 sum of bootloader = 0xD8 0x8C 0x70 0x6D 0xFE 0x1F 0xDC 0x38 0x82 0x1E 0xCE 0xAE 0x23 0xB2 0xE6 0xE7
Bootloader name: Arduino-dfu-usbserial-atmega16u2-Uno-Rev3

First 256 bytes of program memory:

0: 0x90 0xC0 0x00 0x00 0xA9 0xC0 0x00 0x00 0xA7 0xC0 0x00 0x00 0xA5 0xC0 0x00 0x00
10: 0xA3 0xC0 0x00 0x00 0xA1 0xC0 0x00 0x00 0x9F 0xC0 0x00 0x00 0x9D 0xC0 0x00 0x00
20: 0x9B 0xC0 0x00 0x00 0x99 0xC0 0x00 0x00 0x97 0xC0 0x00 0x00 0x48 0xC4 0x00 0x00
30: 0x0C 0xC4 0x00 0x00 0x91 0xC0 0x00 0x00 0x8F 0xC0 0x00 0x00 0x8D 0xC0 0x00 0x00
...

However if you get a message like this:

"Failed to enter programming mode. Double-check wiring!"

That would appear to indicate that your ATmega16U2 is not working.


Test the ATmega328P chip

Disconnect the power from the «known good» Arduino Uno and rewire the ICSP jumpers as per this photo, to connect them to the «main» processor on your Uno:

Test the ATmega328P chip

The pin-outs for the ICSP header are (from the top):

ICSP header

Pin 1 on the ICSP header near the ATmega328P chip is marked with a small white dot, below the «N» in «ON».

The wiring is the same as before, except you are connecting to the other ICSP header — the one at the end of the board, furthest from the USB socket.

Good board       Target Uno

  MISO                MISO    (pin with dot - pin 1)
  VCC                 VCC
  SCK                 SCK
  MOSI                MOSI
  D10                 /RESET
  GND                 GND

Once connected, open the serial monitor, set it to 115200 baud, and you should see something like this:

Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul  9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 512 bytes starting at 7E00

Bootloader:

7E00: 0x11 0x24 0x84 0xB7 0x14 0xBE 0x81 0xFF 0xF0 0xD0 0x85 0xE0 0x80 0x93 0x81 0x00
7E10: 0x82 0xE0 0x80 0x93 0xC0 0x00 0x88 0xE1 0x80 0x93 0xC1 0x00 0x86 0xE0 0x80 0x93
...

MD5 sum of bootloader = 0xFB 0xF4 0x9B 0x7B 0x59 0x73 0x7F 0x65 0xE8 0xD0 0xF8 0xA5 0x08 0x12 0xE7 0x9F
Bootloader name: optiboot_atmega328

First 256 bytes of program memory:

0: 0x0C 0x94 0x35 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
10: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
20: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
30: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
...

In this case it confirms that the main processor is working, and has the Optiboot bootloader on it.


Things you can fix

Failed voltage regulator

This isn’t easy to replace, but it is only needed if you use the power jack. If you run from USB then it is not required. Alternatively you could arrange for a 4 to 5 V supply (eg. 3 x AA batteries) and connect them to the 5 V socket on the board directly.


Failed ATmega16U2 chip

This is only required for uploading sketches via the USB port, and serial debugging. It isn’t particularly easy to replace because it is a SMD (surface mounted device). However you can manage without it.

You can upload sketches via the ICSP header, if you purchase a ICSP programming device.

Examples of such devices plugged into the ICSP socket:

USBtinyISP

AVRISP

(Those photos were taken of a Ruggeduino, but the concept is the same).


You can also get an FTDI cable, like this:

Connect FTDI to Arduino

Connect it to your board’s serial ports like this:

FTDI cable

FTDI    Arduino Uno

GND       GND  (black wire on FTDI cable, blue jumper wire)
CTS       not connected
VCC       5V
TxD       D0 (RX)
RxD       D1 (TX)
RTS       To RESET with a 0.1 µF capacitor in series with it (green wire)

Now you can upload sketches directly to the main processor, bypassing the USB chip.


You can also use my Atmega chip stand-alone programmer to upload .hex files — this lets you copy the .hex file for a sketch onto an SD card, and then program the board via the ICSP header.


Failed ATmega328P chip

The main processor can be replaced fairly easily if it is mounted in a socket. Get a replacement chip from somewhere like Adafruit for around $US 6. Alternatively, try eBay. Try to get a chip which has the Optiboot bootloader already on it, to save hassle.

Carefully prise the existing chip out of the socket, and install the new one, taking note of the location of pin 1. Pin 1 has a notch on the chip, and its correct orientation is noted on the first photo in this post with a yellow dot (closest to the edge of the board). You will probably need to straighten the legs slightly. Hold the chip by the ends and gently push down onto a flat surface, like a desk, until the are pushed inwards a bit. Try to not touch the metal pins, you may zap them with static electricity.


ATmega328P responds but has no bootloader

I have a sketch at Atmega bootloader programmer which will replace the Optiboot bootloader. The wiring is the same as for the chip detector sketch. The code is at GitHub — nickgammon/arduino_sketches. If you click the Download button on that page you will get a number of useful sketches. The one you want is called «Atmega_Board_Programmer».

Install the sketch on your «known good» Uno, and connect it to the target board with the wiring shown earlier.

Test the ATmega328P chip

Open the Serial Monitor on your «good» Uno and you should see this:

Atmega chip programmer.
Written by Nick Gammon.
Version 1.35
Compiled on Jul  9 2015 at 15:06:58 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...

Type «U» for the Uno (Optiboot) loader.

Using Uno Optiboot 16 MHz loader.
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'Q' to quit, 'V' to verify, or 'G' to program the chip with the bootloader ...

Type «G» to program the chip.

You should see:

Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Done.
Programming mode off.
Type 'C' when ready to continue with another chip ...

This takes about one second. Now the bootloader is installed.


Watchdog timer problems

The watchdog timer (off by default) can be configured to reset the processor after a certain time. The intention is to recover from a «hang» for a processor deployed in the field. However if the timer is set for a short period (like 16 ms) then the processor can reset again before the bootloader has a chance to do anything.

The symptoms are that you cannot upload any new sketches. Some modern bootloaders (like Optiboot) take steps to stop this problem as one of the first things they do. However others do not.

This can be difficult to recover from, because once the sketch runs, you have the problem of it resetting, and if you have the problem you can’t replace the sketch. People often report that they have to burn a new bootloader to recover. However that is only because, as a side-effect, burning a bootloader erases the current sketch.

There is a way of recovering. Take these steps:

  • Power off the board completely (remove the USB cable).
  • Hold down the Reset button, and keep it held down (or, run a jumper wire from the RESET pin to the GND pin). This stops the problem sketch from starting, and thus activating the watchdog timer
  • Still holding down Reset, reconnect the USB cable.
  • Start uploading a sketch that does not have this problem (eg. Blink)
  • Once the IDE reports «Uploading» release the Reset button (or remove the jumper wire).
  • It should now upload OK — as the sketch which activated the watchdog timer never started.

Problems with the Mega2560 upload

I mention this here, even though this post is really targetting the Uno board, because it is quite common.

Some versions of the Mega2560 bootloader look for «!!!» in the incoming upload from the PC, and if they see that, drop into debugging mode. This causes the upload to fail.

Example code:

Serial.println ("Furnace overheating!!!");

Solutions:

  • Install a more recent bootloader. My «bootloader uploader» sketch mentioned earlier in this reply should install a bootloader that does not have that issue.

Or (more simply):

  • Do not use «!!!» in your sketch.

Problems uploading to the Leonardo / Micro / Esplora etc.

Boards with the ATmega32u4 as their main (and only) processor can be trickier to upload to. This is because the same chip has to handle uploads and also run your code.

There is a small window of opportunity, after the board is reset, when it looks for a new sketch to be uploaded. The technique for uploading to these boards is:

  • Compile your sketch without errors.
  • Start the upload
  • As soon as the IDE reports «Uploading» press and release the Reset button.

You only have a second or so to do this, before the old sketch starts running. Don’t be discouraged if you have to repeat this process a couple of times. That is normal.


References

  • Solving problems with uploading programs to your Arduino
  • Sketch to detect Atmega chip types
  • GitHub site with chip detector / bootloader programmer
  • Atmega bootloader programmer
  • Atmega chip stand-alone programmer to upload .hex files
  • Engbedded Atmel AVR® Fuse Calculator
  • Arduino Uno Rev3 pinouts photo

Понравилась статья? Поделить с друзьями:
  • Произошла ошибка при загрузке скетча arduino nano
  • Произошла ошибка пожалуйста попробуйте позднее стоп лист
  • Произошла ошибка при загрузке скетча arduino mega 2560
  • Произошла ошибка при загрузке ресурсов beholder на андроид
  • Произошла ошибка при загрузке мода calamity mod