Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату

Я не могу загрузить скетчи в Arduino Uno.

  • Неужели я "закирпичил" его?
  • Какие шаги надо предпринять, чтобы понять, что не так?
  • Что я могу сделать, чтобы это исправить?

, 👍105

Обсуждение

Для тех, кто задается вопросом, это не настоящий вопрос! Это скорее справочный вопрос. Сам вопрос специально задан довольно широко. Ответ, однако, очень подробен, и поэтому этот вопрос можно использовать в качестве справочного., @Paul

*Это скорее справочный вопрос.* Совершенно верно. Смотрите [Это нормально - задавать свои собственные Вопросы и отвечать на них](https://blog.stackexchange.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/)., @Nick Gammon

@Nick_Gammon Да. Но я чувствую, что вы как-то должны были это где-то заметить. На первый взгляд я был (слегка) раздражен тем фактом, что вопрос был настолько широким, и, казалось, вы не провели никакого исследования. Но когда я увидел твой ответ, все это обрело смысл. Кроме того, (когда вы можете), вы не должны забывать принимать свой собственный ответ, чтобы другие, кто пытается помочь, не начинали отвечать, изучать или комментировать вопросы по этому поводу (что на самом деле не помогло бы вам, так как вы уже нашли довольно хороший способ решить эту проблему)., @Paul

Спасибо за отзыв. Сначала я думал опубликовать вопрос с пометкой, что я собираюсь опубликовать свой собственный ответ, но затем я увидел флажок "ответьте на свой собственный вопрос", поэтому я поставил его вместо этого. Что касается того, чтобы принять это, то мне не разрешают в течение 20 часов. Мне показалось немного странным принять ваш собственный ответ, но, конечно, я могу это сделать, когда мне будет позволено. Я задал вопрос на Meta Arduino [Что такое канонический вопрос, собственно?](http://meta.arduinoprosto.ru/q/1269/what-is-a-canonical-question-exactly) попытаться разработать правильную процедуру, но не получил ответов., @Nick Gammon

@FuaZe и Ник Гэммон: В целом это кажется отличным, единственное предложение, которое я бы сделал, состояло бы в том, чтобы сделать тему более наводящей на мысль о том, что на самом деле представляет собой вопрос и ответ. Как бы то ни было, я думаю, что у меня могло возникнуть искушение отбросить это как слишком неопределенное. Возможно, название может быть "Как я могу устранить неполадки при неудачной загрузке?", @dlu

Что думают другие? "Устранение неполадок при неудачной загрузке" звучит для меня немного мягко. На форуме Arduino мы часто заставляем людей задаваться вопросом, не "заложили" ли они Arduino в название потока, а не (возможно, более точное) название: "У меня проблемы с загрузкой"., @Nick Gammon

Изменено название, чтобы включить в него "проблемы с загрузкой"., @Nick Gammon

Я знаю, что это старый вопрос, но, возможно, вы все еще можете мне помочь...Я следовал вашей процедуре устранения неполадок с тех пор, как не смог загрузить какие-либо скетчи на свою плату, и дошел до теста обратной связи. Однако, когда я пытаюсь открыть последовательный монитор, я получаю сообщение об ошибке "Ошибка при открытии последовательного порта 'COM2'". (Порт занят)", хотя COM2 должен быть правильным портом. Есть какие-нибудь предложения?, @Sam Albert

Просто решил это благодаря помощи на форумах Arduino; оказывается, это ошибка в версии 1.6.8 интегрированной среды разработки Arduino, и возврат к версии 1.6.7 сразу решил проблему., @Sam Albert

Также попробуйте часто задаваемые вопросы на странице продукта. Мой Arduino MKR Zero не был распознанным USB - устройством и требовал двойного нажатия кнопки сброса при подключении к компьютеру., @A. West


3 ответа


Лучший ответ:

139

Возможно, он не замурован

У меня довольно много Arduino, и за последние несколько лет я только один из них «замуровал», и я думаю, что это произошло из-за того, что он разрядился статическим электричеством. К сожалению, у этого процессора был чип SMD (поверхностный монтаж), поэтому заменить его другим чипом непросто.

Сохраняйте спокойствие и попробуйте выполнить следующие действия...


Пример платы

Arduino Uno — это не просто вещь, которая может выйти из строя. Он состоит из нескольких основных компонентов, и, возможно, только один из них вышел из строя (если вообще вышел из строя). См. эту контрольную фотографию:

Основные компоненты Arduino Uno

Основные компоненты:

  • Процессор Atmega16U2 — отвечает за интерфейс USB-подключения.
  • Процессор Atmega328P - это "основной" процессор, на котором находится ваш скетч
  • Регулятор напряжения – преобразует поступающее питание от разъема питания в 5 В.
  • Индикатор питания (зеленый) — помечен как "Вкл."
  • Светодиодный индикатор (желтый) с маркировкой «L» — подключен через операционный усилитель к цифровому контакту 13.
  • Светодиодные индикаторы Rx и Tx (желтые) показывают, что USB-чип (Atmega16U2) принимает или передает

Обратите внимание, что светодиоды Rx и Tx не подключены напрямую к цифровым контактам 0 и 1 на плате (обозначены как Rx и Tx). Они загораются, только если вы осуществляете последовательную связь через USB, а не если что-то (например, GPS) подключено непосредственно к цифровым контактам 0 и 1.

Также обратите внимание, что, поскольку светодиод "L" подключен через операционный усилитель, он может загореться, если в вашем скетче контакт 13 настроен на вход. Это нормально. Это не означает, что что-то ошибочно отправляет данные.


Проверьте питание

Питание через USB

  • Подключите плату к компьютеру с помощью USB-кабеля и убедитесь, что горит зеленый светодиод "Вкл".

  • Используйте мультиметр и пару перемычек для проверки между контактом 5V и контактом GND (стрелка внизу). Вы должны получить показание около 5,0 В (у меня 5,04 В).

(Вы можете купить недорогой мультиметр примерно за 10 долларов, если у вас его нет, но лучше приобрести более качественный мультиметр примерно за 50 долларов — проверьте все веб-сайты и магазины электроники.)

  • Также проверьте между контактом 3,3 В и контактом GND — вы должны получить 3,3 В.

Если вы не получаете 5 В при подключенном USB-кабеле, убедитесь, что другой конец подключен к компьютеру. Также попробуйте другой кабель.

Разъем питания

  • Если вы используете или планируете использовать разъем питания (обозначенный на фотографии как "питание"), отсоедините USB и подключите блок питания (от 7 до 12 В постоянного тока с положительным контактом). на центральном штифте.

  • Измерьте контакты 5 В и 3,3 В, как указано выше. Вы по-прежнему должны видеть на них то же напряжение.

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


Проверьте мигание светодиода при включении питания

Если у вас есть загрузчик Optiboot (обычно Uno поставляется с ним), то, если вы нажмете и отпустите кнопку сброса или отсоедините и снова подключите USB-кабель или кабель питания, светодиод «L» должен быстро мигнуть 3 раза. Время «включения» и «выключения» составляет 50 мс каждое, три вспышки должны пройти в течение примерно 1/3 секунды.

Если это не так, у вас может быть проблема с загрузчиком или микросхемой основного процессора (Atmega328P).


Попробуйте загрузить скетч

Важно! Если у вас возникли проблемы с загрузкой скетчей, отключите все подключенные устройства (например, экраны). Также снимите перемычки, вставленные в разъемы платы. В частности, к цифровым контактам 0 и 1 (Rx и Tx) не должно быть ничего подключено, поскольку это будет мешать обмену данными с загружающим компьютером.

Выберите один из простых примеров скетчей (например, Blink) и попробуйте загрузить его. Вот что вы должны увидеть:

  • Светодиод "L" должен мигнуть 3 раза. Это связано с тем, что основной чип сбрасывается командой из процесса загрузки.

  • Светодиод "Rx" должен быстро мигать. Это инструкции процесса загрузки, пытающегося активировать загрузчик.

  • Светодиод "Tx" должен быстро мигать. Это процессор, подтверждающий загруженные данные.

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

Если мигает только светодиод "Rx", это может быть связано с проблемой загрузчика или микросхемы основного процессора (Atmega328P). Кто-то стучит, а дома никого нет!

Проверьте тип платы

Если индикаторы мигают, но появляется следующее сообщение:

avrdude: stk500_recv(): programmer is not responding

Проверьте тип платы:

Меню типа платы

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

Проверьте порт связи

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

Проверьте порт связи:

Меню порта связи

Попробуйте другой ПК или Mac, если возможно

Попробуйте Arduino на другом ПК/Mac, если он у вас есть. Это поможет определить, есть ли у вас проблема с конкретным компьютером, к которому вы его подключили, или с компьютерами в целом.

Выполнить циклическую проверку

  • Отсоедините все экраны и другие провода.
  • Отключите плату от питания
  • Подключите перемычкой RESET к GND (оранжевый провод на фото)
  • Подключите перемычку от Rx к Tx (белый провод на фото)

Проводка:

Контурный тест

  • Подсоедините USB-кабель и запустите терминальную программу, например Terminal Monitor в Arduino IDE. Введите что-нибудь и отправьте (например, нажмите Enter в Terminal Monitor).
  • Все, что вы вводите, должно быть отражено в ответ.

Если все отображается эхом: это подтверждает, что у вас правильный порт связи, USB-кабель исправен, а микросхема интерфейса USB (Atmega16U2), вероятно, исправна.

Если ничего не возвращается, проверьте:

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

Протестируйте чип Atmega16U2

Если ваша плата не прошла тест обратной связи, и вы уверены, что USB-кабель исправен, вы можете протестировать сам чип Atmega16U2. На плате есть разъем ICSP (внутрисхемное последовательное программирование), рядом с чипом Atmega16U2 и рядом с разъемом USB.

Сначала отключите питание (отсоедините кабель USB и любой кабель питания).

Затем вы можете подключить разъем ICSP через 6 перемычек к заведомо исправному Uno, как показано на фото:

Протестируйте чип Atmega16U2

Распиновка заголовка ICSP (сверху):

Заголовок ICSP

Контакт 1 на разъеме ICSP рядом с микросхемой Atmega16U2 помечен маленькой белой точкой рядом с буквой "F" в слове "AREF". Контакт 1 на разъеме ICSP рядом с микросхемой ATmega328P отмечен маленькой белой точкой под буквой «N» в положении «ON».

Подключиться:

Good board         Target Uno

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

Перепроверьте проводку.

Затем на «заведомо исправной» плате установите скетч «Atmega_Board_Detector», как описано на странице программатора загрузчика Atmega. Код находится на GitHub — nickgammon/arduino_sketches. Если вы нажмете кнопку «Загрузить» на этой странице, вы получите ряд полезных скетчей. Тот, который вам нужен, называется «Atmega_Board_Detector».

После установки откройте последовательный монитор, установите для него скорость 115200 бод, и вы должны увидеть что-то вроде этого:

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
...

Однако, если вы получите такое сообщение:

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

Это может означать, что ваш ATmega16U2 не работает.


Протестируйте чип ATmega328P

Отключите питание от «заведомо исправного» Arduino Uno и пересоедините перемычки ICSP, как показано на этой фотографии, чтобы подключить их к «основному» процессору вашего Uno:

Проверить чип ATmega328P

Распиновка заголовка ICSP (сверху):

Заголовок ICSP

Контакт 1 на разъеме ICSP рядом с микросхемой ATmega328P помечен маленькой белой точкой под буквой "N" в слове "ON".

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

Good board       Target Uno

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

После подключения откройте последовательный монитор, установите для него скорость 115200 бод, и вы должны увидеть что-то вроде этого:

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
...

В этом случае это подтверждает, что основной процессор работает и на нем установлен загрузчик Optiboot.


Что можно исправить

Неисправность регулятора напряжения

Его непросто заменить, но он необходим только в том случае, если вы используете разъем питания. Если запускать с USB то не требуется. В качестве альтернативы вы можете организовать питание от 4 до 5 В (например, 3 батарейки типа АА) и подключить их напрямую к разъему 5 В на плате.


Неисправный чип ATmega16U2

Это необходимо только для загрузки скетчей через USB-порт и последовательной отладки. Его не особенно легко заменить, потому что это SMD (устройство, монтируемое на поверхность). Однако можно обойтись и без него.

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

Примеры таких устройств, подключенных к разъему ICSP:

USBtinyISP

AVRISP

(Эти фотографии были сделаны Ruggeduino, но концепция та же).


Вы также можете приобрести кабель FTDI, например:

Подключение FTDI к Arduino

Подключите его к последовательным портам вашей платы следующим образом:

Кабель FTDI

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)

Теперь вы можете загружать скетчи напрямую в главный процессор, минуя USB-чип.


Вы также можете использовать мой автономный программатор чипов Atmega для загрузки файлов .hex — это позволяет копировать файлы . hex для скетча на SD-карту, а затем запрограммируйте плату через заголовок ICSP.


Неисправный чип ATmega328P

Основной процессор можно довольно легко заменить, если он установлен в гнездо. Купите сменный чип где-нибудь, например Adafruit, примерно за 6 долларов. В качестве альтернативы попробуйте eBay. Попробуйте получить чип, на котором уже есть загрузчик Optiboot, чтобы избежать хлопот.

Осторожно извлеките существующую микросхему из разъема и установите новую, запомнив расположение контакта 1. На микросхеме контакта 1 есть выемка, и его правильная ориентация отмечена на первой фотографии в этом посте. с желтой точкой (ближайшей к краю платы). Возможно, вам придется немного выпрямить ноги. Держите чип за концы и аккуратно надавите на плоскую поверхность, например на стол, пока они не будут немного вдавлены внутрь. Старайтесь не прикасаться к металлическим штифтам, вы можете разрядить их статическим электричеством.


ATmega328P отвечает, но не имеет загрузчика

У меня есть скетч на программисте загрузчика Atmega, который заменит загрузчик Optiboot. Разводка такая же, как и для скетча чип-детектора. Код находится на GitHub — nickgammon/arduino_sketches. Если вы нажмете кнопку «Загрузить» на этой странице, вы получите ряд полезных скетчей. Тот, который вам нужен, называется «Atmega_Board_Programmer».

Установите скетч на свой "заведомо исправный" Uno и подключите его к целевой плате проводкой, показанной ранее.

Проверить чип ATmega328P

Откройте Serial Monitor на "хорошем" Uno, и вы должны увидеть это:

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 ...

Введите "U" для загрузчика Uno (Optiboot).

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 ...

Введите "G", чтобы запрограммировать чип.

Вы должны увидеть:

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 ...

Это занимает около одной секунды. Теперь загрузчик установлен.


Проблемы со сторожевым таймером

Сторожевой таймер (по умолчанию выключен) можно настроить на сброс процессора через определенное время. Намерение состоит в том, чтобы восстановиться после «зависания» процессора, развернутого в полевых условиях. Однако, если таймер установлен на короткий период (например, 16 мс), процессор может снова сбросить настройки до того, как загрузчик сможет что-либо сделать.

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

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

Есть есть способ восстановления. Выполните следующие действия:

  • Полностью выключите плату (отсоедините USB-кабель).
  • Нажмите и удерживайте кнопку сброса нажатой (или подключите перемычку от контакта RESET к контакту GND). Это останавливает запуск скетча проблемы и активирует сторожевой таймер.
  • Удерживая кнопку сброса, повторно подключите USB-кабель.
  • Начать загрузку скетча, у которого нет этой проблемы (например, Blink)
  • После того как среда IDE сообщит об отправке, отпустите кнопку сброса (или снимите перемычку).
  • Теперь загрузка должна пройти нормально, поскольку скетч, активировавший сторожевой таймер, так и не запустился.

Проблемы с загрузкой Mega2560

Я упоминаю об этом здесь, несмотря на то, что этот пост действительно нацелен на плату Uno, потому что она довольно распространена.

Некоторые версии загрузчика Mega2560 ищут "!!!" во входящей загрузке с ПК, и если они это увидят, перейдут в режим отладки. Это приводит к сбою загрузки.

Пример кода:

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

Решения:

  • Установите более новый загрузчик. Мой скетч «загрузчик загрузчика», упомянутый ранее в этом ответе, должен установить загрузчик, у которого нет этой проблемы.

Или (проще):

  • Не используйте "!!!" в вашем скетче.

Проблемы с загрузкой на Leonardo/Micro/Esplora и т. д.

Платы с ATmega32u4 в качестве основного (и единственного) процессора могут быть более сложными для загрузки. Это связано с тем, что один и тот же чип должен обрабатывать загрузку и запускать ваш код.

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

  • Скомпилируйте скетч без ошибок.
  • Начать загрузку
  • Как только среда IDE сообщит об отправке, нажмите и отпустите кнопку сброса.

На это у вас есть примерно секунда, прежде чем запустится старый скетч. Не расстраивайтесь, если вам придется повторить этот процесс пару раз. Это нормально.


Ссылки

  • Решение проблем с загрузкой программ на Arduino
  • Скетч для определения типов чипов Atmega
  • Сайт GitHub с детектором микросхем/программатором загрузчика
  • программатор загрузчика Atmega
  • Автономный программатор микросхем Atmega для загрузки файлов .hex
  • Калькулятор предохранителей Engbedded Atmel AVR®
  • Фото распиновки Arduino Uno Rev3
,

Ух ты. Это отличный отличный ответ, @rpax

Это прекрасный ответ, сэр., @Mert Gülsoy

"Если вы получаете 5 В с подключенным USB, но не с блоком питания, вероятно, поврежден регулятор напряжения (отмечен на фото). Или, возможно, вышел из строя блок питания. Попробуйте другой блок питания, чтобы убедиться, что это ." - почему это мешает вам загружать скетчи?, @user2813274

Вы совершенно правы, не будет. Однако чек-лист должен был быть общим чек-листом на случай неудач. В этом случае это было бы больше похоже на «Я могу загрузить скетч, но при развертывании в поле, с блоком питания (настенная бородавка) он не работает»., @Nick Gammon

Недавно у меня возникла проблема с новыми драйверами FTDI, которые «блокируют» китайские «FTDI-совместимые» (ну, можно сказать, имитации) чипы. Они устанавливают PID устройства на 0x0000, что делает драйверы недействительными. Вы можете изменить PID обратно с помощью инструмента M_PROG на FTDI или изменить драйверы (и настроить окна для разрешения непроверенных драйверов)., @Paul

Я думал, возмущение потребителей заставило их прекратить это делать?, @Nick Gammon

@Nick Gammon Я бы поставил после «Проверить порт связи», чтобы подключить Arduino к другому компьютеру, на котором работает Arduino IDE, если это возможно. Если Arduino обнаружен и работает на другом ПК, то все в порядке. Это может сэкономить время — если у вас несколько компьютеров или вы можете одолжить один — вместо того, чтобы повторять свой длинный ответ., @Dat Han Bag

Хорошая идея. Я добавил это., @Nick Gammon

Отличная работа, @Gammon. Вы ответили на многие вопросы, которые я и не думал задавать. Что касается кирпичных досок, единственный способ, которым я это сделал, — установить Nano на мои солнечные панели внутри белой коробки, где температура наружного воздуха превышала 100 F. Этот никогда не возвращался. Но в остальном Nano кажется очень терпимым. Итак, теперь у меня есть небольшой вентилятор, который включается, когда внутренняя температура DHT-22 в коробке превышает 90. С тех пор я не терял ни одной платы., @SDsolar

Что вы имеете в виду здесь «Обратите внимание, что светодиоды Rx и Tx не подключены напрямую к цифровым контактам 0 и 1 на плате (обозначены Rx и Tx). Они светятся только в том случае, если вы выполняете последовательную связь через USB, а не если у вас есть что-то (например, GPS), подключенный непосредственно к цифровым контактам 0 и 1». У меня есть модуль gsm/gps, подключенный к RX0 и RX1. Он также работал с модулем, подключенным к arduino, но как только командная строка arduino начала выдавать: avrdude: stk500_recv(): программатор не отвечает avrdude: stk500_getsync() попытка 1 из 10: не синхронизировано: resp=0x00 Ошибки, @RegarBoy

Я предлагаю вам опубликовать это как новый вопрос. Комментарии под ответами на самом деле не предназначены для сеанса вопросов/ответов., @Nick Gammon

Фантастический ответ, не может быть более полным., @MAXE

Я попробовал петлевой тест с моим Arduino Nano. Светодиоды TX/RX мигают, но на последовательном мониторе ничего не печатается. Вы можете помочь мне с этим? Также я не могу ничего загрузить., @Black Thunder

О «Проблемах с загрузкой на Leonardo/Micro/Esplora и т.д.» часть: я заблокировал Arduino Micro из-за того, что скетч вызывал cli() без сопоставления с sei(), что приводит к тому, что «USB-устройство не распознано» на ПК при подключении к USB-порту. Самый простой способ восстановить плату в этой ситуации — подключить внешний программатор по ICSP и перезаписать загрузчик (что сотрет скетч). Вероятно, также можно просто загрузить новый скетч с помощью внешнего программатора, но я не пробовал ., @LeFauve

@LeFauve Вы пробовали мое предложение удерживать нажатой кнопку «Сброс» ближе к концу моего поста?, @Nick Gammon

@NickGammon Да, я попробовал это первым, но между моментом, когда я отпускаю сброс, и моментом, когда я получаю сообщение «USB-устройство не распознано», проходит меньше одной секунды. На данный момент Arduino IDE даже не видит Arduino ни на одном порту, поэтому не может ничего на него загрузить., @LeFauve


16

По крайней мере - как я предполагаю, вы загружаете свой скетч через avrdude - пожалуйста, предоставьте дополнительную информацию о сбое загрузки (например, вывод загрузчика скетчей), чтобы люди здесь могли вам лучше помочь.

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

Пример остановки загрузки:

char* test = "This will stop the upload!!!";

См.раздел Проблема с кодом Google.

,

Хорошая мысль. Это относится в основном к Mega2560, но я признаю, что пропустил это. :), @Nick Gammon

Добавлен раздел, посвященный этой проблеме., @Nick Gammon


3

Я закирпичил 2x ATmega328P на плате Arduino Uno из-за статики (я думаю).

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

Самым простым решением является замена микроконтроллера. Вы можете купить новый ATmega328P DIP, запрограммированный с загрузчиком Arduino (например, этот от Adafruit), и вы готовы начать все сначала.

Кроме того, вы все равно можете запрограммировать ATmega328P с помощью программатора Atmel Ice или AVRISPmkII или с помощью другого Arduino в качестве программатора ICSP. Когда вы это сделаете, все, кроме вывода Tx, будет работать нормально.

,