Как загрузить скетч без загрузчика, используя в качестве программатора другой ардуино?

bootloader arduino-as-isp

Примечание. Это справочный вопрос (но не стесняйтесь писать свои ответы!)


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

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

Я нашел несколько руководств в Интернете, но в большинстве из них упущены важные детали и они недостаточно конкретны.

Итак, как я могу загрузить скетч без загрузчика, используя в качестве программатора другую Arduino?

, 👍0

Обсуждение

запись в блоге 10-летней давности о другом стеке может быть здесь не так актуальна, как предполагалось. Конечно, SO хочет любой бесплатный контент, но пользователи? У меня нет проблем с этим, но вам, вероятно, следует сделать ваши «вопросы» более подходящими для обычного формата; для этого отсутствует часть «что вы пробовали», что делает это усилие больше похожим на ловлю очков, чем на полезную комбинацию вопросов и ответов. Ваша информация хорошо изложена, а ваши намерения хорошо продуманы, но вам, вероятно, следует уделить немного больше внимания правилам, условностям и ожиданиям. Если вы усложните вопрос, я сделаю УФ..., @dandavis

@dandavis Я расширил этот вопрос и другой. Я переписал их в более манере с просьбой о помощи и добавил вещи, которые могли быть опробованы целевой аудиторией вопросов. Хорошо ли они выглядят сейчас?, @glibg10b

@dandavis Справочные вопросы — это прекрасно. Мы ожидаем, что люди будут вносить свой вклад в сообщество, что, похоже, и делает glibg10b. Давайте попробуем поощрять новых участников., @Nick Gammon


1 ответ


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

3

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

Предпосылки

  • Плата, на которой будет выполняться ваш скетч
  • Плата, которая будет действовать как программатор (он же "ISP")
  • 7 проводов
  • Любой небольшой конденсатор

Шаги

Программирование программатора

Во-первых, вам необходимо загрузить скетч ArduinoISP в программатор. Вот как:

  1. В Arduino IDE нажмите Alt+F и откройте Примеры -> 11.ArduinoISP -> ArduinoISP.
  2. Подключите плату программатора (USB).
  3. Нажмите Alt+T и установите "Плата" своему программатору тип платы и "Порт" к последовательному порту вашей платы программатора.
  4. Нажмите Ctrl+U, чтобы загрузить скетч в программатор.

Соединение плат

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

  1. Отсоедините плату программатора. Это необходимо для предотвращения случайного короткого замыкания.
  2. Подключите контакты GND, 10, MOSI, MISO, SCK и 5V программатора к контактам GND, RESET, MOSI, MISO, SCK и 5V платы, на которой будет работать ваш скетч соответственно. Контакты MOSI, MISO и SCK соответствуют контактам 11, 12 и 13 соответственно на Uno и Nano. Обратитесь к техническому описанию вашей платы, если вы не уверены.
  3. Подключите конденсатор между контактами 5V и RESET на плате программатора. Этот заключается в том, чтобы предотвратить его автоматический сброс во время программирования.
  4. Подключите плату программатора. Вам никогда не придется подключать плату, которая запустит ваш скетч.

Загрузка скетча

Порядок этих шагов важен из-за ошибки в Arduino IDE.

  1. Нажмите Alt+T и установите "Плата" на плату, которая будет работать тип вашего скетча, "Порт" к последовательному порту вашей платы программатора и "Программатор" на «Arduino как ISP».
  2. Откройте скетч, который хотите загрузить.
  3. Нажмите Ctrl+Shift+U, чтобы загрузить скетч с помощью программатора.

Устранение неполадок

Если что-то пошло не так, нажмите Ctrl+, и включите подробные сведения "сборник" и "загрузить" и повторите шаг, который пошёл не так. Ищите эти сообщения об ошибках:

avrdude: stk500_recv(): программатор не отвечает

За этим следует что-то похожее на:

avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xe0

Удалите конденсатор перед загрузкой скетча на плату программатора.

avrdude: Ого! Недопустимая подпись устройства.

Прокрутите вверх и скопируйте строку, похожую на следующую:

...avrdude -C...avrdude.conf -v -V -p... -c... -P... -b... -Uflash:w:....hex:i

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

Кажется, загрузка прошла успешно, но мой скетч по-прежнему работает с тем же кодом!

Если плата, на которой работает тактовая частота ЦП вашего скетча, медленнее 1 МГц (например, sketch изменяет прескалер процессора), вам нужно изменить (1000000/6) в Скетч ArduinoISP на что-то более медленное и перезагрузите скетч на свой программатор.

,