Простой jdm программатор для pic микроконтроллеров CAVR.ru
Рассказать в:Быстро собрать понравившуюся схему на микроконтроллере для многих радиолюбителей — не проблема. Но многие начинающие работать с микроконтроллерами сталкиваются с вопросом — как его запрограммировать. Одним из самых простых вариантов программаторов является JDM программатор.
Программа — программатор ProgCode v 1.0Эта программа работает в WindowsXP. Позволяет программировать PIC контроллеры среднего семейства(PIC16Fxxx) через COM порт компьютера. Индикатор подключения программатора(в правом верхнем углу окна) при отсутствии программатора на выбранном в настройках порту окрашивается в красный цвет. Если программатор подключен — программа обнаруживает его и индикатор в правом верхнем углу принимает вид, который показан на рисунке 1. В левой части окна программы расположена панель управления. Эту панель можно свернуть нажав на кнопку в панели инструментов или, кликнув по левому краю окна ( это удобно, когда окно программы развёрнуто во весь экран ).
Если в программу загружается HEX файл, то желательно перед этим выбрать в списке контроллеров тот МК, для которого расчитана загружаемая прошивка. Если этого не сделать, то файл, расчитанный на микроконтроллер с памятью большего размера чем выбран в списке, будет обрезан и части программы потеряна — при таком варианте загрузки файла выводится предупреждение.
Если этого не произошло, то выбрать нужный контроллер можно и после загрузки файла в программу.
Формат файлов SFRВ программаторе ProgCode поддержана работа с собственным форматом файлов. Эти файлы имеют расширение .SFR и позволяют хранить дополнительную информацию о программе, предназначенной для микроконтроллера. В таком файле сохраняется информация о типе микроконтроллера. Это позволяет при загрузке файла формата SFR не беспокоится о предварительном выборе типа МК в настройках.
Настройки порта и протокола при подключении программатораПосле установки программы — по умолчанию выставлены все настройки, которые необходимы для работы программатора со схемой JDM, приведённой на этой странице.
Инверсия сигнала в приведённой схеме нужна только для выхода OutData, так как в этой цепи сигнал инвертирован согласующим транзистором. На всех остальных выводах инверсия отключена.
Задержка импульса может быть равна 0. Её регулировка предусмотрена для «особо трудных» экземпляров контроллеров, которые не удаётся прошить. То же самое относится и к надбавке к паузе при записи — по умолчанию она нулевая. Если увеличить значения этих настроек, время программирования контроллера значительно увеличится.
Галочка «проверка при записи» должна быть выставлена, если вам нужно «на лету» проверить всё что записывается в микроконтроллер на правильность и соответствие исходному файлу. Если эту галочку снять проверка не производится вообще и сообщений об ошибках не будет, даже если такие ошибки в реальности будут присутствовать.
Выбор скорости порта — скорость может быть любой. Для JDM программатора этот параметр не имеет значения.
В WindowsXP применяется буферизирование передаваемой через порты COM информации. Это так называемые буфера FIFO. Чтобы избежать ошибок при программировании через JDM этот механизм необходимо отключить. Сделать это можно в диспетчере устройств Windows.
Заходим в панель управления, затем:
Администрирование — управление компьютером — диспетчер устройств
Затем выбираем порт, на который подключен JDM программатор(например COM1) — смотрим свойства — вкладка параметры порта — дополнительно. И снимаем галочку на пункте «Использовать буферы FIFO»
Рисунок — Настройка COM порта для работы с JDM программатором
После этого перезагружаем компьютер.
Обозреватель локальных проектовКроме непосредственно программирования контроллеров в программе реализован удобный обозреватель проектов на МК, находящихся как на локальных папках компьютера, так и в интернете. Сделано это для удобства работы. Нередко нужные проекты лежат в разных папках, и приходится тратить время на то, чтобы добраться до нужной дирректории, чтобы просмотреть проект. Здесь нужные папки легко добавить в список папок и просматривать любой проект двумя-тремя кликами мышки.
Любой файл при двойном клике по нему в панели обозревателя откроется в самой программе — это относится к рисункам, html файлам, doc, rtf, djvu(при установленных плагинах), pdf, txt, asm. Файл возможно так-же открыть двойным кликом в обозревателе с помощью внешней программы, установленной на компьютере. Для этого расширение нужного типа файлов необходимо прописать в списке «Ассоциации файлов». Если путь к открывающей программе не указывать — Windows откроет файл в программе по умолчанию(это удобно для открытия архивов, которые не всегда однозначно открываются). Если путь к открывающей программе указан в списке — файл откроется в указанной программе. Удобно просматривать таким образом файлы типа SPL, LAY, DSN.
Рисунок (скриншот обозревателя программы ProgCode v1.0 )
Вот так выглядит окно с настройками ассоциаций файлов:
Обозреватель проектов в интернетеОбозреватель проектов в интернете так-же как и локальный обозрватель проектов позволяет быстро перейти на нужный сайт в интернете парой кликов, просмотреть проект и при необходимости сразу прошить программу в МК.
При обзоре проектов в интернете если на странице проекта есть ссылка на файл с расширением SFR(это формат файлов программы ProgCode), то такой файл при клике по нему откроется в новой вкладке программы и сразу готов к прошивке в микроконтроллер.
Список ссылок можно редактировать воспользовавшись кнопкой «Изменить». При этом откроется окно редактирования списка ссылок:
Описание процесса программирования микросхемБольшинство современных микросхем содержит флэш-память, которая программируется посредством протокола I2C или подобных протоколов.
Перезаписываемая память есть в PIC , AVR и других контроллерах, микросхемах памяти типа 24Cxx, и подобных им, различных картах памяти типа MMC и SD, обычных флэш USB картах, которые подключаются к компьютеру через USB разъём.Рассмотрим запись информации во флэш память микроконтроллера PIC16F628AЕсть 2 линии DATA и CLOCK, по которым передаётся информация. Линия CLOCK служит для подачи тактовых импульсов, а линия DATA для передачи информации.
Один бит для контроллера – маловато. Он ждёт вдогонку ещё пять, чтобы воспринять эту посылку из 6-ти бит как команду. Контроллеру очень нравятся команды, а состоять они должны именно из 6-ти бит – такова уж природа у PIC16.
«LoadDataForProgramMemory» 000010 — Загрузка данных в память программ
«LoadDataForDataMemory» — 000011 — Загрузка данных в память данных(EEPROM)
«IncrementAddress» 000110 — Увеличение адреса PC МК
«ReadDataFromDataMemory» 000101 — Чтение данных из памяти данных(EEPROM)
«BeginProgrammingOnlyCycle» 011000 — Начать цикл программирования
«BulkEraseProgramMemory» 001001 — Полное стирание памяти программ
«BulkEraseDataMemory» 001011 — Полное стирание памяти данных(EEPROM)
«BeginEraseProgrammingCycle» 001000 — Начать цикл программированияРеагирует контроллер на эти команды по-разному. По-разному после выдачи команды нужно и продолжать с ним разговор.
Для того чтобы начать полноценный процесс программирования необходимо ещё подать напряжение 12 вольт на вывод MCLR контроллера, после этого подать на него напряжение питания. Именно в такой последовательности подачи напряжений есть определённый смысл. После подачи питания, если PIC сконфигурирован на работу от внутреннего RC генератора, он может начать выполнение собственной программы, что при программировании вещь недопустимая, так как неизбежен сбой.
При записи информации во флэш память программ МК после команды»LoadDataForProgramMemory» 000010 — Загрузка данных в память программнеобходимо отправить в контроллер сами данные — 16 бит,
которые выглядят так: “0xxxxxxxxxxxxxx0”.Крестики в этом слове – это сами данные, а нули по краям отправляются как обрамление – это стандарт для PIC16. Значащих битов в слове всего 14. У этой серии контроллеров 14-ти битный формат представления команд.
Так как нашей целью является запись слова в память программ МК, следующей командой должна быть команда
«BeginEraseProgrammingCycle» 001000 — Начать цикл программированияПолучив её, контроллер отключается от внешнего мира на 6 миллисекунд, которые нужны ему, чтобы завершить процесс записи.Сигналы на выводах микроконтроллера формируются компьютером при помощи специальных программ — программаторов. Для передачи сигнала могут служить порты COM, LPT или USB. C JDM программатором работают такие программы как PonyProg, IsProg, WinPic800.
Рисунок (схема JDM программатора )
Одним из вопросов при подключении программатора к компьютеру является вопрос — как обеспечить селективную развязку. Чтобы в случае неисправности в схеме избежать повреждения COM порта. В некоторых схемах применяется микросхема MAX232, которая обеспечивает селективную развязку и согласует уровни сигналов. В этой схеме вопрос решён проще — с помощью применения батарейного питания. Уровень сигнала, поступающего от компьютера ограничивается стабилитронами VD1, VD2, и VD3. Несмотря на простоту схемы JDM программатора с его помощью можно запрограммировать большинство типов PIC микроконтроллеров.Перемычка между выводами COM6(DSR) и COM7(RTS) предназначена для того, чтобы программа могла определить, что программатор подключен к компьютеру.
Поключение выходов программатора к конкретному МК зависит от типа МК. Часто на плату программатора монтируют несколько панелек, которые расчитаны на определённый тип контроллеров.
В таблице приведено назначение ножек некоторых типов МК при программировании.
приведены рисунки с назначением выводов наиболее распространнённых МК при программировании.Цоколёвка ( распиновка ) микроконтроллеров PIC16F876A, PIC16F873A в корпусе DIP28.
Цоколёвка ( распиновка ) микроконтроллеров PIC16F874A, PIC16F877A в корпусе DIP40. Цоколёвка ( распиновка ) микроконтроллеров PIC16F627A, PIC16F628A, PIC16F648A в корпусе DIP18.
Такое же расположение выводов, предназначенных для программирования, имеют МК PIC16F84, PIC16F84A.
Назначение выводов для микроконтроллеров серии PIC16Fxxx в зависимости от типа корпуса в большинстве случаев является стандартным, но если возникает сомнения на этот счёт, то надёжнее всего свериться с даташитом на конкретный экземпляр МК. Часть документации присутствует на русском сайте http://microchip.ru Полное же собрание даташитов и другой документации находится на сайте производителя PIC микроконтроллеров: http://microchip.com
Индекс проектовПрограмма позволяет напрямую выходить на страницу индекса, парой кликов просматривать описание нужного проекта и сразу-же прошивать программу в контроллер.
При необходимости прошить контроллер выбранной прошивкой — кликаем мышкой на файл формата SFR, к примеру Timer_a.sfr
Программа загружает файл с сервера в новую вкладку.
После этого остаётся только вставить МК в панельку программатора, если это ещё не сделано, и нажать на кнопку «Записать всё».
Программа записывается в МК. После этого контроллер вставляется в плату устройства и устройство готово к работе.
Скачать программу можно на странице загрузки файлов :http://cxema.my1.ru/load/proshivki/material_k_state_prostoj_jdm_programmator_dlja_pic_mikrokontrollerov/9-1-0-1613
Раздел: [Программаторы микроконтроллеров]
Сохрани статью в:
Оставь свой комментарий или вопрос:
JDM ПРОГРАММАТОР
Программатор JDM я использовал для контроллеров PIC16F676, PIC16F630 и PIC16F629. От изначального, мой вариант отличается тем, что напряжение программирования Vpp можно подать раньше напряжения питания Vdd для перепрограммирования контроллеров. Для этой цели служит верхний по схеме транзистор. Он открывается когда напряжение на контакте 3 розетки DB9F достигнет примерно 8 В относительно контакта 5 розетки или 13 В относительно минуса контроллера Vss. Выключатель Vdd_Vpp в замкнутом состоянии позволяет напряжению питания Vdd появиться на выводах контроллера ранее напряжения программирования Vpp.
Схема программатора JDM
Для программирования будет использоваться COM-порт, у которого будут задействованы следующие выводы — 3, 4, 5, 7 и 8. В схеме заложена возможность программирования микросхем памяти серии 24сХХ. Для этого в колодке DIP16 используются нижние 8 контактов, первый контакт микросхемы вставляется в пятый конакт колодки. Джампер J1 позволяет отключить защиту от записи.
Нижний по схеме транзистор как и ранее используется для сдвига напряжений так как плюс питания контроллера Vdd соединяется с контактом 5 розетки — общим проводом порта, а минус питания Vss получается с помощью диодов, подключенных к контактам 3 и 7 розетки, и стабилитрона.
Транзисторы в JDM программаторе использовал 2SC945 и BC548, диоды — 1N4148. Конденсатор u1 надо расположить как можно ближе к выводам питания микроконтроллера. Резистор 1k необязателен, если установлены резистор 10k и джампер J1 на колодке DIP16.
Этот программатор успешно работает с программами PonyProg-2000 и PICPgm на компьютере Pentium-II. Работает действительно стабильно и без сбоев. Статья подготовленная специально для пользователей сайта Радиосхемы Александром Воропай.
Форум по контроллерам
Обсудить статью JDM ПРОГРАММАТОР
Как сделать свой вариант JDM-программатора для PIC-контроллеров — radiohlam.ru
Многие думают, что разработать схему программатора, — это нечто очень сложное, трудоёмкое и вообще, неизвестно кто этим всем занимается и как у них это получается. На самом деле всё это делается достаточно просто, нужна лишь фантазия, понимание того, как это должно работать и некоторые знания в области электроники. Итак, попытаемся приоткрыть завесу тайны.
Пусть мы хотим программировать наш контроллер с компьютера, то есть нам нужен компьютер, программатор и контроллер, которые будут обмениваться между собой данными.
Для начала давайте нарисуем просто структурную схему всей нашей цепочки, которая по ходу наших изысканий будет прорисовываться всё более и более детально и в конце концов останется только воплотить её в электрическую схему программатора. |
Что на нашей структурной схеме представляет собой компьютер (что нам от него надо, применительно к нашей задаче)? В нашем случае компьютер — это программа + порт с которым она работает. Большинство программ для программирования контроллеров могут работать с разными портами и программаторами, и в зависимости от выбранного типа программатора будут использоваться разные порты и ноги порта. Обычно, в программе можно посмотреть какие ноги порта для чего используются. На рисунке слева показано как это выглядит, например, в программе WinPic800. Поскольку мы хотим собрать схему, которая управляется как JDM-программатор, то в программе мы выбрали тип программатора JDM. Мы видим, что для программирования будет использоваться COM-порт, причём у этого порта будут использоваться следующие ноги: выход DTR — для посылки данных в контроллер, вход CTS — для приёма данных от контроллера, выход RTS — для тактирования, выход TXD — для управления питанием. Кроме того (этого нет в WinPIC800, но я это знаю, и поэтому скажу вам), некоторые программы для распознавания подключения программатора используют вход DSR, на который возвращают сигнал тактирования. Хотя многим программам вход DSR по барабану, но некоторые скажут, что программатор не подключен и откажутся программировать контроллер. |
Отлично, с учётом этой информации, наша структурная схема будет выглядеть так:
Что ещё мы знаем про 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 должен быть низкий уровень. Это нужно для того, чтобы при переходе в режим программирования указатель установился на начало памяти (на нулевой адрес), иначе программа может начать заливаться не с начала и не по тем адресам, если вообще начнёт заливаться.
С учётом всего сказанного выше, окончательно структурная схема будет выглядеть так:
Элементы схемы, показанные пунктирной линией, а также элементы в скобках, могут отсутствовать или имеют альтернативу. Вот и всё, реализовать каждый из кусочков можно десятками и сотнями разных способов, соответственно, можно придумать огромное количество различных вариантов программаторов, которые будут работать как JDM. Пугаться не надо, на самом деле структурная схема на картинке выглядит страшнее, чем всё это в реальности, например, простейшая схема развязки — это всего лишь резисторы на линиях DATAOUT и CLOCK.
Аналогично можно изготовить свои варианты схем для других типов программаторов и для других контроллеров. Естественно, всё это будет работать только в том случае, если весь процесс основан на управлении непосредственно выводами порта. Если, например, в программаторе установлен свой управляющий контроллер, который получает данные от компа по какому либо протоколу и потом уже сам организует сигналы, необходимые для программирования, то описанным способом свой вариант схемы такого программатора не изготовишь.
Схемы различных программаторов для PIC-ов, AVR-ов, микросхем памяти…
Автор:jab
К списку статей |
Простейший программатор JDM для PIC на пассивных компонентах
За основу предлагаемого программатора взята публикация из журнала «Радио» №2, 2004г, «Программирование современных PIC16, PIC12 на PonyProg». Это мой первый программатор, который я использовал для прошивки PIC микросхем дома. Программатор представляет собой упрощенный вариант JDM программатора, оригинальная схема имеет преобразователь RS-232 на TTL в виде микросхемы MAX232, она более универсальна, но ее «на коленке» уже не соберешь. Данная схема не имеет вообще ни одного активного компонента, не содержит дефицитных деталей и очень проста, может быть собрана без применения печатной платы.
Рис. 1: Принципиальная схема программатора.
Описание работы схемы
Схема программатора представлена на рис. 1. Резисторы по цепям CLK (тактирование), DATA (информационный), Upp (напряжение программирования) служат для ограничения протекающего тока. PIC контроллеры защищены от пробоя встроенными стабилитронами, поэтому получается некоторая совместимость TTL и RS-232 логики. В представленной схеме присутствуют диоды VD1, VD2, которые «отбирают» плюсовое напряжение от COM порта относительно 5 контакта и передают его на питание контроллера, благодаря чему в некоторых случаях удается избавиться от дополнительного источника питания.
Налаживание
На практике не всегда случается, что данный программатор заработает без налаживания, с 1-го раза, т.к. работа данной схемы сильно зависит от параметров COM порта. Однако у меня, на двух материнских платах Gigabyte 8IPE1000 и WinFast под XP все заработало сразу. Если Вам лень разбираться с неработающей, более сложной схемой программатора, то стоит попробовать собрать эту. Вот некоторые вещи, которые могут повлиять:
Чем новее мат. плата, тем разработчики уделяют этим портам меньше внимания, потому что эти порты давно стали морально устаревшими. Избавиться от этого можно, купив переходник USB-COM, правда опять же купленное устройство может не подойти. Нужные параметры таковы: изменяемое напряжение должно меняться не менее -10В до +10В (лог. 0 и 1) относительно 5-го контакта разъема. Отдааваемый ток должен быть хотя бы таким, чтобы при подключеннии резистора 2,7 кОм между 5-м контактом и исследуемым контактом напряжение не падало ниже 10В (сам таких плат не встречал). Также порт должен правильно определять напряжения, поступающие от контроллера, при уровне напряжения близкого к 0В, но не больше 2В определяется нуль, и соответственно при выше 2В определяется единица.
Также проблемы могут возникнуть из за программного обеспечения.
Особенно это касается ОС LINUX, т.к. из за наличия эмуляторов типа wine, VirtualBox порты могут работать неправильно, а возможностей от них требуется много. Этих проблем я коснусь подробнее в другой статье.
Зная эти особенности, приступим к налаживанию.
Для этого очень желательно иметь программу ICProg 1.05D.
В меню программы нужно во первых выбрать в настройках соотв. порт (COM1. COM2), выбрать JDM программатор. Затем открыть окно «Hardware Check», в меню «Settings». В этом меню нужно по очереди ставить галочки и вольтметром измерять напряжение на контактах подключенного разъема. Если параметры напряжения не соответствуют норме, то к сожалению, это может быть причиной неработоспособности, тогда придется собирать схему с преобразователем RS-232 TTL. Отметив все галочки, нужно убедиться, что на стабилитроне образуется напряжение питания около 5В. Если напряжения в норме и отсутствуют ошибки монтажа, то все должно сработать. Ставим контроллер в панельку, открываем прошивку, программируем. Галочки типа «Invert data out» включать не надо (все сняты). Также не нужно забывать, что некоторые партии контроллеров могут иметь не совсем стандартные параметры, и их прошить не получается, в таких случаях с данным программатором можно попробовать только снизить напряжение питания с 5В до 3-4В, подключив соотв. стабилитрон, посмотреть контроллер на предмет ошибочного включения режима LVP (низковольтное программирование), как предотвратить, можно прочитать в Интернете для конкретного типа контроллера. Повысить напряжение программирования проблеммного контроллера можно, наверное, только усложнив схему введением усилительного каскада с общим эмиттером, запитанного от дополнительного источника питания.
Теперь подробнее о проблеме с питанием устройства. Программатор тестировался с программами ICProg и консольным picprog под Linux, должен работать с любым, который поддерживает JDM, если подключить дополнительный источник питания (он подключается через резистор 1кОм к стабилитрону, диоды с резисторами в этом случае можно вообще исключить). Дело в том, что алгоритмы управления программаторов у отдельного софта разные, программа ICProg, является самой неприхотливой. Замечено, что в ОС Windows эта программа на неиспользуемом контакте 2 поднимала нужное напряжение питания, эта же программа под эмулятором в Linux на другой мат. плате уже не смогла этого сделать, однако выход был найден, отбирая питание из напряжения программирования. В общем, с ICProg, думаю, можно применять этот программатор без дополнительного питания. С другим софтом это гарантировать врядли получится, например, «родной» из репозиториев Ubuntu picprog без питания просто не определяет программатор, выдавая сообщение «JDM hardware not found». Вероятно, он либо принимает какие-то данные, не подавая напряжение программирования, либо делает это слишком быстро, таким образом что фильтрующий конденсатор еще не успевает зарядиться.
Программатор своими руками (JDM adapter)
Среди адаптеров для PICmicro, подключаемых к порту СОМ и не требующих дополнительного источника питания, популярностью пользуется так называемый JDM.
Схема адаптера крайне проста, но тем не менее зарекомендовала себя с хорошей стороны.
Адаптер предназначен для работы с микроконтроллерами PIC12C508, PIC12C509, PIC16C84 (устаревший вариант PIC16F84) и микросхем памяти с интерфейсом I2C. С таким интерфейсом возможно устанавливать как на рисунке:
Адаптер работает с ICProg 1.05D, PonyProg 2.05A.
Имеющаяся на схеме перемычка S1 (в прототипе она отсутствует) позволяет соединить вывод 10 панели XS2 с общим проводом, что необходимо для программирования микроконтроллеров PIC16F628, устанавливаемых в панель аналогично PIC16F84.
Печатная плата выглядит следующим образом: (Скачать в lay)
Для сборки потребуется немного деталей
Плату делал по технологии ЛУТ
И собираем все по схеме
За один вечер вполне реально собрать свой адаптер.
Схема популярная, простая и 100% рабочая. В моём случае на Win8.1 через адаптер USB-COM не заработало. Так что нужно подключать непосредсвенно к COM порту на материнской плате с установленной win XP.
Post Views: 732
Поделись с друьями: