4.5. Программатор

Одним из самых необходимых устройств для работы с микроконтроллерами является программатор. Это специальный прибор, позволяющий оттранслированную программу занести непосредственно в память микроконтроллера. Без него вся работа будет только теорией.

Существуют различные виды программаторов. Различаются они по сложности, цене, программному обеспечению для работы. Для микроконтроллеров семейства AVR можно выделить наиболее удачные программаторы — AS1 производства фирмы Аргуссофт, и AVReAl — самодельный, сконструированный Александром Редчуком. Последний отличается исключительной простотой в изготовлении и качеством работы, не уступающим промышленным программаторам.

В этой главе читатели могут познакомиться со схемой программатора, которая может работать с программой AVReAl, и научиться пользоваться этим программатором.

Программа avreal.exe с авторским описанием работы с ней находится на компакт-диске, прилагаемом к книге.

Программатор AVReAl может работать с различными схемами программаторов. Остановимся на схеме, совместимой с использованной в стартовой плате STK200 фирмы Atmel. Почему именно эта схема? Потому что она же может работать совместно с компилятором языка С CodeVision AVR.

Схема программатора показана на рис. 4.12.

Рис. 4.12. Схема программатора ATMEL STK200/STK300

Легко увидеть, что схема действительно предельно проста. Тем не менее она позволяет осуществлять все необходимые операции: проверять память микроконтроллера на наличие в ней программы, стирать ее содержимое, зашивать новую программу и т. д.

Внешний вид собранного программатора показан на рис. 4.13.

Рис. 4.13. Внешний вид программатора

Программатор работает с портом LPT1, 2 или 3. Если у вас порт LPT занят (например, принтером), можно купить на радиорынке отдельную плату с LPT-портом от старого компьютера, настроить ее на адрес порта LPT2 или 3 и подключать программатор к ней.

Следует иметь в виду, что длина проводов, соединяющих программатор и схему с микроконтроллером, не должна превышать 15…20 см. При большей длине начинают очень сильно влиять наводки на провода и возникают ошибки при работе программатора. Для удобства работы следует приобрести удлинитель порта LPT и подключить программатор к нему.

В качестве разъема для программирования рекомендую разъем типа LDC10. На рис. 4.14 изображен внешний вид этого разъема и его цоколевка. Номера выводов на схеме программатора соответствуют номерам на этом разъеме.

Рис. 4.14. Разъем IDC10

Следует стараться использовать на всех своих схемах с микроконтроллерами AVR один тип разъема программирования и его цоколевку — в этом случае можно будет пользоваться одним программатором для любых схем.

Описание программатора avreal

Автор программатора и настоящего описания: Александр Редчук.

(E-mail: real@real.kiev.ua).

AVReAl — программатор At90sXXXX через LPT.

Новые версии, описание и FAQ лежат на

http://www.ln.com.ua/~real/avreal;

http://www.chat.ru/~avreal.

Компилируется в следующих вариантах: 16-битовом DOS, для работы на процессорах начиная с 286; 32-битовом WIN32, для работы необходимы файлы: для Windows 95/98 — DLportIO.DLL, для Windows NT — LportIO.DLL и DLportIO.sys.

