Підготовка файлів для vmlab

1. Створіть текстовий файл, наприклад z5_start.txt, який буде файлом проекту для VMLAB.

2. Вимірюється напруга ми будемо подавати на вхід PA0 (ADC0 - висновок 40) МК з движка змінного резистора. Висновки змінного резистора подсоединим до нуля і до харчування МК. Таким чином, під час емуляції ми зможемо змінювати напругу на вході ADC0 АЦП від 0 до 5 вольт.

3. Результат вимірювання будемо виводити в порт B на 5 світлодіодів емулятора - горить "1" не горить "0" - точніше ми будемо бачити тільки 5 молодших бітів результату.

; Заголовок: ; ********* www.avr123.nm.ru *********; ; задача 5. АЦП МК AVR AT90S8535; ; компіляція на - CodeVision C compiler demo; ; Емулятора VMLAB потрібні файли .hex .cof __. C; отримані в результаті компіляції. ; ; *********************************; Для використання АЦП МК потрібно подати; опорна напруга на висновок AREF - ми; подамо 5 вольт харчування МК. Але! в VMLAB; не можна з'єднати два вузла безпосередньо; використовуємо резистор на 1 Ом: R1 VDD AREF 1; резистор R1 підключений до; вузлів VDD і AREF. Опір 1 Ом; опорна напруга Vref у нас 5 вольт -; значить при подачі 5 вольт на вхід АЦП; ми отримаємо результат: 11111 11111 (АЦП в; AT90S8535 10-ти розрядний); а крок перетворення складе; Vref / тисячу двадцять-чотири = 4.883 мілівольтах; Вход0 АЦП (це висновок PA0 МК) ми підключимо до; рухомого контакту змінного; резистора (Slider 1 у вікні "Control Panel") -; щоб при емуляції міняти вимірюється; напруга на вході АЦП. V1 PA0 VSS SLIDER_1 (0 5); на кінцях переменніка; 0 і 5 вольт; 5 світлодіодів -; підключаємо їх до висновків порту B D1 VDD PB0 D2 VDD PB1 D3 VDD PB2 D4 VDD PB3 D5 VDD PB4 .PLOT V (PA0); На екран осцилографи (вікно; "SCOPE") виведемо напруга; на движку потенціометра; Все, файл проекту для VMLAB готовий.

Зверніть увагу, VMLAB допускає пряме підключення світлодіодів до + харчування і висновків МК. Насправді необхідний струмообмежуючі резистор 430 - 910 Ом, включений послідовно з кожним світлодіодом!

Створення програми для МК:

1. В папці D: CVAVR (де у вас повинен знаходиться компілятор CodeVisionAVR) створіть папку Atmega16 для файлів проекту.

2. Запуск компілятор.

3. Для створення файлу проекту виберіть Файл -> новий -> проект -> ОК -> No

4. Перейдіть в створену для проекту папку Atmega16 і введіть в поле "ім'я файлу": Atmega16.

5. Натисніть "зберегти" - відкриється вікно конфігурації проекту.

6. Відкрийте закладку "C Compiler" і встановіть все ось так:

Зверніть увагу на формати вихідних файлів:

Нам знадобиться як зазвичай .HEX, але тепер ще й .COF файл - в ньому міститься прив'язка прошивки для МК до тексту програми на Сі для симуляторів!

ADC приклад для МК AT90S8535

Курс AVR "з нуля" на мові Сі - завдання 5

CodeVisionAVR C Compiler

Напруга на виводі AREF = 5.0V
Частота кварцу 3.69 МГц
Вимірюється напруга подається на висновок PA0
Результат (молодший байт!) Виводиться в PORTB
До бітам 0_4 PORTB підключені світлодіоди.
* /

#include <90s8535.h> / * Файл з описом "заліза" МК AT90S8535. Текст цього файлу просто буде вставлений замість цього рядка препроцесором компілятора перед компіляцією * /

#include // готові функції затримок

#define ADC_VREF_TYPE 0x00 / * тепер препроцесор всюди в тексті програми замінить "ADC_VREF_TYPE" на "0x00"


Директива #define - дуже потужна і зручна Вивчіть і застосовуйте її!

/ * Ми будемо перериватися по завершенні АЦ перетворення і виводити результат.

Потрібно написати функцію обробник цього
переривання - пишемо: * /

ADCW;
/ * Виводимо в PORTB результат АЦП.

Проаналізуємо цей рядок програми.


Регістру ADCW ви не знайдете в DataSheet але в компіляторі CVAVR ви можете використовувати його - це віртуальний 16 бітний регістр, він містить всі 10 біт результату - зручно, але можна використовувати і регістри з DataSheet, а саме: ADCL і ADCH

Далі йде операція:

- це інверсія: ОДИНИЦІ стають нулями і навпаки, нам потрібно це зробити, щоб "1" відповідав палаючий світлодіод - адже за схемою підключення він загоряється коли на ніжці МК "0"

Ще важливий момент: (unsigned char) - приведення типу даних - двухбайтное величину (ADCW - віртуальний. 16 бітний регістр існуючий тільки в "голові" компілятора КодВіжн!) Ми привели до типу беззнаковий символьний - це 8 біт - такий тип даних "полізе" в порт МК * /

delay_ms (20); / * затримка 20 мілісекунд

Увага. Не рекомендується використовувати паузи в обробнику переривання, якщо ви не контролюєте момент виникнення подій, що викликають переривання, і більше одного переривання а програмі.

ADCSR | = 0x40; // запустили наступне
// АЦ перетворення.
// почитайте DataSheet про регістрі ADCSR!

> // закриває дужка функції-
// обробника переривання


void main (void)

PORTB = 0xFF; / * Записали в "засувки" порту "B" МК одинички - але на висновках МК вони з'являться тільки коли ми зробимо ці ніжки вихід. * /

DDRB = 0xFF; / * Регістр напряму роботи висновків порту "B" МК - ми записали вісім "1" - означає тепер все ніжки стали виходити і на них з'явилися сигнали знаходяться в засувках PORTB, а попередньої рядком програми ми туди закинули одинички - тепер вони на ніжках PB0_PB7 МК. * /

Високі рівні це майже напруга живлення МК - значить струм через світлодіоди не протікає і вони погашені. Світлодіоди іншими своїми висновками підключені через резистори саме до харчування! Значить пропала різниця потенціалів на світлодіоді і немає струму - він не горить. Ось так просто.

ADCSR = 0x8E; / * ми записали в ADCSR число 0x8E або 1000 1110

Bit 7 - ADEN: записали '1' - включили АЦП (здогадалися? Да, да. `0` - вимкнути АЦП)

Bit 6 - ADSC: '1' - запускає АЦ перетворення, а у нас `0` значить перетворення поки не почнеться.

Bit 5 - ADFR: '1' - переводить АЦП в автоматичну безперервну роботу - в "автономку". У нас Bit 5 = `0` - значить АЦП буде робити кожне, окреме перетворення по нашій команді.

Bit 4 -ADIF: Прапор переривання - після закінчення АЦП стає '1' і скидається або виконанням обробки переривання, або записом в цей біт одиниці!

Bit 3 - ADIE: '1' - дозволили переривання після закінчення АЦП.

Bits 2..0 - ADPS2..ADPS0: Установка частоти роботи АЦП - у нас 110 - значить коеф. ділення 64 - частота роботи АЦП 57,65625 кГц. * /

#asm ( "sei") // дозволили глобальні переривання

ADMUX = 0; // Вибрали вхід АЦП, напруга на якому буде оцифровуватися.
// почитайте DataSheet про регістрі ADMUX
// Ви повинні розуміти як вибрати канал АЦП

ADCSR | = 0x40; / * запустили перший перетворення зробивши `1` біт_6 в регістрі ADCSR

Що б зробити будь-якої біт регістра "одиницею" не зраджуючи інші біти цього регістра, потрібно виконати побітно операцію "або" (позначається |) цього регістра з маскою. Маска це число, в якому всі біти нулі, а значення "1" мають тільки встановлюються біти.

