В статье описан простой программатор для прошивки микроконтроллеров фирмы Atmel через COM порт ПК или ноутбука. Устройство испытывалось в ОС Windows с программами Uniprof и Algorithm Builder, а также в ОС ALT Linux с программой Avrdude. Им были запрограммированы микроконтроллеры Atmega8, Attiny2313, Attiny15 и Attiny25.
Однажды возникла задача — собрать простой программатор для микроконтроллеров AVR, который мог бы работать с COM портами как стационарных компьютеров так и ноутбуков, и использовать программное обеспечение не только для ОС Windows но и Linux.
После просмотра ряда интернет форумов возникло решение использовать модификацию известного за рубежом простого последовательного программатора DASA. Базовый программатор DASA представляет собой простейшую схему на резисторах и стабилитронах [1]. Более поздние модификации DASA2 и DASA3 отличаются разводкой сигналов COM порта, а для более чёткой работы в них добавлен транзисторный инвертор сигнала RESET.
Оказалось, что в варианте DASA3 разводка сигналов COM порта практически совпадает с разводкой, применённой в схеме COM программатора Геннадия Громова [2]. Это позволяет с одним и тем же устройством использовать несколько программ прошивки микроконтроллеров, работающих как в ОС Windows, так и Linux.
Благодаря использованию стабилитронов программатор DASA не требователен к уровню сигналов на COM порте. Поэтому он может работать как со стационарными ПК (где величина сигналов на порте обычно составляет ±12В), так и с ноутбуками (где значение логических сигналов порядка ±5В).
Принципиальная схема собранного программатора «DASA3+R» показана на рис.1. Резисторы R1-R4 ограничивают токи, протекающие по выводам COM порта, а стабилитроны VD1-VD3 преобразуют его напряжения к стандартному TTL уровню 5В. Диод VD4 защищает микроконтроллер от подачи напряжения питания ошибочной полярности.
# unknown (dasa3 in uisp)
# reset=!dtr sck=rts mosi=txd miso=cts
programmer
id = ''dasa3'';
desc = ''serial port banging, reset=!dtr sck=rts mosi=txd miso=cts'';
type = serbb;
reset = ~4;
sck = 7;
mosi = 3;
miso = 8;
и убрать признак инверсии сигнала RESET — волнистую линию перед цифрой 4.
Если Вы не хотите работать с Avrdude в консольном режиме, то можно применить какую-либо графическую оболочку. Достаточно проста и удобна кросс платформенная утилита AvrFuse [4], разработанная японским радиолюбителем Maraca.
Утилита имеет наглядное меню с тремя вкладками (рис.4). В первой выбирают тип программатора (dasa3) и микроконтроллера, а так же программируемый сегмент памяти (FLASH или EEPROM). Во второй вкладке помещён список бит конфигурации (fuse бит). На третьей вкладке следует указать используемый порт (COM1 или COM2), а также каталог, где находится программа Avrdude.
Рис.4 Окно программы AvrFuse
В утилите AvrFuse имеется незначительная недоработка (баг). При записи fuse бит выдаётся ложное сообщение об ошибке, хотя проверочное чтение показывает, что они прошиваются верно.
При изменении fuse бит надо быть внимательным (чтобы не привести микроконтроллер в неработоспособное состояние) и учитывать, что в разных программах fuse биты задаются по разному. В утилите AvrFuse принята обратная нотация бит, т.е выбранный галочкой fuse бит равен 0 («запрограммирован»). В программах Algorithm Builder и Uniprof принята прямая нотация, где выбранный галочкой fuse бит равен 1 («не запрограммирован»).
Работа в операционной системе ALT Linux.
Программа Avrdude устанавливается из репозитория ALT Linux при помощи менеджера пакетов Synaptic. Если установка удалась, то после ввода в консоли команды avrdude появится справочная информация по работе с программой.
Затем перейдём в режим суперпользователя (root), введя команду su и пароль, и запустим Midnight Commander командой mc. Найдём каталог /etc/avrdude и отредактируем в нём файл avrdude.conf как описано выше.
После подсоединения программатора с COM порту и микроконтроллеру подаём на микроконтроллер напряжение питания 3,6-5В и проверяем работу программатора консольной командой такого вида:
avrdude -c dasa3 -P /dev/ttyS0 -p attiny2313
здесь ключ -с определяет тип программатора; ключ -P задаёт порт, /dev/ttyS0 это порт COM1 (для порта COM2 надо будет написать /dev/ttyS1); опция -p указывает тип подключённого микроконтроллера.
При правильном подключении и исправной схеме появится сообщение о готовности микроконтроллера к приёму команд:
[andrew@localhost ~]$ avrdude -c dasa3 -P /dev/ttyS1 -p attiny2313
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e910a
avrdude: safemode: Fuses OK
avrdude done. Thank you.
Чтобы установить графическую оболочку AvrFuse скачайте файл avrfuse1.0.2.tar.gz и распакуйте его в Ваш домашний каталог (у меня это каталог /home/andrew) в виде отдельной папки avrfuse1.0.2. Для запуска программы перейдите в эту папку и выполните скрипт start.sh. Для этого в консоли подают две команды:
cd avrfuse1.0.2
./start.sh
При настройке оболочки на вкладке Program выбирают тип программатора dasa3 и модель микроконтроллера, а на вкладке Setting указывают путь к программе Avrdude, а именно /usr/bin и номер последовательного порта /dev/ttyS0 для COM1 или /dev/ttyS1 для COM2.
Литература.
[1] http://forums.ladyada.net/viewtopic.php?f=24&t=8126
[2] http://algrom.net/russian.html (см. файл для инсталляции)
[3] http://avr.nikolaew.org/progr.htm
[4] http://www11.ocn.ne.jp/~maracas/avrfuse.html
Файлы печатных плат в формате Sprint Layout: dasa3-idc10.lay dasa3-pc7.lay