Цель работы. Целью лабораторной работы является отладка прикладных программ на языке Си для микроконтроллера AVR с помощью компилятора CVAVR и симулятора VMLAB.
1. Установите в директорию C:\CVAVR свободную версию компилятора CodeVisionAVR. В директории C:\CVAVR создайте папку z1 (задача 1) для файлов первого проекта.
Запустите компилятор. Для создания файла проекта нажимайте: Файл -> новый -> проект -> ОК -> No
- перейдите в созданную для проекта папку z1 и введите в поле "имя файла": z1
- нажмите "сохранить" - откроется окно конфигурации проекта
- перейдите на закладку "С compiler"
- выберите MK (Chip) ATmega16
- установите частоту тактирования МК (Clock) 4.0 МГц
- нажмите ОК.
Перед вами появится открытый текстовый файл Project Notes - z1.prj, в котором вы можете записывать свои замечания и мысли по проекту.
Теперь нужно создать главный для нас текстовый файл для набора исходного текста на Си - его расширение .с
- нажимайте:
Файл -> New -> Source -> ОК
появился файл untitled.c
- нажимайте:
Файл - Сохранить как
- введите в поле "имя файла": z1.c и нажмите Сохранить.
Нужно добавить созданный файл z1.c в список файлов проекта - откройте меню конфигурирования проекта: Project -> Configure.
В открывшемся диалоге, нужно выбрать ярлык "Files" и нажать кнопку "Add". В новом диалоге выберите файл "z1.c" и нажмите "Открыть". Теперь файл включен в проект.
- нажимайте: ОК
- максимизируйте (разверните) окно файла - z1.c
Теперь все готово к собственно программированию, т.е. к созданию текста программы на языке Си. Ниже в таблице подготовлен текст программы к задаче 1, реализующей следующее техническое задание: Разработать устройство на микроконтроллере ATmega16, которое будет отображать в двоичном виде горящими светодиодами 8-ми битное число, начиная с 0 и с постоянным увеличением на 1. Устройство питается постоянным стабилизированным напряжением от 4 до 5.5 вольт. Тактирование МК осуществляется от кварцевого резонатора с частотой 4 МГц. Всего подключено 8 светодиодов от ножек порта A через токоограничительные резисторы к питанию МК. Переключение светодиодов должно производиться с паузами в 65 мс.
|
Запишите (без комментариев) программу в окно исходного текста программы. Сохраните изменения: файл -> Save All.
Для компиляции программы нажмите кнопочку "Make the project".
Загляните в папку нашего проекта - z1. В результате компиляции там появилось много новых файлов. Главные для нас:
z1.hex - файл-прошивка для "загрузки" в МК;
z1__.с - копия файла z1.c для симуляторов;
z1.cof - информация, связывающая содержимое файлов z1__.с и z1.hex. Эта информация позволяет при симуляции в VMLAB наблюдать движение программы прямо по коду на языке Си. Указанные файлы будем использовать в симуляторе VMLAB. Необходимым для реального МК является лишь файл прошивки.
Следующие четыре файла содержат нашу программу, написанную на стандартном ассемблере для AVR с привязкой к тексту на Си: z1.asm, z1.lst, z1.vec, z1.inc. Остальные файлы практически не интересны.
2. Запустите VMLAB и откройте созданный проект:
Project -> Open Project File
Перейдите в папку задачи 1 C:\CVAVR\z1\ и наберите имя файла z1_vm.prj проекта для VMLAB. После появления фразы, что такой файл не существует, VMLAB предложит создать его, с чем вы соглашайтесь. В появившемся окне запишите без комментариев приведенный ниже в таблице текстовый файл.
|
В меню Project запустите Re-Build all ...
Через меню View откройте два компонента: SCOPE – это виртуальный запоминающий осциллограф симулятора и Control Panel – это панель, на которой содержатся нужные нам светодиоды и многое другое, пока нам не нужное.
Через меню Window откройте (обычно оно открывается сразу при открытии проекта) окно Code – в этом окне вы увидите текст симулируемой программы.
Обратите внимание на окно Messages – в нем появляются служебные сообщения симулятора по ходу работы. В окне Messages должно появиться сообщение об успехе и что все готово к запуску (Success! All ready to run). Кроме того, на панели инструментов загорится зеленый светофор – это кнопка, которой можно запускать симуляцию.
Нажатие зеленого светофора эквивалентно подаче "1" на вывод RESET МК при включенном питании, но еще не выполнявшем программу.
В окне Scope появились три графика для сигналов, которые мы будем наблюдать. Установите масштаб по вертикали 2 вольта на деление, а по горизонтали 50 мс.
В окне Сode появилось серое поле слева и зеленые квадратики напротив исполняемых строк кода программы на Си – кликнув по такому квадратику мы можем поставить точку останова программы.
Разместите три окна и Control Panel на экране компьютера так, чтобы видеть их все.
Нажмите "светофор" для запуска симуляции программы.
Программа запустится и остановится – в окне Messages появится сообщение. Опять нажимаем на "светофор". Симулятор опять останавливается и сообщает, что произошел сброс от "сторожевого таймера МК" - мы не указали симулятору, что не используем его. Опять нажимаем на "светофор" – теперь программа будет работать непрерывно, пока мы ее не остановим.
Пусть программа симулирует, а вы понаблюдайте за тем, что происходит в указанных выше окнах. Что отображается в окне Control Panel кроме светодиодов?
Понаблюдайте за окнами SCOPE и Code и за светодиодами. В окне Code при симуляции возникают и растут желтые полосы, подсвечивающие строки исполняемой программы. Длины этих подсветок пропорциональны времени, в течение которого программа выполняет код этих строк.
Какой ток потребляется микроконтроллером от источника питания? Остановите симуляцию, нажав красный восьмиугольник «Стоп» и измерьте длительность периода импульсов на ножке РА2 МК. Насколько соответствует она расчетной величине? Для измерения временного промежутка в окне SCOPE симулятора VMLAB нужно установить вертикальные курсоры 1 и 2 на границах измеряемого интервала и в поле Cursor delta time появится значение времени между двумя курсорами.
При измерении коротких повторяющихся интервалов можно мерить время сразу нескольких, а результат поделить затем на число таких интервалов между измерительными курсорами.
Перезапустите МК, кликнув по кнопке с круговой темно-синей стрелкой. Вы как бы отключаете и затем снова подаете питание на МК, но создаете "0" на ножке RESET МК – вследствие чего программа не стартует!
Какую функцию выполняет команда PORTA=~(per++); ?
Приведите в отчете схему подключения светодиодов к МК.
3. Модифицируйте программу. Переключите светодиоды к порту С. Время паузы между переключениями светодиодов уменьшить в 2 раза.
Для изменения Си кода программы просто запустите компилятор CodeVisionAVR (VMLAB выключать не нужно!) и внесите нужные изменения, затем откомпилируйте проект. Далее перейдите в VMLAB, сделайте глубокий рестарт и затем Re-buid all. Все! Изменения внесены и все опять готово к симуляции. Таким образом, компилятор и симулятор работают одновременно в одной папке проекта и не мешают, а помогают друг другу. В отчет включите файлы z1.c и z1_vm.prj модифицированного проекта.
4. В следующем проекте будем выводить данные на символьный LCD дисплей (жидко-кристаллический индикатор). Схема его подключения к порту А микроконтроллера приведена на рис. 1 (там же указан источник информации, в котором вы можете более подробно ознакомиться с решаемой задачей).
Запустите компилятор CodeVisionAVR, затем генератор начального кода "CodeWizardAVR" - кликнув серую шестеренку слева от красного жучка... Выберите ATmega16 и частоту кварца 4 МГц. Перейдите к закладке LCD и укажите PORTA и 16 символов.
Выполнив Файл -> Generate, Save and Exit, создайте в директории C:\CVAVR папку z2 (задача 2) для файлов нового проекта. Сохраните, нажимая три раза z2, файлы z2.c, z2.prj и z2.cwp. Посмотрите сгенерированный мастером файл начального кода программы z2.c. Какими командами проводится инициализация LCD дисплея? Можно ли удалить из программы команды, реализующие инициализацию периферийных устройств, не используемых в данной задаче?
Рисунок 1 – Типовая схема включения LCD дисплея
После команды
lcd_init(16); // LCD 16 символов на строку
добавьте две строчки:
lcd_gotoxy(5,0); // вывод символов с 6-й позиции в первой строке
lcd_putsf("Hello!"); // счет строк и символов начинается с нуля!
Сохраните (File -> Save All) и откомпилируйте программу.
Не закрывая компилятор, откройте VMLAB. В окне Open Project File впишите имя файла z2_vm и откройте файл проекта для симулятора z2_vm.prj. Впишите в него приведенный ниже в рамке текст и запустите Re-build all ... Загоревшийся светофор говорит о том, что программа готова к симуляции. Откройте окно Control Panel и, трижды нажав светофор, добейтесь непрерывной симуляции. Долгожданная надпись на экране LCD появится не сразу (процесс инициализации LCD продолжается достаточно долго). Почему через некоторое время загорается светофор?
|
Не закрывая VMLAB вернитесь в компилятор CVAVR. После команды #include <mega16.h> добавьте команду
#include <delay.h> // функции организации задержек
После команды lcd_putsf("Hello!"); добавьте команды:
delay_ms(200);
lcd_clear(); // очистка экрана LCD
delay_ms(200);
lcd_gotoxy(5,1);
lcd_putsf("FINISH!");
В последнем цикле программы перед комментарием // Place your code here добавьте команду #asm("wdr") и перекомпилируйте проект.
Вернитесь в VMLAB. Сделайте глубокий рестарт и запустите Re-build all ... Как теперь выводится информация на табло дисплея? Почему не загорается светофор после запуска непрерывной симуляции?
5. Проведите исследование работы АЦП. В папке C:\CVAVR \z3 с помощью компилятора создайте файлы проекта задачи 3 на базе программы z3.c, текст которой приведен ниже в рамке (он подробно прокомментирован в разделе 7).
|
Запустив проект на симуляцию, понаблюдайте за светодиодами и осциллографом, изменяя положение движка потенциометра. Какое напряжение соответствует единице младшего разряда АЦП? Раскройте окно Peripherals и понаблюдайте за регистрами АЦП при изменении положения движка потенциометра S1. Сравните показания светодиодов и содержимое регистров ADCH и ADCL.
Просмотрите содержимое памяти программ и текст программы на ассемблере. Сколько ячеек занимает программа? По какому адресу расположен вектор прерывания по завершению процесса аналого-цифрового преобразования?
6. Запустите на симуляцию проект, подготовленный в папке z4 (задача 4). Проект реализован на МК ATmega16.
В окне SCOPE (это виртуальный осциллограф) можно увидеть изменения напряжений на ножках МК, указанных в файле проекта - vmlab.prj. Верхняя осциллограмма – это сигнал на ножке TXD (PD1) последовательного порта USART, по которой МК передает данные на COM порт ПК через интерфейс RS232- что передает МК мы видим в виртуальном терминале TTY панели Control Panel. Там выводится значение ШИМ (PWM) сигнала, создаваемого на ножке PD5. Сам сигнал виден в окне SCOPE – посмотрите, как он меняется в соответствии с сообщаемыми числовыми значениями. На ножке PD4 формируются импульсы той же частоты с неизменной длительностью.
В файле проекта vmlab.prj к ножке PD5 подключен простейший фильтр нижних частот (ФНЧ) из резистора и конденсатора – он преобразует ШИМ-сигнал в постоянное напряжение, которое можно увидеть в окне SCOPE (сигнал DAC).
Формат передачи данных в примере – 8N1 (это формат по умолчанию для ПК). В таком формате передача байта начинается со "старт-бита" – это лог. "0" на ножке TXD для USART МК и +5...+15 В для COM порта ПК. Затем на ножку TXD выводятся все 8 бит передаваемого байта, начиная с нулевого. За время передачи бита приемник должен определить и запомнить этот уровень. Далее идет "стоп-бит" – это лог. "1" на ножке TXD для USART МК и -5...-15 В для COM порта ПК. Для согласования уровней между МК и ПК включают адаптер MAX232.
7. Протестируйте работу программы, текст которой приведен ниже. Разработайте программу, реализующую световой эффект бегущего огонька без использования ассемблерных вставок.
|
Отчет должен содержать тексты отлаживаемых программ с конкретной датой их компиляции, комментарии по ходу выполнения пунктов программы работы и рисунки, вставляемые в текст формата WORD, отображающие окна SCOPE , Control Panel и т.д. с результатами моделирования, а также ответы на контрольные вопросы.