їмо мікроконтролери

Datagor Electronics Журнал практичної електроніки Повна версія сайту

Цю статтю (а точніше цикл статей ...) я вирішив повністю присвятити мікроконтролерів фірми Atmel. Звичайно, тема ця заяложена ... АЛЕ! На власному досвіді знаю, що пізнати істину серед цього, вибачте, бардак, дуже і дуже складно! Тому вирішив спробувати внести хоча б якусь ясність в голови спраглих пізнати цього страшного звіра, який кличе «Микроконтроллер».

Отже, мета цієї статті в тому, щоб описати і по можливості показати весь процес створення пристрою на основі мікроконтролера з «нуля». Тобто, від задумки (наприклад, вирішили ми зібрати новорічну мигалку, подібну описаної шановним alx32 в статті «Анатомія мікроконтролерів ATmega» ...) до втілення в залозі. Зрозуміло, минаючи всі проміжні стадії: постановка задачі, вибір МК, підбір обв'язки, формулювання алгоритму, написання програми, налагодження, створення плати і, саме довгоочікуване - запуск.

їмо мікроконтролери

Отже, завдання. нам потрібно створити пристрій, здатний запалювати в певному порядку (нехай буде по черзі). N-ну кількість світлодіодів (нехай буде 8 штук).
(Це для початку ...... ..)

Виключений фрагмент. Повний варіант статті доступний тільки повноправним членам спільноти і передплатникам.
Будь ласка, ознайомтеся з умовами доступу.


Тепер можна братися за програмування. Писати можна на чому завгодно, але початківцям раджу віддати перевагу мові C. тому програмувати простіше і наочніше. Особисто я користуюся компілятором CodeVision AVR (він є в файловому архіві), подальші листинги програм будуть приводитися саме для цього компілятора.

Визначимося з алгоритмом. Нам потрібно по черзі через певний проміжок часу активувати один з виходів МК.

Вмикати / вимикати можна різними способами:
- присвоювати значення кожному висновку окремо;
- записувати значення відразу всіх висновків.

Значення (послідовність) можна отримати:
- набравши все команди вручну;
- з масиву;
- математичним методом.

Часовий інтервал можна задати:
- функціями delay (затримка);
- через таймер.

Поекспериментуємо з усіма цими способами. Але спочатку потрібна заготовка ...

Щоб створити заготовку програми скористаємося генератором коду, вбудованим в CVAVR. Для цього запускаємо програму, натискаємо File -> New. у вікні, вибираємо "Project" і тиснемо OK. На питання «Скористатися генератором коду?» Відповідаємо "Yes".
З'явилося вікно генератора коду. У ньому вибираємо тип МК і його тактову частоту, інше залишаємо як є:

їмо мікроконтролери


Далі переходимо на вкладку "Ports" і там в "PortB" і виставляємо наступне:

їмо мікроконтролери


Так ми визначили всі висновки порту B як виходи, а нулики означають, що при включенні харчування на них буде встановлюватися логічний "0".
Решта функцій нам поки не потрібні.

Тиснемо "File -> Generate, Save and Exit". вибираємо куди зберегти файли проекту і бачимо вікно з створеним генератором кодом.

Тепер давайте введемо в програму наш код.
Найпростіший варіант реалізації (хоча і сами не гарний з точки зору програмування) - записуємо значення кожного виведення, а затримки робимо через функцію delay.

delay_ms (x); - затримка на x мілісекунд

delay_us (x); - затримка на x мікросекунд

PORTB - порт, з яким ми працюємо.

PORTB.x - звернення до висновку x порту B

Знаходимо в кінці тексту такі рядки

Виключений фрагмент. Повний варіант статті доступний тільки повноправним членам спільноти і передплатникам.
Будь ласка, ознайомтеся з умовами доступу.


Тиснемо кнопочку Make the project

(В панелі інструментів).

Матюкається?
І вірно! Компілятор не знає функції delay_ms (). тому треба вказати йому файл, в якому ця функція описана.
Для цього на самому початку тексту програми потрібно вставити рядок (тут точка_с_запятой не потрібна!)
Приблизно ось так:

Знову тиснемо чарівну кнопочку.
Проект створений.
Тепер в папці, в яку ми зберегли сам проект, з'явився файл названіе_проекта .hex - це і є прошивка мікроконтролера!

Але почекайте, не поспішайте хапатися за паяльник ... Адже ми вчимося програмувати, а не паяти!

Саме тому пропоную перевірити нашу програму в віртуальному режимі, а саме - в такому чудовому і улюбленому мною продукті від Labcenter Electronics - Proteus VSM Там можна моделювати абсолютно будь-які схеми (навіть примітиви Лапласа є!). Взяти її можна в прикріпленому архіві, разом з файлами проекту. Правда версія не зовсім крякнути, тому не працює збереження. Що з цим робити розповім в окремій статті.

Отже, запускаємо ISIS (середовище розробки принципових схем). У цьому вікні натиском кнопочку "P".

їмо мікроконтролери

У рядку "Keywords" вводимо "attiny2313" і праворуч отримуємо:

їмо мікроконтролери


Вибирати особливо немає з чого, тому клацаємо двічі по цій самотньою рядку і бачимо зліва в основному вікні:

їмо мікроконтролери


Це означає, що елемент доданий.

Тепер введіть в поле "Keywords" слова "LED-RED" і "RES". Додайте резистор і світлодіод в проект і закрийте вікно вибору елементів.

Пробуємо зібрати схему (висновок RESET обов'язково підключіть до + 5V, інакше нічого не заробить! І в житті це теж бажано!)

їмо мікроконтролери

Ось невелика підказка:

їмо мікроконтролери

А для редагування властивостей елементів досить клацнути по ним двічі.

Зібрали? Сподіваюся, не покалічили при цьому себе, близьких і навколишні предмети.

Вибачте за знущання, просто якщо розберешся сам - вже не забудеш, так що, осягати, програма дуже потужна і вона варта того, щоб її освоїти!

Коли схема зібрана, можна прошити наш віртуальний МК. Для цього клацаємо по ньому двічі і бачимо вікно:

їмо мікроконтролери


В поле "Program file" вказуємо наш файл прошивки, решта не чіпаємо, поки. Тиснемо кнопку OK. І запускаємо анімацію:

їмо мікроконтролери

Ось і замигала наша миготлива мега-мигалка.

Ось тільки проблемка ... Помітили, що всі світлодіоди запалюються один за іншим, крім першого. Він запалюється не в той же момент, коли гасне останній, а з невеликою затримкою.
Ось ми і знайшли помилки в роботі програми, навіть не перевіряючи її на цьому мікроконтролері.

Спробуйте самі знайти причину цієї неприємної несподіванки ...


Загалом, далі буде ... Будемо розбиратися із записом в усі висновки відразу і використанням таймерів, масивів і переривань ...

Виключений фрагмент. Повний варіант статті доступний тільки повноправним членам спільноти і передплатникам.
Будь ласка, ознайомтеся з умовами доступу.