Вивчати пристрій мікроконтролера будемо на прикладі мікроконтролера ATmega16. Для початку завантажуємо даташит на нього. У даташіте на третій сторінці є блок-діаграма мікроконтролера. Ось вона (картинка “кликабельна”):

На схемі я підписав тільки самі основні пристрої. “Центром” будь-якого мікроконтролера є ядро ​​(AVR CPU). Воно складається з Арифметичне-логічного пристрою (АЛП), яке виконує всі математичні операції, регістрів загального призначення (РОН), в які ми можемо довантажувати які-небудь значення, регістра SREG (Status Register), біти якого говорять нам про стан процесора (наприклад, там є біт, дозволяючий переривання глобально, біти, що вказують про те, що вийшло в результаті яких математичних дій та ін), регістр інструкцій (Instruction Register), який завантажує інструкції по одній з FLASH пам’яті (пам’яті програм), декодер інструкцій, який виконує інструкції, взяті з пам’яті програм. Також є Program Counter і Stack Pointer. У Program Counter зберігається адреса поточного оператора програми, який виконує контролер. Stack Pointer вказує адресу стека – кінця SRAM пам’яті (оперативки), в який ми можемо записати дані. Все, з процесором закінчили, переходимо до периферії.

Всі пристрої мікроконтролера пов’язані між собою 8-ми бітної шиною даних. По ній дані передаються від одного пристрою до іншого.

Переривання – догляд мікроконтролера від основної програми при певному подію. Подією може являтся, наприклад, прийом байта через UART інтерфейс, закінчення передачі байта та ін Коли відбувається переривання, мікроконтролер негайно зупиняє виконання основної програми пішов до так званого оброблювачу переривання. У обробнику переривання виконується кокое-яку дію, наприклад, якщо відбулося переривання по прийому байта через UART, то ми можемо порівняти прийнятий байт з тим, що ми очікуємо прийняти і, наприклад, запалити світлодіод. Так от генерує ці переривання контролер переривань (Interrupt Unit).

Також важливою частиною мікроконтролера є тактовий генератор і система скидання (MCU CTRL. & Timing). Тактовий генератор генерують тактові імпульси, які забезпечують синхронність роботи пристроїв. Без тактових імпулсьсов мікроконтролер працювати не може. Контролер може тактіроваться від внутрішнього RC генератора, частоту якого можна підлаштовувати, заносячи байт калібрування в спеціальний реєстр. На схемі цей генератор позначений як “Internal Calibrated Oscillator”. Також в мікроконтролері присутній генератор, для роботи якого потрібна кварцовий резонатор. Цей генератор надійніший і генерована ним частота не залежить від температури повітря і інших зовнішніх факторів. Скидання мікроконтролера – дія, при якому мікроконтролер обнуляє Program Counter і починає виконувати програму спочатку. При цьому вміст РОН зберігається. У кожного мікроконтролера мається висновок скидання (RESET). Якщо цей висновок притиснути до землі (подати на нього логічний 0), мікроконтролер скинеться. Також цей висновок використовується при програмуванні AVR, щоб ввести контролер у режим програмування.

Тепер я розповім Вам про порти введення-виведення. У ATmega16 їх 4. Кожен з портів складається з цифрової схеми управління і драйвера. Цифрова схема управління виконує команди, послані ядром, а драйвер управляє безпосередньо ніжками мікроконтролера. Також до деяких висновків портів введення-виведення підключені додаткові пристрої, наприклад, до всіх лініях порту А підключений АЦП. І цей порт може працювати як в режимі звичайного порту введення-виведення, так і в режимі АЦП.

Тепер поговоримо про пам’ять. У кожного мікроконтролера AVR є FLASH пам’ять (Program Flash), SRAM і EEPROM. У Flash пам’яті знаходиться сама прошивка мікроконтролера. SRAM – оперативна пам’ять. EEPROM – енергонезалежна пам’ять, в яку ми можемо записувати що завгодно. Це необхідно, наприклад, коли потрібно зберегти якісь мінливі значення і відновити їх після вимкнення живлення.

АЦП – аналогово-цифровий перетворювач. Він дозволяє представити аналоговий сигнал у вигляді чіла від 0 до 255 або до 1024 залежно від розрядності АЦП. У мікроконтролерах AVR АЦП 10-ти розрядний, тому ми можемо представити сигнал у вигляді числа від 0 до 1024, а також, якщо не будемо використовувати старший регістр і не потрібна велика точність, то можна той же сигнал представити у вигляді числа від 0 до 255. У мікроконтролерах AVR АЦП складається з 2-х частин – власне самого АЦП (MUX & ADC) і схеми, яка пов’язує його з ядром (ADC Interface).

Таймери / лічильники (Timers / Counters) – пристрої, які можуть цокати з різною швидкістю вимірюючи час. Вони цокає незалежно від ядра. Як правило один з таймерів може працювати в асинхронному режимі то є тактіроваться від окремого тактового генератора на кварцовому резонаторі.

WatchDog Timer (його ще називають собачим або сторожовим таймером :) ) – Таймер, який при зависанні мікроконтролера скидає його. Цей таймер можна відключити. Як видно з діаграми він з’єднується не тільки з шиною даних, а й зі схемою скидання і тактіровкі для того, щоб власне мати можливість скинути мікроконтролер. Також собачий таймер має свій тактовий генератор.

TWI (two wire interface) – по суті це IIC інтерфейс. Називається він так толко тому, що право на його використання коштує грошей.

USART – всім відомий послідовний інтерфейс для передачі даних. Відрізняється від COM порту комп’ютера він тільки логічними рівнями, тому за допомогою цього інтерфейсу найлегше зв’язати мікроконтролер з компом.

Аналоговий компаратор – пристрій, який порівнює 2 сигналу і залежно від того, на якому вході амплітуда його більше, на виході у компаратора з’являється або 0, або 1. Схема, яка пов’язує компаратор з ядром, за певної умови також викликає переривання. Умова, за якого відбувається переривання можна міняти. Компаратор нагоді, наприклад, якщо необхідно зробити індикацію того, що батарейка розряджена. Для цього на один з входів подається опорна напруга, а на іншій вимірюється.

SPI також є одним з послідовних інтерфейсів, яких у мк не один. Також через цей інтерфейс відбувається послідовне програмування мікроконтролера. Саме тому на схемі до блоку SPI підключений ще й Programming Logic.

На цьому завершу цю статтю. Удачи Вам в освоєнні AVR!

radioelektr.ru