У цьому проекті ми збираємося розробити схему вимірювання температури. Ця схема розроблена за допомогою “ LM35 ”, лінійного датчика напруги. Температура, як правило, вимірюється в градусах Цельсія або Фарахейта. Датчик “LM35” забезпечує вихід на основі шкали Цельсія.
LM35 - це триполюсний транзисторний пристрій. Він має VCC, GND та OUTPUT. Цей датчик забезпечує змінну напругу на виході залежно від температури.
Як показано на малюнку вище, при кожному підвищенні температури на +1 градус буде вища потужність на + 10 мВ. Отже, якщо температура 0 ° С, вихід датчика буде 0 В, якщо температура 10 ° С, вихід датчика буде + 100 мВ, якщо температура 25 ° С, вихід датчика буде + 250 мВ.
Отже, зараз з LM35 ми отримуємо температуру у вигляді змінної напруги. Ця напруга, що залежить від температури, подається як вхід в АЦП (аналого-цифровий перетворювач) ATMEGA32A. Цифрове значення після отриманого перетворення відображається на РК-дисплеї 16x2 як температура.
Потрібні компоненти
Апаратне забезпечення: мікроконтролер ATMEGA32, блок живлення (5 в), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), конденсатор 100 мкФ (дві штуки), конденсатор 100 нФ, датчик температури LM35.
Програмне забезпечення: Atmel studio 6.1, progisp або flash magic.
Принципова схема та пояснення
У ланцюзі PORTB ATMEGA32 підключений до порту даних РК-дисплея. Тут слід пам’ятати про вимкнення зв’язку JTAG у PORTC від ATMEGA, змінивши байти запобіжників, якщо потрібно використовувати PORTC як звичайний порт зв’язку. У РК-дисплеї 16x2 є 16 штифтів, якщо є підсвічування, якщо немає підсвічування, буде 14 штифтів. Можна підключити або залишити шпильки підсвічування. Тепер у 14 висновках є 8 висновків даних (7-14 або D0-D7), 2 висновки джерела живлення (1 & 2 або VSS & VDD або gnd & + 5v), 3- й висновок для контролю контрасту (VEE-контролює, наскільки товстими повинні бути символи показано), 3 керуючі штифти (RS & RW & E).
У схемі ви можете помітити, що я взяв лише два керуючі штирі, оскільки це дає гнучкість кращого розуміння. Біт контрасту та READ / WRITE використовуються не часто, тому їх можна закоротити на землю. Це дає РК-дисплею найвищий контраст і режим читання. Нам просто потрібно контролювати ENABLE та RS-шпильки, щоб відповідно надсилати символи та дані.
Підключення, які виконуються для РК-дисплея, наведені нижче:
PIN1 або VSS ------------------ земля
PIN2 або VDD або VCC ------------ + 5 В потужність
PIN3 або VEE --------------- земля (забезпечує максимальну контрастність найкращу для початківців)
PIN4 або RS (вибір реєстру) --------------- PD6 з UC
PIN5 або RW (читання / запис) ----------------- земля (переводить РК в режим читання полегшує зв’язок для користувача)
PIN6 або E (увімкнути) ------------------- PD5 з UC
PIN7 або D0 ----------------------------- PB0 з UC
PIN8 або D1 ----------------------------- PB1 з UC
PIN9 або D2 ----------------------------- PB2 з UC
PIN10 або D3 ----------------------------- PB3 з UC
PIN11 або D4 ----------------------------- PB4 з UC
PIN12 або D5 ----------------------------- PB5 з UC
PIN13 або D6 ----------------------------- PB6 з UC
PIN14 або D7 ----------------------------- PB7 з UC
У схемі ви можете бачити, що ми використовували 8-бітовий зв'язок (D0-D7), проте це не є обов'язковим, ми можемо використовувати 4-бітний зв'язок (D4-D7), але з 4-бітовою програмою зв'язку стає трохи складніше, тому я вибрав 8-бітний спілкування.
Отож, завдяки простому спостереженню з таблиці вище, ми підключаємо 10 контактів РК-дисплея до контролера, в якому 8 контактів - це контакти даних і 2 контакти для управління. Вихідна напруга, що забезпечується датчиком, не є повністю лінійною; це буде шумно. Для фільтрації шуму конденсатор потрібно розмістити на виході датчика, як показано на малюнку.
Перш ніж рухатися вперед, нам слід поговорити про АЦП ATMEGA32A. В ATMEGA32A ми можемо подавати аналоговий вхід на будь-який з восьми каналів PORTA, не має значення, який канал ми виберемо, оскільки всі вони однакові. Ми збираємось обрати канал 0 або PIN0 PORTA. В ATMEGA32A АЦП має 10-бітну роздільну здатність, тому контролер може виявити мінімальну зміну Vref / 2 ^ 10, тому, якщо опорна напруга становить 5 В, ми отримуємо цифровий приріст на кожні 5/2 ^ 10 = 5 мВ. Отже, для кожного входу на 5 мВ ми матимемо приріст в одиницю на цифровому виході.
Тепер нам потрібно встановити реєстр АЦП, виходячи з таких умов:
1. Перш за все нам потрібно ввімкнути функцію АЦП в АЦП.
2. Оскільки ми вимірюємо кімнатну температуру, нам насправді не потрібні значення понад сто градусів (вихідна потужність LM35 1000 мВ). Таким чином, ми можемо встановити максимальне значення або посилання АЦП на 2,5 В.
3. Контролер має функцію перетворення тригера, це означає, що перетворення АЦП відбувається лише після зовнішнього тригера, оскільки ми не хочемо, щоб нам потрібно було встановлювати регістри, щоб АЦП працював у режимі безперервного вільного запуску.
4. Для будь-якого АЦП частота перетворення (аналогове значення в цифрове значення) і точність цифрового виводу є обернено пропорційними. Тому для кращої точності цифрового виводу нам доводиться вибирати меншу частоту. Для менших годин АЦП ми встановлюємо попередній продаж АЦП на максимальне значення (128). Оскільки ми використовуємо внутрішній годинник 1 МГц, годинник АЦП буде (1000000/128).
Це єдині чотири речі, які ми повинні знати, щоб розпочати роботу з АЦП. Усі вищезазначені чотири ознаки задаються двома регістрами.
ЧЕРВОНИЙ (ADEN): Цей біт повинен бути встановлений, щоб увімкнути функцію АЦП ATMEGA.
СИНИЙ (REFS1, REFS0): Ці два біти використовуються для встановлення опорної напруги (або максимальної вхідної напруги, яку ми збираємося подавати). Оскільки ми хочемо мати опорну напругу 2,56 В, REFS0 та REFS1 обидва повинні бути встановлені таблицею.
СВІТЛО-ЗЕЛЕНИЙ (ADATE): Цей біт повинен бути встановлений, щоб АЦП працював безперервно (режим вільного запуску).
РОЗОВИЙ (MUX0-MUX4): Ці п'ять бітів призначені для введення вхідного каналу. Оскільки ми будемо використовувати ADC0 або PIN0, нам не потрібно встановлювати будь-які біти, як у таблиці.
BROWN (ADPS0-ADPS2): ці три біти призначені для налаштування прескаляра для ADC. Оскільки ми використовуємо прескаляр 128, нам потрібно встановити всі три біти.
ТЕМНО-ЗЕЛЕНИЙ (ADSC): цей біт встановлений для АЦП для початку перетворення. Цей біт можна вимкнути в програмі, коли нам потрібно зупинити перетворення.
Щоб створити цей проект з Arduino, див. Цей посібник: Цифровий термометр із використанням Arduino
Пояснення програмування
Робота ТЕМПАРАТУРНОГО ВИМІРЮВАННЯ найкраще пояснюється поетапно кодом С, наведеним нижче:
#include // заголовок, щоб увімкнути управління потоком даних над штифтами
#define F_CPU 1000000 // повідомляється прикріплена частота кристала контролера
#включати
#define E 5 // даючи назву “enable” 5- му виводу PORTD, оскільки він підключений до вимикача включення РК
#define RS 6 // даючи назву “registerselection” 6- му контакту PORTD, оскільки підключений до LCD RS-контакту
void send_a_command (команда без знака char);
void send_a_character (символ без підпису);
void send_a_string (char * string_of_characters);
int main (void)
{
DDRB = 0xFF; // розміщення portB та portD як вихідних штифтів
DDRD = 0xFF;
_delay_ms (50); // передача затримки 50 мс
DDRA = 0; // Беремо портA як вхід.
ADMUX - = (1 <
ADCSRA - = (1 <0)
{
send_a_character (* рядок_знаків ++);
}
}