При использовании ардуино в качестве ISP конденсатор требуется или нет?

Глядя на Arduino как ISP и загрузчики Arduino, говорится

Электролитический конденсатор емкостью 10 мкФ, подключенный к RESET и GND платы программирования необходим только для плат с интерфейс между микроконтроллером и USB компьютера, например Мега, Уно, Мини, Нано. Платы типа Leonardo, Esplora и Micro, с USB, напрямую управляемый микроконтроллером, не требует конденсатор.

На некоторых диаграммах Фритцинга показан электролитический конденсатор, подключенный между контактами RESET и GND:

Mega как ISP для Uno

Но он не отображается на всех изображениях на этой странице.

Он также не показан на этом изображении из программатора загрузчика Atmega Ника Гэммона (см. исходное изображение):

Uno программирует мега

Итак, нужен ли конденсатор действительно при использовании Mega или Uno в качестве ISP, и если да, то почему именно?


Я задавался вопросом после того, как написал этот ответ на вопрос Как установить новую прошивку ATMEGA через контакты ISP? для платы управления 3D-принтером.

, 👍3


2 ответа


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

3

Конденсатор предназначен для предотвращения Arduino (Mega на первом изображении выше) от сброса при открытии последовательного порта. Если эта плата сбрасывается, программирование завершается ошибкой.

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

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

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


Изменить:

Похоже, что вы используете не Arduino As ISP, а нечто, написанное Ником Гэммоном и выступающее в качестве автономного программатора. Правила для Arduino As ISP в этом случае не применяются. Поскольку вы не программируете через мастер-устройство Arduino (как в случае с Arduino As ISP), нет необходимости предотвращать сброс мастер-устройства.


Вот небольшая история о системе автоматического сброса:

Изначально, когда Arduino использовала FT232, сигнал DRT надежно автоматически сбрасывал его. Операционная система (все операционные системы) автоматически выставляла DTR при открытии порта, и все было в порядке.

Затем ни с того ни с сего компания Future Tech, никому не сказав, удалила это автоматическое подтверждение DTR из драйвера FT232 для Windows. Поскольку Windows не управляет DTR за вас, а оставляет это на усмотрение драйвера или программного обеспечения (а все другие операционные системы автоматически контролируют DTR за вас — Windows должна делать противоположное всем остальным — это в их компетенции...!) внезапно платы перестали нормально сбрасываться для программирования.

Поэтому Arduino добавила специальный код сброса в IDE, чтобы обойти эту проблему (что интересно: если вы посмотрите на вывод DTR в Linux, вы увидите, что он несколько раз утверждается при программировании — и ОС, и IDE переключают его).

Но затем Arduino перешла на чип ATmega8U2 (а позже и на ATmega16U2), который использует стандартный CDC/ACM вместо пользовательского драйвера FT232. Теперь автоматическое утверждение DTR снова работало, но они сохранили ручное утверждение в IDE, чтобы справиться со старыми платами в Windows.

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

Поэтому, если у вас есть Arduino на базе FT232 и вы работаете под управлением Windows, я думаю, конденсатор не нужен, так как DTR не будет утверждаться ОС.

Однако в Linux и OS X, независимо от микросхемы USB, вам понадобится конденсатор, так как он всегда будет устанавливать DTR.

Но затем пришел Китай и запустил в производство CH340G. Теперь у нас есть третий вариант, с хитрыми драйверами неизвестно откуда. И кто имеет хоть малейшее представление о том, что они делают? Они утверждают DTR для вас? Твоя догадка так же хороша как и моя. Если нет, то конденсатор не нужен. Если да, то так и будет.

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

,

Комментарии не для расширенного обсуждения; этот разговор был [перемещен в чат](https://chat.stackexchange.com/rooms/82062/discussion-on-answer-by-majenko-when-using-an-arduino-as-an-isp-isp- капацито)., @Majenko


2

Если вы используете программатор Ника Гэммона, сигнал RESET на целевую плату поступает от программатора Arduino — с контакта 10. Прочтите его инструкции: https://www.gammon.com.au/bootloader

Вы модифицируете 6-контактный кабель, как показано на его веб-сайте.Обрежьте провод 5 и подключите к контакту 10 программатора.

,