* /
while (1); / * нескінченний цикл - будемо сидіти в ньому поки є харчування МК, а по завершенні АЦП будемо вискаіквать в функцію обробки переривання і повертатися сюди * /

> // дужка закриває для main

#include <90s8535.h> #include #define ADC_VREF_TYPE 0x00 interrupt [ADC_INT] void adc_isr (void)


Збережіть файл з вихідним тестом програми - натисніть на "дискетку".

Також його потрібно включити до складу проекту: натисніть на "молоток-ключ-викрутка" - у вікні конфігурації проекту натисніть - Add - оберіть Atmega16.c - і "Відкрити" - тепер файл A8535.c в складі проекту, натиснемо "ОК" . Зробіть: Файл - зберегти все.

Нам знадобляться всього 3 файлу з отриманих в процесі компіляції:
A8535 __. C
A8535.hex
A8535.cof

Потрібно створити новий проект

натискаємо: Project - New project

з'явилося вікно "Create new project" подивіться уважно - воно містить кілька кроків конфігурації проекту - потрібно просто заповнити їх акуратно.

step 1 - дамо ім'я нашого проекту ad_test.prj переконайтеся що він розташований у створеній нами теці!

step 2 - вибір МК: AT90S8535

step 3 - відзначаємо третій пункт - файл A8535.cof

step 4 - пишемо в верхньому полі назва файлу вихідного тексту на Сі A8535 __. c Сі натискаємо кнопку праворуч: "додати цей".
Тепер в полі "Target file [HEX]" впишемо: A8535.hex

Розгорніть вікно файлу проекту ad_test.prj - скелет проекту готовий! Тепер потрібно відкрити текстовий файл z5_start.txt який ми створювали на початку завдання.

Ми описали в ньому на мові Емулятора схему пристрою на МК - тепер потрібно додати в нього кілька рядків з згенерованого емулятором файлу проекту:

Вставте перед рядком "; Для викорис." Наступне:

TARGET "a8535.hex"; емульованого прошивка МК

COFF "a8535.cof"; файл містить прив'язку
; вмісту [.hex] до коду в [__. c]

SOURCE "a8535 __. C"; исходник на Сі на який
; сорентірован файл [.cof].
; це CodeVision додав `__` при компіляції


.TRACE; виводити отладочную інфо в вікні
; SCOPE - рожевим (див. HELP емулятора)

CLOCK 3.69meg; частота використовуваного кварцу

; ---------------------------------------------
; Позначення електричних "контактів" -
; вузлів МК до яких можна "підключитися"
; емулятора: RESET, AREF, ACO, TIM1OVF
; PA0-PA7, PB0-PB7, PC0-PC7, PD0-PD7,
;
; __ета інформація довідкова - для
; кожного МК своя!

Тепер: Файл - зберегти все.

Можна от`Білдіть проект - натисніть F9

Ось такий напис повинна вас порадувати:

Все готово до прогону програми в емуляторі.

Але перед запуском потрібно ще конфігурувати вікна на екрані ПК щоб зручно було спостерігати процес емуляції. Нам знадобляться вікна:

· Control panel - на цій панелі переменнік для зміни напруги на вході АЦП і світлодіоди
Peripherals - натисніть "+" A / D converter - будемо дивитися що в регістрах АЦП відбуватися буде.

· Messages - всякі месагі кидає по ходу емуляції - розмістіть його внизу і зробіть низьким і широким.
Scope - віртуалний осцилографи - в ньому можна побачити напруга на вході АЦП - встановіть вертикальну шкалу 1 вольт на поділ.

· Code - в цьому вікні ми побачимо наш исходник на Сі і рух програми по ньому в процесі роботи.

У меню View можна подивитися які ще вікна доступні - а для чого вони почитати в Help.

Натискаємо світлофор. Емулятор мудрує і лається: мовляв Сторожовий Таймер (собака в просторіччі) батенька повинна бути скинута! до включення!

Любить він посваритися - але у нас ЦСЄ не використовується - подивіться файл з асемблерним лістингом програми (він в папці проекту в компіляторі) - там ось такий пунктик є:

Схожі статті