Проблема с загрузкой Arduino Mega

Я сделал свою собственную версию Arduino Mega и столкнулся с некоторыми проблемами. Всякий раз, когда я пытаюсь загрузить любой скетч в Mega, я получаю следующее сообщение об ошибке:

avrdude: stk500v2 ReceiveMessage(): тайм-аут

Я могу нормально загружать данные на 16u2, а также на 2560, используя ICSP и скетч Nick Gammons Atmega_Board_Programmer. У меня выбрана правильная плата и COM-порт, а кабель, компьютер и порт USB (2.0) могут нормально загружаться на другие платы Arduino.

У меня были другие проблемы с платой, которые были решены, но эта проблема остается. Подробнее об этих проблемах см. в мой пост на форуме Arduino.

В настоящее время я предполагаю, что могут быть какие-то проблемы с линиями передачи между 16u2 и 2560. Вот изображение дорожек печатной платы. Кто-нибудь может просмотреть их, чтобы увидеть, есть ли проблемы с трассировкой?

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

, 👍-1

Обсуждение

Комментарии не для расширенного обсуждения; этот разговор был [перемещен в чат](https://chat.stackexchange.com/rooms/81204/discussion-on-question-by-bos1714-arduino-mega-upload-issue)., @Majenko


1 ответ


0

На данный момент проблема решена. Проблема заключалась в том, что развязывающий конденсатор на линии сброса рядом с 2560 был спроектирован как конденсатор емкостью 22 пФ, но я поставил конденсатор емкостью 100 нФ, что увеличивает постоянную времени в 5000 раз, что препятствует правильной работе схемы автоматического сброса. . Удаление 100 нФ и установка 22 пФ, похоже, решили проблему возможности загрузки только один раз после записи загрузчика.

Спасибо всем за поддержку.

,

Можете ли вы уточнить? Развязывающий конденсатор обычно находится между Vcc и Gnd, поэтому он не будет «на линии сброса». Конденсатор *последовательно* со сбросом (и обычно подключаемый к RTS на заголовке FTDI) должен нормально работать как 100 нФ. Если у вас действительно есть развязывающий конденсатор на Reset (между Reset и Gnd), то его не должно быть., @Nick Gammon

[Пример схемы](https://www.gammon.com.au/images/Wire_Wrapped_Atmega132_e.png), который всегда работал у меня (это Atmega328P, но это та же концепция)., @Nick Gammon

Извините за задержку. Для соединения сброса между 16u2 и 2560 у меня есть подтягивающий резистор 10 кОм на стороне 16u2, затем конденсатор 100 нФ последовательно от 16u2 к 2560, подтягивающий резистор 10 кОм на стороне 2560 и шунт 22 пФ. конденсатор (шунт - лучшее слово, чем развязка). Емкость шунтирующего конденсатора составляла 100 нФ, и это приводило к неправильной работе автоматического сброса., @bos1714

Какое бы слово вы ни использовали, вам не нужен этот конденсатор между сбросом и землей. Схема, на которую я ссылался выше, показывает **диод** между сбросом и Vcc, который должен подавлять любые непреднамеренные импульсы, которые могут перевести его в режим программирования высокого напряжения, но это, вероятно, не потребуется, если у вас нет проблем с его сбросом . ., @Nick Gammon

Так что есть некоторые проблемы. Я сделал три платы. Один из них работает правильно, два других нет. Я могу вручную запрограммировать каждый чип (16u2 и 2560) с помощью FLIP, Arduino в качестве интернет-провайдера и скетча программатора вашей платы. Схема одинакова на всех трех платах. Я проверил резонаторы каждого чипа, и они работают на частоте 16 МГц. Конденсатор, о котором идет речь, виноват? Конденсатор установлен на настоящих платах Mega, поэтому я позаботился о том, чтобы он был и у меня. Я также заметил, что когда я программирую скетч мигания для 2560 с помощью ArduinoISP, светодиод будет гореть в течение 1 с и гаснуть на 0,5 с., @bos1714

Хорошо, я понимаю, что вы имеете в виду. На схеме есть конденсатор 22 пФ на основной микросхеме, но не на Atmega16U2. На моей схеме я вижу, что PD7 на Atmega16U2 идет на сброс на Atmega2560 через конденсатор 100 нФ. Я бы больше сомневался в конденсаторе 100 нФ, чем в конденсаторе 22 пФ., @Nick Gammon

Правильно ли я думаю, что конденсатор серии 100 нФ должен обеспечивать только переход сигнала от низкого к высокому или от высокого к низкому от 16u2 к 2560, и что конденсатор со слишком низкой или слишком высокой емкостью может неблагоприятно повлиять на постоянную времени, вызывая 2560 для сброса до или после того, как данные будут готовы к отправке?, @bos1714

Какие данные? Его цель состоит в том, чтобы позволить RTS быть низким (и оставаться низким) с помощью интерфейса USB. Первоначально это активирует сброс, потому что он временно станет низким, но затем подтягивающий резистор на сбросе снова зарядит конденсатор, установив высокий уровень сброса и позволив микросхеме работать. Я не думаю, что значение особенно критично. Слишком низкий, и импульс сброса может быть слишком коротким. Слишком высокое, и данные загрузчика будут отправлены, пока процессор все еще сброшен. Тем не менее, протокол загрузчика должен обрабатывать что угодно, кроме вопиюще долгого времени., @Nick Gammon

Да, линия предназначена для управления автоматическим сбросом, и синхронизация RC-цепи может негативно повлиять на то, что загрузчик не запустится вовремя или закончится слишком быстро, но да, только с резкой разницей. Данные отправляются по линиям UART, но линия сброса позволяет сбросить 2560 и запустить загрузчик, который ищет данные. Если загрузчик завершается слишком быстро, 16u2 выдает ошибку тайм-аута ReceiveMessage, поскольку данные не принимаются, так как загрузчик на 2560 завершает работу со своим процессом (процессами)., @bos1714