Подключение pic к usb

Обновлено: 28.06.2024

Этот программатор объединяет в одном устройстве несколько вариантов программирования. Предназначен для программирования PIC - микроконтроллеров и микросхем памяти типа 24Cxxx.
Поддержаны протоколы связи с компьютером через USB и COM порт.

Совместно с программатором возможно использовать такие программы, как IC-Prog и PonyProg - схема содержит JDM программатор.
Кроме того мной создана программа под Windows , использующая собственный протокол обмена, и позволяющая программировать микроконтроллеры и микросхемы памяти через COM порт компьютера, или через USB порт.

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

Переходник USB - COM ( USB - RS 232 )

Поддержка USB порта реализована на основе переходника USB-RS232 на микросхеме OTI 006858.
Переходник USB - COM - это обычный кабель от мобильного телефона с встроенным в него преобразователем. Приобрести такой переходник возможно в любом салоне связи. Мне покупка обошлась в 300 рублей - драйвер для OTI 00 6858 шёл в комплекте вместе с кабелем на мини-CD диске.
Вот фотография кабеля с переходником - прозрачная коробочка посередине - плата переходника. Разъём от телефона заменён обычным COM9 разъёмом.

Фото кабеля

Рис. 1 Фото кабеля с переходником USB - COM ( RS232 )

Фото платы переходника

Рис.2 Фото платы переходника

Фото платы переходника - обратная сторона

Рис. 3 Фото платы переходника - обратная сторона

Для того, чтобы правильно распаять провода на разъём COM9 пришлось воспользоваться цоколёвкой микросхемы OTI 00 6858 , взятой из даташита.

Цоколёвка OTI 00 6858

Рис. 4 Цоколёвка микросхемы OTI 006858

На COM порт от платы переходника отходят 9 проводов. Так как цоколёвка телефонного разъёма мне была неизвестна - пришлось полностью его убрать. Провода прозваниваются обычным омметром от соответствующих ножек микросхемы и паяются на разъём COM 9. От платы не идёт провод вывода RI , зато есть провод питания от USB разъёма, который проходит от USB через диод и выключатель к COM порту.

Схема программатора

Теперь о схеме программатора.
Первоначальная схема программатора не предусматривала поддержки USB и содержала 2 разъёма COM9.

Один разъём служит для подключения JDM программатора и подключив к нему компьютер можно программировать микроконтроллеры с помощью программ IS-Prog , PonyProg или других программ, в которых реализована поддержка JDM программатора.

Второй разъём предназначен для работы со специально разработанным протоколом обмена. С его помощью можно программировать микроконтроллеры Microchip или микросхемы памяти типа 24Cxxx.

Для подключения USB переходника добавлен третий разъём COM9 ( на плате расположен посередине ). От этого разъёма использовано всего 3 контакта. RXD, TXD и общий(масса). Выводы от разъёма подключены напрямую к соответствующим выводам микроконтроллера программатора.

Схема программатора

Первоначально плата программатора не содержала разъёма под переходник USB - на фотографии видно, что этот разъём стоит посередине.

Плата программатора

Рис. 6 Плата программатора

Программное обеспечение программатора пока не доработано полностью. Испытан программатор только с микроконтроллерами PIC16F628A и PIC16F84.

Файлы для загрузки

Описание процесса программирования микросхем

Большинство современных микросхем содержит флэш-память, которая программируется посредством протокола I 2 C или подобных протоколов.
Перезаписываемая память есть в PIC , AVR и других контроллерах, микросхемах памяти типа 24 Cxx , и подобных им, различных картах памяти типа MMC и SD , обычных флэш USB картах, которые подключаются к компьютеру через USB разъём.

Рассмотрим запись информации во флэш память микроконтроллера PIC 16 F 628 A

