Программатор "5 проводов" для микроконтроллеров AVR
Речь в этой статье пойдет о самом простом программаторе для
микроконтроллеров AVR. И тем не менее, это первый шаг, который необходимо
сделать любому радиолюбителю, решившему освоить эти многофункциональные
устройства. Даже если для программирования своих устройств Вы решите собрать более
"продвинутый" программатор, данная конструкция может Вам понадобиться
для первоначального программирования самого программатора.
Схема представленного здесь программатора позволяет "прошивать"
широкий спектр микроконтроллеров фирмы ATMEL. В частности, программатор был
испробован на следующих типах микроконтроллеров:
Серия
|
Модель
|
ATtiny
|
ATtiny12,
ATtiny13, ATtiny15, ATtiny22, ATtiny26, ATtiny2313
|
Classic
|
AT90S1200,
AT90S2313, AT90S2323, AT90S2333, AT90S2343, AT90S4414, AT90S4433, AT90S4434,
AT90S8515, AT90S8535
|
ATmega
|
ATmega48, ATmega8, ATmega88, ATmega8515, ATmega8535,
ATmega16, ATmega162, ATmega163, ATmega168, ATmega169, ATmega32, ATmega323
|
Неоспоримым достоинством программатора "5 проводов" является его
простота, что немаловажно для начинающих пользователей, которые пытаются
создать свое первое устройство на микроконтроллере и любая неудача может
похоронить желание дальше разбираться в этой теме. Кроме этого, можно выделить
следующие достоинства:
- схема позволяет
программировать микроконтроллеры, настроенные на подключение внешнего
кварца, БЕЗ ПОДКЛЮЧЕНИЯ КВАРЦА;
- схема питается
непосредственно от порта. Для ее работы не требуется внешнее питание.
Однако эта схема обладает рядом существенных недостатков, к которым
относятся:
- схема подключается к LPT
порту компьютера, который стал все реже встречаться на новых материнских
платах;
- LPT порт очень чувствителен
к перегрузкам. При неаккуратном обращении с ним есть реальный шанс выжечь
некоторые его линии;
- Сигнал, выдаваемый LPT
портом, сильно подвержен помехам, что нередко приводит к тому, что в
микроконтроллер попадают не те данные, которые Вам хотелось бы.
Схема программатора
На рисунке 1 представлена схема этого чудо программатора.
Рисунок 1. Схема программатора "5 проводов"
Схема в особых комментариях не нуждается. Контакты 2, 3, 4, 9 порта LPT
соединяются либо на плате (если используется кабель от принтера) или
непосредственно в корпусе разъема (если используется шлейф + вилка DB-25M).
Контакты 19-25 замыкать между собой не обязательно, так как они уже замкнуты на
материнской плате вашего компьютера. Достаточно использовать любой из этих
контактов.
Выводы микроконтроллера RESET, XTAL1, GND, VCC, SCK, MISO и MOSI необходимо
уточнять в документации на прошиваемый Вами микроконтроллер. Я собирал этот
программатор для "прошивки" микроконтроллеров ATmega8 и ATmega16. В
моем случае указанные сигналы соответствуют следующим выводам
микроконтроллеров:
Таблица 2. Соответствие выводов микроконтроллера ATmega8 сигналам
RESET, XTAL1 и т.д.
Название сигнала
|
Вывод микроконтроллера
|
RESET
|
1
|
XTAL1
|
9
|
GND
|
8, 22
|
VCC
|
7, 20
|
SCK
|
19
|
MISO
|
18
|
MOSI
|
17
|
Таблица 3. Соответствие выводов микроконтроллера ATmega16
сигналам RESET, XTAL1 и т.д.
Название сигнала
|
Вывод микроконтроллера
|
RESET
|
9
|
XTAL1
|
13
|
GND
|
11, 31
|
VCC
|
10, 30
|
SCK
|
8
|
MISO
|
7
|
MOSI
|
6
|
Если в таблице одному названию сигнала соответствует несколько выводов
микроконтроллера, то эти контакты необходимо соединить между собой на плате.
Сборка программатора
Согласно схеме для сборки устройства нам понадобятся следующие компоненты:
- макетная плата или кусок
текстолита (я использовал макетную плату);
- панели под те типы
микроконтроллеров, которые вы собираетесь "прошивать" (в моем
случае PC-28 и PC-40). Кстати, все необходимые для программирования
контакты микроконтроллера ATmega16 сгруппированы в одной половине
микросхемы. Учитывая это, а так же то, что найти панель PC-40 мне в Пензе
под новый год не удалось, я обошелся панелью PC-28, только широкой. То
есть при программировании часть выводов микроконтроллера висит в воздухе;
- кабель для принтера с
интерфейсом LPT. С одной стороны у такого кабеля вилка, имеющая 25
контактов (вставляется в компьютер). С другой розетка, имеющая 36
контактов. Если найти такой кабель не удалось, можно обойтись вилкой
DB-25M + корпус к ней и шлейфом с шагом 2 миллиметра,
например от дисковода, отщипнув от него нужное количество жил (в нашем
случае семь). Шлейф с более мелким шагом сложнее будет распаивать.
Особое внимание уделите длине кабеля. Если используется НЕ принтерный кабель
(шлейф, например), его длину следует ограничить 10-15 сантиметрами. Я
испытал эту проблему на собственном опыте. Сделав изначально кабель длинной 40 сантиметров мне
так и не удалось нормально прошить микроконтроллер. Процесс программирования
проходил успешно, но вот верификация не проходила. Сократив длину кабеля до 10 сантиметров
процесс программирования и верификации в большинстве случаев стал проходить
успешно. В случае использования принтерного кабеля увлекаться тоже не стоит.
Береженого бог бережет.
Если сборка ведется на макетной плате, достаточно впаять панели под
микросхемы и распаять шлейф. Если программатор изготавливается под несколько
моделей микроконтроллеров и, соответственно, под несколько панелей, все
соответствующие сигналы необходимо соединить между собой. То есть вывод 1
панели под микроконтроллер ATmega8 необходимо соединить с выводом 9 панели под
микроконтроллер ATmega16 (смотри таблицы 2 и 3) и так далее. Результат моего
"творчества" представлен на рисунке 2.
Рисунок 2. Вид готового программатора на макетной плате
Если же сборку планируется вести на текстолите, необходимо изготовить
печатную плату. Пример собранного устройства с
использованием указанной разводки представлена на рисунке 3.
Рисунок 3. Вид готового программатора на печатной плате
После сборки тщательно проверяем мультиметром конструкцию на возможные
замыкания. Рекомендую не пропускать этот этап. Сэкономите массу времени и
нервов в дальнейшем.
Все. На этом сборку программатора можно считать завершенной. Теперь можно
вставить микроконтроллер-жертву в программатор и подключить программатор к LPT
порту Вашего компьютера. Рекомендую подключать программатор к выключенному
компьютеру. Напоследок осталось разобраться с программной частью.
Прошивка микроконтроллера
А "прошивать" мы будем с помощью великолепной программы AVReAl. Перейдя по ссылке Вы сможете
скачать последнюю версию этой программы а так же драйвер, необходимый для ее
работы в операционных системах Windows NT, Windows 2000, Windows XP/2003.
Предположим что драйвер успешно установлен, программа скачана и распакована,
прошивка имеется, программатор подключен, а на часах третий час ночи. Остается
только запустить программу с нужными параметрами и убедиться, что все работает
как надо.
Прежде всего кратко опишем параметры, которые нам понадобятся:
- +имя_контроллера
- указывает программе AVReAl тип контроллера.
- -pN -
указывает, какой LPT порт необходимо использовать. Вместо N необходимо
подставить номер порта. Как правило это порт номер 1.
- -ap -
указывает, что программатор не имеет своего источника напряжения и
питается от свободных линий LPT порта. Не задавайте этот ключ, если Вы
подключили к программатору внешний источник питания.
- -o0 -
указывает, что необходимо генерировать тактовые импульсы для
микроконтроллера. Необходим в том случае, если микроконтроллер настроен на
использование кварцевого или керамического резонатора. Я рекомендую
сначала пробовать "прошивать" без этого ключа.
- -w -
указывает на то, что указанный файл прошивки нужно залить в
микроконтроллер.
- -v -
указывает на то, что указанный файл прошивки нужно сравнить с содержимым
микроконтроллера (верифицировать прошивку).
Краткую справку по этим и другим параметрам, а так же список поддерживаемых
микроконтроллеров можно получить, запустив в командной строке программу avreal
с параметром -h:
avreal32.exe -h
Законченная командная строка для "заливки" прошивки в
микроконтроллер (например, в ATmega16) будет выглядеть следующим образом:
avreal32.exe +mega16 -p1 -ap -o0 -n -2 -w имя_файла_прошивки.hex
Однако до прошивки микроконтроллера следует стереть содержимое флэш-памяти.
Если этого не сделать, данные в контроллере скорее всего окажутся не
корректными. Сделать это можно следующей командой:
avreal32.exe +mega16 -p1 -ap -o0 -n -2 -e
Верифицировать прошивку можно следующей командой:
avreal32.exe +mega16 -p1 -ap -o0 -n -2 -v имя_файла_прошивки.hex
Верификацией пренебрегать не стоит, нередко случаются сбои при прошивке.
Если верификация прошла неуспешно, повторно залейте прошивку в контроллер.
Скачать архив
AVReal