Поиск по этому блогу

8 янв. 2014 г.

Самый миниатюрный USB-программатор MicroProg для контроллеров AVR

В настоящее время контроллеры AVR фирмы Atmel имеют большую популярность среди радиолюбителей. Они функциональны, дешевы, просты в освоении и достаточно выносливы. Одновременно с этим растет потребность в программаторах для этих контроллеров.

В литературе уже опубликовано большое количество разнообразных схем, как простых, так и сложных, подключаемых к различным портам компьютера (LPT, COM, USB) [1-3]. Из USB-программаторов наибольшее распространение получили USBasp [4] и AVR910 [5]. Они относительно просты, миниатюрны, поддерживают большую номенклатуру контроллеров.

Задачей автора стала разработка еще более простого, миниатюрного, дешевого, функционального и универсального программатора, в результате чего и появилась на свет данная конструкция. Схема устройства представлена на рисунке 1.

Рисунок 1 – Схема программатора

За основу был взят проект CDC-SPI японского автора Osamu Tamura [6]. В отличие от оригинала, напряжение питания программатора и программируемого микроконтроллера составляет не 3,3 В, а 5 В, что позволяет расширить ряд программируемых контроллеров. Кроме того, были внесены некоторые изменения в программу прошивки контроллера.

Ядром программатора является микроконтроллер DD1 ATTiny45. Изюминкой схемы является то, что в качестве тактового генератора контроллера используется генератор системы ФАПЧ частотой 16,5 МГц, что позволило отказаться от применения уже привычного в данных схемах внешнего кварцевого резонатора. Конденсатор С1 снижает пульсации по питанию. Резисторы R2, R3 токоограничительные (величиной 68 – 82 Ом), работают в паре со стабилитронами VD1, VD2 и служат для защиты компьютера от высокого напряжения (по стандарту не более 3,6 В) Они могут быть заменены отечественными КС136 либо импортными с маркировкой 3V3, 3V6. Резистор R1 указывает компьютеру, что подключенное устройство работает на скорости LS, его номинал может изменяться в диапазоне 1,5 – 2,2 кОм. Резисторы R4-R7 служат для защиты выходов контроллера от короткого замыкания и согласования логических уровней в случае раздельного питания контроллера и программатора, их величина может изменяться от 270 до 560 Ом. Для соединения программатора и компьютера используется пятипиновое гнездо mini-USB (XS1). Это сделано для уменьшения размеров печатной платы, а также исходя из того, что кабель mini-USB имеется практически у каждого. Подключение программатора к программируемому контроллеру осуществляется при помощи 10-контактного разъема XS2, распиновка которого соответствует стандарту STK200/300 (рис. 2). Можно использовать другую стандартную распиновку либо придумать свою, но тогда придется изменить печатную плату.
Рисунок 2 – Распиновка ISP-разъема.

Программатор собран на плате из одностороннего фольгированного стеклотекстолита размером 14х28 мм. Внешний вид дорожек платы представлен на рис. 3, а расположение деталей на ней – на рис. 4. При этом синим цветом обозначены детали, устанавливаемые со стороны монтажа, а зеленым – с верхней стороны платы. Файл с печатной платой в формате программы DipTrace можно скачать здесь.


Рисунок 3 – Разводка печатной платы

Рисунок 4 – Расположение деталей на плате

Внешний вид программатора со стороны монтажа и общий вид программатора представлены на рисунках 5 и 6 соответственно.


Рисунок 5 – Внешний вид программатора со стороны монтажа

Рисунок 6 – Общий вид программатора

Для тех, кому сложно достать не слишком пока распространенный контроллер ATTiny45, автором была разработана схема на более широко используемом контроллере ATTiny2313 (рис. 7)

Рисунок 7 – Схема программатора на ATTiny2313

Схема отличается от предыдущей только наличием кварцевого резонатора ZQ1, частота которого должна равняться 12 МГц и конденсаторами C1 и C2, емкость которых может изменяться в пределах 18 – 24 пФ. И кроме того, в схеме вместо сложного в распайке гнезда mini-USB применено так называемое «принтерное» гнездо типа USB-B. Печатная плата для данной схемы разработана на обычных деталях, что несколько увеличило ее размеры, но позволило отказаться от сложных для пайки многими радиолюбителями smd-компонентами. 

Плата также выполнена из одностороннего фольгированного стеклотекстолита размером 30х50 мм. Внешний вид дорожек платы представлен на рис. 8, а расположение деталей на ней – на рис. 9. Файл с печатной платой в формате программы DipTrace можно скачать здесь.

Рисунок 8 – Разводка печатной платы программатора на ATTiny2313

Рисунок 9 – Расположение деталей на плате программатора на ATTiny2313

Внешний вид программатора со стороны монтажа и общий вид программатора представлены на рисунках 10 и 11 соответственно.


