тивної пам'яті, але фізично не є її частиною. Тому до них можна звертатися двома способами (як до регістрів і як до пам'яті). Таке рішення є особливістю AVR і підвищує ефективність роботи і продуктивність мікроконтролера.
Для зчитування аналогових сигналів наше AVR як і багато інших має на борту аналого-цифрове перетворення послідовного наближення і компаратор аналогових сигналів (порівнюючий пристрій). Задіяний буде АЦП, оскільки для компаратора потрібна більша кількість проводів. Перше про що потрібно сказати - АЦП мікроконтролера вміє вимірювати тільки напруга. Вимірюваний діапазон розбивається на частини: нуль мінімальне значення, максимальному значенню відповідає напруга джерела опорного напруги (ІОН). АЦП в нашому мікроконтролері 10-ти розрядне. Це не-поганий інструмент для контролю напруги і видає частоту дискретизації до 15кГц (15000 вибірок в секунду).
Напруження на входу вимірюються щодо опорного напруги. Виміряне напруга перетвориться в 10-бітове число і зберігається в регістрах ADCL і ADCH. У безперервному режимі АЦП періодично вимірює вхідна напруга і по закінченні перетворення записує результат в регістри ADCL і ADCH. У режимі однократного перетворення ми повинні ініціювати кожне перетворення самостійно.
У МК ATmega328 номер виводу підключеного до входу АЦП задається за допомогою регістра ADMUX - регістр мультиплексора АЦП. На малюнку 2.9 показано які біти за що відповідають в цьому регістрі.
Малюнок 2.9 - Призначення бітів в регістрі ADMUX
Біти 7: 6 - REFS1: REFS0. Біти вибору опорного напруги. Якщо ми будемо змінювати ці біти під час перетворення, то зміни вступлять в силу тільки після поточного перетворення. В якості опорного напруги може бути обраний AVCC (напруга джерела живлення), AREF або внутрішній 2.56В джерело опорної напруги.
У дані біти можна записати наступні значення :: REFS0
AREF
AVcc, із зовнішнім конденсатором на AREF
Резерв
Внутрішній 2.56В джерело, із зовнішнім конденсатором на AREF
Біт 5 - ADLAR. Визначає як результат перетворення запишеться в регістри ADCL і ADCH.=0=1
Результат видно на малюнку 2.10
Малюнок 2.10 - Регістр ADMUX після введення даних
Як можна бачити при ADLAR=0 в ADCH записуються два старші біта (2 MSB), а решта в ADCL. А при ADLAR=1 в ADCH записуються 8 старших бітів (8 MSB), а два молодших (2 LSB) в ADCL. Це зручно, якщо для точності ваших вимірювань достатньо 8-ми старших біт перетворення.
Сигнал в аналого-цифровий перетворювач подається через мультиплексор, з одного з шести входів. Вибір входу здійснюється регістром ADMUX, а точніше його бітами MUX3 ... MUX0. Записане туди число визначає обраний вхід. Наприклад, якщо MUX3..0=+0100, то підключений висновок ADC4.
Біти 3: 0 - MUX3: MUX0 - Біти вибору аналогового каналу.
MUX3: 0
ADC0
ADC1
ADC2
ADC3
ADC4
0101 ADC5
ADC6
ADC7
Якщо потрібно перевірити кілька каналів, то можна змінити відповідні біти в регістрі ADMUX і канал зміниться відразу ж після закінчення поточного перетворення. Тобто в режимі безперервного перетворення можна лег-ко зробити сканування потрібних каналів. Просто змінюючи номер каналу під час перетворення - наступне перетворення почнеться на новому каналі.
Крім того, існує кілька службових комбінацій бітів MUX, що використовуються для калібрування.
Наприклад, 1110 підключає до АЦП внутрішнє джерело опорної напруги на 1.22 вольта. А якщо записати в MUX3..0 всі одиниці, то АЦП буде зсередини посаджено на землю. Це корисно для виявлення різних шумів і перешкод.
Вибір опорного сигналу.
Це максимальна напруга, що буде взято за максимум при вимірах. Опорна напруга має бути, як можна без перешкод стабільно і коливань - від цього кардинальним чином залежить точність роботи АЦП. За-дається він в бітах REFS1..0 регістра ADMUX.
За замовчуванням там стоїть REFS1..0=00 - зовнішній ІОН, підключений до входу AREF. Це може бути напруга зі спеціальною мікросхеми опорного напруги, або ж зі стабілітрона якого, якщо потрібно заміряти невелика напруга, помітно менша ніж напруга живлення, скажімо від 0 до 1 вольт, то щоб було точніше, і щоб воно не загубилося на тлі пятівольтного харчування, то на AREF ми заводимо опорна напруга в 1 вольт ... 0=01 просто береться н...