Представленная в этой статье схема программатора для микроконтроллеров AVR довольно проста и имеет массу преимуществ по сравнению с программатором «5 проводов». Во первых, данный программатор позволяет осуществлять программирование микроконтроллера непосредственно в схеме (внутрисхемное программирование), что очень удобно при экспериментах с прошивкой. Во вторых, он рассчитан на подключение к USB порту компьютера, а не к LPT, которого нет ни в одном ноутбуке, да и в настольных компьютерах LPT постепенно вымирает.
Этот программатор разработан Рыжковым Андреем (aka PROTTOSS). Оригинал статьи находится здесь. В данной статье приведена схема и описание по состоянию на 17.06.2009. Перед тем, как собирать ее, убедитесь, нет ли обновлений на сайте автора.
Программатор выполнен на основе драйвера от Objective Development и полностью совместим по командам с оригинальным программатором AVR910 от ATMEL. Описание оригинальной схемы программатора можно взять в Application Note AVR910: In-System Programming, а список поддерживаемых команд можно посмотреть в Application Note AVR109: Self Programming.
Схема программатора приведена на рисунке 1. Предохранитель F1 служит для защиты линий питания порта USB от случайного замыкания по цепям питания программатора. Диоды VD1, VD2 – обычные выпрямительные, с прямым падением напряжения ~0,6…0,7В, предназначены для понижения питания микроконтроллера DD1 до 3,6 В. Согласно документации ATMEL на ATmega8(L), микроконтроллер может работать при таком напряжении питания до частоты немногим выше 14 МГц. Светодиоды VL1(“RD”), VL2(“WR”) сигнализируют о текущих действиях программатора, и, соответственно, обозначают режимы чтения и записи. Светодиод VL3(“PWR”) предназначен для сигнализации подачи питания на программатор.

Рисунок 1. Схема программатора
Джампер J1 – (MODify) служит для начального программирования управляющего МК программатора. При его замыкании, к разъему ISP подключается внешний программатор и производится загрузка в МК управляющей программы. После программирования управляющего МК программатора этот джампер необходимо разомкнуть и замкнуть джампер J2 - NORMal.
С помощью джампера J3 LOW SCK возможно понижать тактовую частоту порта SPI МК программатора до ~20 кГц. При разомкнутом джампере частота SPI нормальная, при замкнутом - пониженная. Переключать джампер можно на ходу, так как управляющая программа МК программатора проверяет состояние линии PB0 при каждом обращении к порту SPI. Не рекомендуется переключать джампер при запущенном процессе записи/чтения программируемого МК, т.к., скорее всего, это приведет к искажению записываемых/читаемых данных. Джампер J3 введен для возможности программирования МК AVR, тактируемых от внутреннего генератора 128 кГц.
Резисторы R10 - R14 предназначены для согласования уровней сигналов МК программатора и внешних, подключенных к программатору, цепей (программируемый МК или другой программатор).
Тактовая частота порта SPI МК программатора при разомкнутом джампере J3 равна 187,5 кГц. Это позволяет программировать контроллеры с тактовой частотой примерно от 570 кГц для ATtiny/ATmega, 750 кГц для 90S и 7,5 МГц для 89S. Контроллеры программируются от 10 до 30 секунд (при использовании утилиты AVRProg v.1.4 из пакета AVR Studio) вместе с верификацией в зависимости от объема FLASH памяти и тактовой частоты.
На вывод LED разъема ISP выведен меандр с частотой 1 МГц для "оживления" МК, у которых были ошибочно запрограммированы фьюз-биты, отвечающие за тактирование. Сигнал генерируется постоянно и не зависит от режима работы программатора.
Программатор тестировался с программами AVRProg v.1.4 (входит в пакет AVRStudio), ChipBlasterAVR v.1.07 Evaluation, CodeVisionAVR, AVROSP (ATMEL AVR Open Source Programmer). Кроме того, программатор тестировался с программой
AVRDUDE, однако, программа с данным программатором не совместима, так как не все команды протокола AVR910 отрабатывает корректно.
На данный момент с вышеперечисленными программами протестировано программирование контроллеров 89S53, 89S8252, 90S2313, 90S8515, ATtiny13, ATtiny26, ATtiny45, ATtiny2313, ATmega48, ATmega8, ATmega8515, ATmega8535, ATmega16, ATmega32, ATmega64, ATmega128, AT90CAN128.
Я рекомендую повторять схему один-в-один, так как выкидывание "лишних" деталей из схемы может привести либо к неправильному функционированию программатора, либо к возможному выходу из строя USB порта на РС, за что, естественно, я ни какой ответственности не несу.
Мною была разработана печатная плата для этого программатора. Размер платы составляет 55x54 мм. Рисунок печатной платы с указанием расположения деталей представлен на рисунке 2. Проект разрабатывался в програме DipTrace 2 (скачать архив со схемой и печатной платой для среды Diptrace 2).