Рисунок 10 – Внешний вид программатора со стороны монтажа


Рисунок 11 – Общий вид программатора

Теперь что касается программной части. Файлы прошивки контроллера можно скачать вот тут: tiny45.hex и tiny2313.hex. После программирования flash-памяти контроллера для ATTiny45 необходимо установить следующие конфигурационные биты: CKSEL3, CKSEL2, CKSEL1 (тактирование от схемы ФАПЧ), BODLEVEL0 (детектор пониженного напряжения на 1,8 В), RSTDSBL (поскольку количество выводов микроконтроллера невелико, то вывод RESET используется в качестве обычного порта ввода-вывода). Для ATTiny2313 необходимо запрограммировать только бит BODLEVEL0, а остальные сбросить (естественно, SPIEN должен остаться установленным) (в журнале напечатали с ошибкой).

Несколько слов о том, как же запрограммировать контроллер, входящий в состав программатора, в первый раз при отсутствии под рукой самого программатора.

Для этой цели можно применить любую схему из описанных, например, в [1]. Простейший программатор, именуемый в народе «5 проводков», подключается к LPT-порту компьютера и состоит из всего 4 сопротивлений, но сейчас это порт является скорее архаизмом, чем нормой. Сам автор для первоначальной прошивки использовал программатор, представленный на рис. 7 в [1]. Он подключается с СОМ-порту компьютера и имеет ряд панелек для установки различных микроконтроллеров, что позволяет с легкостью запрограммировать контроллер перед его монтажом в устройство. Управляется программатор от известной программы PonyProg. Небольшой нюанс. PonyProg не знает ни ATTiny2313, ни ATTiny45, поэтому выберите любой контроллер с объемом памяти не меньше, чем 4 кб, например, ATMega8. При прошивке программатор выдаст ошибку о неверном типе контроллера. Выберите «Ignore» и контроллер все равно будет прошит.

Кроме того, поскольку прошивка контроллера ведется через интерфейс внутрисхемного программирования SPI, то возможно (и даже желательно для ATTiny45) прошивать его непосредственно в устройстве уже после распайки.

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

Таблица 1 – Выводы для программирования контроллеров
Номер вывода Обозначение Описание 
 ATtiny45ATtiny2313 
20VCC Питание контроллера 
410GND Общий вывод
618MISO Выход данных контроллера
517MOSI Вход данных контроллера
719SCKВход тактовых импульсов
11RESВход сброса

При использовании для программирования разъема XS2 необходимо учесть следующий нюанс. При прошивке контроллера он выступает ведомым, и для него вывод MISO является выходом, а MOSI – входом. Когда же контроллер сам выступает в роли программатора, то он сам является ведущим, и входы MISO и MOSI меняются местами (сравните рисунки 1 и 7 с таблицей 1).

При программировании контроллера ATTiny45 все необходимые выводы подведены к разъему XS2, в этом случае схема подключения будет иметь следующий вид (рис. 12). Поскольку обе части разъемов XS2 и XS3 представляют собой гнезда, то можно либо спаять кабель со штекерами с обеих сторон, либо выполнить соединения проводками, втыкая их в соответствующие контакты гнезд. На разъеме внешнего программатора не проставлены номера выводов – они могу быть различными для разных типов программаторов, и их следует уточнить в документации для каждого конкретного программатора.

При программировании же контроллера ATTiny2313 сигнал сброса, подводимый к выводу RESET, формируется линией РВ0 (см. рис. 7). В этом случае сигнал сброса от внешнего программатора необходимо подключать непосредственно к выводу RESET контроллера ATTiny2313 (вывод 1), подпаяв к нему дополнительный проводок (рис. 13). Можно обойтись и вовсе без него, но тогда необходимо перед подачей питания на контроллер замкнуть вывод RESET на землю, однако в данном случае возможны сбои, и этот вариант не рекомендуется для повторения.

Рисунок 12 – Подключение внешнего программатора при прошивке ATTiny45

Рисунок 13 – Подключение внешнего программатора при прошивке ATTiny2313

Еще одно замечание. COM- и LPT-программаторы обычно не имеют вывода питания, поэтому питание платы с контроллером может осуществляться от шины USB через разъем XS1. В этом случае перемычка VCC-VCC не требуется.

ВНИМАНИЕ!!! Перед установкой бита RSTDISBL убедитесь в работоспособности схемы, иначе после его установки дальнейшее программирование микроконтроллера через ISP становится невозможным.

Схема на микроконтроллере ATTiny2313 при правильном монтаже начинает работать сразу же без дополнительной настройки. 

Для проверки работоспособности схемы на микроконтроллере ATTiny45 можно поступить следующим образом: в flash-память контроллера записать файл tiny45.hex, установить все конфигурационные биты кроме RSTDISBL, собрать схему, подключить ее к USB-порту компьютера. Если все сделано верно, то появится надпись о том, что обнаружено новое устройство MICROPROG (рис. 14) и система попросит установить драйвера на него. 

Рисунок 14 – Подключение программатора в первый раз

Для пользователей систем MS Windows 2000, ME, XP необходимо выбрать «Установка из указанного места» и указать в качестве директории с драйверами папку \avrcdc_inf\raw\ из архива, лежащего здесь

Рисунок 15 – Установка драйвера на ОС Windows XP

На сообщение системы о том, что программное обеспечение не тестировалось на совместимость с Windows XP необходимо выбрать «Все равно продолжить» (рис. 16)

Рисунок 16 – Предупреждение ОС

Для пользователей других версий Windows необходимо выбрать папку с соответствующим названием (\vista64, \xpvista7). Следует заметить, что драйвера взяты из оригинальной конструкции Osamu Tamura [7]. 
После установки драйверов в системе появится новый виртуальный COM-порт, в чем можно убедиться, зайдя в диспетчер устройств (рис. 17)

Рисунок 17 – Появление нового виртуального порта в системе

Если посмотреть свойства данного порта, то можно видеть, что это как раз наш программатор MICROPROG (рис. 18)

Рисунок 18 – Программатор определился в системе

Итак, мы убедились, что аппаратная часть программатора исправна. Теперь можно смело устанавливать конфигурационный бит RSTDISBL. Более никаких настроек для работы с программатором на контроллере ATTiny45 не требуется. Если монтаж выполнен правильно, то устройство начинает работать сразу же. Все вышеописанные действия в равной степени относятся и к программатору, собранном на базе ATTiny2313, за исключением установки бита RSTDISBL

Для работы с программатором MICROPROG автором была разработана специальная программа MicroProg.exe. Главное окно программы представлено на рис. 19.

ВНИМАНИЕ!!! Программатор необходимо подсоединять к компьютеру до запуска программы. При перестыковке программатора необходимо перезапустить программу.

Рисунок 19 – Главное окно программы MICROPROG

Разберемся с назначением основных элементов интерфейса программы. Для автоматического определения типа подключенного к программатору микроконтроллера служит кнопка «Автоопределение». При этом автоматически считываются идентификатор микроконтроллера, калибровочные и конфигурационные ячейки и биты защиты. 

Если же по каким-то причинам автоопределение контроллера дает неверные результаты, то можно установить тип контроллера вручную при помощи выпадающего списка «Ручной выбор контроллера». При этом конфигурационные биты и биты защиты устанавливаются по умолчанию для данного типа контроллера, поэтому стоит быть внимательным, чтобы не ошибиться. Следует заметить, что номенклатура поддерживаемых контроллеров несколько отличается от таковой у программатора AVRDUDE [8]. Во-первых, MICROPROG не поддерживает контроллеры семейства Classic и контроллеры с объемом памяти больше 128 кБ. Во-вторых, им поддерживаются новые чипы, еще не включенные в список AVRDUDE. Кроме того, этот список будет постоянно обновляться автором по мере выхода новых контроллеров.

Следующая, и одна из наиболее полезных особенностей данного программатора – это программное изменение частоты тактовых импульсов SCK. При этом имеется на выбор 5 фиксированных частот (1 МГц, 250 кГц, 50 кГц, 10 кГц, 2 кГц). Выбор частоты осуществляется из выпадающего списка «Частота тактового сигнала». По умолчанию при подключении программатора у него всегда устанавливается частота 1 МГц, поэтому будьте внимательны: если подключенный контроллер не определяется устройством, возможно, что для него установлена слишком высокая частота импульсов SCK. Попробуйте снизить ее и повторить попытку.

Возможно, у кого-то возникнет вопрос, зачем нужна столь низкая частота, как 2 кГц. Автор однажды столкнулся со следующей проблемой. При тактировании контроллера ATtiny13 внутренним генератором частотой 128 кГц и запрограммированном фьюзе CKDIV8 реальная тактовая частота контроллера установилась на уровне 16 кГц. При этом как следует из инструкции к контроллерам AVR, частота импульсов SCK должна быть меньше тактовой как минимум в 2,5 раза, то есть на уровне 6 кГц. Минимальная же частота импульсов SCK для того же программатора USBasp составляет 8 кГц, чего как оказалось, недостаточно. Таким образом, абсолютно рабочий контроллер оказался негодным к употреблению, пока не был создан программатор MICROPROG, который таки смог вернуть его к жизни. Но вернемся к описанию.

В поле «Идентификатор» указывается трехбайтовый шестнадцатеричный код, уникальный для каждого типа контроллера. Это поле доступно только для чтения.

