Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Микропроцессоры(Коротицкий Евгений Викторович) / лабы_гр3480 / Лабораторная работа изучение микроконтроллер at8535 №1

.doc
Скачиваний:
98
Добавлен:
18.04.2015
Размер:
60.93 Кб
Скачать

Лабораторная работа №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 модифицированного проекта.