Это файлы из комплекта DriverLINX от Scientific Software Tools, Inc. (http://www.sstnet.com). Его поставка достаточно громоздкая, с примерами работы на С и VisualBASIC, автоматической инсталляцией DLportlO.SYS для Windows NT и т. д. — итого файл port95nt.exe имеет размер 1,6 Мб.

В переупакованном виде p95nt.zip лежит у автора на

http://www.ln.com.ua/~real/avreal/p95nt.zip.

Также существует вариант программатора для LINUX, но он еще недостаточно оттестирован.

Подключение LPT к чипу осуществляется через Altera ByteBlaster (ключ -ab) или через адаптер, совместимый с платами STK200/STK300 (ключ -as).

Подключение выводов процессоров:

При использовании буферированных адаптеров (Altera ByteBlaster, Atmel STK*00) программа рассчитана на работу в схеме с «родными» питанием и кварцем. Возможна генерация XTAL1 по линии LED в STK*00 и по дополнительной линии, выведенной на контакт 8 в ByteBlaster.

Программа использует файлы в формате INTEL HEX (avrasm -i). При этом она загружает файл прошивки не в массив, а в список. То есть различается ситуация «байт 0xFF в. hex» и «непомянугый байт». В результате есть возможность шить только то, что надо, остальное только проверять при необходимости (см. ключ — v+).

Для любителей патчить прямо по НЕХ-файлу: если не совпадает контрольная сумма строки, то задается вопрос: «игнорировать?». При ответе 'Y' (или 'у') эта и все остальные ошибки CSUM игнорируются (но сами символы контрольной суммы должны присутствовать, иначе программа завершит работу еще раньше по недопустимому символу в строке).

Для облегчения таких патчей (особенно «форматных» записей в EEPROM) реализована возможность, подсмотренная у программы от VMK@real.kiev.ua для программирования PIC через Tait-совместимое железо: перед анализом строки из нее убираются пробелы и табуляции. В итоге можно дать:

:08 0001 00 00 01 0203 0405 0 6 0 7 DB

Также игнорируются пустые строки и строки, начинающиеся с '#', последнее предназначено для помещения комментариев о версии непосредственно в НЕХ-файлы.

Проверяется верхний адрес в НЕХ-файле, если не помещается в опознанный чип, то никаких действий (кроме выдачи сообщений) не осуществляется. Проверяется перекрытие адресов записей в НЕХ-файле. При нахождении первого перекрытия производится выход из программы с указанием диапазона адресов перекрывающихся данных.

Для mega103 необходим расширенный формат НЕХ-файла (обычный не поддерживает объем больше 64 Кб). Запись прочитанных данных в файл всегда производится с дополнительными записями типа '04'-Extended Linear Address Record, как не имеющими разночтений. Чтение из НЕХ-файла записей типа '02' Extended Segment Address Record производится в соответствии с формированием их в AVRASM by Atmel (без предусмотренного документацией Intel сворачивания адреса смещения по модулю 64 Кб).

Вызов программы

avreal [ключи] [[-с] имя_файла_кода [[-d] имя_файла_данных]]

или

avreal [ключи] -d имя_файла_данных (когда нет желания трогать код)

При пустой командной строке (ни имен, ни ключей) не делается никаких операций с портами/чипом. Если есть только имена файлов, но нет относящихся к ним ключей (-г -w -v), то файлы игнорируются. Подробнее про работу с файлами и про ключи -с, -d рассказано после описания остальных ключей. Признак ключа — символ или V, регистр букв не важен.

Ключи

-? (-h) — выдать ключи и перечень поддерживаемых кристаллов.

avreal +name -?

(+name должен быть задан _раньше_ ключа -?) выдает список fuses, поддерживаемых в режиме ISP для чипа name.

+name — установить тип кристалла, <name> задается без префикса 'At', например, 90sl200, 90s8515, mega103 (т. е. в том виде, в котором имена выдаются по /h, регистр букв не важен).

Обязательный ключ, никаких действий по умолчанию не производится.

Если задан только чип (больше нет ни ключей, ни имен файлов), то чип будет сброшен и выдана информация о нем (наличие, если есть доступные по ISP fuses — их состояние).

-р<число1>[,<число2>]

«число 1», шестнадцатеричное.

set Port 1, 2, 3 — номер LPT-порта, >0x100 — базовый адрес порта, если задан номер — адрес из BIOS MEMORY (не работает для Win32 и linux версий, там принято, что LPT1/2/3 это 378/278/3BC). Адрес в виде — рЗВС и в виде — р0х3ВС воспринимается как HEX число, если задан адрес — «сами попросили» — по умолчанию — р2 (LPT2).

«число2», с плавающей точкой, необязательный параметр, если указан, то не производится настройка на скорость порта, время обращения принимается равным <число2> микросекунд.

В Win32 версии настройка не производится никогда, если не указано — считается, что обращение к порту не быстрее 1 мкс.

-а<буква> — группа ключей «адаптер»;

-ab — работа через Altera ByteBlaster;

-as — работа через адаптер Atmel STK*00;

-аа — автоматический выбор ByteBlaster/STK;

-az — пытаться переводить выходы LPT в Z-состояние для «отключения» программатора от схемы («byte-blaster для ленивых»);

-аr — инверсия полярности сброса (например, для подачи его через резистор в базу присутствующего в схеме транзистора);

-ai# — установить время неактивного Reset после стирания равным #mS. Необходимо устанавливать большим времени задержки снятия сброса присутствующим в схеме с супервизором;

-ар — подавать питание чипа через свободные выходы данных LPT (несовместимо с — ab).

Рекомендуется поближе к чипу установить блокировочный конденсатор по питанию.

-о<число> задать частоту установленного кварца для настройки скорости SPI.

<число>=<частота в килогерцах>, по умолчанию 800 (0,8 МГц).

0 означает необходимость генерации XTAL из программы.

Работает со всеми адаптерами. У STK*00 для генерации XTAL используется линия LED. Байт-бластер должен быть доработан, см. http://www.ln.com.Ua/~real/avreal/adapters.html#ABB.

-n[<число>] — использовать последние 2 байта кода как счетчик стираний.

Если указано <число>, то для записи счетчика используется оно, а не инкрементированное прочитанное значение.

При -ewn если последние 2 байта заняты кодом, то — n игнорируется.

При -w если в чипе записан счетчик, а последние 2 байта заняты кодом, то производится насильное стирание.

-е[-] — стереть чип.

'-' задает сохранение содержимого EEPROM способом прочесть/стереть/записать. Даже для megaX03 применяется этот способ, если хочется пользоваться имеющимся fuse EESAVE, следует установить его (-fe) отдельным запуском avreal.

-1, -2, -3, -4, -5 — увеличить задержки на программирование в 1, 5, 2, 3, 4, 5 раз соответственно (для программирования при пониженном напряжении).

— проверить на чистоту.

-r — прочитать из чипа в файл[ы].

-W[+] — записать в чип. Дополнительный '+' — если чип в этом задании не стирался и задана запись в EEPROM, то прописать FF в ячейки EEPROM, не заданные в HEX. Верификация этих ячеек на значение FF будет производиться, даже если был задан просто -v, а не — v+ (мы же эти ячейки писали).

-v[+] — верифицировать (только то, что есть в hex).

Дополнительный ’+’ вызывает проверку на FF «свободных» с точки зрения НЕХ-файла позиций.

-1[+]# -1# — установить уровень защиты # = 1 or 2.

-1+# — то же самое, только lock биты прошиваются до зашивки fuses (необходимо для включения BODEN и залочки 90s4433 в одном цикле подачи питания).

-f<fuselist> — список fuses для тех чипов, в которых они шьются по ISP.

<fuselist> выглядит как fusename=value,fusename=value,alias,alias…

value — ШЕСТНАДЦАТЕРИЧНОЕ значение без префиксов и суффиксов.

Для однобитовых fuse добавлены значения ON и OFF (прошить и стереть, 0 и 1 соответственно).

alias'bi — это однобуквенные сокращения для fusename=value, соответствующие буквенным обозначениям в версиях avreal до 1.22.

При наличии «противоречивых» fusename=val и/или alias выдается сообщение об ошибке.

В целях совместимости с предыдущими версиями оставлена возможность перечисления alias-ов без разделения запятыми.

Перечень fusename с диапазоном value и комментарием, а также Допустимые alias'bi для конкретного чипа можно получить при помощи avreal +chipname -?

Если работа с fuses по SPI поддерживается, то их состояние сообщается при любой операции с чипом, задание ключа — F необязательно.

OSCCAL (Tiny12, Tiny15, Mega163) рассматривается как Read-Only fuse;-)