В поле «Калибровочные ячейки» указываются значения, занесенные заводом-изготовителем при калибровке внутреннего RC-генератора контроллера. Количество значений зависит от количества фиксированных  тактовых частот микроконтроллера (на рис. 15 для ATTiny13 таких значений два – для 4,8 МГц и для 9,6 МГц). Это поле также доступно только для чтения.

В блоке «Конфигурационные ячейки» задаются конфигурационные биты, или фьюзы. Всего в микроконтроллерах AVR имеется три конфигурационных байта – старший (High Fuse, HF), младший (Low Fuse, LF) и дополнительный (Extended Fuse, EF). В представленной программе имеется двойная возможность задавать значения этих байтов.

1. Побитно, устанавливая или снимая флажки с соответствующих битов (важно помнить, что установленный флажок сбрасывает соответствующий бит в 0)

2. Побайтно, задавая сразу значение всего конфигурационного байта в правой части окна программы. Значение байта задается в шестнадцатеричном коде.

Оба способа задания конфигурационных ячеек равноценны. Изменения, созданные одним способом тут же отображаются и другим способом.

Кнопка «Чтение» позволяет считать фьюзы из контроллера. Кнопка «Запись» – записать выбранные в программе фьюзы в контроллер. Кнопка «Верификация» сравнивает выбранные в программе фьюзы с теми, которые записаны в контроллер. Кнопка «По умолчанию» устанавливает фьюзы по умолчанию для данного типа контроллера согласно инструкции (при этом биты устанавливаются только в программе, для их записи в контроллер необходимо воспользоваться кнопкой «Запись»).

В блоке «Ячейка защиты» задаются биты защиты. Их установка позволяет защитить программный код от несанкционированного чтения или записи. Все компоненты этого поля аналогичны таковым для блока «Конфигурационные ячейки».

В блоке «Программирование» осуществляются операции с flash- и eeprom-памятью контроллера. Кнопка «Стирание кристалла» предназначена для стирания всех областей памяти, включая биты защиты, flash и eeprom (последняя не стирается при установленном бите EESAVE). При этом конфигурационные ячейки остаются без изменения.

Под кнопкой расположено два почти идентичных подблока «Программирование FLASH» и «Программирование EEPROM». По нажатию на кнопку «Файл НЕХ» открывается диалоговое окно выбора файла с расширением *.hex. Имя выбранного файла и путь к нему отображаются в поле справа от кнопки. При этом поле является редактируемым, то есть путь можно прописать и вручную. 

Кнопка «Чтение» позволяет считать flash-память контроллера в выбранный HEX-файл. По окончанию считывания на экране появится соответствующее сообщение. При этом в поле выбора файла можно указать имя несуществующего файла – он будет автоматически создан.

Кнопка «Запись» позволяет записать выбранный HEX-файл в flash-память контроллера. По окончанию программирования на экране появится соответствующее сообщение. ВАЖНО!!! Перед выполнением команды «Запись Flash» автоматически осуществляется выполнение команды «Стирание кристалла».

Кнопка «Верификация» позволяет сверить выбранный HEX-файл с содержимым flash-памяти микроконтроллера. По окончании процесса на экране появится сообщение об успешной верификации или об ошибке. Ошибка может быть вызвана установленными битами защиты или неверно выбранным для верификации файлом.

Назначение кнопок с идентичными названиями в подблоке «Программирование EERPOM» аналогично таковым для подблока «Программирование FLASH» за исключением того, что все операции здесь относятся к области eeprom-памяти, а файлы имеют расширение *.eep.

В нижней части экрана имеется полоса, отображающая ход выполнения процесса.

Для обсуждения работы программатора создана ветка на форуме сайта автора по адресу [9].

Все файлы, встречающиеся в статье, можно скачать одним архивом по этой ссылке

Литература

1. Рюмик С.М. Микроконтроллеры AVR. Ступень 1. – Радиоаматор. 2005. №1. с. 35-39.
2. Хлюпин Н. Два универсальных программатора. – Радио. 2006. №5. с. 27-30.
3. Котов И. Программатор микроконтроллеров AVR. – Радио. 2009. №1. с. 23-24.
4. Thomas Fischl. USBasp - USB programmer for Atmel AVR controllers. http://www.fischl.de/usbasp/ 
5. Рыжков А. USB программатор микроконтроллеров AVR и AT89S, совместимый с AVR910. – Радио. 2008. №7. с. 28-29.
6. Osamu Tamura. Virtual COM Port over Low-Speed USB AVR-CDC
http://www.recursion.jp/avrcdc/cdc-spi.html
7. Osamu Tamura. Virtual COM Port over Low-Speed USB AVR-CDC. Downloads. – http://www.recursion.jp/avrcdc/download.html
8. AVRDUDE - AVR Downloader/UploaDEr. – http://www.nongnu.org/avrdude/
9. Сайт Сокола Сергея. Форум. Программатор MICROPROG. – http://sokolsp.at.ua/forum/2-3-1