Есть 2 линии DATA и CLOCK , по которым передаётся информация. Линия CLOCK служит для подачи тактовых импульсов, а линия DATA для передачи информации.
Чтобы передать в микроконтроллер 1 бит информации, необходимо выставить 0 или 1(в зависимости от значения бита) на линии данных( DATA ) и создать спад напряжения (переход от 1 к 0) на линии тактирования( CLOCK ).
Один бит для контроллера – маловато. Он ждёт вдогонку ещё пять, чтобы воспринять эту посылку из 6-ти бит как команду. Контроллеру очень нравятся команды, а состоять они должны именно из 6-ти бит – такова уж природа у PIC 16.
Вот список и значение команд, которые PIC способен понять. Команд не так уж и много – словарный запас у этого контроллера невелик, но не надо думать, что он совсем глуп – бывают устройства и с меньшим количеством команд

" LoadConfiguration " 000000 - Загрузка конфигурации
" LoadDataForProgramMemory " 000010 - Загрузка данных в память программ
" LoadDataForDataMemory " - 000011 - Загрузка данных в память данных( EEPROM )
" IncrementAddress " 000110 - Увеличение адреса PC МК
" ReadDataFromProgramMemory " 000100 - Чтение данных из памяти программ
" ReadDataFromDataMemory " 000101 - Чтение данных из памяти данных( EEPROM )
" BeginProgrammingOnlyCycle " 011000 - Начать цикл программирования
" BulkEraseProgramMemory " 001001 - Полное стирание памяти программ
" BulkEraseDataMemory " 001011 - Полное стирание памяти данных( EEPROM )
"BeginEraseProgrammingCycle" 001000 - Начать цикл программирования

Реагирует контроллер на эти команды по-разному. По-разному после выдачи команды нужно и продолжать с ним разговор.
Для того чтобы начать полноценный процесс программирования необходимо ещё подать напряжение 12 вольт на вывод MCLR контроллера, после этого подать на него напряжение питания. Именно в такой последовательности подачи напряжений есть определённый смысл. После подачи питания, если PIC сконфигурирован на работу от внутреннего RC генератора, он может начать выполнение собственной программы, что при программировании вещь недопустимая, так как неизбежен сбой.
Предварительная подача 12-ти вольт на MCLR позволяет избежать такого развития событий.
При записи информации во флэш память программ МК после команды

" LoadDataForProgramMemory " 000010 - Загрузка данных в память программ

Крестики в этом слове – это сами данные, а нули по краям отправляются как обрамление – это стандарт для PIC 16. Значащих битов в слове всего 14. У этой серии контроллеров 14-ти битный формат представления команд.
После окончания передачи слова с данными PIC ждёт следующую команду.
Так как нашей целью является запись слова в память программ МК, следующей командой должна быть команда

"BeginEraseProgrammingCycle" 001000 - Начать цикл программирования

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

Настройка COM порта для работы JDM программатора

В процессе работы над программатором тестирование программы проводились в основном на PIC16F628A. Когда же пришло время проверить алгоритмы работы с другими МК - обнаружились проблемы. При записи PIC16F876A программатор записывал нормально только часть памяти программ, после чего происходила ошибка записи. Решение проблемы нашлось в настройках COM порта.

В WindowsXP применяется буферизирование передаваемой через порты COM информации. Это так называемые буфера FIFO. Чтобы избежать ошибок при программировании через JDM этот механизм необходимо отключить. Сделать это можно в диспетчере устройств Windows.

Заходим в панель управления, затем:
Администрирование - управление компьютером - диспетчер устройств

Затем выбираем порт, на который подключен JDM программатор(например COM1) - смотрим свойства - вкладка параметры порта - дополнительно. И снимаем галочку на пункте "Использовать буферы FIFO"

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

