Самодельный внутрисхемный программатор из конвертера USB-UART

Апрель 2017 г.

В дополнение к статье "Как прошить микроконтроллер ATtiny или ATmega без программатора" расскажу, как сделать и как использовать внутрисхемный программатор из дешёвого конвертера USB-UART.

1. Преимущества внутрисхемного программирования МК

Фото самодельного внутрисхемного программатора
Рис. 1. Фото самодельного внутрисхемного программатора.

Ранее я уже описывал во всех подробностях, как с помощью простенького и очень дешёвого конвертера USB-UART осуществить программирование микроконтроллера ATtiny или ATmega. Теперь вы узнаете, как усовершенствовать этот импровизированный программатор, чтобы можно было многократно перепрошивать МК, не выпаивая его из основной схемы.

Как и в прошлый раз, основой нашего программатора будет очень доступный преобразователь интерфейса USB-UART. Приобрести такой модуль стало возможно менее, чем за доллар, включая пересылку. Думаю, столь низкая цена объясняется в первую очередь тем, что подобные конвертеры не имеют многих входов и выходов, свойственных полноценному COM-порту. На разъём выводятся только сигналы TXD и RXD. Но если вы покупаете конвертер, не залитый сплошь пластиком, а в скромной термоусадочной оболочке, то всё, что вам нужно для получения недостающих входов/выходов - это владение паяльником. В результате получается полноценный конвертер USB-RS232TTL.

В статье "Как прошить микроконтроллер ATtiny или ATmega без программатора" я уже рассказывал, как приспособить подобный конвертер на роль программатора микроконтроллеров. Но тот способ удобен для разовой "заливки" программы в МК, и не очень годится для разработки нового устройства, когда программу приходится много раз переделывать, отлаживать, снова и снова записывая её в микроконтроллер.

В чём же тут разница? Если, допустим, вы решили собрать устройство по уже готовой схеме и у вас имеется готовая прошивка, то можно воспользоваться ранее предложенным способом. Для этого потребуется временно соединить проводками выводы микроконтроллера (желательно через резисторы) с определёнными входами и выходами конвертера USB-RS232TTL, записать в МК информацию из файла прошивки, затем отпаять временные проводки и установить МК в основную схему. Но если через какое-то время вы захотите обновить прошивку, придётся выпаивать микроконтроллер, заново соединять его с конвертером-программатором и, в общем, повторять те же действия. Перепайка микросхемы - занятие зачастую трудоёмкое. Кроме того всегда есть риск повредить выводы. Чтобы избежать лишних сложностей, иногда микроконтроллер не впаивают в схему, а устанавливают в панельку. Панелька же монтируется на плату при помощи пайки. При необходимости контроллер можно легко извлечь из панельки (впрочем, есть такие панельки, что вынуть из них микросхему бывает очень нелегко), перепрошить и заново установить в панельку. В этом случае программатор тоже снабжается панелькой.

Но есть и другой очень распространённый способ решения проблемы многократной перепрошивки, не требующий использования панелек под микросхемы - внутрисхемное программирование. В этом случае микроконтроллер впаивается в основную схему раз и навсегда, а его программирование выполняется через предназначенный специально для этого разъём. Если не касаться методов самопрограммирования МК, то данный способ основан на тех же принципах, что и программирование МК вне схемы. В данном случае также на время программирования необходимо обеспечить физическое соединение специальных выводов микроконтроллера с соответствующими входами и выходами программатора. Использование разъёма позволяет легко подключать и отключать внутрисхемный программатор по мере необходимости.

Но тут имеются и свои "подводные камни". Если у МК "ножек" не слишком много и вы не можете позволить себе "роскошь" отказаться от использования в основной схеме тех выводов, которые участвуют в программировании, то неизбежно встаёт вопрос о совместном использовании некоторых выводов, как в основной схеме, так и в целях программирования. При неудачном решении этого вопроса возможны конфликты между программатором и основной схемой.

2. Решение конфликтов между программатором и схемой

На что следует обращать внимание, чтобы избежать конфликта между программатором и основной схемой? Прежде всего, это проблема шунтирующих цепей. Необходимо убедиться, что выходы, как со стороны программатора, так и со стороны МК без труда справятся с той нагрузкой, которая сложится для них в режиме программирования. При этом важно проследить и за тем, чтобы основная схема не "ударилась в неадекват". То есть чтобы сигналы программатора не могли спровоцировать нежелательное поведение основной схемы, которое в каких-то случаях может закончиться даже выходом из строя отдельных её частей. Чаще всего наилучшей тактикой является использование в основной схеме потенциально конфликтного вывода МК в том же качестве вход/выход, какое предусмотрено для него в режиме программирования. То есть чтобы выход при программировании оставался выходом в обычном режиме, а вход - оставался входом. Но и тут возможна ситуация, когда выход со стороны программатора будет конфликтовать с каким-то выходом внутри основной схемы. Тогда потребуется обеспечить перевод конфликтующего выхода внутри основной схемы в высокоимпедансное состояние, или, как минимум, установить резистор в цепь конфликтующего выхода.

Рассматривая возможность шунтирования сигналов программатора цепями основной схемы, следует помнить также о ёмкостях и индуктивностях. Наличие, например, конденсатора между входом микроконтроллера и "землёй" может существенно испортить крутизну фронтов от программатора, что сделает программирование невозможным из-за сбоев или вынудит использовать низкую скорость программирования. А вот в цепи питания большая ёмкость будет только на пользу. Здесь можно не скупиться, так как это самый простой и эффективный способ борьбы с помехами по питанию. Хорошо, если конденсатор установлен максимально близко к выводам питания микроконтроллера.

Возможны и разные варианты организации питания в режиме программирования. Например, основное питание может быть отключено, а на микроконтроллер питание может подаваться от программатора. Если в схеме нет больших потребителей энергии, то достаточно соединить соответствующий контакт разъёма программирования с проводом питания основной схемы. Но если имеются элементы с большим потребляемым током, лучше предусмотреть их отсоединение от цепи питания на время программирования при питании от программатора. Что касается конвертеров USB-RS232TTL, то я бы не рекомендовал брать с их линии питания более чем 50 мА. Эта цифра может быть и больше, но тогда уже надо внимательнее смотреть, чтобы не получить всевозможные сбои по цепи питания.

3. Изготовление внутрисхемного программатора

Фото самодельного внутрисхемного программатора (нижняя сторона)
Рис. 2. Фото самодельного внутрисхемного программатора (вид с обратной стороны).
Общая схема соединения микроконтроллеров серий ATtiny и ATmega с конвертером порта USB-RS232TTL для программирования
Рис. 3. Общая схема соединения микроконтроллеров серий ATtiny и ATmega с конвертером порта USB-RS232TTL для программирования.

Чтобы использовать конвертер USB-UART в качестве внутрисхемного программатора, достаточно припаять к нему кабель, на конце которого имеется разъём с нужным количеством контактов. В моём случае разъём имеет шесть контактов, что обеспечивает подключение не только всех необходимых сигналов SPI, но и позволяет подавать на программируемый контроллер питающее напряжение от программатора. Естественно, в разрабатываемой схеме должна быть установлена ответная часть такого разъёма.

Тот разъём (несколько штырьков), который изначально был установлен на плате конвертера USB-UART, предварительно выпаян ввиду его бесполезности. Последовательно со всеми сигнальными проводами впаяны резисторы. Сопротивления резисторов 4,3К уменьшены до 1К (хотя это непринципиально), резистор 100 Ом оставлен с тем же номиналом. Схема всех соединений между конвертером и МК осталась без изменений. Программное обеспечение для этого способа прошивки МК подходит такое же, как и в указанной выше статье "Как прошить микроконтроллер ATtiny или ATmega без программатора".

Ссылки на архивы с необходимым программным обеспечением.
Скачать программу "Перпетуум М" (6 Мб)
Скачать скрипт - программатор и прошивки для музыкальной шкатулки (347 Кб)

В данной статье использован конвертер интерфейса на микросхеме PL2303. Но существуют аналогичные преобразователи и на других микросхемах. Например, в статье "Конвертер USB-UART на CH340G: дорабатываем до RS232TTL, тестируем, сравниваем" подробно описан подобный модуль на микросхеме CH340G.

Ещё об одном способе использования конвертеров USB-RS232TTL читайте в статье "Подключение и тестирование LCD 240RGBx320 c параллельным интерфейсом".

Если у вас есть вопросы или замечания по данной статье, пишите в гостевую книгу или на почту mail.ru (ящик jkit).