Я не могу загрузить эскизы на Arduino Uno.
- Я "заложил" это?
- Какие шаги я могу предпринять, чтобы понять, что не так?
- Что я могу сделать, чтобы это исправить?
Я не могу загрузить эскизы на Arduino Uno.
Ответы:
У меня есть довольно много Arduinos, и за последние несколько лет только когда-либо "кирпичную" одну, и я думаю, что это было от удара электрическим током. К сожалению, этот конкретный чип имел поверхностный SMD-процессор, поэтому попробовать заменить его другим чипом нелегко.
Сохраняйте спокойствие и попробуйте следующие шаги ...
«Arduino Uno» - это не единственная вещь, которая может потерпеть неудачу. Он имеет несколько основных компонентов, и, возможно, только один из них вышел из строя (если есть). Смотрите эту справочную фотографию:
Основные компоненты:
Обратите внимание, что светодиоды Rx и Tx не подключены напрямую к цифровым контактам 0 и 1 на плате (помечены как Rx и Tx). Они загораются, только если вы осуществляете последовательную связь через USB , а не если у вас есть что-то (например, GPS), подключенное непосредственно к цифровым контактам 0 и 1.
Также обратите внимание, что, поскольку светодиод «L» подключен через операционный усилитель, он может загореться, если на выводе 13 установлен вход на вашем эскизе. Это нормально. Это не значит, что что-то ошибочно отправляет данные.
Подключите плату к компьютеру с помощью USB-кабеля и убедитесь, что зеленый светодиод «Вкл» горит.
Используйте мультиметр и пару соединительных проводов для проверки между выводом 5 В и выводом GND (показано стрелкой внизу). Вы должны получить около 5,0 В (у меня 5,04 В на моем).
(Вы можете купить дешевый мультиметр примерно за 10 долларов, если у вас его нет, но лучше получить лучший за 50 долларов - проверьте все веб-сайты и магазины электроники.)
Если вы не получаете 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
Проверьте тип платы:
Если вы выбрали неверный тип доски, он, вероятно, отправит неправильные инструкции по загрузке, и время ожидания истечет, либо произойдет сбой. Если вы похожи на меня и у вас разные доски, легко забыть, что последняя загрузка была для другого типа.
Если светодиоды вообще не мигают, возможно, вы выбрали неправильный коммуникационный порт.
Проверьте коммуникационный порт:
Попробуйте свой Arduino на другом ПК / Mac, если он у вас есть. Это может сузить, есть ли у вас проблемы с конкретным компьютером, к которому вы подключили его, или с компьютерами в целом.
Проводка:
Если все возвращается назад: это подтверждает, что у вас есть правильный коммуникационный порт, USB-кабель в порядке, и чип интерфейса USB (Atmega16U2), вероятно, в порядке.
Если ничего не возвращается, проверьте:
Если ваша плата не прошла проверку по шлейфу, и вы уверены, что USB-кабель исправен, вы можете протестировать сам чип Atmega16U2. На плате есть разъем ICSP (In Circuit Serial Programming), рядом с чипом Atmega16U2 и рядом с разъемом USB.
Сначала отключите питание (отсоедините кабель USB и любой кабель питания).
Затем вы можете подключить ICSP-заголовок через 6 перемычек к известному исправному Uno, как показано на фото:
Распиновка для заголовка 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 не работает.
Отключите питание от «известного хорошего» Arduino Uno и переподключите перемычки ICSP согласно этой фотографии, чтобы подключить их к «основному» процессору на Uno:
Распиновка для заголовка 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 В на плате напрямую.
Это требуется только для загрузки эскизов через порт USB и последовательной отладки. Его не так легко заменить, потому что это SMD (устройство поверхностного монтажа). Однако вы можете обойтись без этого.
Вы можете загружать эскизы через заголовок ICSP, если вы приобретаете устройство программирования ICSP.
Примеры таких устройств, подключенных к разъему ICSP:
(Эти фотографии были сделаны Ruggeduino, но концепция та же).
Вы также можете получить кабель 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.
Основной процессор можно легко заменить, если он установлен в разъем. Получите замену чипа от Adafruit примерно за 6 долларов США. Или попробуйте eBay. Попытайтесь получить чип, на котором уже есть загрузчик Optiboot, чтобы избежать проблем.
Осторожно вытолкните имеющуюся микросхему из гнезда и установите новую, отметив расположение контакта 1. На выводе 1 имеется метка на чипе, и его правильная ориентация отмечена на первой фотографии в этом сообщении желтым цветом. точка (ближайшая к краю доски). Вам, вероятно, нужно будет немного выпрямить ноги. Держите чип за концы и осторожно надавите на плоскую поверхность, например на стол, пока немного не вдавите внутрь. Старайтесь не трогать металлические штыри, вы можете поразить их статическим электричеством.
У меня есть набросок у программиста загрузчика Atmega, который заменит загрузчик Optiboot. Схема подключения такая же, как для эскиза чип-детектора. Код находится на GitHub - nickgammon / arduino_sketches . Если вы нажмете кнопку «Загрузить» на этой странице, вы получите ряд полезных набросков. Тот, который вы хотите, называется "Atmega_Board_Programmer".
Установите эскиз на своем «известном хорошем» Uno и подключите его к целевой плате с помощью проводки, показанной ранее.
Откройте 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) предпринимают шаги, чтобы остановить эту проблему как одну из первых вещей, которые они делают. Однако другие этого не делают.
Это может быть трудно исправить, поскольку после запуска эскиза у вас возникает проблема его сброса, и если у вас есть проблема, вы не можете заменить эскиз. Люди часто сообщают, что для восстановления необходимо записать новый загрузчик. Однако это только потому, что, как побочный эффект, запись загрузчика стирает текущий эскиз.
Там является способом восстановления. Сделайте эти шаги:
Я упоминаю об этом здесь, хотя этот пост действительно нацелен на доску Uno, потому что он довольно распространен.
Некоторые версии загрузчика Mega2560 выглядят как "!!!" во входящей загрузке с ПК, и если они это увидят, перейдите в режим отладки. Это приводит к ошибке загрузки.
Пример кода:
Serial.println ("Furnace overheating!!!");
Решения:
Или (проще):
Платы с ATmega32u4 в качестве основного (и единственного) процессора могут быть сложнее загрузить. Это потому, что один и тот же чип должен обрабатывать загрузки, а также запускать ваш код.
После сброса платы появляется небольшое окно возможностей, когда она ищет новый эскиз для загрузки. Техника загрузки на эти доски:
У вас есть только секунда или около того, чтобы сделать это, прежде чем старый эскиз начнет работать. Не расстраивайтесь, если вам придется повторить этот процесс пару раз. Это нормально.
По крайней мере - поскольку я предполагаю, что вы загружаете свой скетч через avrdude - пожалуйста, дайте больше информации о сбое загрузки (например, выводе загрузчика скетчей), чтобы люди могли помочь вам лучше.
В дополнение к великолепному ответу Ника Гаммона, пожалуйста, ищите восклицательные знаки в вашем эскизе. Если ваш эскиз содержит строку с 3 или более восклицательными знаками, загрузка не будет выполнена, поскольку старые версии загрузчика Arduino будут интерпретировать эти восклицательные знаки как другую функцию, и загрузка будет остановлена.
Пример для остановки загрузки:
char* test = "This will stop the upload!!!";
Смотрите вопрос Google Code .
Я установил 2x ATMega328P на моей плате Arduino Uno из-за статичности (я думаю).
Похоже, что статическое соединение погубило контакт TX, и поэтому программа не может быть загружена с помощью USB-кабеля.
Самое простое решение - заменить микроконтроллер. Вы можете купить новый DIP ATMega328P, запрограммированный с помощью загрузчика Arduino ( такого как этот от Adafruit ), и вы готовы вернуться снова.
Кроме того, вы все равно можете программировать ATMega328P с помощью программатора AVRISPmkII. Когда вы это сделаете, все, кроме контакта Tx, работают нормально.