Однажды я решил собрать несложный LC-метр на pic16f628a и естественно его надо было чем-то прошить. Раньше у меня был компьютер с физическим com-портом, но сейчас в моём распоряжении только usb и плата pci-lpt-2com. Для начала я собрал простой JDM программатор, но как оказалось ни с платой pci-lpt-com, ни с usb-com переходником он работать не захотел (низкое напряжение сигналов RS-232). Тогда я бросился искать usb программаторы pic, но там, как оказалось всё ограничено использованием дорогих pic18f2550/4550, которых у меня естественно не было, да и жалко такие дорогие МК использовать, если на пиках я очень редко что-то делаю (предпочитаю авр-ы, их прошить проблем не составляет, они намного дешевле, да и программы писать мне кажется, на них проще). Долго копавшись на просторах интернета в одной из множества статей про программатор EXTRA-PIC и его всевозможные варианты один из авторов написал, что extrapic работает с любыми com-портами и даже переходником usb-com.

В схеме данного программатора используется преобразователь логических уровней max232.

Я подумал, если использовать usb адаптер, то будет очень глупо делать два раза преобразование уровней usb в usart TTL, TTL в RS232, RS232 обратно в TTL, если можно просто взять TTL сигналы порта RS232 из микросхемы usb-usart преобразователя.

Так и сделал. Взял микросхему CH340G (в которой есть все 8 сигналов com-порта) и подключил её вместо max232. И вот что получилось.

В моей схеме есть перемычка jp1, которой нет в экстрапике, её я поставил потому что, не знал, как себя поведёт вывод TX на ТТЛ уровне, поэтому сделал возможность его инвертировать на оставшемся свободном элементе И-НЕ и не прогадал, как оказалось, напрямую на выводе TX логическая единица, и поэтому на выводе VPP при включении присутствует 12 вольт, а при программировании ничего не будет (хотя можно инвертировать TX программно).

После сборки платы пришло время испытаний. И тут настало главное разочарование. Программатор определился сразу (программой ic-prog) и заработал, но очень медленно! В принципе - ожидаемо. Тогда в настройках com порта я выставил максимальную скорость (128 килобод) начал испытания всех найденных программ для JDM. В итоге, самой быстрой оказалась PicPgm. Мой pic16f628a прошивался полностью (hex, eeprom и config) плюс верификация где-то 4-6 минут (причём чтение идёт медленнее записи). IcProg тоже работает, но медленнее. Ошибок про программировании не возникло. Также я попробовал прошить eeprom 24с08, результат тот же - всё шьёт, но очень медленно.

Выводы: программатор достаточно простой, в нём нет дорогостоящих деталей (CH340 - 0.3-0.5$, к1533ла3 можно вообще найти среди радиохлама), работает на любом компьютере, ноутбуке (и даже можно использовать планшеты на windows 8/10). Минусы: он очень медленный. Также он требует внешнее питание для сигнала VPP. В итоге, как мне показалось, для нечастой прошивки пиков - это несложный для повторения и недорогой вариант для тех, у кого нет под рукой древнего компьютера с нужными портами.

Вот фото готового девайса:

Как поётся в песне "я его слепила из того, что было". Набор деталей самый разнообразный: и smd, и DIP.

Для тех, кто рискнёт повторить схему, в качестве usb-uart конвертера подойдёт почти любой (ft232, pl2303, cp2101 и др), вместо к1533ла3 подойдёт к555, думаю даже к155 серия или зарубежный аналог 74als00, возможно даже будет работать с логическими НЕ элементами типа к1533лн1. Прилагаю свою печатную плату, но разводка там под те элементы, что были в наличии, каждый может перерисовать под себя.

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

Вариантов для "ублажения" моего лентяйства умные люди уже напридумали задолго до меня. Оставалось определиться с выбором и реализовать. Из предлагавшихся для выбора вариантов было: (А) разъем для внутрисхемного програмирования и (Б) бутлоадер. Первое - по сути - тот же программатор, только что процессор из платы устройства дергать не нужно. А вот второе - это уже целый интерфейс к ПК плюс небольшая програмка, живущая внутри процессора, и позволяющая "перепрошить" его основную программу. Звучит куда заманчивей! Не правда ли? Итак, первый шажок в "лабиринте выбора" сделан - бутлоадер!

