Для начала, очень советую, на контроллер, с которым вы работаете, скачать описание. Оно всегда должно быть у вас под рукой!

Позволю себе сказать, что все контроллеры PIC — это промышленные контроллеры, и это наделяет их интересными возможностями. Самая главная из них — это «программирование в плате» по 2 проводам, на буржуйском это называется «ICSP». То есть производитель может выпустить уже готовые платы с уже запаянными контроллерами в них, а прошивку заливать непосредственно перед отправкой готового устройства конечному потребителю. В промышленных масштабах это очень удобная и нужная вещь.

Примеры ICSP разъёмов на платах

Родной программатор для PIC был доступен только второй версии и стоил порядка 50 долларов, что полностью у меня отбило желание его покупать.

В интернет я нашёл самый простой программатор, буквально на паре резисторов, но никто не сомневался, что он работать не будет, время было потрачено напрасно. Дальнейшие свои изыскания я опущу, как и выбор самого прошивальщика, поэтому с вами просто поделюсь своей модифицированной версией JDM-программатора и программой PICPgm Programmer.

JDM -программатор

Схему эту разработал Jens Dyekjær Madsen (Йенс Дайекьер Мэдсен) ещё в далёком 2004 году, основные её достоинства — она не требует дополнительного питания и является «высоковольтным» программатором. Собственно, моя схема:

Всё уместилось на макетной односторонней плате размерами 25 x 30 мм.

Для того, чтобы с ним работать, нам потребуется специальное программное обеспечение, PICPgm Programmer (скачать)

Перемычка (Vpp 9v) нужна для использования с контроллерами, у которых напряжение программирования имеет соответствующее значение.

Различие «высоковольтный» или «низковольтный» программатор

Хоть интерфейс ICSP и называется «двухпроводной», в реальности ему необходимо 5 проводов:

  1. Напряжение программирования;
  2. Напряжение питания;
  3. Общий;
  4. Данные;
  5. Тактировка.

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

Раньше напряжение программирования было около 13 вольт (так скажем, 12 и больше, но лучше, чтобы было 13 и даже чуть-чуть больше), но современные контроллеры уже не подчиняются этому правилу. Кстати, рекомендую скачать на будущее таблицу и держать её под рукой (отсюда).

Как показывает практика, убить микроконтроллер — очень не просто. Конечно, лучше не рисковать, и СНАЧАЛА посмотреть таблицу напряжений, и только потом что-то куда-то подключать. На моей практике, контроллер просто не определялся в программе. Даже после перепутанной полярности питания контроллер продолжил работать. Ну и вообще из разряда баек, один знакомый рассказывал, что перепутал входы и выходы, контроллер замкнулся сам на себя, нагрелся до такого состояния, что из платы выпаялся, но даже после этого остался рабочим.

Принцип работы программатора JDM

Самое важное — JDM работает исключительно на физическом COM-порту, имеющий настоящие уровни от +10 вольт до -10 вольт. Имеет ток для нормальной работы с контроллером, но недостаточным для питания всей платы. Программа PICPgm имеет замечательную функцию автоматического определения программатора и контроллера, лично по моему опыту контроллер не определялся только в случае лично моей вины.

Так как уровни у COM-порта могут быть от +10 до -10 вольт, то +5 вольт программатора — это «минус» порта, или корпус всего компьютера, это надо учитывать, чтобы не было беды. Во время работы программатора, когда уровни COM меняются с положительного в отрицательный, на конденсаторах собираются необходимые напряжения через диоды и стабилитроны. Для режима программирования открываются оба резистора Q1 и Q3, подавая напряжения питания и программирования на контроллер, узел выполненный на транзисторе Q2 — это согласующее устройство для передачи и чтения данных между компьютером и контроллером. Тактирующие импульсы подаются напрямую к контроллеру, и для стабилизации уровней подтянуты диодами.

Если транзисторы Q1 и Q3 работают просто как ключи, то могут быть заменены на то, что есть под рукой, к примеру на КТ3102. Q2, к сожалению, должен быть именно BC547B и резистор R2 должен быть именно полтора килоома. Наш КТ3102 хоть и имеет аналогичные выводы, но имеет более низкий коэффициент передачи, и схема работать не будет, или будет очень страшно глючить. Коэффициент передачи у КТ3102 составляет около 140, у BC547 — около 500.

Предложенная схема правильная и рабочая, собиралась мной не один раз, если что-то не работает, нужно искать ошибки в схеме. Самый последний раз я не доглядел и не припаях 5 вывод COM-порта, нашёл это только пару часов спустя. Но, ничего не сгорело, это хорошо.

Контакты ICSP

Производитель не всегда соблюдает «правильную» последовательность и соблюдает рекомендации. В идеале на плате ICSP должен выглядеть так:

Но одно дело — рекомендовано, другое — реализовано. Очень часто отсутствуют диоды D1 и D2, один раз даже встретил перепутанные Data и Clock, поэтому лучше несколько раз проверить, а лучше — прозвонить тестером. Кстати, серию статей начинал с ИБП «Скат», так вот там мне повезло, всё было выполнено как надо и моё первое знакомство было только в поисках и сборке программатора.

Подключаем программатор, в программе переходим на вкладку «Log», нажимаем кнопочку микросхемки с вопросиком и ждём… если мы всё сделали правильно, то в ответ должны получить нечто следующее:

Поздравляю, у нас всё получилось!

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

Включите изображения, чтобы увидеть вопрос *