- •Теоретичні відомості
- •Контрольні запитання:
- •Порядок виконання роботи:
- •Домашня робота
- •Рекомендована література та джерела для всього навчального курсу:
- •«Микроконтроллеры avr: от простого к сложному», м.С. Голубцов, Москва, солон-Пресс, 2003
- •«Микроконтроллеры avr в радиолюбительской практике», а.В. Белов, Санкт Петербург, Наука и техника, 2007
- •«CodeVisionAvr. Пособие для начинающих» м.Б. Лебедев, Москва, Издательский дом «Додэка - ххі» 2008
Контрольні запитання:
1. Що таке мікроконтролер? Які переваги мікроконтролерів AVR?
2. Що таке ВЛУ і НЛУ? Яке їх співвідношення з напругою?
3. Яким чином мікроконтролер формує «0» і «1» на ніжках?
4. Для чого послідовно з світлодіодом підключати резистор?
5. Опишіть перехідні процеси. Як зменшити їх вплив?
6. Як підключати обв’язку до мікроконтролера яка споживає більше 20 мкА?
7. Як відбувається перезавантаження мікроконтролера за допомогою виводу «RESET»?
8. Як підключити живлення до мікроконтролера?
9. Як забезпечити тактування мікроконтролера?
10. Які способи підключення світлодіода до мікроконтролера? Які при цьому потрібно подавати сигнали на ніжки мікроконтролера щоб засвітити або погасити світлодіод?
11. Які є три пам’яті в мікроконтролері? Опишіть які функції вони виконують.
12. Що таке файл регістрів загального призначення?
13. Що таке порт вводу/виводу?
Порядок виконання роботи:
Завдання: створити пристрій, здатний засвічувати в певному порядку N-у кількість світлодіодів.
Створення схеми: Підключення обв’язки до ATmega32 робимо за вищеописаним матеріалом.
Створення програми: Писати програму можна на чому завгодно, початківцям варто віддати перевагу мові C, так як програмувати на ній простіше і наочніше. Скористаємося компілятором CodeVision AVR, подальші лістінги програм будуть наводитись саме для цього компілятора.
Визначимося з алгоритмом: Нам потрібно по черзі через певний проміжок часу активувати один з виходів МК.
Вмикати/вимикати можна різними способами:
- Присвоювати значення кожного виводу окремо;
- Записувати значення відразу всіх виводів.
Значення (послідовність) можна отримати:
- Набравши всі команди вручну;
- З масиву;
- Математичним методом.
Часовий інтервал можна задати:
- Функціями delay (затримка);
- Через таймер.
Є два способи створення проекту в CodeVision AVR. «Звичайний» і генератор коду.
Спосіб створення проекту №1
- Створюємо не комп’ютері папку з назвою проекту (наприклад lab1cv)
- Створюємо Source файл (File -> new -> Source -> OK)
|
|
- Зберігаємо файл (File -> Save as) в створену раніше папку в форматі назва_файлу.с (наприклад lab1cv.c)
- Створюємо проект (File -> New -> Project). Вибираємо Ні(No) на пропозицію скористатися автогенератором проекту CodeWizardAVR
- Вводимо назву проекту (наприклад lab1cv.prj) і зберігаємо його в каталог проекту, де раніше зберегли Sourse-файл.
- Додаємо в проект наш Sourse-файл (Add -> обираємо назва_файлу.с -> Open)
- Вибираємо мікроконтролер й частоту такування. (Вкладка С Compiler -> Code Generation поля Chip та Clock) Натискаємо ОК.
- Все, теперь можна писати програму в файлі назва_файлу.с
Спосіб створення проекту №2 (генератор коду)
- створюємо папку проекту (наприклад lab1cvautogenerate)
- натискаємо File -> New, у відкритому вікні обираємо Project і натискаємо OK.
- На пропозицію «Скористатися генератором коду?» (Do you want to use CodeWizardAVR?) натискаємо Так (Yes).
- З’явиться вікно генератора коду. В ньому обираємо тип МК і його тактову частоту, інше лишаємо як є:
- Далі переходимо на вкладку Ports -> PortA і виставляємо таку конфігурацію:
Так ми визначили всі виводи порту A як виходи, а одиниці означають, що при включенні живлення на них встановляться логічні «1».
Так само можна налаштувати й інші порти мікроконтролера (у деяких мк порти можуть бути неповними). Решта функцій нас поки не цікавить.
- Натискаємо “File -> Generate, Save and Exit”
- Вибираємо куди зберегти файли проекту (наприклад у створену раніше папку lab1cvautogenerate). Задаємо назву файлу (назва_файлу.с), назву проекту назва_проекту.prj та файл автогенератора коду. Зберігаємо три файли натиском кнопки Save.
-Після цього бачимо вікно зі створеним генератором коду. У другому способі створюється не пустий Sourse-файл, а вже із заготовкою коду. Частина передвстановлень спочатку не зрозуміла і не дуже необхідна, тож надалі розглядатимемо тільки ті частини лістингу програми, які обов’язково потрібні для роботи програми.
Написання програми
Найпростіший варіант реалізації (хоча і не найгарніший з точки зору програмування) – записати значення кожного стану, а затримки робити через функцію delay.
delay_ms(x); - затримка на x мілісекунд
delay_us(x); - затримка на x мікросекунд
PORTA - порт, з яким ми працюємо, у нашому пришладі А
PORTA.x – звернення до виводу x порта A
PORTA.x=1 –Подача «1» на вивід x порта А
PORTA.x=0 –Подача «0» на вивід x порта А
DDRA.x=1 – Конфігурування х-виводу порта А на вихід
DDRA.x=0 – Конфігурування х-виводу порта А на вхід
Якщо ми користувалися автогенератором коду, то знаходимо в кінці тексту такі рядки:
Це безкінечний цикл нашої програми (тобто виконується весь час, поки включене живлення). Все, що перед ним – команди попереднього налаштування мікроконтролера. Рядки, що починаються з «//» – коментарі, їх теж корисно іноді читати.
Вводимо замість слів «// Place your code here» такі рядки:
PORTA.7=1;
PORTA.0=0;
delay_ms(300);
PORTA.0=1;
PORTA.1=0;
delay_ms(300);
PORTA.1=1;
PORTA.2=0;
delay_ms(300);
PORTA.2=1;
PORTA.3=0;
delay_ms(300);
PORTA.3=1;
PORTA.4=0;
delay_ms(300);
PORTA.4=1;
PORTA.5=0;
delay_ms(300);
PORTA.5=1;
PORTA.6=0;
delay_ms(300);
PORTA.6=1;
PORTA.7=0;
delay_ms(300);
Кожен рядок закінчується крапкою з комою, інакше компілятор видаватиме помилку.
Натискаємо кнопку Build the project (в панелі інструментів).
Компілятор видає помилки, оскільки не знає функції delay_ms (), тому треба вказати йому файл, в якому ця функція описана.
Для цього на самому початку тексту програми потрібно вставити рядок:
#include <delay.h>
Тут крапку з комою ставити не треба.
Приблизно так:
Знову тиснемо Build the project.
Проект створено. Тепер у папці з проектом з’явиться файл назва_проекту.hex – це прошивка для мікроконтролера.
Прошивка готова, але в згенерованому коді багато невідомих нам елементів. Для роботи нашої програми достатньо меншого коду. Лістинг наведено нижче:
#include <mega32.h> // бібліотека опису мікроконтролера
#include <delay.h> // бібліотека опису часової затримки
void main(void) // головна функція
{
PORTA=0xFF; //початковий стан на виводах порта А при подачі живлення
DDRA=0xFF; //конфігурація порта А на вихід
/*********************************
Замість вищевказаних двох рядків можна було написати так:
PORTA.0=1;
PORTA.1=1;
PORTA.2=1;
PORTA.3=1;
PORTA.4=1;
PORTA.5=1;
PORTA.6=1;
PORTA.7=1;
DDRA.0=1;
DDRA.1=1;
DDRA.2=1;
DDRA.3=1;
DDRA.4=1;
DDRA.5=1;
DDRA.6=1;
DDRA.7=1;
По суті це одне і те ж саме, тільки у цьому випадку
Ми до кожного біту регістру звертаємося окремо
*Примітка: FFh = 0b11111111
*********************************/
while (1) // безкінечний цикл – поки на мк подається живлення
{
PORTA.7=1; //подача на ножку 7 порта А «1» (тобто 5 Вольт)
PORTA.0=0; //подача на ножку 0 порта А «0» (тобто 0 Вольт)
delay_ms(300);
PORTA.0=1;
PORTA.1=0;
delay_ms(300);
PORTA.1=1;
PORTA.2=0;
delay_ms(300);
PORTA.2=1;
PORTA.3=0;
delay_ms(300);
PORTA.3=1;
PORTA.4=0;
delay_ms(300);
PORTA.4=1;
PORTA.5=0;
delay_ms(300);
PORTA.5=1;
PORTA.6=0;
delay_ms(300);
PORTA.6=1;
PORTA.7=0;
delay_ms(300);
};
}
Перевірка в програмному пакеті Proteus (Labcenter Electronics)
Запускаємо ISIS (середа розробки принципових схем). У вікні натискаємо кнопку «P».
В полі “Keywords” вводимо “atmega32” і бачимо результати пошуку:
Щоб додати елемент у наш проект потрібно двічі по ньому натиснути лівою кнопкою миші.
Тепер у полі «Keywords» необхідно ввести слова «LED-RED» і «RES», й додати резистор і світло діод у проект. Після цього закрити вікно вибору елементів. Можна додати світлодіоди не тільки червоного кольору, але і синього і жовтого, якщо вони є в бібліотеках.
Збираємо схему: вивід RESET обов’язково підключити до +5V, інакше схема не працюватиме. У справжній схемі цей вивід можна і не підключати на живлення тоді увімкнеться внутрішня підтяжка, а можна підключити ланку скидання мк. Обраний мікроконтролер має внутрішній тактовий генератор, тому зовнішній кварцовий резонатор поки можна не підключати.
На одну лінію порту підключити аналоговий вольтметр (AC VOLTMETER), а на другий – цифровий (DC VOLTMETER). Під час емуляції подивитися що вони показують.
Підказка для пошуку деяких елементів:
Для редагування властивостей елементів достатньо по ньому клацнути два рази лівою кнопкою миші. Зверніть увагу на номінал резисторів.
Коли схема зібрана можна «прошити» віртуальний МК. Для цього потрібно клацнути по ньому двічі лівою кнопкою миші й побачимо таке вікно:
В полі «Program file» вказуємо наш файл прошивки, решту полів лишаємо як є. Тиснемо кнопку OK. Та запускаємо емуляцію.
Зберегти файл Proteus в окремий проект. Показати Викладачу результати своєї роботи.
