USB ПРОГРАММАТОР ДЛЯ ВНУТРИСХЕМНОГО ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ AVR (по мотивам проекта AvrUsb500 by Petka)
2) Программирование МК через LPT порт 3) Программирование МК через USB-COM преобразователь
Чем дальше, тем меньше остаётся на корпусах компьютеров проверенных, изученных вдоль и поперёк портов LPT, COM. Хотя ещё можно приобрести компьютер (пусть и б/у) с такими портами для использования его в качестве "рабочей лошадки", всё же приходится задумываться о грядущей замене (модернизации) аппаратуры навешанной на старые порты. В частности, что-то нужно делать с инструментами для программирования микроконтроллеров. И лучшие люди Отечества (в данном случае, Petka) не дремлют. В результате появился работоспособный программатор для внутрисхемного программирования микроконтроллеров AVR, совместимый с STK500v2.
Достоинства данной конструкции: - аппаратный преобразователь USB - COM (не надо извращаться с программной реализацией USB); - новый протокол от Atmel. Теперь не требуется перешивать программатор при появлении новых чипов; - решена проблема "курицы и яйца" (как / чем запрограммировать микроконтроллер программатора); - возможность изменения режимов работы программатора, при помощи любой терминальной программы, например HyperTerminal; - возможность тактирования программируемого микроконтроллера сигналом 1 МГц; - готовый пакет документации, со всеми необходимыми исходниками (схемы, прошивки, чертежи печатных плат, исходные тексты программы микроконтроллера).
К недостаткам проекта в целом, можно отнести некоторую "размытость" полезной информации по 50-ти страницам форума, что приводит к определённым трудностям при повторении конструкции.
Нужно отметить, что если под рукой ничего, кроме USB порта нет, то выход только один - собирать программатор AvrUsb500 by Petka "как есть". Однако в ряде частных случаев конструкцию можно упростить: - уже имеются проверенные инструментальные средства для программирования микроконтроллеров. В этом случае гораздо проще прошить МК программатора отдельно. Если размеры будущего программатора большой роли не играют и допустимо использовать МК в корпусе DIP, то этот вариант однозначно предпочтительнее; - есть преобразователь интерфейса USB - RS232 промышленного изготовления. Было бы разумно использовать его в качестве составляющей. Тогда, правда, придётся сделать питание программатора от программируемого устройства, а не от порта USB, однако, по мнению автора статьи, такой вариант надёжнее.
В результате схема программатора AvrUsb500 by Petka приведена к следующему виду:
Вся документация по программатору находится в архиве "Stk500" (см. файлы к статье). Содержимое архива:
Позиционные обозначения элементов на схемах совпадают. Вновь введённые элементы обозначены символом (') у названия элемента.
Детали и конструкция
По условиям задачи на плате программатора должны быть установлены два разъема DB-9 и микроконтроллер ATmega8 в корпусе DIP. Отсюда ясно, что особенно бороться за миниатюризацию бессмысленно. Поэтому из SMD компонентов - только конденсаторы C8, C9 типоразмера 0805.
Программатор собран на пластине одностороннего фольгированного стеклотекстолита. Размеры пластины указаны на сборочном чертеже. На плате имеются две перемычки: одна находится под разъёмом SPI (на рисунке слева), другая рядом с тем же разъёмом.
Для удобства трассировки на печатной плате отсутствуют выводы 11, 12, 17, 18 микроконтроллера. Перед монтажом панельки МК необходимо вынуть из неё пинцетом указанные контакты.
На рисунке показан внешний вид программатора, подключённый к преобразователю интерфейса Prolific USB-to-Serial Comm Port (драйвер PL-2303):
Распиновка и тип разъёма SPI обусловлен задачами автора статьи и совместимостью с другими имеющимися программаторами.
При сборке данного программатора под рукой не оказалось резонатора на требуемую частоту 14,7456 МГц. Взамен установлен резонатор со старой материнской платы на частоту 14,3181 МГц. Сбоев в работе программатора не наблюдалось.
После монтажа программатора необходимо запрограммировать микроконтроллер. При этом должны быть запрограммированы (т.е. установлены = "0") следующие фьюзы (ATmega8, 14.7456 МГц):
Все остальные фьюзы должны быть незапрограммированные, т.е. установлены = "1". Как правило, установка флажка напротив названия фьюза в программе программатора, соответствует программированию соответствующего фьюза, однако бывают исключения.
Способы программирования МК с использованием LPT порта и USB-COM преобразователя даны в конце статьи.
После установки запрограммированного МК в программатор подключаем преобразователь USB-COM к компьютеру. В диспетчере устройств операционной системы узнаём номер появившегося виртуального порта. Запускаем программу HyperTerminal. Запуск либо из главного меню Пуск \ Программы \ Стандартные \ Связь \ HyperTerminal (C:\ ProgramFiles \ Windows NT \ hypertrm.exe), либо через файл в архиве с документацией. Основные настройки программы, кроме номера порта, следующие: - параметры порта:
- параметры терминала:
- параметры ASCII:
После выполнения настроек включаем питание программатора. При этом светодиод должен быстро мигнуть шесть раз, затем светиться постоянно (горизонтальный масштаб 100 мс/дел):
Далее в программе HyperTerminal два раза нажимаем "Enter" на клавиатуре. Должно появиться сообщение:
Если сообщение не появляется, нужно проверить осциллографом прохождение сигнала по линии PC_TxD от преобразователя USB-COM к микроконтроллеру. Периодически нажимая клавишу "Enter" на клавиатуре проверяем наличие и амплитуду сигнала. Верхняя эпюра соответствует сигналу на контакте 3 разъёма RS-232, нижняя - на выводе 2 микроконтроллера. Вертикальный масштаб: 5 В/дел, горизонтальный масштаб: 20 мкс/дел:
Если данные к микроконтроллеру поступают, проверяем "ответ" микроконтроллера на полученную команду. На верхней эпюре показан сигнал на выводе 3 микроконтроллера после нажатия "Enter", на нижней - сигнал на контакте 2 разъёма RS-232. Вертикальный масштаб: 2 В/дел, горизонтальный масштаб: 20 мкс/дел:
Амплитуды всех сигналов за исключением контакта 3 разъёма RS-232 должны быть близки к напряжению питания программатора.
Итак, если сообщение есть, вводим цифру "2", нажимаем "Enter". После этого появляется новая строка:
Переключаем раскладку на английскую и вводим букву "a", что соответствует десятичной цифре "10". То, что сейчас было введено - версия программатора. Должна быть 2.10, иначе данный программатор нельзя будет использовать с некоторыми управляющими программами "верхнего уровня".
Программатор может определять подключение к программируемому контроллеру. Реализовано это путём проверки "подтяжки" линии Reset к Vcc (со стороны программируемого микроконтроллера). Если подключение есть, то программатор включит светодиод HL1. Этот тест можно отключить или включить:
"1", "Enter" - тест включён; "0", "Enter" - тест выключен.
Сигнал 1 МГц включается / выключается в следующем "пункте меню":
"1", "Enter" - сигнал присутствует, скорость программирования небольшая; "0", "Enter" - сигнал выключен, при этом скорость программирования максимальна.
Конфигурирование программатора завершено:
Закрываем программу HyperTerminal. После этого пробуем запрограммировать какой-либо микроконтроллер. Для работы с программатором можно использовать программу AVRDude (см. файлы к статье). Эта программа консольная, управляется из командной строки. Для упрощения использования имеется надстройка AVRDudeGui, внешний вид которой показан на рисунке:
Скорость работы программатора можно косвенно оценить по следующему: при отключенном сигнале 1 МГц программирование микроконтроллера ATmega16 занимает 4 секунды (размер прошивки 8 кБ, т.е. половина всей памяти данного МК).
Программирование микроконтроллера через LPT порт
Самый простой способ разово запрограммировать МК - воспользоваться компьютером с LPT портом и какой-либо программой-программатором. Микроконтроллер нужно подключить компьютеру в соответствии со схемой:
Питание микроконтроллера можно взять от блока питания компьютера (красный провод в любом разъёме). Для программирования воспользуемся простой бесплатной программой UniProF (см. файлы к статье). В архиве с программой есть справка. Как любую техническую документацию её настоятельно рекомендуется прочитать, чтобы не задавать бестолковых вопросов.
Основные сведения, необходимые для работы: - при запуске программа автоматически определяет тип микроконтроллера, если, конечно, исправна и работает аппаратная часть. Загрузив в программу файл прошивки Atmega8_14745600.hex и отказавшись от загрузки файла EEPROM, получим следующую картину:
Предварительно очистив память микроконтроллера через кнопку "Erase", жмём на кнопку "Prog" - запись выбранного файла программы в память микроконтроллера. Успешная запись программы завершается без сообщений; - нажав кнопку "FUSE", попадаем в окно настойки, где необходимо выставить требуемые для данной прошивки фьюзы:
Как видно из рисунка, эта программа из ряда "исключений", т.е. запрограммированному фьюзу соответствует снятый флажок. Для записи фьюзов нажимаем подряд три кнопки "Write". Всё, контроллер запрограммирован; - назначение сигналов SCK, MOSI, MISO, RESET на LPT порт задаётся через кнопку "LPT pins". Настройки должны соответствовать приведённой схеме соединения LPT и МК:
Этим окном следует воспользоваться при первом запуске программы, до подключения МК, а также в случае, когда нужные выводы порта сожжены и не действуют.
Программирование микроконтроллера через USB-COM преобразователь
МК можно запрограммировать при отсутствии портов LPT и COМ с помощью преобразователя интерфейса и управляющей программы. Особенности способа: - очень низкая скорость записи-чтения, около 4 байт в секунду; - неудачная схема адаптера и логика работы управляющей программы приведут к ошибкам записи-чтения даже на таких мизерных скоростях.
Наилучшие результаты показал следующий вариант адаптера:
Диоды VD1...VD3 можно использовать любые с малым временем восстановления.
Предельная простота схемы позволяет обойтись без печатной платы. Для разового использования достаточно навесного монтажа. Автор смонтировал все элементы между двух разъёмов DB-9:
После сборки желательно проверить осциллографом амплитуду сигналов во время чтения. При первом включении микроконтроллер лучше вынуть из панельки.
Проверка выполняется совместно с программой AVRDude (см. ниже). Периодически нажимая любую кнопку чтения фьюзов "Read", наблюдаем за следующими сигналами: - SCK - строго периодический, после нажатия кнопки действует около 10 секунд; - MOSI - непериодический, после нажатия кнопки действует около 10 секунд; - RESET - единичное кратковременное изменение уровня после нажатия "Read";
Сигнал SCK должен быть близок к меандру с частотой 100...150 Гц и амплитудой 3,5...4,5 В. Сигналы MOSI и RESET имеют аналогичную амплитуду. Если уровень всех сигналов отличается от указанного, следует подкорректировать значения резисторов R5...R7.
Нелишним будет проверить и напряжение питания на указанных в схеме выводах МК.
Если всё в порядке, нужно вставить микроконтроллер и проверить сигнал MISO на выводе 8 USB-COM преобразователя, естественно, после нажатия кнопки "Read". Далее пробуем записать в МК какую-либо программу.
Поскольку скорость записи крайне мала, то для экономии времени следует проверять адаптер на небольших файлах прошивок с обязательной верификацией записанной программы. После успешного тестирования верификацию можно запретить.
Совместно с адаптером используется программа AVRDude с графической надстройкой AVRDudeGui:
Основные замечания: - в списке программаторов отсутствует требуемый - "ponyser". Поэтому название придётся набрать вручную, после запуска программы Avrdudegui.exe; - первичную проверку работоспособности адаптера и МК следует выполнять путём чтения фьюзов, через нажатие кнопок "Read". Если чтения не происходит, нужно тщательно проверить монтаж, оценить наличие и амплитуду всех сигналов, уточнить номер виртуального COM порта, заменить МК; - запись файла Atmega8_14745600.hex занимает около 25 минут. Столько же займёт последующая верификация, если её не отключить перед программированием; - на рисунке отмечены требуемые фьюзы.
1) Документация на USB программатор (~ 280 кБ) 2) Программатор UniProF для МК AVR (~ 580 кБ) 3) Программатор AVRDude для МК AVR (~ 1 МБ)
Автор: Олег Иванов |