На главную           Статьи              Ссылки                Схемы                Форум               Все новости    


 

Компьютер - PIC микроконтроллер





Программатор с поддержкой USB

Незавершённый проект

Этот программатор  объединяет в одном устройстве несколько вариантов программирования. Предназначен для программирования 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 , взятой из даташита.

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

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

При подключении кабеля к компьютеру компьютер определит новое устройство и попросит указать драйвер для установки. Драйвер для OTI006858 вы можете скачать по ссылке в конце этой страницы или с сайта производителя микросхемы:   http://www.oti.com.tw
После усттановки драйвера устройство определит новый виртуальный COM порт. Нужно посмотреть его номер в диспечере устройств и указать в настройках программатра.


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

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

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

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

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

Рис. 5 Схема программатора
Схема программатора

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

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

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

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

1.  Прошивка для микроконтроллера программатра
2.  Программа под Windows XP   ProgCode v0.0
3.  Схема программатора в формате SPlan 6.0
4.  Плата программатора в формате SprintLayout 5.0
5.  Драйвер переходника USB - COM ( USB - RS 232 ) OTI 00 6858


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

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


Рассмотрим запись информации во флэш память микроконтроллера PIC16F628A

Есть 2 линии DATA и CLOCK, по которым передаётся  информация. Линия CLOCK служит для подачи тактовых импульсов, а линия DATA для передачи информации.
Чтобы передать в микроконтроллер 1 бит информации, необходимо выставить 0 или 1(в зависимости от значения бита) на линии данных(DATA) и создать спад напряжения (переход от 1 к 0) на линии тактирования(CLOCK).
Один бит  для контроллера – маловато. Он ждёт вдогонку ещё пять, чтобы воспринять эту посылку из 6-ти бит как команду. Контроллеру очень нравятся команды, а состоять они должны именно из 6-ти бит – такова уж природа у PIC16.
Вот список и значение команд, которые 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    -   Загрузка данных в память программ

необходимо отправить в контроллер сами данные - 16 бит,
которые выглядят так:

 “0xxxxxxxxxxxxxx0”.

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

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

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


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

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

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

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

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

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

После этого перезагружаем компьютер.




















Rambler's Top100