При использовании ардуино в качестве ISP конденсатор требуется или нет?
Глядя на Arduino как ISP и загрузчики Arduino, говорится
Электролитический конденсатор емкостью 10 мкФ, подключенный к RESET и GND платы программирования необходим только для плат с интерфейс между микроконтроллером и USB компьютера, например Мега, Уно, Мини, Нано. Платы типа Leonardo, Esplora и Micro, с USB, напрямую управляемый микроконтроллером, не требует конденсатор.
На некоторых диаграммах Фритцинга показан электролитический конденсатор, подключенный между контактами RESET
и GND
:
Но он не отображается на всех изображениях на этой странице.
Он также не показан на этом изображении из программатора загрузчика Atmega Ника Гэммона (см. исходное изображение):
Итак, нужен ли конденсатор действительно при использовании Mega или Uno в качестве ISP, и если да, то почему именно?
Я задавался вопросом после того, как написал этот ответ на вопрос Как установить новую прошивку ATMEGA через контакты ISP? для платы управления 3D-принтером.
@Greenonline, 👍3
2 ответа
Лучший ответ:
Конденсатор предназначен для предотвращения 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 для вас? Твоя догадка так же хороша как и моя. Если нет, то конденсатор не нужен. Если да, то так и будет.
Сейчас все в таком беспорядке из-за слишком большого количества вариантов и комбинаций. Проще просто иметь конденсатор, так как он не остановит его работу, если он на самом деле не нужен в вашей конкретной конфигурации.
Если вы используете программатор Ника Гэммона, сигнал RESET на целевую плату поступает от программатора Arduino — с контакта 10. Прочтите его инструкции: https://www.gammon.com.au/bootloader
Вы модифицируете 6-контактный кабель, как показано на его веб-сайте.
- Программирование пользовательских Arduino Mega с Arduino Uno
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как получить уникальный идентификатор для всех плат Arduino?
- Как очистить буфер FIFO на MPU6050?
- Элегантное решение для обновления содержимого TFT-дисплея
- Считывание нескольких поворотных энкодеров
Комментарии не для расширенного обсуждения; этот разговор был [перемещен в чат](https://chat.stackexchange.com/rooms/82062/discussion-on-answer-by-majenko-when-using-an-arduino-as-an-isp-isp- капацито)., @Majenko