COM программатор для микроконтроллеров AVR .


В статье описан простой программатор для прошивки микроконтроллеров фирмы Atmel через COM порт ПК или ноутбука. Устройство испытывалось в ОС Windows с программами Uniprof и Algorithm Builder, а также в ОС Linux Mandriva 2008.1 Spring с программой Avrdude. Им были запрограммированы микроконтроллеры Atmega8, Attiny2313, Attiny15 и Attiny25.


Однажды возникла задача — собрать простой программатор для микроконтроллеров AVR, который мог бы работать с COM портами как стационарных компьютеров так и ноутбуков, и использовать программное обеспечение не только для ОС Windows но и Linux.

После просмотра ряда Интернет форумов возникло решение использовать модификацию известного за рубежом простого последовательного программатора DASA. Базовый программатор DASA представляет собой простейшую схему на резисторах и стабилитронах [1]. Более поздние модификации DASA2 и DASA3 отличаются разводкой сигналов COM порта, а для более четкой работы в них добавлен транзисторный инвертор сигнала сброса RESET.

Оказалось, что в варианте DASA3 разводка сигналов практически совпадает с разводкой, примененной в схеме COM программатора Геннадия Громова [2]. Это позволяет с одним и тем же устройством использовать несколько программ прошивки микроконтроллеров, работающих как в OC Windows, так и в Linux.

Благодаря использованию стабилитронов программатор DASA не требователен к уровню сигнала на COM порте. Поэтому он может работать как со стационарными ПК (где величина сигналов на порте обычно составляет ±12В), так и с ноутбуками (где значение логических сигналов порядка ±5В).

Принципиальная схема собранного программатора «DASA3+R» показана на рис.1. Резисторы R1-R4 ограничивают токи, протекающие по выводам COM порта, а стабилитроны VD1-VD3 преобразуют его напряжения к стандартному TTL уровню 5В.

В устройстве можно использовать любые широко распространенные резисторы мощностью 0,125 -0,25Вт, например типов МЛТ, С2-33, С2-36, CF и т.д. Стабилитроны VD1-VD3 с напряжением стабилизации 4,7В BZX55C4V7 или КС147А, КС147В. Розетка для COM портов XS1 типа DB9F.


Рис.1 Схема COM программатора.


Рис.2 Эскиз печатной платы.



Конструктивно программатор собран на печатной плате из односторонне фольгированного стеклотекстолита толщиной 1мм. Её эскиз показан на рис.2. С правой стороны платы можно оставить выступ для закрепления кабеля программирования изолентой, чтобы избежать перелома его проводов.



Работа в операционной системе Windows.

Программатор полностью совместим с утилитой Михаила Николаева Uniprof [3].

Так же им можно читать и прошивать микроконтроллеры в среде программирования Algorithm Builder, однако из-за различий со схемой [2] нельзя использовать режим внутрисхемной отладки с кристаллом.

Подробнее остановимся на использовании программы Avrdude. Это мощная кроссплатформенная консольная утилита, функционирующая как в ОС Windows, так и в Linux. Но для ее нормальной работы надо учесть, что в оригинальном программаторе DASA3 сигнал сброса RESET инверсный, а в описываемом программаторе (как и в программаторе Громова) он не инверсный. Поэтому нужно отредактировать файл конфигурации avrdude.conf. В нем надо найти следующие строки:



# 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.

Утилита имеет наглядное меню с тремя вкладками (рис.3). В первой выбирается тип программатора (dasa3) и микроконтроллера, а так же вид программируемого сегмента памяти (FLASH или EEPROM). Во второй вкладке помещен список бит конфигурации (fuse бит). На третьей вкладке следует указать используемый порт (COM1 или COM2), а также каталог, где находится программа Avrdude.


Рис.3 Графическая оболочка AvrFuse.


В утилите AvrFuse имеется незначительная недоработка (баг). При записи fuse бит выдается ложное сообщение об ошибке, хотя проверочное чтение показывает, что они прошиваются правильно.

При изменении fuse бит следует быть внимательным (чтобы не привести микроконтроллер в неработоспособное состояние) и учитывать, что в разных программах fuse биты задаются по-разному. В утилите AvrFuse принята обратная нотация бит, т.е. выбранный галочкой fuse бит равен 0 («запрограммирован»). В программах Algorithm Builder и Uniprof напротив, принята прямая нотация, где выбранный галочкой fuse бит равен 1 («не запрограммирован»).



Работа в операционной системе Linux Mandriva.

Чтобы установить программу Avrdude надо инсталлировать два rpm пакета [5]: libreadline6-6.0-1mdv2009.1.i586.rpm и avrdude-5.5-3mdv2009.1.i586.rpm. Если установка удалась, то после ввода в консоли команды avrdude появится справочная информация по работе с программой.

Затем перейдем в режим супер пользователя (root), введя команду su и пароль, и

запустим Midnight Commander командой mc. Найдем каталог /etc/avrdude и отредактируем в нем файл avrdude.conf как описано выше.

После подсоединения программатора к COM порту и микроконтроллеру подаем на микроконтроллер напряжения питания 3,6..5В и проверяем работу программатора консольной командой такого вида:

avrdude -c dasa3 -P /dev/ttyS1 -p attiny2313

здесь ключ  определяет тип программатора; ключ -P задает порт, /dev/ttyS1 это порт COM2 (для порта COM1 надо будет написать /dev/ttyS0); опция -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.1.tar.gz и распаковать его в Ваш домашний каталог (у меня это каталог home/andrew) в виде отдельной папки avrfuse1.0.1 .Чтобы запустить программу просто перейдите в эту папку и выполните скрипт start.sh. Для этого в консоли подают две команды:

cd avrfuse1.0.1

./start.sh


При настройке оболочки на вкладке Program выбирают тип программатора dasa3 и модель микроконтроллера, а на вкладке Setting указывают путь к программе Avrdude, а именно /usr/bin и номер последовательного порта /dev/ttyS1 для COM2 или /dev/ttyS0 для COM1.

Теперь Вы можете программировать микроконтроллеры и в Линукс.