Второй шаг - выбор интерфейса связи с ПК. При програмировании ПИК-контроллеров данные в них подаются в последовательном виде, следовательно и интерфейс должен быть последовательным. Вспомним-ка теперь - а какие последовательные интерфейсы торчат наружу из наших ПК? Да не так уж и много вариантов-то - COM (RS-232), FireWire (IEC-1394) или же USB. Если учесть, что (А) первому уже лет практически столько-же, сколько и самому термину "персональный компьютер", и он постепенно "уходит от нас", а (Б) второй - пока еще большая экзотика, то выбор мной третьего из них (USB) становится вполне очевиден.

Последний шаг - выбор самого ПИК-контроллера. Варианты: (А) выбрать контроллер "на свой вкус" и писать бутлоадер самостоятельно, или же (Б) использовать уже готовые вещи, но тогда - придется смириться с тем, что контроллер за нас уже выбрал тот, кто делал этот самый бутлоадер. Написать такую штуку как бутлоадер самому, да еще и такой, чтобы он "общался" с компьютером по шине USB - это еще и уметь нужно. А для таких лентяев, как я, инженеры ф. Microchip уже выполнили всё необходимое, и остается лишь с вот этой страницы выкачать файлик [F1] (размером 3,07 МБ). На всякий случай (а то у Microchip-а периодически меняется вся "карта сайта") копию этого файла я сложил и в своей "файловой свалке" [F2] - а Вы можете "качать" с любой из этих ссылок. Нюанс состоит в том, что абсолютно всё software, имеющееся в указанном файле, рассчитано на использование микроконтроллеров ТОЛЬКО серии PIC18F2455/2550/4455/4550 и никаких других. Таким образом, увы, но этот выбор уже сделали за нас (по крайней мере, речь про ленивую "половину" населения).

Итак, подведем предварительный итог. Результирующая "железяка" будет:

  1. выполнена на процессоре PIC18F2455/2550/4455/4550 (любом из них);
  2. в процессор будет прописан нестираемый бутлоадер;
  3. связь с компьютером будет осуществляться по шине USB.

Ну что ж, поехали.

«Железо»

С одной стороны, есть народная пословица: "В чужой монастырь со своим уставом не ходят". С другой - любая конструкция на (микро)процессоре - это т.н. "аппаратно-програмный модуль". И коль уж взял я готовую программу (в данном случае - прошивку), то и в аппаратной части необходимо повторить устройство, которому она была предназначена. Точнее, достаточно будет повторить не всё устройство, а лишь те его узлы, без которых эта прошивка работать не будет. "Подручной книгой", подлежащей анализу на тему того, какой будет необходимая "обвеска" процессора, является "Руководство пользователя к демонстрационной плате PICDEM™ FS USB" [D1], т.к. именно ее прошивку я и использовал. В данной книге в первую очередь нужно прочесть раздел "3.5 BOOTLOAD MODE" (стр. 24), одновременно поглядывая на принципиальную схему самого модуля PICDEM™ FS USB, напечатанную там же на стр. 54-56. Что нам дает этот анализ? Пройдемся по пунктикам.

"To start using the application, press and hold S2 while resetting the board (pressing and releasing S1). The entry condition on the PICDEM FS USB board and the provided firmware is determined by the status of the switch button S2, which is checked once after each reset. If the button is held down during a Reset, the microcontroller enters the bootload mode. "

"Для запуска приложения (в данном случае - бутлоадера), сбросьте устройство (нажав и отпустив кнопку S1), при этом удерживая нажатой кнопку S2. Начальное состояние платы PICDEM FS USB и выполняемая ей программа определяются состоянием кнопки S2, которое однократно проверяется сразу же после сброса. Если во время сброса кнопка S2 была нажата, то процессор входит в режим бутлоадера. "

