Научная статья на тему 'AVR-микроконтроллеры: программные средства'

AVR-микроконтроллеры: программные средства Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
616
162
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Королев Николай, Королев Дмитрий

Не будет преувеличеним сказать, что огромное число разработчиков микропроцессорных систем в мире, а особенно в Советском Союзе, выросло на 8-разрядных микропроцессорах 8080 и микроконтроллерах MSC 48/51 фирмы INTEL.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «AVR-микроконтроллеры: программные средства»

AVR-микроконтроллеры:

программные средства

Не будет преувеличеним сказать, что огромное число разработчиков микропроцессорных систем в мире, а особенно в Советском Союзе, выросло на 8-разрядных микропроцессорах 8080 и микроконтроллерах MSC 48/51 фирмы INTEL. Несмотря на то что этим архитектурам уже более 20 лет и сама фирма INTEL давно забыла об этих микросхемах, аналоги MSC 51 фирмы INTEL еще продолжают выпускаться многими производителями.

Между тем, прогресс не стоит на месте, и новые микропроцессорные архитектуры на основе RISC-ядра постепенно вытесняют классические CISC-системы. Это относится как к мощным универсальным микропроцессорам (яркий пример — совместная разработка IBM и Motorola — RISC-процессор Power PC), так и к 8-разрядным микроконтроллерам.

Тем не менее часто в новых разработках закладывается 8051-совместимая микросхема. Причин этому несколько — знакомая, испытанная система команд, богатый архив наработанного программного обеспечения, легкодоступные ассемблеры и компиляторы. Однако вычислительная мощность этих микроконтроллеров для некоторых приложений недостаточна, и тогда приходится искать новые решения.

Одно из таких решений — использование AVR-микрконтроллеров фирмы ATMEL.

Они выпускаются в корпусах с цоколевкой, идентичной Intel 8051,

что позволяет ставить эти микросхемы в уже изготовленные печатные платы.

Николай Королев

[email protected]

Дмитрий Королев

[email protected]

В

процессе выбора элементной базы для создания нового устройства разработчик рассматривает не только технические характеристики того или иного микроконтроллера, но также большое внимание уделяет средствам поддержки — как аппаратным (стартовые наборы, программаторы, внутрисхемные эмуляторы), так и программным (языки низкого и высокого уровня, симуляторы). Естественно, в расчет берется не только удобство работы и функциональные возможности конкретного пакета программ, но и его стоимость. Данная статья посвящена рассмотрению программных средств для разработки устройств с использованием микроконтроллеров семейства AT90S, выпускаемых фирмой ATMEL.

В настоящее время AVR-микроконтроллеры фирмы ATMEL завоевали широкую популярность на российском рынке. И это неудивительно — по количеству моделей в семействе они занимают первое место в мире среди ФЛЭШ-микроконтроллеров и по совокупности своих характеристик опережают большинство аналогичных изделий, занимая одно из первых мест в мире по соотношению цена/производительность. Высокая производительность достигнута не в последнюю очерель благодаря мощному и удобному набору команд, существенно повышающему эффективность кода по сравнению с микроконтроллерами классической архитектуры.

Как станет ясно из нижеизложенного материала, основным инструментом программиста является интегрированная среда разработки (IDE — INTEGRATED DEVELOPMENT ENVIRONMENT) — AVR STUDIO® 3.0. Эта оболочка включает в себя текстовый редактор, менеджер проектов, отладчик и предоставляет следующие возможности:

- создание и редактирование исходного кода на ассемблере;

- символьная отладка в исходных кодах;

- просмотр содержимого ФЛЭШ-ПЗУ, ЭСПЗУ, ОЗУ, регистров и портов ввода/вывода;

- неограниченное число точек прерывания;

- буфер трассировки;

- просмотр и модификация переменных с поддержкой механизма Drag-and-Drop;

- модификация состояния активности выводов портов ввода/вывода;

- загрузка файлов в форматах COFF, UBROF6 и HEX;

- поддержка проектов на языках С, Паскаль и Бейсик;.

- совместная работа со всеми внутрисхемными эмуляторами фирмы Atmel.

Менеджер проекта (project manager) объединяет в проект группу файлов и обеспечивает интерфейс для подключения внешнего ассемблера/компилятора. Таким образом, есть возможность писать программу на выбранном языке и компилировать ее выбранным компилятором. Мощный текстовый редактор, входящий в AVR Studio, обеспечивает «бесшовную» стыковку с внешним компилятором и линкером. Исходный код можно редактировать непосредственно в отладочном окне. Поддерживается цветовое выделение соответствующих фрагментов исходного кода.

Пользовательский интерфейс специально разработан для облегчения работы пользователя. Инструментальные панели (toolbars) и клавиши быстрого доступа обеспечивают удобный доступ ко всем ресурсам AVR-микроконтроллера. Установка точек прерывания и переключение на окно исходного текста производится одним нажатием кнопки мыши.

Одной из важных характеристик AVR Studio является встроенная поддержка работы с внутрисхемным эмулятором. При запуске программы производится опрос COM-портов компьютера на предмет наличия подключенного эмулятора. Если на каком-либо COM-порте обнаруживается эмулятор (в общем случае допускается совместная работа нескольких эмуляторов), AVR Studio стартует в режиме аппаратной отладки (emulator mode), о чем сообщает надпись «emulator» в нижней части основного окна, иначе активизируется режим симулятора. Пользовательский интерфейс в обоих случаях идентичный.

Эмуляторы AVR ICE 200, ICE PRO и AVR ICE 30 имеют возможность обновления конфигурации. Соответствующее программное обеспечение входит в состав AVR Studio. При инициализации эмулятора происходит проверка тетекущей версии эмулятора и при необходимости выводится окно с предложением «обновить» версию.

Архитектура AVR-микроконтроллеров спроектирована под компиляторы с языков высокого уровня. В частности, большое количество регистров общего назначения удобно для хранения «регистровых» переменных при написании программы на С. Этому способствует также высокое быстродействие микроконтроллеров (время выполнения команды составляет 100-150 наносекунд) и практически неограниченный объем памяти программ

ЛІ Ш. -ife .

Рис.1. Окно AVR Studio

(микросхем ATmega 103 имеет ФЛЭШ-ПЗУ программ объемом 128 Кбайт). Фирмы, выпускающие С-компиляторы для микроконтроллеров, не заставили себя ждать и вскоре предложили соответствующие пакеты. Из всего разнообразия наиболее интересны два — первый от шведской фирмы IAR Systems и второй от американской фирмы ImageCraft Creations Inc.

Фирма IAR Systems известна своей плодовитостью, ее продукты поддерживают около двадцати типов микроконтроллеров разных фирм-производителей. В комплект поставки входит среда разработки IAR Embedded Workbench и отладчик IAR C-Spy. Девиз фирмы «Различные архитектуры. Одно решение».

Такой подход имеет неоднозначную оценку пользователей. С одной стороны — единая среда разработки облегчает переход к новому типу микроконтроллера. С другой стороны, вследствие такой универсальности усложняется настройка опций компиляции и оптимизации — приходится разбираться среди массы возможно неиспользуемых для конкретного микроконтроллера ключей и настроек. Нередко приходится прибегать к прямому редактированию xcl-файлов. Для ознакомления с пакетом предлагается демо-версия, имеющая следующие ограничения: максимальный размер исходного кода на языке С составляет 2 Кбайта, на ассемблере — 1 Кбайт, размер откомпилированного приложения — 2 Кбайта, размер файла для отладки — 2 Кбайта. Кроме того, формат файлов сделан таким, что они читаются только внутри этой демо-версии.

Следует отметить, что цена С-компилятора фирмы IAR Systems составляет в зависимости от приобретаемой конфигурации от 2500 до 3600 долларов США, что является существенным ограничивающим фактором для приобретения его многими российскими фирмами.

Рис. 2. С-компилятор фирмы IAR

Более интересен для рассмотрения второй из ранее упомянутых С-компиляторов. Фирма ImageCraft пошла принципиально другим путем. Ее оптимизирующий компилятор написан специально для AVR-микроконтроллеров, и, как следствие, он достаточно компактен: дистрибутив имеет объем 2,5 мегабайта, а после установки на диск компилятор занимает немногим более 4 мегабайт. П ри скромных размерах он имеет достаточно богатый набор характеристик. Интегрированная среда разработки (IDE) функционирует под управлением Windows 95/98/NT, включая в себя текстовый редактор с полноценной поддержкой русского языка и менеджер проекта, который формирует стандартный makefile. Обеспечивается поддержка практически всех AVR-микроконтроллеров, включая еще не выпущенные ATmega161/163 и FPSLIC AT94. Для микросхем семейства ATtiny и AT90S1200, не имеющих внутреннего ОЗУ, есть пакет ICCTiny-AVR. Опции компиляции можно выбрать из стандартного набора или установить самостоятельно, выбрав в поле «тип микросхемы» — custom device. В результате компиляции формируется стандартный HEX-файл для загрузки в микросхему, файл в формате COFF, который «понимает» AVR Studio, и файл с листингом

Программа 1

#include <io2313.h> #pragma interrupt_handler timer:5

#define LCD E (1 << 6) #define LCD_RS (1 << 5) #define LCD_RW (1 << 4) #define lcd set e() (PORTD |= LCD_E)

#define lcd set rs() (PORTD |= LCD_RS)

#define lcd_set_rw() (PORTD |= LCD_RW)

#define lcd clear e() (PORTD &= ~LCD E)

#define lcd clear rs() (PORTD &= ~LCD RS)

#define lcd_cTear_rw() (PORTD &= ~LCD_RW)

// короткая задержка для ЖКИ

void delay(int ticks)

{

while(ticks—);

}

// строб ЖКИ

void lcd pulse(void)

lcd set e(); delay(4); lcd clear e(); delay(4);

}

// средняя задержка для ЖКИ

void lcd wait(void) delay(1000);

}

// посылка байта на ЖКИ void lcd send(unsigned char data)

{

lcd_wait();

PORTB = data; lcd pulse();

}

// очистка экрана ЖКИ

void clrscr(void)

lcd_clear_rs(); lcd_clear rw(); lcd_send(Ox01); lcd wait();

}

// инициализация ЖКИ void initgraph(void)

DDRB = 0xFF;

DDRD |= (LCD E | LCD RS | LCD RW); lcd_clear_rs(); lcd_clear rw(); lcd_send(0x3C); lcd_send(0x3C); lcd_send(0x3C); lcd_send(0x06); lcd send(0x0C);

}

// перемещение курсора ЖКИ

void gotoz(unsigned char

z)

lcd_clear_rs(); lcd_clear_rw(); lcd send(z | 0x80);

}

#define gotoxy(x,y) go-toz((x)|((y)<<6))

// посылка символа на ЖКИ void putchar(char c)

{

lcd_clear_rw(); lcd_set rs(); lcd send(c);

}

// посылка строки void outtext(char* text)

{

unsigned char i; for(i = 0; text[i] && i < 16; i++)

putchar(text[i]);

}

unsigned char hour = 0, minute = 0, second = 0;

// вызов 1 раз в секунду void timer(void)

{

// текущее время

clrscr();

gotoxy(0,0);

putchar('0'+hour/10);

putchar('0'+hour%10);

putchar(':');

putchar('0'+minute/10);

putchar('0'+minute%10);

putchar(':');

putchar('0'+second/10);

putchar('0'+second%10);

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

// then increment counter

second++;

if(second == 60)

{

second = 0; minute++; if(minute == 60)

minute = 0; hour++;

if(hour == 24) hour = 0;

}

}

}

}

// 'main' объявлена как 'int' для совместимости с ANSI-C int main(void)

TIMSK = (1<<6); // set OCIE1A TCCR1A = 0;

TCCR1B = 0x0C; // CTC1, CK/256 OCR1H = 0x3D; //

4000 000/256=15625=0x3D09 OCR1L = 0x09;

TCNT1H = TCNT1L = 0;

initgraph();

timer();

SREG = 0x80; // SEI return 0;

}

Ml ГС %

.4.1 ew!

¥ £

4&\

AC CM]

■'М/di» іІІіЛВД

кт«л «і ли

ІЛЛІ fa

шилі"

і WS'

АЩЙЛІШ-Ш

I

вад.

K_L

U”

П

HQf

JP

Рис. 4.

Принципиальная схема устройства

V

Р2

т

uei *

Ж1 _И

из it]

I »

.»: її

fYKlHM

т

Я-

в текстовом формате. Компилятор совместим со стандартом ANSI C. Исходный текст может содержать вставки на ассемблере (строки или ассемблерные модули). Ассемблерные директивы могут включать условное выполнение, include-файлы, макросы и текстовые определения.

Библиотеки включают функцию printf, распределение памяти, строковые и математические функции. Также есть специальные функции, такие как доступ к ЭСПЗУ, АЦП и SPI-интерфейсу. При возникновении каких-либо вопросов можно обратиться к достаточно подробно написанному help-файлу или к входящей в комплект книге объемом около 120 страниц. Следует отметить, что есть возможность обратиться за помощью непосредственно на фирму ImageCraft, написав письмо по адресу [email protected]. Эта возможность была проверена дважды, и авторы подтверждают, что на следующий день они находили в своем почтовом ящике исчерпывающие ответы на заданные вопросы. Еще одно несомненное преимущество работы с программой ICC AVR от ImageCraft — это возможность полноценной работы до приобретения С-компилятора. Последняя демо-версия пакета доступна на сайте производителя программы по адресу http://www.imagecraft. com/software/index.html, либо на сайте российского дистрибьютора http://atmel. argussoft.ru, причем эта версия максимально дружелюбна: пользователь может работать с исходными текстами неограниченной длины и компилировать файл для любой микросхемы. Единственное ограничение — время работы, 30 дней. Его достаточно для разработки даже крупного проекта. По истечении месяца пользователь должен принять решение: или переформатировать винчестер, чтобы еще раз установить демо-версию, либо отдать 240 долларов и приобрести официальный дистрибутив и право на техническую поддержку.

В качестве иллюстрации разработки проекта в С-компиляторе фирмы ImageCraft ниже приводится пример разработки устройства «Цифровые часы с функцией измерения и отображения температуры окружающей среды» на микроконтроллере AT90S2313. Датчиком температуры в данном приборе служит микросхема фирмы Analog Devices AD7817, а устройством отображения — любой стандартный цифробуквенный жидкокристалли-

ческий индикатор с контроллером типа Н044780.

Исходный код программы часов представлен на предыдущей странице (программа 1). Частота задающего генератора = 4 МГц.

Ниже представлена функция работы с А07817 (программа 2). Для отображения на второй строке индикатора температуры окружающей среды, следует подключить эту функцию.

-

* >■ ■ л * ■

Рис. 3. С-компилятор фирмы ImageCraft

Программа 2

#define STRT (1 << 3) #define WR (1 << 4) #define OUT (1 << 2) #define IN (1 << 2) #define CLK (1 << 4)

void strobe0(void)

mcu nop();

PORTB & = ~CLK; mcu nop();

}

void strobe1(void)

mcu nop();

PORTB |= CLK; mcu nop();

}

void strobe(void)

strobe0();

strobel();

}

byte hc = 0, s = 0, m = 0, h = 12;

void interrupt

timer0 overflow (void)

{

byte i;

word temperature;

PORTB &= ~IN; mcu nop();

PORTD &= ~WR; mcu_nop();

for(i = 0; i < 8; i++) strobe(); mcu nop();

PORTD & = ~STRT; mcu nop();

PORTD |= STRT; for(i = 0; i < 50; i++) mcu nop();

PORTD |= WR; mcu nop();

II 10 bits temperature = 0; for(i = 0; i < 8; i++) {

strobe(); temperature *= 2; if(PIND & OUT) temperature++;

}

i Надоели баннеры? Вы всегда можете отключить рекламу.