Avr урок 22

У контролері Atmega8 АЦП має наступні характеристики

  • Дозвіл 10 біт,
  • Час перетворення одного свідчення від 13 до 250 мікросекунд в залежності від битности вимірювання, а також від тактової частоти генератора, тактирующего контролер,
  • Підтримка запуску по перериваннях,

Є ще маса різних характеристик, з якими ми, можливо, познайомимося надалі.

Як взагалі працює цифрове перетворення?

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

Зобразимо схематично процес вимірювання

Avr урок 22

Відрізок - це діапазон вимірювань. Він знаходиться між нулем і опорною напругою. А стрілка - це вимірювана напруга.

Даний відрізок ділиться навпіл, і АЦП оцінює, в якій половині знаходиться прикладена напруга

Якщо воно знаходиться в стороні нуля, то в самий старший біт результату записується 0, а якщо в стороні максимального напруження, то одиниця. У нас буде одиниця. Потім та половина відрізка, на якій знаходиться вимірюється напруга ділиться ще навпіл, і АЦП знову вимірює, якою половинці вже цього відрізка у нас знаходиться вимірюється напруга

Avr урок 22

Оцінка йде за тим же принципом - з якого боку відрізок. У нашому випадку буде 0. І цей нуль записується в наступний більш молодший біт

Потім та четвертинка знову ділиться навпіл і АЦП знову оцінює, де знаходиться відрізок

Avr урок 22

І АЦП так і продовжує такий процес до тих пір, поки не закінчаться осередки для бітів. Тобто якщо ми використовуємо 10-бітний режим, то. відповідно, і буде 10 подібних вимірів і заповняться 10 біт величини. Чим більше біт, тим точніше результат, але вже буде потрібно на це більше часу і більш серйозний і точний АЦП. Маючи даний результат, нам нескладно буде порахувати величину виміряного напруги. Ми знаємо. що якщо у нас АЦП 10-розрядний, то даний результат у нас лежить в проміжку від 0 до 1024, получаемтся всього у нас 1023 відрізка. І ми потім наш результат ділимо на 1023 і множимо на величину опорного напруги.

Подивимося блок-схему АЦП в контролері Atmega8

Avr урок 22

Ми бачимо, що у нас є мультиплексор, що має 8 каналів, вхід для опрно напруги AREF. Також існує 8-розрядна шина даних, значення з яких записуються в певний регістр. Є регістр даних, регістр управління і стану, а також регістр управління мультиплексором.

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

Avr урок 22

Працювати будемо спочатку в протеус. Також ми бачимо, що у нас підключений дисплей самим звичайним чином.

Також ми все підключимо і на живому контролері

Avr урок 22

Існує кілька варіантів опорних напруг, які ми можемо іспользовать.в нашому АЦП. Ми будемо використовувати внутрішнє опорне напруга на 2,56 вольт, воно простіше, не потрібно нічого підключати. Можливо, при такому варіанті не надто сильна точність, але перед нами не стоїть завдання створити точний вимірювальний прилад. У нас є завдання - вивчити можливість використання АЦП в контролері AVR.

А ось і таблиця варіантів опроно напруг для АЦП

Avr урок 22

Перерахуємо ці види зверху вних по таблиці. 1 варіант - це внутрішнє опорне напруга, рівна напрузі харчування, 2 варіант - опорна напруга подається на вхід AREF ззовні, 3 варіант - внутрішнє 2,56 вольт з використанням зовнішнього конденсатора, котори у нас вже припаяний до отладочной платі до певних ніжок контролера.

Також в АЦП є дільник частоти на величину від 2 до 128. Дільник цей для того, щоб ми домагалися частоти роботи АЦП не більш 200 кГц, інакше точність вимірювань буде дуже малою і ми просто розгубимо наймолодші біти. Якщо у нас виникне вимога имено до швидкості вимірювань і нам вже точність буде на так важлива, то ми зможемо використовувати і більш високі частоти вимірювань.

Тепер трохи ближче познайомимося з регістрами АЦП.

Регістр ADCSRA - керуючий і статусний регістр

ADEN - даний біт включає АЦП.

ADSC - при установці в 1 змушує АЦП починати перетворення.

ADFR - використовується в режимі з використанням переривань. При установці в 1 включає кругової режим, при якому вимірювання автоматично слідують одне за іншим.

ADIF - біт, також використовується тільки в режимі переривань. Це прапор переривань, який встановлюється в певних умовах.

ADIE - біт, що включає режим переривань.

ADPS2-ADPS0 - біти, від комбінації яких залежить величина дільника

Avr урок 22

Регістр ADMUX - це регістр для управління каналами мультиплексора АЦП

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

REFS1-REFS0 - біти, що включають певний режим використання опорного напруги. Таблиця була розміщена на даній сторінці вище.

ADLAR - це біт організації розташування вимірюваних 10 бітів в двох байтах реєстрової пари даних. Ближче ми з цим розташуванням познайомимося трохи пізніше.

MUX3-MUX0 - біти, що включають певний канал мультиплексора

Avr урок 22

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

Ну і, нарешті, реєстрова пара ADCH і ADCL. що складається з старшого і молодшого байта в яку і заноситься вимірюваний результат. А як саме він туди вкладається, цей результат, залежить від стану біта ADLAR, розглянутого вище в регістрі ADMUX

Avr урок 22

Тобто, якщо біт ADLAR НЕ виставлений, то молодші 8 біт результату знаходяться в молодшому байті реєстрової пари, а 2 старших біта - в молодших бітах старшого байта. Якщо ж біт ADLAR у нас виставлено, то 8 найстарших біт результату знаходяться в сатршем байті, а 2 молодших в 2 старших бітах молодшого байта реєстрової пари. Другий варіант нам цікавий при ісользованіі 8-бітного режиму. В даному випадку ми Новомосковськ тільки старший байт.

Проект був створений повністю з проекту уроку з вивчення 4-бітного режиму підключення LCDTest09 і був названий MyADCLCD.

Також для виносу коду для реалізації периферії АЦП були створені стандартним чином два файли adc.h і adc.c. Відповідно файл adc.h був підключений і в файлі main.h і в adc.c.

У файл MyADCLCD.c код був також повністю скопійований з головного файлу проекту Test09, все зайве було видалено. Код в даному файлі після даної операції прийняв такий вигляд

void port_ini (void)

Схожі статті