Вот Вам и первый вынужденный элемент схемы - кнопка S2. Посмотрим, что она делает. Согласно схеме из [D1] (рис. A-2 на стр. 54) она закорачивает на "землю" вывод RB4 процессора. Все остальное время, пока кнопка S2 не нажата, резистор R13 "подтягивает" этот вывод к плюсу питания. Резистор R17 - защитный, он нужен, чтобы случайно не сжечь вывод процессора (при инициализации после сброса порт В настроен на выход). Таким образом, получается, что условием вхождения процессора в режим бутлоадера является факт наличия уровня логического "нуля" на выводе RB4 в момент сброса. Но, просто "посадить" вывод RB4 на землю нельзя - тогда при каждом включении процессор будет входить в режим загрузки новой программы (бутлоадер). Нам такое ни к чему - процессор при "нормальном" включении должен попадать в ОСНОВНУЮ рабочую программу. А вот в режим бутлоадера он должен попадать лишь только тогда, когда мы его об этом попросим. Не мудрствуя лукаво, установим в нашу схему такую же кнопку S2. А сигнал сброса мы сформируем банальной RC-цепью (при подаче питания) или же впишем в программу.

Следующий элемент, который нам придется поставить, это резистор R15 согласно все той же схемы из [D1] (рис. A-2 на стр. 54). Через этот резистор на вывод RA1 подается сигнал USB_ATTACH, сообщающий процессору, что он подключен к шине USB. Управляющая программа проверяет наличие этого сигнала перед началом обмена данными по USB.

Также, необходимым элементом является конденсатор С14 (согласно схемы рис. A-2 на стр. 54 из [D1]). Это фильтрующий кондесатор встроенного в процессор стабилизатора напряжения питания для USB-модуля.

Понадобится процессору и цепь сброса при подаче питания - резистор R10 и конденсатор C9 (см. рис. A-2 на стр. 54 в [D1]). Только мы немного упростим "путь прохождения" сигнала сброса на процессор - не будем ставить резистор R12 и джампер JP1. При этом, сигнал с точки соединения R10 и C9 мы подадим непосредственно на вывод MCLR ПИК-а. Ну и само собой разумеется, что процессору необходимо установить внешние цепи тактового генератора - кварцевый резонатор Y1 на частоту 20 МГц (почему - читайте ниже), резистор R11 и конденсаторы C7 и C8 (согласно схемы рис. A-2 на стр. 54 из [D1]). А также, и сам разъем, в который мы будем подключать кабель от компьютера (USB, тип В), обозначенный на схеме рис. A-3 на стр. 55 из [D1] как J1. И парочку дросселей (L1 и L2 с той же схемы) впридачу - зачем нам лишние помехи.

В итоге наша схема (сохранена нумерация элементов, приведенная выше) будет выглядеть как показано на рисунке 1. Следует только учесть, что это не готовое устройство (мы ведь еще даже не задумывались над тем, что это будет), а лишь самый необходимый минимум.


Рис. 1 — Минимально необходимая "обвеска" PIC18F4550 для работы с бутлоадером
(. исправлено подключение резистора R15 - 5.05.2006)

И еще одно обстоятельство, с которым придется считаться, используя данный бутлоадер. Это - биты конфигурации процессора. Являясь по сути "програмной" частью, фактмчески они определяют аппаратные режимы работы процессора. Почитаем, что по этому поводу сказано в "Руководстве пользователя к демонстрационной плате PICDEM™ FS USB" [D1]:

"The PIC18F4550 microcontroller for the PICDEM FS USB board has a specific configuration setting that is necessary for the bootload program to function. The USB Voltage Regulator and device oscillator settings are both critical, and cannot be changed. Other settings, such as code protection, WDT and LVP, are less critical but may cause irreversible side effects. "

"Микроконтроллер PIC18F4550 в плате PICDEM FS USB имеет определенные значения битов конфигурации, требующиеся для функционирования программы бутлоадера. Значения битов, определяющих установки кварцевого резонатора а таже внутреннего стабилизатора питания для USB являются критическими, их менять нельзя. Другие параметры, такие как защита кода, "сторожевой таймер", "низковольтное программирование" менее критичны, но могут привести к нежелательным побочным эффектам. "

