Микропроцессоры(Коротицкий Евгений Викторович) / лабы_гр3480 / Лабораторная работа изучение микроконтроллер at8535 №1
.docЛабораторная работа №1
МОДЕЛИРОВАНИЕ РАБОТЫ МИКРОКОНТРОЛЛЕРА AVR С ПОМОЩЬЮ СИМУЛЯТОРА VMLAB
Цель работы. Целью лабораторной работы является отладка прикладных программ на языке Си для микроконтроллера AVR с помощью компилятора CVAVR и симулятора VMLAB.
Программа работы
1. Установите в директорию C:\CVAVR свободную версию компилятора CodeVisionAVR. В директории C:\CVAVR создайте папку для файлов вашего проекта.
Запустите компилятор. Для создания файла проекта нажимайте: Файл -> новый -> проект -> ОК -> No
- перейдите в созданную для проекта папку и введите в поле "имя файла": primer1
- нажмите "сохранить" - откроется окно конфигурации проекта
- перейдите на закладку "С compiler"
- выберите MK (Chip) ATmega8535
- установите частоту тактирования МК (Clock) 4.0 МГц
- нажмите ОК.
Перед вами появится открытый текстовый файл Project Notes - primer1.prj, в котором вы можете создавать ваш проект.
Теперь необходимо создать файл исходного текста на языке Си - с расширением .с
для этого открываем:
Файл -> New -> Source -> ОК
появился файл untitled.c
- нажимаем:
Файл - Сохранить как
- введим в поле "имя файла": primer1.c и нажимаем Сохранить.
Необходимо добавить созданный файл primer1.c в список файлов проекта - откройте меню конфигурирования проекта: Project -> Configure.
В открывшемся диалоге выбраем ярлык "Files" и нажимаем кнопку "Add". В новом диалоге выбираем файл "primer1.c" и нажимаем "Открыть". Теперь файл включен в проект.
- нажимаем: ОК
Теперь все готово к программированию, т.е. к созданию текста программы на языке Си. Ниже в таблице подготовлен текст программы к задаче 1, реализующей следующее техническое задание: Разработать устройство на микроконтроллере ATmega8535, которое будет оцифровывать входной сигнал и отображать этот сигнал виртуальном осциллографе симулятора. Устройство питается постоянным стабилизированным напряжением от 4 до 5.5 вольт. Тактирование МК осуществляется от кварцевого резонатора с частотой 4 МГц.
/*********************************************
Project : цифровой фильтр
Version :
Date : 05.07.2008
Author : evg
Company : SGMTU
Comments:
Chip type : ATmega8535
Program type : Application
Clock frequency : 4,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 128
*********************************************/
#include <mega8535.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x60
int ss,dat,Y1,Y2;
unsigned char adc_input=0,a;
// частота дискретизации
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCCR0=0x00; // остановить таймер
TCNT0=255-125;//частота прерываний 1кГц
TCCR0=0x03; // запуск таймера
PORTB.1=!PORTB.1;
ADMUX=adc_input|ADC_VREF_TYPE;
// старт аналого-цифрового преобразователя
ADCSRA|=0x40;
}
interrupt [ADC_INT] void adc_isr(void)
{
unsigned char adc_data;
// чтение данных
adc_data=ADCH;
Y1= Y2+(adc_data - Y2)/10; Y2=Y1;
PORTC=Y1;
}
void main(void)
{
// Инициализация периферийных устройств контроллера
// Input/Output Ports initialization
// Port A initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTB=0x00;
DDRB=0x07;
// Port C initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTC=0x00;
DDRC=0xff;
// Port D initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 15,625 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x03;
TCNT0=0x05;
OCR0=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: AREF pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x8D;
SFIOR&=0xEF;
// Global enable interrupts
#asm("sei")
while (1)
{
//холостой цикл
//delay_ms(50);
//PORTB.0=!PORTB.0;
Запишите (без комментариев) программу в окно исходного текста программы. Сохраните изменения: файл -> Save All.
Для компиляции программы нажмите кнопочку "Make the project".
В результате компиляции появились следующие файлы.
primer1.hex - файл-прошивка для "загрузки" в МК;
primer1__.с - копия файла primer1.c для симуляторов;
primer1.cof - информация, связывающая содержимое файлов primer1__.с и primer1.hex. Эта информация позволяет при симуляции в VMLAB наблюдать движение программы прямо по коду на языке Си. Указанные файлы будем использовать в симуляторе VMLAB. Необходимым для реального МК является лишь файл прошивки.
Следующие четыре файла содержат нашу программу, написанную на стандартном ассемблере для AVR с привязкой к тексту на Си: primer1.asm, primer1.lst, primer1.vec, primer1.inc.
2. Запустите VMLAB и откройте созданный проект:
Project -> Open Project File
Перейдите в папку задачи 1 C:\CVAVR\primer1\ и наберите имя файла vm_primer1.prj проекта для VMLAB. После появления фразы, что такой файл не существует, VMLAB предложит создать его, с чем вы соглашайтесь. В появившемся окне запишите без комментариев приведенный ниже в таблице текстовый файл.
; Файл-проект vm_primer1.prj для симуляции по задаче 1.
; Комментарии пишутся в VMLAB только в одну строчку
; после точки с запятой
; МК как бы "прошит" файлом – primer1.hex.
; напряжение генератора передается на ЦАП через порт PC0-PC7
; ************************************************************
; PROJECT:
; AUTHOR:
; ************************************************************
; Micro + software running
; ------------------------------------------------------------
.MICRO "ATmega8535"
.TOOLCHAIN "GENERIC"
.TARGET "primer.hex"
.COFF "primer.cof"
.SOURCE "primer.c"
.TRACE ; Activate micro trace
; ------------------------------------------------------------
.POWER VDD=5 VSS=0 ; Питание +5 вольт
; VSS это GND МК - "общий" провод схемы
; Относительно него измеряются напряжения
.CLOCK 4meg ; тактовая частота МК
.STORE 250m ; время отображения
; ------------------------------------------------------------
;заготовки
V1 PA0 VSS SIN(2 1.5 50) ; синусоидальный генератор
;V2 PA1 VSS SIN(1 0.5 3)
;V3 PA2 VSS SIN(1 0.5 5)
;V1 PA0 VSS PULSE(0.6 3 100m 0 0 300m 600m) ; импульсный генератор
; LP Filter
;R1 DAC PD5 100k; filter resistor
;C10 DAC VSS 10n; filter CAP
;D1 VDD D1_NODE
;R1 D1_NODE PB0 1k ; светодиод вывод PB0
;V3 PA0 VSS SLIDER_1(0 5) ; переменный резистор
;K1 PB3 VSS ; x: Buttons 0 - F. Optional type: MONOSTABLE(t_delay), LATCHED
; ------------------------------------------------------------
XD2A D2A8 pc7 pc6 pc5 pc4 pc3 pc2 pc1 pc0 ana_out ;описание цифро-аналогового преобразователя порт PC
.PLOT V(PA0) V(ana_out) V(PB0) V(PB1) ;вывод данных на осциллограф
В меню Project запустите Re-Build all ...
Через меню View откройте два компонента: SCOPE – это виртуальный запоминающий осциллограф симулятора и Control Panel – это панель, на которой содержатся нужные нам компоненты .
Через меню Window откройте окно Code – в этом окне вы увидите текст симулируемой программы.
В окне Messages выводятся служебные сообщения симулятора по ходу работы. В конце компиляции должно появиться сообщение готовности к запуску (Success! All ready to run). На панели инструментов загорится зеленый светофор – кнопка, которая запускает симуляцию проекта.
Нажатие зеленого светофора эквивалентно подаче "1" на вывод RESET МК при включенном питании, но еще не выполнявшем программу.
В окне Scope выводятся графики для сигналов, которые мы будем наблюдать. Установите масштаб по вертикали 2 вольта на деление, а по горизонтали 50 мс.
В окне Сode появилось серое поле слева и зеленые квадратики напротив исполняемых строк кода программы на Си – кликнув по такому квадратику мы можем поставить точку останова программы.
Разместите три окна и Control Panel на экране компьютера так, чтобы видеть их все.
Нажмите "светофор" для запуска симуляции программы.
Программа запустится и остановится – в окне Messages появится сообщение. Опять нажимаем на "светофор". Симулятор опять останавливается и сообщает, что произошел сброс от "сторожевого таймера МК" - мы не указали симулятору, что не используем его. Опять нажимаем на "светофор" – теперь программа будет работать непрерывно, пока мы ее не остановим.
Наблюдайте за окнами SCOPE и Code . В окне Code при симуляции возникают и растут желтые полосы, подсвечивающие строки исполняемой программы. Длины этих подсветок пропорциональны времени, в течение которого программа выполняет код этих строк.
Какой ток потребляется микроконтроллером от источника питания? Остановите симуляцию, нажав красный восьмиугольник «Стоп» и измерьте длительность периода импульсов на ножке РB0 и PB1 МК. Для измерения временного промежутка в окне SCOPE симулятора VMLAB нужно установить вертикальные курсоры 1 и 2 на границах измеряемого интервала и в поле Cursor delta time появится значение времени между двумя курсорами.
При измерении коротких повторяющихся интервалов можно мерить время сразу нескольких, а результат поделить затем на число таких интервалов между измерительными курсорами.
Перезапустите МК, кликнув по кнопке с круговой темно-синей стрелкой. Вы как бы отключаете и затем снова подаете питание на МК, но создаете "0" на ножке RESET МК – вследствие чего программа не стартует!
3. Модифицируйте программу. Подключение светодиода к порту PB0 и управление включением диода. Время паузы между переключениями установить 50мс.
Для изменения Си кода программы просто запустите компилятор CodeVisionAVR (VMLAB выключать не нужно!) и внесите изменения в проект программы МК .
Откомпилируйте проект. Далее перейдите в VMLAB, внесите изменения в проект, сняв комментарий с строк
;D1 VDD D1_NODE
;R1 D1_NODE PB0 1k ; светодиод вывод PB0
Сделайте глубокий рестарт и затем Re-buid all. Изменения внесены и все опять готово к симуляции. Таким образом, компилятор и симулятор работают одновременно в одной папке проекта и не мешают, а помогают друг другу. В отчет включите файлы primer1.c и vm_primer.prj модифицированного проекта.