Рисунок 2. Рисунок печатной платы
Плата рассчитана на применение следующих деталей:
Перед установкой панели под микроконтроллер не забудьте установить перемычку.
Для нормального функционирования контроллера в схеме необходимо, чтобы были запрограммированы (установлены в "0") биты SPIEN, CKOPT, SUT0 и BODEN. Обычно микроконтроллеры , идущие с завода, т.е. новые, имеют уже запрограммированный бит SPIEN. Остальные биты должны быть незапрограммированные (установлены в "1").
Как правило, правильно собранный, программатор с правильно запрограммированным МК в настройке не нуждается. Есть единственное замечание – если у программируемого МК вход RESET подтянут к напряжению питания резистором, то номинал резистора не должен быть ниже 10 кОм – это связанно с пониженным напряжением питания управляющего МК программатора и введением ограничительных резисторов на шине ISP-разъема.
Если возникли проблемы
Прошить контроллер. Подключить свежеиспеченный программатор к РС через свободный разъем USB. Операционная система найдет новое устройство – AVR910 USB Programmer, при предложении автоматически найти драйвер, отказаться, и указать путь к inf-файлу, в зависимости от установленной на вашем компьютере операционной системы.
В архиве с прошивкой имеется папка "AVR910.Driver" в которой расположены три директории для разных вариантов операционных систем:
В принципе, инсталляция не отличается от подобной для Windows XP, но есть одно НО - задержки в драйвере usbser.sys данной ОС портят цепочку команд от ПО на РС до программатора и, соответственно, цепь ответов обратно от программатора до ПО на РС... Проблему я пока не установил, но есть решение. Конечно не самое красивое, но работает надежно :-) Необходимо заменить файл usbser.sys в системных папках Windows 2000 на аналогичный от Windows XP. Это папки ...\winnt\system32\drivers\ и ...\winnt\system32\dllcashe\. Файл usbser.sys от Windows XP SP1 можно взять здесь. Естественно, что драйвер придется подменять загрузившись под другой ОС (например с загрузочного диска).
Этих операционных систем, к сожалению, пока в распоряжении не имею, по этому не гарантирую работу драйвера. Вот мой перевод рекомендаций по установке от Osamu Tamura (Recursion Co., Ltd.).
Windows Vista 64-bit не принимает драйверы привилегированного режима без цифровой подписи. Чтобы использовать данный драйвер на 64 битной платформе, Вы должны отключить проверку цифровых подписей драйверов, нажимая функциональную клавишу F8 во время начала загрузки системы.
Второй вариант, использование программы "Driver Signature Enforcement Overrider", которая подписывает драйвер как "testdriver" и активизирует "testmode", таким образом Вы можете загрузить драйвер без реальной цифровой подписи. Вы можете найти более детальное описание на странице программы, пройдя по ссылке выше.
Установка:
Оригинальные драйвера для AVR CDC от Osamu Tamura можно взять здесь. Просьба: в случае удачной установки и нормальной работы, а так же если обнаружили ошибки в переводе сообщить мне или автору программатора.
Собранное мною устройство заработало практически сразу. Ошибся только в установке источника тактового сигнала, из-за чего операционная система не хотела признавать устройство. Драйвера использовал оригинальные. Фотография готового устройства представлена на рисунке 3. Пользуюсь уже около полугода в операционной системе Windows Vista 32, глобальных глюков не было. Программирую с помощью AVRProg из состава AVR Studio 4. Программирует очень быстро, но поддерживает далеко не все микроконтроллеры. Если AVRProg нужный мне микроконтроллер не поддерживает, пользуюсь CVAVR, которая поддерживает практически все, но ужасно медленно программирует. По всей видимости, пакетный режим передачи данных этой средой не поддерживается.

Рисунок 3.Фотография готового устройства