Прописанные в данном бутлоадере биты конфигурации и соответствующие значения определяемых ими параметров приведены в таблице:

PIC 18F4550 и 18F2550 — мощные микроконтроллеры с высокоскоростным интерфейсом USB 2.0. С их помощью любители помастерить смогут с легкостью собрать любое устройство USB всего из нескольких компонентов. В этой статье я расскажу о том, как пользоваться встроенным программным обеспечением CDC от Microchip, которое позволяет эмулировать последовательный порт на компьютере с операционной системой Windows или Linux. К тому же, с его помощью легко собирать устройства HID.

LED-драйверы MEAN WELL для промышленных и уличных светодиодных светильников: особенности, преимущества, выбор

Фото экспериментальной платы.


Фото экспериментальной платы.

Приведенная ниже схема автономного устройства USB очень проста, для ее реализации потребуется лишь несколько деталей. Имейте в виду: я использую микро-ПЗУ Olimex ICSD. Если хотите воспользоваться другим ПЗУ PIC ICSP, уберите компоненты D1 и D2 и замените коннектор.

Это устройство совместимо с микросхемным загрузчиком USB.

Обратите внимание: емкость компонента C5 составляет 470 нанофарад (в таблице рекомендуется 220 нанофарад, но чем больше, тем лучше), и он должен отличаться низким эффективным последовательным сопротивлением (например, за счет многослойной керамической изоляции). И не забудьте развязывающие конденсаторы емкостью 100 нанофарад.

Вот один из вариантов реализации этой схемы.

Стоит обратить внимание на цвет проводов USB-кабеля: черный — заземление, красный — +5 В, зеленый — Data+, белый — Data-.

01.04.2007 ВАЖНОЕ ИСПРАВЛЕНИЕ: На этой схеме есть небольшая ошибка: к компоненту R5 следует подсоединять провод +5 В, а не заземление, иначе устройство не будет работать.

Нажмите на изображении для просмотра схемы с разрешением 300 точек на дюйм.

плата 18F4550

Программное обеспечение

Файл MCHPFSUSB_Setup можно загрузить с сайта Microchip. К сожалению, это исполняемый файл .exe для Windows. В моем примере используется встроенное ПО, написанное на языке C (компилятор C18 от Microchip). Этот код абсолютно бесплатен, но не является открытым, так что распространять его модифицированную версию запрещается.

В архиве содержатся следующие файлы:

  • Загрузчик USB и его исходный код на C18.
  • Утилита Windows для загрузчика.
  • Исходный код встроенного ПО CDC (эмуляция последовательного порта) на C18. Его можно без изменений использовать с загрузчиком USB.
  • Встроенное ПО для устройства HID.
  • Драйвер Windows для CDC (в Linux устройства CDC-ACM поддерживаются по умолчанию).

Советы по сборке экспериментальных устройств

Исходный код находится в каталоге «fw/cdc/MCHPUSB.mcw».

Для автономного устройства USB в файле usbcfg.h следует закомментировать следующие строки:

На моей схеме светодиодные индикаторы подключены к порту B, поэтому необходимо изменить файл io_cfg.h:

В файл user.c вы можете включить свой собственный код. Например, воспользуйтесь кодом Exercise_Example() в user.c.

Полезные функции предлагают команды getsUSBUSART() (получение данных) и putrsUSBUSART() (передача данных по другому последовательному порту).

Не забудьте выполнить проверку mUSBUSARTIsTxTrfReady() перед отправкой данных.

В каталоге «exercise» можно найти некоторые образцы команд. Например, если включить в файл user.c следующий код, при нажатии в терминале клавиши [1] будет загораться индикатор №4:

В Windows для работы устройства необходимо установить включенный в архив драйвер. Можно также воспользоваться утилитой Hyperterminal (19200 бод, кристалл 20 МГц). В Linux следует проверить модуль cdc-acm — должно появиться новое устройство с адресом «/dev/ttyACM0».

Читайте также: