________________________________________________________
Для каждого типа микроконтроллера есть свой заголовочный файл. Для ATMega8535 этот файл называется iom8535.h, для ATMega16 – iom16.h. По идее мы должны в начале каждой программы подключать заголовочный файл того микроконтроллера, который мы используем. Умные люди немного облегчили нам жизнь и написали заголовочный файл ioavr.h. Препроцессор обрабатывает этот файл и в зависимости от настроек проекта включает в нашу программу нужный заголовочный файл. Итак, следущая строчка программы #include <ioavr.h> В нашей программе мы будем использовать задержку. Задержку можно реализовать программно и аппаратно. Сейчас нас интересует программная задержка. IAR содержит библиотеку, в которой уже есть готовая функция задержки. Нам нужно подключить к нашей программе эту библиотеку. Как это сделать? Каждая библиотека имеет свой заголовочный файл в котором описано какие фукции она содержит. Этот файл мы и должны включить в программу. Делается это, как вы догадались с помощью директивы #include.#include <intrinsics.h> Основу любой сишной программы составляют функции, и любая программа на Си имеет хотя бы одну функцию – main().Вообще-то на примере main() не хотелось бы объяснять синтаксис функций, потому что main() хоть и является функцией, но вызывается не как обычно, а автоматически. С этой функции микроконтроллер начинает выполнение написанной нами программы. Вызовы всех других функций, наших или библиотечных, должны быть записаны в коде. Как вызывается функция, мы увидим дальше.У функции есть заголовок – int main(void) и тело – оно ограниченно фигурными скобками {}. В тело функции мы и будем добавлять наш код.
____________________________________________________________________
Нам нужен бесконечный цикл. Помещаем наши строчки PORTC = 0; __delay_cycles(4000000); PORTC = 255; __delay_cycles(4000000);внутрь бесконечного цикла, и вот что в итоге должно получиться://первая прога на Си для AVR#include <ioavr.h>#include <intrinsics.h>int main(void){ DDRC = 255; while(1){ PORTC = 0; __delay_cycles(4000000); PORTC = 255; __delay_cycles(4000000); } return 0;} Если у вас другой результат – пройдитесь снова по тексту. Может, я что-то полохо объяснил, может, вы что-то плохо поняли. Кликаем Make на панели с кнопками (можно нажать F7). Если все сделано правильно, IAR откомпилирует и соберет проект, а внизу откроется окно Messages, в котором будет написано:…..Total number of errors: 0Total number of warnings: 1 Все прошло без ошибок, но компилер выдал warning — statement is unreachable. Ничего страшного – он просто сообщает нам, что функция main() никогда не возвратит значение. Просто у нас в программе бесконечный цикл и микроконтроллер при работе никогда не дойдет до строчки return 0. Ищем папку проекта на жестком диске. Там, в директории Release лежит файл прошивки led.hex. Грузим в микроконтроллер… Светодиод заморгал? Отлично. А теперь легко проверить правильно ли работает наша программа. Берем механические часы и смотрим, моргает ли светодиод в такт с секундной стрелкой. У меня моргает, а у вас?
Среда программирования
Итак, осталось последнее — среда программирования. Есть множество различных программных продуктов, в которых можно писать программки, но нужно выбрать подходящую для себя. Для тех кто знает программирование на среднем уровне подойдёт программа Atmel Studio. Для начинающих лучше будет использовать программу CodeVision AVR версии 1.24.
Она простая в использовании, но имеет один минус — английский интерфейс. Но в интернете есть много книжек где идёт описание на русском, к тому же очень понятное. Итак, начнем с простого. Напишем простейшую программу для управления светодиодом, подключенном к одному из вывода микроконтроллера.
В меню File выбираем команду New. С помощью этой команды мы создадим наш будущий проект. После выбора этой команды откроется диалоговое окно Create New File. В этом окне нужно выбрать тип файла, который мы хотим создать. Нужно выбрать Source. Тогда в программе появится окно редактора в котором можно писать программу. Назовём этот файл LED. И пишем простую программку:
#include //библиотека для работы с микроконтроллером Аtiny2313 #include // библиотека задержки void main(void) { // главная функция, в которой пишется сама программа DDRB=0b11111111; // настройка порта В что б он отправлял информацию на выход while(1){ // создаём цикл, что б наша прога работала по кругу PORTB=0b0000001; // выставляем, чтоб 0-й бит порта В отправлял 1 на выход ножки delay_ms(600); //задаём задержку PORTB=0b00000000; //выставляем что б на выводы порта В подавался на выход 0 delay_ms(1000); //задаём задержку
После написания программы нужно будет сохранить файл. После этого в меню File выбираем команду:
New → Create New File → Project
Программа предложит нам воспользоваться Code Wizard AVR. Пока что не используйте его. После этого откроется чистое окно и предложит сохранить Ваш проект.
Сохраните его в какое-то место, где сами захотите. Далее меню Project выберете пункт Configure. Там выберете свой файл, в котором Вы писали свою программу и нажмите Add.
После этого действия в Ваш проект буден включён файл с программой. После этого сохраните весь проект.
Далее из программного кода нужно создать HEX-файл, который уже непосредственно загружается в память микроконтроллера. Для этого в меню Project выберете команду Make. Программа проверит Ваш код на наличие ошибок, если их не будет, то в меню Project выберете команду Compile.
После этого ваша программа будет находиться в файле LED.hex в месте, которое вы задали, во время сохранения проекта. Затем с помощью многих программ заливаем файл LED.hex на контроллер, подключаем светодиод ножкой «+» к выводу микроконтроллера, для которого мы писали программу, а « — » к общей земле и подаём питание к нашему контроллеру.
Если вы всё правильно сделали, то светодиод будет мигать.
_____________________________________________________________________
Мы хотим, чтобы светодиод моргал с частотой видимой нашему глазу. Это единицы, десятки герц. Допустим, мы выбрали 1 Гц. Мой микроконтроллер работает на частоте 8 МГц, длительность одного такта =1/8000000 Гц = 125 нс. Сигнал частотой 1 Гц имеет период повторения 1 c. Светодиод будет гореть только половину периода — 0,5с. Делим 0,5 с на 125 нс и получаем искомое число тактов – 4000000. Это число укладывается в диапазон типа unsigned long int. Следующая строчка нашей программы – вызов функции:__delay_cycles(4000000);Далее – гасим светодиод и снова вызываем функцию задержки:PORTC = 255;__delay_cycles(4000000);5 шаг алгоритма – вернуться на шаг 2. По сути дела нам нужно повторить кусок программы, зациклить его. Для этих целей в Си существуют три типа циклов: for, while и do. Мы используем while.
Методические указания к выполнению лабораторной работы по курсу
«Микропроцессорные устройства систем
управления»
Комсомольск-на-Амуре
2007
УДК 681.3.06
Создание и отладка проекта для AVR микроконтроллеров с использованием
среды программирования CodeVisionAVR: Методические указания к лабоpатоpной pаботе по куpсу «Микропроцессорные
устройства систем управления» /Сост. В.А.Егоpов, Е. И. Ефимов — Комсомольск-на-Амуpе:
Комсомольский-на-Амуpе гос. техн. ун-т, 2007. — 8 с.
Описывается порядок создания и
отладки проекта для AVR микроконтроллеров
с использованием среды программирования CodeVisionAVR.
Пpедлагаемые методические указания
пpедназначены для студентов специальности 210100 — «Управление и информатика
в технических системах» дневной фоpмы обучения.
Печатается по постановлению
pедакционно-издательского совета Комсомольского-на-Амуpе госудаpственного
технического унивеpситета.
Согласовано с отделом стандаpтизации.
Рецензент: С.М. Копытов
Цель работы: овладеть навыками
создания и отладки проекта в среде программирования CodeVisionAVR.
Теоретические сведения
Создание проекта в CodeVisionAVR:
1. Запустить компилятор Пуск->Программы->CodeVisionAVR
->CodeVisionAVRCCompiler
2. После загрузки окна программы CodeVisionAVR выполнить File->New. В окне CreateNewFile (рис. 1) выбрать тип файла – project и нажать OK.
Рис. 1. Окно «Create
New File
3. На запрос «Хотите ли использовать CodeWizardAVR» (рис. 2) ответить No
Рис. 2.
Запрос «Хотите ли использовать CodeWizardAVR»
4. В окне CreateNewProject создать новую папку и войти в неё. В
поле Имя файла ввести имя проекта с расширением *.prj и нажать кнопку Сохранить.
5. В окне ConfigureProject (рис. 3) перейти на закладку CCompiler.
Рис. 3. Окно «Configure
Project
В поле Chip выбрать тип процессора Atmega128, в поле Clock задать частоту тактовых импульсов 7,372800 МГц. В
каталоге проекта с помощью программы блокнот создать пустой файл с расширением *.c . Перейти на закладку Files и нажать кнопку Add(добавить). В раскрывшемся окне выбрать
созданный файл с расширением *.c и нажать Открыть. Нажать кнопку
OK в окне Configure
Project.
6. В окно файла с расширением *.c ввести текст программы.
7. Сохранить проект командой File->SaveAll..
8. Произвести компиляцию проекта
командой Project->Make (Shift+F9).
При наличии синтаксических ошибок устранить их. При отсутствии ошибок
компилятор выдаёт сообщение Noerrors и размер
программы в процентах от общего объёма флэш памяти программ контроллера (рис.
4.).
Рис. 4. Окно Information
9. Загрузить проект в отладчик среды AVRStudio4 командой Tools->Debugger (Shift+F3)
или соответствующей кнопкой на панели инструментов (Run the debugger). В результате загружается программа
AVRStudio4 и раскрывается окно WelcometoAVRStudio4.
Создание проекта для отладчика среды
AVRStudio4:
1. В окне Welcome to
AVRStudio4 нажать кнопку Open.
2. Перейти в папку с проектом и
выбрать файл расширением *.cof , затем нажать кнопку Открыть. В появившемся окне
нажать кнопку Сохранить.
3. В открывшемся окне выбрать
отладочное устройство (Debug platform) – AVRSimulator и микроконтроллер (Device) – Atmega128, затем нажать кнопку Load(рис.5.).
Рис. 5. Окно
выбора платформы и устройства
В результате проделанных действий в
левой части экрана появляется окно IOView с ресурсами микроконтроллера. В окне можно наблюдать содержимое
регистрового файла процессора (R0-R15, R16-R31),
содержимое управляющих регистров процессора (Processor) и состояние регистров ввода/вывода
(I/O ATmega128).
Выполнение тестовой программы в
отладочном режиме:
В тестовой программе происходит
изменение состояния (мигание) бита D7 порта
D. Для просмотра изменения состояния
указанного бита необходимо раскрыть список IO ATmega128 и в нём раскрыть список регистров порта D.
Покомандное выполнение программы
осуществляется командой Debug->Stepover (F10). В этом же меню находится полный список команд работы в
отладочном режиме (подробное описание работы в отладочном режиме находится в
приложении) .
Перевести фокус в окно и исходным
текстом программы (файл *.c) и
при помощи клавиши F10 выполнить
программу в пошаговом режиме.
Внесение изменений в исходный текст
программы:
1. Перейти в окно AVRStudio и выйти из отладочного режима командой
Debug-> StopDebugging.
2. Перейти в окно CodeVisionAVR и внести изменения в исходный текст
программы.
3. Перекомпилировать проект командой Project->Make (Shift+F9).
4. После успешной компиляции закрыть
окно Information, нажав OK.
5. Перейти в окно AVRStudio и на запрос о перезагрузке изменений
с диска (changeondiskreload) ответить Да. Запустить
отладку командой Debug->StartDebugging.
Программатор
Существует 2 типа программаторов:
- программатор с подключением по LPT порту;
- USBASP который подключается в USB порт.
Программатор с подключением по LPT порту можно изготовить в домашних условиях, схем в интернете есть много. USBASP программатор тоже можно изготовить дома, но для его работы нужно купить микроконтроллер ATMEGA 8, который стоит приблизительно $3 — $4 доллара и его предварительно нужно будет запрограммировать чтоб наш самодельный программатор работал.
Так что самым дешевым решением будет купить готовый, заводской программатор в тех же радиотоварах или заказать в интернете за 3-4 доллара и сразу же программировать наш контроллер без мороки с травлением печатных плат для самодельного программатора.
Еще одна вещь которую нужно сделать — это плата-переходник. Так как с программатора выходит 5 сигналов, то соответственно в любом микроконтроллере будет задействовано только 5 «ножек».
Такую плату можно также сделать дома, нужно только иметь навыки травления плат. Если покупать такую плату-переходник, то она будет стоить немного дороговато.
__________________синтаксис цикла while_____________________________
while(condition){ statement1; statement2; statement3;}while – имеет условие выполнения (condition), оно записано в скобках () и тело цикла, оно заключено между фигурными скобками {}. В качестве условия цикла может выступать переменная, константа, выражение или функция, возвращающая значение. Перед каждым выполнением цикла происходит проверка условия, если условие истинно, цикл выполняется, если условие ложно, цикл не выполняется. Любое ненулевое значение в скобках оператор воспримет как истину, и цикл будет выполняться. while(1){ //этот цикл будет выполняться бесконечно statement1; statement2; statement3;}
Программирование AVR микроконтроллеров для начинающих
Программа представляет собой интегрированную среду разработки программного обеспечения для AVR микроконтроллеров.
Из основных достоинств CodeVisionAVR можно отметить то, что он не слишком сложен для самостоятельного освоения, поддерживает все многочисленное семейство микроконтроллеров AVR (включая чипы с ядром ATxmega), формирует емкий и результативный программный код. Помимо компилирования среда разработки способна записать созданную программу в память микроконтроллера. Модуль прошивки может взаимодействовать со всеми популярными программаторами (AVR910, STK200/300 и многими другими). Редактор позволяет работать с двумя проектами одновременно, размещать закладки, настраивать время автоматического сохранения результатов.
Основными модулями, входящими в состав CodeVisionAVR являются: • трансляторы программ, составленных на Си-подобных языках или ассемблере, в машинный код для AVR; • элементы для инициализации периферийных устройств; • модуль для работы с платой отладки STK-500; • компоненты взаимодействия с внешними программаторами; • редактор первичного кода; • терминальный модуль.
Результат работы в программе CodeVisionAVR может быть представлен в виде HEX, ROM или BIN-файла для прямой прошивки микроконтроллера путем использования стороннего программатора. Кроме этого, программа может быть передана в формате COFF (файл отладчика) или OBJ. Число библиотек CodeVisionAVR растет с каждой новой версией и включает в себя поддержку продукции от таких известных производителей как Philips, National Semiconductor, Maxim-Dallas Semiconductor и многих других.Компилятор CodeVisionAVR отличается от AVR-GCC, который можно наблюдать в программе WinAVR, синтаксисом, количеством поддерживаемых микроконтроллеров и быстродействием конечного кода. Но больше всего по специфике работы, расположению команд и своим возможностям программа напоминает PonyProg.
При работе важно не забывать, что процедура прошивки самой программы, fuse битов и ПЗУ в CodeVisionAVR являются самостоятельными процедурами. Разработчик рекомендует сначала прописать пользовательский код, затем EEPROM-память, а в конце fuse’ы
Чтобы убедиться, что CodeVisionAVR обнаружил внешний программатор, который подключается к LPT порту рабочей станции, необходимо нажать кнопку «Reset Chip». При этом на программаторе обязаны загореться индикаторы чтения/записи.
Разработчик программы – компания HP InfoTech, расположенная в столице Румынии, городе Бухаресте. Работники фирмы постоянно трудятся над своим продуктом, улучшая оптимизатор кода и ускоряя работу компоновщика. Число пользователей, купивших данный софт, составляет более 13000 человек.
Существует две версии программы: CodeVisionAVR Evaluation – бесплатный ознакомительный вариант с ограничением до четырех килобайт размера программного кода и отсутствием ряда ключевых библиотек и CodeVisionAVR – платная коммерческая, защищенная от установки паролем.
Интерфейс CodeVisionAVR английский и русификатора к нему нет.
Требуемая платформа для установки – Windows 95, 98, 2000, XP, Vista и 7. Поддерживаются 32- и 64-разрядные операционные системы.
Распространение программы: Evaluation (бесплатная с ограничением на код 4 кБ и урезанным количеством библиотек) и Shareware (платная), цена — от 45 евро
Скачать программу CodeVisionAVR можно в нашем разделе Радиолюбительский софт