В даний час існують безліч різних програм для AVR мікроконтролерів. Сама пізнавана програма - це, звичайно, Atmel Studio, але в ній занадто багато наворотів. Тому для новачків рекомендується інше середовище розробки: CodeVisionAVR. Саме про неї ми і поговоримо в нашій статті. Завантажити її можна за прямим посиланням здес ь. Звичайно, є версії і свіжіше, але крім непотрібних фішок в них нічого корисного не додають.
У чому ж плюси цієї програми?
CodeVisionAVR - це середовище розробки, яка підтримує всі операції з МК AVR. У ній ми можемо написати заготовку коду, скомпілювати її та за допомогою програматора "залити" в потрібний нам МК. І не треба окремо качати програму-прошіватель, компілятор і інші непотрібні програми. А навіщо, якщо все це є в КодВіжне? Також КодВіжн підтримує майже всі відомі програматори для AVR, будь це китайські клони або оригінальні програматори. Великий плюс КодВіжена в тому, що він сам створює готовий шаблон програми, з якого нам потрібно видалити все зайве, що є безсумнівним плюсом для новачків.
Ось так виглядає програма після її установки (клікніть по картініке, щоб збільшити зображення)
Для того, щоб створити новий проект, натискаємо по значку "шестерня":
Після вилізе ось таке віконце. Ставимо маркер-точку на AT90, Atiny, FPSLIC і натискаємо "ОК".
Потім вилізе ось таке віконце. У червоному прямокутнику я показав, на яку частину віконця треба звернути увагу:
Вибираємо наш МК. В даному випадку я використовую МК Atiny2313, тому з усього списку МК, яка пропонує нам програма, вибираю саме його.
Також можна поміняти частоту "Clock". За умовчанням вона встановлюється на 8 мегагерц.
Далі натискаємо в цьому ж віконці на значок "шестерінки":
Вийшло ось таке віконце. Насамперед ми вибираємо папку, в яку будемо зберігати наш проект. Я створив папку на робочому столі і назвав її MK AVR. Потім написав назву нашого проекту "lesson 1", ну типу "перший урок"). Ну і потім натискаємо кнопку "Зберегти". Зверніть увагу на розширення файлу, яке я обвів фіолетовим кольором:
Потім вийде ще одне таке ж віконце, тільки розширення файлу буде іншим. Чи не губимося, прописуємо також назва файлу, в даному випадку lesson 1, і натискаємо кнопку "Зберегти"
І потім вийде точно таке ж завершальне віконце ;-). Також не губимося, прописуємо назву файлу і знову натискаємо кнопку "Зберегти".
Ну ось ми і готові до створення нашого першого проекту ;-)
КодВіжен для нас приготував шаблон. Тут явно багато зайвого барахла. Насамперед зносимо шапку
Виділяємо, натискаємо Del.
Отже, тепер думаємо над проектом, який будемо хімічити. Моргання одного светодіодик - це вже занадто банально. Тому ми візьмемо цілих ТРИ світлодіода! Наша програма буде по черзі запалювати кожен світлодіод і потім в такому ж порядку їх гасити. У нас буде ось такий алгоритм, тобто порядок дій:
1) При подачі живлення на МК запалити перший світлодіод.
2) Через 1 секунду запалити другий світлодіод, але перший світлодіод при цьому продовжує горіти.
3) Через 1 секунду запалити третій світлодіод, але два попередніх також горять. тобто у нас горять відразу 3 світлодіода.
4) Через 2 секунди гасне третій світлодіод.
5) Через секунду гасне другий світлодіод.
6) Ще через секунду гасне перший світлодіод.
7) Через 2 секунди весь цей цикл повторюється з пункту 1.
Алгоритм ми з вами узгодили. Залишилася справа за малим: написати програму ;-)
Отже, перші два рядки коду - це підключення бібліотек. Тобто ці файли у нас вже є в програмі КодВіжн. Нам залишилося їх тільки підключити.
Includeс англ. - включати, містити, підключати. Include ще називається оператором приєднання зовнішніх файлів.
Тобто ми з вами приєднуємо до нашої програми бібліотеку "tiny 2313.h" для МК Atiny 2313, так як саме на ньому буде працювати наша схема. А також підключаємо бібліотеку "delay.h". Delay - c англ. відкладати, відстрочувати. Тобто грубо кажучи, підключаємо ще і затримку.
Уф, дві строчки коду начебто написали).
Сама програма пишеться після void main (void) між фігурними дужками. Там ми будемо писати нашу програму.
Давайте уважно глянемо на наш МК:
Тут ми бачимо основну назву ніжок, а в дужках їх подвійне призначення. Подвійне призначення нас поки не цікавить. Для нас в даний момент цікаві позначення PA, PB, PD. Їх ще називають портами вводу-виводу. Тобто на них можна щось вводити і з них можна щось виводити). В даному випадку я хочу використовувати ніжки РВ0, РВ1, РВ2 для того, щоб управляти світлодіодами. На кожну з цих ніжок я повішу по одному світлодіоду, разом виходить три. Решта ніжки нас не цікавлять, тому що ми не будемо їх використовувати.
Наша схема буде виглядати ось таким чином:
Отже, я повинен налаштувати ці ніжки для управління світлодіодами.
Отже, в фігурних дужках пишемо:
0b - це бінарна система числення. Налаштовувати в бінарній системі зручно тим, що кожен біт - це одна ніжка МК. Тому рахунок йде справа-наліво. Придивіться до малюнка вище. Тут ми бачимо PORTB і нулі при двійковій ситеме обчислення. Що це означає? А означає це те, що ці висновки при невикористанні їх в програмі будуть притягнуті до нуля, тобто на них буде низький потенціал або нуль Вольт. У разі, якщо ми бачимо одинички встановлені на будь-якому з бітів, то це означає, що на цьому порту при неіпользованіі в програмі у нас буде високий потенціал або плюс 5 вольт, або, кажучи іншими словами, цей висновок у нас буде прийнятий до плюса харчування.
Це означає, що PB0, PB1, PB2 налаштовані на вихід. Вважаємо справа-наліво, якщо ви не забули. А якщо нуль, то значить налаштовані на вхід.
Після кожного рядка не забувайте ставити знак ";". інакше при компіляції (перетворення вашої програми в код, який розуміє МК), будуть помилки.
Тепер розглянемо while (1). Він означає, що шматочок програми, який буде написаний після нього, буде зациклюватися, тобто повторюватися нескінченну кількість разів.
Ну і власне можна почати писати саму програму.
Отже, як вона буде виглядати?
Дивіться, програма знаходиться між фігурними дужками. Ці дужки належать while (1). Тобто цей шматок програми буде повторюватися безліч разів.
Давайте розберемо саму програму.
PORTB.0 = 1; Це означає, що при подачі живлення на МК, у нас ніжка PB0 матиме логічну одиницю. тобто на виході цієї ніжки буде 5 Вольт, які запалять світлодіод.
delay_ms (1000); Чекаємо 1000 мілісекунд, тобто 1 секунду.
PORTB.1 = 1; Через одну секунду на ніжці PB1 з'являється логічна одиниця, тобто 5 вольт, які і запалять другий світлодіод
delay_ms (1000); Чекаємо ще одну секунду.
PORTB.2 = 1; Як тільки пройшла секунда, у нас на ніжці PB2 з'являється логічна одиниця, і, отже, запалюється третій світлодіод.
Але потім як пройдуть ці дві секунди.
PORTB.2 = 0; На ніжці PB2 з'являється логічний нуль, тобто напруга зникає. Третій світлодіод гасне.
PORTB.1 = 0; Зникає напруга на ніжці PB1. Світлодіод другий теж перестає виділяти світло.
PORTB.0 = 0; І на ніжці PB0 напруга теж стає дорівнює нулю. Перший світлодіод гасне теж.
Ось так виглядає повністю сама програма. Її можна навіть тупо скопіювати і скомпілювати.
void main (void)
PORTB = 0b00000000;
DDRB = 0b00000111;
while (1)
PORTB.0 = 1;
delay_ms (1000);
Ну все, програма написана. Залишилася справа за малим: перетворити нашу писанину в машинний код, щоб його розумів МК. Для цього ми натискаємо на кнопочку "створити всі файли проекту"
Після натискання на цю кнопку, у нас вискакує віконце, в якому йдеться про те, чи успішно пройшла компіляція і тд. Якщо все нормально, то натискаємо ОК.
Якщо щось не так, то відобразяться помилки. Я спеціально прибрав знак ";" після рядка. Лається приблизно якось так, і це не є добре:
Якщо все ОК, то у вас в папці "Exe", там де у вас все проекти лежатиме готовий файлик, в даному випадку "lesson 1. hex".
Тепер цей файлик із задоволенням з'їсть наш МК AVR і буде виконувати програму, яка знаходиться в цьому файлі.