Апаратна частина проекту аналогічна попередньому. Але замість ланцюга зовнішнього дільника напруги в цій схемі використовується датчик температури. Він перетворює температуру в напругу, яка вимірюється АЦП мікроконтролера і переводиться в градуси Цельсія або Фаренгейта, які відображаються на дисплеї. Існує багато різних датчиків температури. Найпоширеніші: термістор, термопара, кремнієвий датчик температури. Термістор (термоопір) дешевий і доступний. Проста схема перетворення температури в напругу наведена на рис. 3.37. Однак зміна опору термістора не є лінійною функцією від температури. Для точного вимірювання температури потрібне складне математичне рівняння Стейнхарт-Харта (Steinhart-Hart).

Рис. 3.37. Перетворення температури в напругу

Термопара добре підходить для вимірювання великих значень (порядку сотень градусів Цельсія). Термопара (подібно термістори) – також нелінійний датчик температури. Хоча напруга термопари залежить від температури, але щоб перетворити вихідну напругу термопари в відлік температури, потрібна апроксимація поліномами. Кремнієвий датчик температури використовувати найпростіше. Він видає напругу (або струм), прямо пропорційне температурі. У цьому проекті ми вибрали датчик LM35 компанії National Semiconductors, який сумісний з датчиком ТМР36 компанії Analog Devices. Датчик LM35 видає 10 мВ на один градус Цельсія. Мікроконтролер має 10-розрядний АЦП з опорною напругою 2,56 В, який забезпечує хорошу точність вимірювання температури (частки градуса Цельсія).

Специфікація проекту

Мета проекту-виміряти напругу від датчика температури і відобразити температуру в градусах Цельсія або Фаренгейта на семисегментний дисплеї в два з половиною цифри. Джерело живлення на принциповій схемі не показаний, підійде будь стабілізований джерело живлення (лінійний стабілізатор або адаптер постійного струму). Рекомендоване напруга джерела-5 В. Можна також з’єднати послідовно чотири лужні батареї по 1,5 В або навіть чотири нікель-металогідридних акумулятора по 1,2 В.

Опис пристрою

Схема аналогічна проекту 8, але вхідний сигнал надходить з температурного датчика LM35, який видає 10 мВ напруги на кожен градус Цельсія. Далі напруга подається на вхід АЦП, а результат відображається на дисплеї (після автоматичного вибору межі вимірювання).

Програма крім відображення температури виконує також і перетворення з градусів Цельсія в градуси Фаренгейта. Режим відображення температури (градуси Цельсія / градуси Фаренгейта) перемикається кожні 5 секунд. Горизонтальна риска включається для режиму “Фаренгейт” і вимикається для режиму “Цельсій”.

Програмування

Відкомпільований вихідний код (разом з файлом MAKEFILE) можна завантажити за посиланням: www.avrgenius.com/tinyavrl.

Тактова частота дорівнює 8 МГц. Функцію скидання контакту РВ5 необхідно відключити (встановивши fuse-біт RSTDISBL). Розглянемо найважливіші фрагменти коду.

While(1)

{

temperature = read_adc();

// Тут температура в 100 разів більше реальної if (temperature < = 199)

{

point = 1;

}

else if (temperature<1995)

{

if (temperature%10>=5)

{

temperature = temperature +10;

}

temperature = temperature/10; point = 2;

}

else

{

if(temperature%100>=50)

{

temperature = temperature+100;

}

temperature = temperature/100; point = 3;

}

c=temperature/100; temperature = temperature%100; d= temperature/10; temperature = temperature%10; e = temperature; display(c,d,e,point,mode==FAH); _delay_ms (100) ;

}

Лістинг 3.6 – це головний нескінченний цикл програми. Він спочатку читає відлік АЦП (за допомогою функції adc_read, яка видає значення, в 100 разів перевершує реальну температуру). Температура відображається або в градусах Цельсія, або Фаренгейта (залежно від режиму). АЦП працює в 10- розрядному режимі; в якості опорного вибрано внутрішнє напруження в 1,1 В (для підвищення точності).

Після отримання відліку АЦП виконуються обчислення: спочатку вибирається місце десяткового дробу, а потім результат округлюється до трьох цифр. Після цього цифри передаються в функцію відображення, яка встановлює відповідність з масивом statusonoff. Призначення цього масиву те ж, що і в проектах 7 і 8. Таймер TimerO крім управління мультиплексированием за методом Чарлі відраховує також і п’ять секунд для перемикання режиму відображення між шкалами Цельсія і Фаренгейта.

Робота пристрою

Пристрій постійно показує поточну температуру, причому кожні п’ять секунд режим відображення перемикається. Шкалу Фаренгейта позначає горизонтальна риска (як пояснювалося раніше).

Джерело: Гадре, Д., Цікаві проекти на базі мікроконтролерів tinyAVR / Дхананья Гадре, Нігула Мелхотра: Пер. з англ. – СПб .: БХВ-Петербург, 2012. – 352 с .: іл. – (Електроніка)