В случае наличия — F<fuselist> при — V производится верификация fuses.

Не упомянутые fuse остаются неизменными (кроме BLB для megal61, megal63, так как они могут быть стерты по — Е).

AVReAl обеспечивает также расширенную поддержку osccal (см. ниже)

Группа BLB относится скорее к lock-битам, записать 1 поверх уже запрограммированной в 0 fuse невозможно. Если запрошена такая операция и чип не стирался, то программа завершает работу с соответствующим предупреждением.

Для tiny12, tiny15 поддерживается программирование SPIEN и RSTDSBL, будьте осторожны, SPIEN по умолчанию запрограммировано, ключ — fspien=1 (-fspien=off) _сотрет_ SPIEN и запретит дальнейшее низковольтное программирование. То же произойдет и при _программировании_ RSTDSBL (-frstdsbl=0 или — frstdsbl=0).

-% — выдавать по ходу дела дополнительную информацию (производимые действия и ответы чипа). Внутри. bat-файпов следует писать — %% (пожалуй, это был неудачный выбор — символ, имеющий особый смысл в bat-файлах, но меняться уже не будет).

-! — делать, что велено, даже если чип не распознан (или распознан «не так», как задано в +<имя чипа>), а также, если не обнаружен указанный в командной строке адаптер. Попытка стереть нераспознанный (возможно, просто залоченный) чип при наличии команды стирания производится и без - после чего проводится повторное детектирование чипа.

Возможны осмысленные комбинации:

/vw — записать, проверить;

-e-wv+ — понятно;

-bw — проверить на чистоту, если не пустая — завершить работу, иначе записать.

После ключа -d идет имя файла данных, после — с — имя кода, в этом случае порядок файлов не важен. Пробел между ключами -c/-d и именами не обязателен, т. е. допустимо как -cfoo.hex, так и -с foo.hex.

Если дано два имени файла без ключей -с и -d, то первое имя — файл кода, второе — файл данных (EEPROM).

Если имя одно и нет ключей -c/-d, то этот файл содержит данные для кода, и если он содержит информацию после верхнего адреса FLASH для заданного кристалла, то эта информация используется для программирования EEPROM данных. То есть если, например, для 90s2313 hex-файл содержал данные в адресах от 0x800 до 0x87F, то эти данные будут записаны в EEPROM по адресам 0x00-0x7F.

Для Mega163 и Tiny12 поддерживаются особые формы ключей - с и -d для записи значения OSCCAL по адресу offset (шестнадцатеричное значение без префиксов и суффиксов). Байт (слово для '?') по offset должен существовать в исходном НЕХ-файле. Используется адрес байта, а не слова, в том числе и при обращении ко flash коду.

— d*osccal=offset — как байт в EEPROM данных;

— c*osccal=offset — как байт во FLASH коде (под команду LPM);

— c?osccal=offset — врезать OSCCAL как часть команды LDI по ofFset,ofFset+1.

Например:

public osccal_ldi

osccal_ldi:

ldi R16,0xFF

out OSCCAL,R16

Далее смотрим по MAP-файлу значение osccal ldi, например, оно вышло 0x120

avreal +tiny12 -ewv -с foo.hex -c?osccal=120

Группа ключей может задаваться как одним аргументом (-wv)? так и раздельно (-v -w). Ключ с параметром (-р -с -d) может стоять в группе только последним. То есть допустимо, скажем, такое:-) — wddata.hex -bv+c prog.hex -ер1

Порядок ключей не важен, выполнение производится в порядке Е B W V L.

Если проверка (В, V) дала отрицательный результат, то дальнейшая работа не производится. То есть — ebwv12

Стереть, если стерлась — писать, если верифицировалась — залочить.

+tiny12 -w -с foo.hex -c*osccal=1f3 -fcks=3,boden=0

Для tiny12 записать во флэш кода файл foo.hex, по адресу 0x1F3 занести прочитанное из чипа значение OSCCAL, запрограммировать fuse boden и установить fuse CKSEL в бинарное значение 0011.

Возвращаемый код ошибки:

0 — все заказанное сделалось;

10 — not blank при — В, несравнение при — V[+];

20 — невозможность осуществить запрошенную операцию НЕХ-кода или перечень данных слишком большой для распознанного чипа.

Запрошенное для записи состояние BLB нельзя записать, не стерев чип (а команды стирания не было);

30 — не распознан конкретный чип (бывает при защищенном чипе, поэтому при — Е все равно делается попытка стереть, и если после этого тоже не распознан — программа завершает работу);

40 — адаптер не подключен (не удалось войти в программирование по алгортиму для At90s);

50 — ошибка при чтении (не найден, «не те» символы, не совпала контрольная сумма, ошибка чтения…) или записи (есть защищенный от перезаписи с таким же именем…) НЕХ-файла;

60 — недостаточно памяти для списков кода/данных;

70 — недопустимая командная строка (в том числе задан номер отсутствующего LPT).

При обнаружении ошибок просьба сообщать версию программы и очень желательно отослать копию расширенной выдачи программы по ключу — % (перенаправив выдачу в файл) по адресу real@real.kiev.ua.

Один из вариантов использования программатора

Программы командной строки удобны для использования в какой-либо системе автоматизации проектирования программ. Большинство IDE имеют настраиваемое меню TOOLS, в которое можно вставить вызов программы и передать ей аргументы, например, имя текущего файла, имя проекта и др.

Многие программисты пользуются для сборки проекта утилитой make даже в том случае, если пакет имеет интегрированную оболочку, но содержит и компилятор/линкер командной строки.

Для использования avreal с такими программами необходимо один раз правильно сформировать строки для вызова avreal и поместить их в соответствующие позиции меню TOOLS используемого IDE или как команды соответствующих целей в makefile.

При использовании avreal для работы с кристаллами «вручную» неудобно каждый раз набирать всю командную строку. Для упрощения работы можно заготовить командные файлы с постоянно используемыми ключами и в командной строке задавать только название контроллера и имена файлов.

Ниже приведены примеры таких командных файлов, написанные в предположении, что:

• используется адаптер Atmel STK200 или STK300 (ключ -as), подключенный к порту LPT1 (ключ -p1). *.Ьаt-файлы должны находиться в одной папке (директории) с программой avreal.exe;

• тактовая частота контроллера не ниже 3,686 МГц (3686 кГц, ключ — о3686). Без этого ключа avreal будет предполагать, что тактовая частота может быть ниже, вплоть до 0,8 МГц, что приведет к существенному увеличению времени работы.

При использовании avreal для Win32 необходимо в командном файле указать avreal32 либо переименовать avreal32.exe в avreal.exe.

--------------------

erase.bat

@if '%v'==' goto help

@avreal -as -р1 -0З686 +%1 -e

@goto exit

: help

@echo erase.bat — стирание AVR-контроллера

@echo Вызов:

@echo erase cpuname.

@echo где cpuname — имя используемого процессора

: exit

--------------------

erasen.bat

@if '#1'==' ' goto help

@avreal -as -р1 -0З686 +%1 -en

@goto exit

:help

©echo erasen.bat — стирание AVR-контроллера

©echo с записью в верхние два байта flash-числа стираний

©echo Вызов:

©echo erasen cpuname,

©echo где cpuname — имя используемого процессора

: exit

--------------------

write.bat

©if '%1'==" goto help

©avreal -as -р1 -0З686 +%1 -w %2 %3

©goto exit

:help

©echo write.bat — запись AVR-контроллера

©echo Записывается flash кода и, если задан файл, EEPROM данных

©echo Вызов:

©echo write cpuname codename dataname,

©echo где cpuname — имя используемого процессора

©echo codename — имя файла кода

©echo dataname — имя файла данных (необязательный параметр)

:exit

--------------------

writed.bat

©if '%1'==' ' goto help

©avreal -as -р1 -0З686 +%1 -wd %2

@goto exit: help

©echo writed.bat — запись AVR-контроллера

©echo Записывается только EEPROM данных

©echo Вызов:

©echo writed cpuname dataname,

©echo где cpuname — имя используемого процессора

©echo dataname — имя файла данных

:exit

--------------------

read.bat

©if '%1'==' ' goto help

©avreal -as -р1 -0З686 +%1 -r %2 %3

©goto exit: help

©echo read.bat — чтение из AVR-контроллера

©echo Считывается flash кода и, если задан файл, EEPROM данных

©echo Вызов:

©echo read cpuname codename dataname,

©echo где cpuname — имя используемого процессора

©echo codename — имя файла кода

©echo dataname — имя файла данных (необязательный параметр)

:exit

--------------------

readd.bat

©if #1'==' ' goto help

©avreal -as -р1 -0З686 +%1 -rd %2

©goto exit: help

©echo readd.bat — чтение из AVR-контроллера

©echo Считывается только EEPROM данных

©echo Вызов:

©echo readd cpuname dataname,

©echo где cpuname — имя используемого процессора

©echo dataname — имя файла данных

:exit

--------------------

verify.bat

©if #1'==' ' goto help

©avreal -as -р1 -0З686 +%1 -v %2 %3

©goto exit

:help

©echo verify.bat — верификация AVR-контроллера

©echo Проверяется flash кода и, если задан файл, EEPROM данных

©echo Вызов:

©echo verify cpuname codename dataname,

©echo где cpuname — имя используемого процессора

©echo codename — имя файла кода

©echo dataname — имя файла данных (необязательный параметр)

:exit

--------------------

verifyd.bat

©if '%1’==“ goto help

©avreal -as -р1 -0З686 +%1 -vd %2

©goto exit: help

©echo verifyd.bat — верификация AVR-контроллера

©echo Проверяется только EEPROM данных

©echo Вызов:

©echo verifyd cpuname dataname,

©echo где cpuname — имя используемого процессора

©echo dataname — имя файла данных

:exit

--------------------

check.bat

©if '%1’==' ' goto help

©avreal -as -р1 -0З686 +%1 -bn

©goto exit: help

©echo check.bat — проверка AVR-контроллера на чистоту (стертость)

©echo Если при стирании контроллера был использован файл erasen.bat,

©echo то будет сообщено число стираний контроллера, в противном

©echo случае будет сообщение "Number of erases not initalised",

©echo означающее, что верхние два байта flash тоже содержат 0xFF

©echo Вызов:

©echo verifyd cpuname dataname,

©echo где cpuname — имя используемого процессора

©echo dataname — имя файла данных

:exit

--------------------

lock, bat

©if ’%1'==' ' goto help

©avreal -as -р1 -0З686 +%1 -12

©goto exit

: help

©echo lock.bat — защита AVR-контроллера от чтения

©echo Вызов:

©echo lock cpuname

©echo где cpuname — имя используемого процессора

: exit

--------------------

lockv.bat

©if '%1'==" goto help

©avreal -as -pi -0З686 +%1 -v12 %2 %3

©goto exit

:help

©echo lockv.bat — защита AVR-контроллера от считывания с предварительной

©echo верификацией (при несовпадении содержимого защита не устанавливается)

©echo Вызов:

©echo lockv cpuname codename dataname,

©echo где cpuname — имя используемого процессора

©echo codename — имя файла кода

©echo dataname — имя файла данных (необязательный параметр)

:exit

--------------------

fuses.bat

@if '%1'==" goto help

©avreal -as -р1 -0З686 +%1 -wvf%2

©goto exit: help

©echo fuses.bat — запись fuses AVR-контроллера

©echo Вызов:

©echo fuses cpuname fuselist

@echo где cpuname — имя используемого процессора

@echo fuselist — перечисленные через запятую fuses, состояние

@echo которых следует изменить. Более подробно см.

©echo описание avreal

:exit

-

Примечания.

Имя используемого процессора задается так, как оно выглядит в списке поддерживаемых кристаллов при вызове avreal -h, например, 90s8515 или mega 103. Допускается также указывать имена с префиксом 'АТ', например, at90s8515 или atmegal03. Регистр букв значения не имеет.

Запись fuses достаточно произвести один раз, стирание кристалла их не стирает (за исключением boot lock bits в кристаллах с boot sector во flash, рассматриваемых программой avreal как fuses).

Неуказанные в команде fuses не изменяются.

Записанное состояние fuse — '0', стертое — '1'. Для уменьшения вероятности ошибки следует пользоваться мнемоническими обозначениями ON и OFF соответственно.

При записи fuses следует быть осторожным с изменением состояния SPIEN и RSTDSBL для тех кристаллов, у которых эти fuse доступны в режиме низковольтного программирования.

Контроллеры AVR поставляются с SPIEN=0(ON), RSTDISBL=1 (OFF). Эти значения необходимы для low voltage ISP.

Еще один вариант использования программатора

Идея очень простая — обычно в процессе проектирования схемы и написания для нее программы тип чипа и название файла программы (т. е. и кода) выбираются один раз в начале работы и в дальнейшем изменяются очень редко.

В начале работы создается подобный файл с указанием типа кристалла (в этом файле AT90S2313) и имени файла, и при дальнейшей работе при необходимости запрограммировать кристалл просто запускается этот *.Ьаt-файл.

Кстати, запускать его можно не только из командной строки MS-DOS, но и из среды Windows 95/98. В последнем случае удобно сделать ярлык для этого файла.

При выполнении этого командного файла производятся следующие действия: проверяется наличие адаптера, совместимого с STK200, наличие подключенного микроконтроллера. Содержимое памяти микроконтроллера стирается, осуществляется проверка на успешное завершение операции стирания, после чего в кристалл записывается *.hex-файл, указанный в командной строке (в этом примере test2313.hex):

avreal.exe +90s2313 -р378 -as -ebvw -с test2313.hex

Конкретный пример. Изготовьте простейшую конструкцию на микроконтроллере AT90S2313. Ее схема изображена на рис. 4.15.

Рис. 4.15. Схема на микроконтроллере AT90S2313

Эта схема управляет двумя светодиодами, подсоединенными к линиям РВ2 и РВ4 микроконтроллера. Файл прошивки памяти программ для этой схемы имеется на компакт-диске, прилагаемом к книге. При правильной сборке и программировании схемы светодиоды должны поочередно мигать.

Для каждого проекта следует заводить отдельную папку (директорию), в которой располагать все файлы, относящиеся к проекту.

Итак, для того чтобы, например, занести код, находящийся в файле test2313.hex в память программ микроконтроллера AT90S2313, необходимо:

1) скопировать программу avreal.exe в папку проекта;

2) оттранслировать текст программы, чтобы получить файл *.hex. В нашем случае файл test2313.hex имеется готовый на компакт-диске, прилагаемом к книге. Его следует скопировать его в папку проекта;

3) создать текстовый файл с именем test2313.bat, в котором должна быть строка

avreal.exe +90s2313 -р378 -as -ebvw -с test2313.hex

4) подключить программатор к порту LPT и разъему ISP (программирования) схемы на микроконтроллере AT90S2313;

5) включить питание схемы на микроконтроллере;

6) запустить файл test2313.bat.

Обратите внимание — файлы avreal.exe, *.bat (в нашем примере test2313.bat) и *.hex (в нашем случае test2313.hex) должны находиться в одной папке.

Если все было проделано верно, программа должна быть занесена в микроконтроллер, и светодиоды начнут мигать.

Если необходимо заносить код не только в память программ, но и в EEPROM, в конце строки в *.bat-файле следует добавить — d и название файла с прошивкой EEPROM.

Более 800 000 книг и аудиокниг! 📚

Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением

ПОЛУЧИТЬ ПОДАРОК