АЦП мікроконтролерів AVR

Продовжимо вивчати аналого-цифровий перетворювач мікроконтролерів AVR на прикладі цифрового вольтметра постійної напруги з межами вимірювання від 0 до 25V. Вимірювана напруга відображатиметься на трирозрядному семисегментному індикаторі із загальним анодом. У цьому прикладі застосуємо динамічну індикацію про яку детальніше розказано на одному з попередніх занять, шматок вихідного коду візьмемо туди ж. МікроконтролерAtmega8 тактується від внутрішнього генератора частотою8MHz.

Далі займемося налаштуваннямАЦП. На цей раз спробуємо використовувати внутрішнє джерело опорної напруги 2,56V, т.к. вихідAref мікроконтролера з'єднаний зІОН, для забезпечення стабільностіІОН підключаємо до виведенняAref конденсатор. Резистор R3 - підстроювальний, він служить регулювання номінального рівня напруги, бажано багатооборотний.

перетворення

ВходомАЦП є лінія PC0(ADCO) , т.к. вольтметр у нас повинен вимірювати напругу до 25V, а 25V для порту контролера це дуже багато, у таких випадках використовують дільник напруги. Наприклад, якщо напруга на вході змінюватиметься від 0 до 25V, то на виході вона змінюватиметься від 0 до 5V.

Розрахуємо максимальну напругуUemax, що подається на вхід АЦП за формулою:

Uemax = 1023*Uref/1024

Uemax = 1023 * 2.56/1024 = 2,5575V

Розрахуємо максимальну вхідну напругу дільника, виходячи з параметрів: R1=100k, R2=10k, Uemax=2,5575, застосуємо таку формулу:

Uemax = Uin*R2/R1+R2

де Uin максимальна напруга подається на вхід дільника.

Uin = 2,5575 * 110k / 10k = 28,1325V

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

ADC = 1024*Uemax/Uref

Наприклад, при максимальній напрузі на вході 2,5575V результат перетворення буде таким:

ADC = 1024 * 2,5575 / 2,56 = 1023

При напрузі на вході 2V результат буде таким:

ADC = 1024 * 2/2.56 = 800

Щоб на індикаторі отримати реальні цифри у Вольтах результат перетворення треба помножити на коефіцієнт рівний відношенню максимальної напруги (4 розряду) поданого на вхід дільника до максимального результату перетворення АЦП.

k = 2813/1023 = 2,75

У програмі обробника переривань від АЦП результат перетворення перемножуємо на цей коефіцієнт і отримуємо величину напруги дільника, що подається на вхід, т.к для операції множення на дробове число мікроконтролеру потрібно багато пам'яті, існує спосіб представити число 2,75 по іншому, наприклад: (ADC * 11)/4. Налаштовуємо регістри АЦП та Таймера2, глобально дозволяємо переривання, так само в коді обчислюємо середній показник результату перетворення та виводимо дані на індикатор. Повний текст програми нижче.

Вихідний код для індикатора із загальним катодом

При програмуванні встановити такі Fuse - біти: