logo search
Metodichka_Modul_6_red

Тема 4: Вивчення принципів роботи ацп мікроконтролеру на прикладі обробки сигналів з термодатчика

Мета: вивчити принципи функціонування вистроєного в мікроконтролер AVR АТMEGA 2561 АЦП і методику вимірювання температури за допомогою аналогового термодатчика.

В склад мікроконтролера AVR АТMEGA 2561 входить 10-разрядний аналого-цифровий перетворювач (АЦП), що реалізує принцип послідовного приближення. На вході модуля АЦП маємо 8-ми канальний аналоговий мультиплексор, що керує переключенням даних, що поступають з восьми каналів з несиметричними входами. В якості джерела опорної напруги може виступати напруга від внутрішнього джерела UREF (2.56 В), напруга живлення мікроконтролера UCC, чи зовнішнього джерела. Велика точність перетворювача досягається за тактової частоти модуля АЦП порядку 50  200 кГц. Модуль АЦП може функціонувати в режимах одиночного і неперервного перетворювання. Стандартне перетворення аналогового значення в цифрове за допомогою вистроєного АЦП виконується за 13 тактів, одиночне – за 25 тактів. Результат перетворювання для каналів с несиметричним входом виводимо з виразу:

; (3.1)

де – значення вхідної напруги, – величина опорної напруги.

Для роботи с модулем АЦП використовуються наступні регістри:

ADCW (ADCH, ADCL) – 16-розрядный регістр даних, що знаходиться за адресою 4h/24h. У регістрі використовуються 12 розрядів.

ADCSRA – регістр керування/статусу.

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

Згідно формату регістрів ADCSRA та ADMUX для робота з модулем АЦП у режимі одиночного перетворення необхідно при кожному зчитування даних із регістру ADCW виконати наступний ініціалізуючий код на мові С:

ADMUX=0b11000000; //використовується внутрішнє джерело опорної напруги UREF (2.56 В), перетворення даних, що надходять за 0-им каналом;

ADCSRA=0b11000000; //запуск модуля АЦП у режимі одиночного перетворення.

Перед початком виконання практичної частини лабораторної роботи проводиться експрес–контроль знань за принципами функціонування АЦП, що входить до складу мікроконтролеру AVR ATMEGA 2561.

Завдання. Розробити в середі програмування Code Vision AVR програму для мікроконтролеру AVR ATMEGA 2561 для вимірювання значень температури за допомогою термодатчика Analog Devices TMP–35.

Порядок виконання завдання:

  1. Ввімкнути лабораторний макет.

  2. Запустити компілятор Code Vision AVR.

  3. Створити пустий проект.

  4. Створити файл ресурсу для коду програми і підключити його до проекту.

  5. Ввести код первинного модуля програми.

  6. Виконати компіляцію.

  7. Налагодити параметри програматора.

  8. Створити загрузочний модуль програми (нажавши комбінацію клавіш Shift+F9) і виконати програмування мікроконтролеру.

  9. Перевірити працездатність завантаженої в мікроконтролер програми і показати результати праці.

  10. У випадку некоректної роботи розробленої програми, виконати апаратний скидання мікроконтролера, провести відладку первинного модуля програми і заново перевірити функціонування програми, повторивши виконання пункту 9.

Приклад виконання завдання: розробити програму для передавання даних про температуру в ПЕОМ по інтерфейсу RS232C: режим роботи АЦП – безперервне перетворення, значення розділювача частоти – 128, якщо значення температури перевищить 27°С, ввімкнути сигнал попередження (виконаний на світлодіоді).

Рішення: виходячи з параметрів режиму роботи модуля АЦП необхідно налаштувати регістри ADCSRA та ADMUX, с конфігурувати порт D на виведення даних та загасити усі світлодіоди, провести ініціалізацію модуля USART1, у циклі зчитувати дані із регістру ADCW, розраховувати значення температури за формулою 3.1, виводити їх до регістру UDR1 та аналізувати значення температури для формування сигналу попередження.

Алгоритм програми приводиться на рис. 1.15.

Рисунок 1.15 Алгоритм обробки даних термодатчика

Повний текст вихідного модуля програми з коментаріями наведений нижче:

#include <mega2561.h> //Підключити файл заголовку mega2561.h;

#include <delay.h> //підключити файл заголовку delay.h;

#define VREF 2560L //встановлення значення константи ;

#define OFFSET 500L //встановлення значення константи ;

int a; //визначення глобальної змінної а;

int read_adc() { //опис підпрограми зчитування даних з модуля АЦП

int result; //опис змінної результату

result = ADCW; //зчитування даних

result=((result*VREF)/1024 –OFFSET)/10; //обчислення резултату

return result; } //повернення результату

main() {

DDRD=0xFF; //встановлення порту D у режим виведення

PORTD=0xFF; //погашення усіх світлодіодів

ADMUX=0b11000000; //ініціалізація АЦП

ADCSRA=0b11101111; //встановлення режиму роботу АЦП

UCSR1A=0x00; //встановлення швидкості передачі даних для USART1

UCSR1B=0x08; //ініціалізація USART1 у режимі передатчика

UCSR1C=0x06; //встановлення формата кадру: 8 біт даних з відключеним //режимом парності

UBRR1H=0x00; //встановлення значення розділювача частоти

UBRR1L=35; //..швидкість прийому даних 19200 біт/с;

while (1){ //цикл з нескінченним числом ітерацій;

a=read_adc(); //отримати значення температури;

delay_ms(100); //встановити затримку у 100 мс;

UDR1=a; //передача інформації через RS232C до ПЕОМ;

if (a>27) PORTD.1=0; //якщо значення температури більше 27°С підсвітити 1-й //світлодіод

else PORTD.1=1; } // не підсвічувати в іншому разі

}

*Завдання : Реалізувати програму яка наведена вище , але щоб її запустити потрібно буде натиснути кнопку на матричній клавіатурі .