Самодельный внутрисхемный программатор из конвертера USB-UART
Апрель 2017 г.
В дополнение к статье "Как прошить микроконтроллер ATtiny или ATmega без программатора" расскажу, как сделать и как использовать внутрисхемный программатор из дешёвого конвертера USB-UART.
1. Преимущества внутрисхемного программирования МК
Ранее я уже описывал во всех подробностях, как с помощью простенького и очень дешёвого конвертера USB-UART осуществить программирование микроконтроллера ATtiny или ATmega. Теперь вы узнаете, как усовершенствовать этот импровизированный программатор, чтобы можно было многократно перепрошивать МК, не выпаивая его из основной схемы.
Как и в прошлый раз, основой нашего программатора будет очень доступный преобразователь интерфейса USB-UART. Приобрести такой модуль стало возможно менее, чем за доллар, включая пересылку. Думаю, столь низкая цена объясняется в первую очередь тем, что подобные конвертеры не имеют многих входов и выходов, свойственных полноценному COM-порту. На разъём выводятся только сигналы TXD и RXD. Но если вы покупаете конвертер, не залитый сплошь пластиком, а в скромной термоусадочной оболочке, то всё, что вам нужно для получения недостающих входов/выходов - это владение паяльником. В результате получается полноценный конвертер USB-RS232TTL.
В статье "Как прошить микроконтроллер ATtiny или ATmega без программатора" я уже рассказывал, как приспособить подобный конвертер на роль программатора микроконтроллеров. Но тот способ удобен для разовой "заливки" программы в МК, и не очень годится для разработки нового устройства, когда программу приходится много раз переделывать, отлаживать, снова и снова записывая её в микроконтроллер.
В чём же тут разница? Если, допустим, вы решили собрать устройство по уже готовой схеме и у вас имеется готовая прошивка, то можно воспользоваться ранее предложенным способом. Для этого потребуется временно соединить проводками выводы микроконтроллера (желательно через резисторы) с определёнными входами и выходами конвертера USB-RS232TTL, записать в МК информацию из файла прошивки, затем отпаять временные проводки и установить МК в основную схему. Но если через какое-то время вы захотите обновить прошивку, придётся выпаивать микроконтроллер, заново соединять его с конвертером-программатором и, в общем, повторять те же действия. Перепайка микросхемы - занятие зачастую трудоёмкое. Кроме того всегда есть риск повредить выводы. Чтобы избежать лишних сложностей, иногда микроконтроллер не впаивают в схему, а устанавливают в панельку. Панелька же монтируется на плату при помощи пайки. При необходимости контроллер можно легко извлечь из панельки (впрочем, есть такие панельки, что вынуть из них микросхему бывает очень нелегко), перепрошить и заново установить в панельку. В этом случае программатор тоже снабжается панелькой.
Но есть и другой очень распространённый способ решения проблемы многократной перепрошивки, не требующий использования панелек под микросхемы - внутрисхемное программирование. В этом случае микроконтроллер впаивается в основную схему раз и навсегда, а его программирование выполняется через предназначенный специально для этого разъём. Если не касаться методов самопрограммирования МК, то данный способ основан на тех же принципах, что и программирование МК вне схемы. В данном случае также на время программирования необходимо обеспечить физическое соединение специальных выводов микроконтроллера с соответствующими входами и выходами программатора. Использование разъёма позволяет легко подключать и отключать внутрисхемный программатор по мере необходимости.
Но тут имеются и свои "подводные камни". Если у МК "ножек" не слишком много и вы не можете позволить себе "роскошь" отказаться от использования в основной схеме тех выводов, которые участвуют в программировании, то неизбежно встаёт вопрос о совместном использовании некоторых выводов, как в основной схеме, так и в целях программирования. При неудачном решении этого вопроса возможны конфликты между программатором и основной схемой.
2. Решение конфликтов между программатором и схемой
На что следует обращать внимание, чтобы избежать конфликта между программатором и основной схемой? Прежде всего, это проблема шунтирующих цепей. Необходимо убедиться, что выходы, как со стороны программатора, так и со стороны МК без труда справятся с той нагрузкой, которая сложится для них в режиме программирования. При этом важно проследить и за тем, чтобы основная схема не "ударилась в неадекват". То есть чтобы сигналы программатора не могли спровоцировать нежелательное поведение основной схемы, которое в каких-то случаях может закончиться даже выходом из строя отдельных её частей. Чаще всего наилучшей тактикой является использование в основной схеме потенциально конфликтного вывода МК в том же качестве вход/выход, какое предусмотрено для него в режиме программирования. То есть чтобы выход при программировании оставался выходом в обычном режиме, а вход - оставался входом. Но и тут возможна ситуация, когда выход со стороны программатора будет конфликтовать с каким-то выходом внутри основной схемы. Тогда потребуется обеспечить перевод конфликтующего выхода внутри основной схемы в высокоимпедансное состояние, или, как минимум, установить резистор в цепь конфликтующего выхода.
Рассматривая возможность шунтирования сигналов программатора цепями основной схемы, следует помнить также о ёмкостях и индуктивностях. Наличие, например, конденсатора между входом микроконтроллера и "землёй" может существенно испортить крутизну фронтов от программатора, что сделает программирование невозможным из-за сбоев или вынудит использовать низкую скорость программирования. А вот в цепи питания большая ёмкость будет только на пользу. Здесь можно не скупиться, так как это самый простой и эффективный способ борьбы с помехами по питанию. Хорошо, если конденсатор установлен максимально близко к выводам питания микроконтроллера.
Возможны и разные варианты организации питания в режиме программирования. Например, основное питание может быть отключено, а на микроконтроллер питание может подаваться от программатора. Если в схеме нет больших потребителей энергии, то достаточно соединить соответствующий контакт разъёма программирования с проводом питания основной схемы. Но если имеются элементы с большим потребляемым током, лучше предусмотреть их отсоединение от цепи питания на время программирования при питании от программатора. Что касается конвертеров USB-RS232TTL, то я бы не рекомендовал брать с их линии питания более чем 50 мА. Эта цифра может быть и больше, но тогда уже надо внимательнее смотреть, чтобы не получить всевозможные сбои по цепи питания.
3. Изготовление внутрисхемного программатора
Чтобы использовать конвертер 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).