Как сделать свой вариант JDM-программатора для PIC-контроллеров

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

Пусть мы хотим программировать наш контроллер с компьютера, то есть нам нужен компьютер, программатор и контроллер, которые будут обмениваться между собой данными.

Структурная схема программатора

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

использование ног com-порта JDM программатором

Что на нашей структурной схеме представляет собой компьютер (что нам от него надо, применительно к нашей задаче)? В нашем случае компьютер — это программа + порт с которым она работает. Большинство программ для программирования контроллеров могут работать с разными портами и программаторами, и в зависимости от выбранного типа программатора будут использоваться разные порты и ноги порта. Обычно, в программе можно посмотреть какие ноги порта для чего используются. На рисунке слева показано как это выглядит, например, в программе WinPic800.

Поскольку мы хотим собрать схему, которая управляется как JDM-программатор, то в программе мы выбрали тип программатора JDM. Мы видим, что для программирования будет использоваться COM-порт, причём у этого порта будут использоваться следующие ноги: выход DTR — для посылки данных в контроллер, вход CTS — для приёма данных от контроллера, выход RTS — для тактирования, выход TXD — для управления питанием. Кроме того (этого нет в WinPIC800, но я это знаю, и поэтому скажу вам), некоторые программы для распознавания подключения программатора используют вход DSR, на который возвращают сигнал тактирования. Хотя многим программам вход DSR по барабану, но некоторые скажут, что программатор не подключен и откажутся программировать контроллер.

Отлично, с учётом этой информации, наша структурная схема будет выглядеть так:

структурная схема программатора для com-порта

Что ещё мы знаем про COM-порт? Мы знаем, что уровни сигналов на этом порту могут составлять до ±15В, обычно у живого порта составляют ±10В и могут быть значительно занижены вследствие различных причин. Кроме того, известно, что приёмник все сигналы выше +3В воспринимает как "0", а все сигналы ниже где-то +1В — как "1" (По крайней мере это касается приёмника популярной микросхемы GD75232, которая стоит в большинстве компьютеров). То есть входной сигнал не обязательно должен быть ±10В (конечно если всё делать по правилам, то нужно ±10В, но тогда придётся где-то взять напряжение отрицательной полярности). Ток выхода должен быть не более 20 мА, чтобы не спалить порт. Вход порта — высокоомный, поэтому входной ток очень незначительный.

Переходим к контроллеру. Для программирования контроллера используется 2 линии: DATA и CLOCK.

Во-первых, контроллер работает с TTL уровнями сигналов: "1" — это +5В, а "0" — это 0В. То есть программатор должен преобразовывать уровни сигналов ±10В в 0,+5В.

Во-вторых, линия данных — двунаправленная, то есть часть времени соответствующая нога контроллера работает как вход и считывает уровень сигнала с этой линии (принимает данные), а часть времени — как выход, тогда контроллер сам управляет уровнем сигнала на линии (посылает данные). Это важно, поскольку схема программатора должна исключить ситуацию, когда линия данных программатором установилась в высокий уровень, а контроллер взял и уронил эту линию в низкий уровень, иначе получится КЗ. Можно спалить и контроллер, и программатор. Кроме того, нужно исключить возможность возникновения такого КЗ и на линии CLOCK, поскольку после программирования контроллер может начать выполнять зашитую программу, в которой нога, используемая для приёма сигналов тактирования, может быть сконфигурирована как выход и притянута к нулю начавшей выполняться программой.

В-третьих, для программирования контроллеру необходимы: напряжение питания Vdd = +5В и напряжение программирования Vpp = +12,5В. Где вы их возьмёте — решать вам. Сможете организовать питание от порта, не перегрузив его при этом — хорошо, не сможете — подведите внешнее питание.

В-четвёртых, программатор должен обеспечить правильный алгоритм подачи напряжений для перехода в режим программирования. (Подобные алгоритмы для пик-контроллеров можно найти здесь). Пока этих шагов не сделано — на линиях DATA и CLOCK должен быть низкий уровень. Это нужно для того, чтобы при переходе в режим программирования указатель установился на начало памяти (на нулевой адрес), иначе программа может начать заливаться не с начала и не по тем адресам, если вообще начнёт заливаться.

С учётом всего сказанного выше, окончательно структурная схема будет выглядеть так:

Структурная схема программатора PIC-контроллеров

Элементы схемы, показанные пунктирной линией, а также элементы в скобках, могут отсутствовать или имеют альтернативу. Вот и всё, реализовать каждый из кусочков можно десятками и сотнями разных способов, соответственно, можно придумать огромное количество различных вариантов программаторов, которые будут работать как JDM. Пугаться не надо, на самом деле структурная схема на картинке выглядит страшнее, чем всё это в реальности, например, простейшая схема развязки — это всего лишь резисторы на линиях DATAOUT и CLOCK.

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

Схемы различных программаторов для PIC-ов, AVR-ов, микросхем памяти…

Добавить комментарий