- Požadované komponenty:
- Schéma zapojenia:
- Meranie teploty pomocou LM35 pomocou 8051:
- 16 x 2 LCD:
- ADC0804 IC:
- Snímač teploty LM35:
- Vysvetlenie kódu:
Niekedy je pre ľudí kolísanie teploty z analógového teplomeru náročné. Takže tu postavíme jednoduchý digitálny teplomer využívajúci mikrokontrolér 8051, v ktorom sa na meranie teploty používa snímač LM35. Použili sme tiež LM35 na zostavenie digitálneho teplomeru pomocou Arduino, NodeMCU, PIC, Raspberry Pi a ďalších mikrokontrolérov.
Tento projekt bude slúžiť aj ako správne prepojenie ADC0804 s 8051 a 16 * 2 LCD s mikrokontrolérom 8051.
Požadované komponenty:
- 8051 vývojová doska
- Doska ADC0804
- 16 * 2 LCD displej
- Senzor LM35
- Potenciometer
- Prepojovacie vodiče
Schéma zapojenia:
Schéma zapojenia digitálneho teplomera s obvodom používajúcim LM35 je uvedená nižšie:
Meranie teploty pomocou LM35 pomocou 8051:
Mikrokontrolér 8051 je 8-bitový mikrokontrolér, ktorý má 128 bajtov na čipovej RAM, 4K bajtov na čipovej ROM, dva časovače, jeden sériový port a štyri 8bitové porty. Mikrokontrolér 8052 je rozšírením mikrokontroléra. Nasledujúca tabuľka zobrazuje porovnanie 8051 členov rodiny.
Funkcia |
8051 |
8052 |
ROM (v bajtoch) |
4K |
8K |
RAM (bajty) |
128 |
256 |
Časovače |
2 |
3 |
I / O piny |
32 |
32 |
Sériový port |
1 |
1 |
Prerušiť zdroje |
6 |
8 |
16 x 2 LCD:
16 * 2 LCD je široko používaný displej pre zabudované aplikácie. Tu je krátke vysvetlenie pinov a práce s 16 * 2 LCD displejom. Vo vnútri LCD sa nachádzajú dva veľmi dôležité registre. Sú to dátový register a príkazový register. Register príkazov sa používa na odosielanie príkazov, ako je jasný displej, kurzor doma atď., Register údajov sa používa na odosielanie údajov, ktoré sa majú zobrazovať na displeji LCD 16 * 2. V nasledujúcej tabuľke je uvedený popis kolíka 16 * 2 LCD.
Pripnúť |
Symbol |
I / O |
Popis |
1 |
Vss |
- |
Uzemnenie |
2 |
Vdd |
- |
+ 5V napájanie |
3 |
Vee |
- |
Napájanie na kontrolu kontrastu |
4 |
RS |
Ja |
RS = 0 pre príkazový register, RS = 1 pre dátový register |
5 |
RW |
Ja |
R / W = 0 pre zápis, R / W = 1 pre čítanie |
6 |
E |
I / O |
Povoliť |
7 |
D0 |
I / O |
8-bitová dátová zbernica (LSB) |
8 |
D1 |
I / O |
8-bitová dátová zbernica |
9 |
D2 |
I / O |
8-bitová dátová zbernica |
10 |
D3 |
I / O |
8-bitová dátová zbernica |
11 |
D4 |
I / O |
8-bitová dátová zbernica |
12 |
D5 |
I / O |
8-bitová dátová zbernica |
13 |
D6 |
I / O |
8-bitová dátová zbernica |
14 |
D7 |
I / O |
8-bitová dátová zbernica (MSB) |
15 |
A |
- |
+ 5 V pre podsvietenie |
16 |
K |
- |
Uzemnenie |
Nasledujúca tabuľka zobrazuje často používané kódy príkazov LCD.
Kód (hex) |
Popis |
01 |
Jasná obrazovka displeja |
06 |
Prírastok kurzora (pravý posun) |
0A |
Displej vypnutý, kurzor zapnutý |
0C |
Displej zapnutý, kurzor vypnutý |
0F |
Displej zapnutý, kurzor bliká |
80 |
Posuňte kurzor na začiatok 1. riadku |
C0 |
Posuňte kurzor na začiatok druhého riadku |
38 |
2 riadky a matica 5 * 7 |
ADC0804 IC:
ADC0804 IC je 8-bitový paralelný ADC v rodine ADC0800 série od National Semiconductor. Pracuje s +5 voltami a má rozlíšenie 8 bitov. Veľkosť kroku a rozsah Vin sa líšia pre rôzne hodnoty Vref / 2. Nasledujúca tabuľka zobrazuje vzťah medzi rozsahmi Vref / 2 a Vin.
Vref / 2 (V) |
Vin (V) |
Veľkosť kroku (mV) |
otvorené |
0 až 5 |
19,53 |
2.0 |
0 až 4 |
15,62 |
1.5 |
0 až 3 |
11,71 |
1.28 |
0 až 2,56 |
10 |
V našom prípade je Vref / 2 pripojený k 1,28 voltu, takže veľkosť kroku je 10 mV. Pre ADC0804 sa veľkosť kroku počíta ako (2 * Vref / 2) / 256.
Na výpočet výstupného napätia sa používa nasledujúci vzorec:
Dout = Vin / veľkosť kroku
Kde Dout je výstup digitálnych údajov v desatinnom čísle, Vin = analógové vstupné napätie a veľkosť kroku (rozlíšenie) sú najmenšou zmenou. Viac informácií o ADC0804 sa dozviete tu, tiež skontrolujte prepojenie ADC0808 s 8051.
Snímač teploty LM35:
LM35 je teplotný senzor, ktorého výstupné napätie je lineárne úmerné teplote Celzia. Model LM35 je už kalibrovaný, a preto nevyžaduje žiadnu externú kalibráciu. Na výstup dáva 10 mV pre každý stupeň teploty Celzia.
Senzor LM35 vytvára napätie zodpovedajúce teplote. Toto napätie sa prevádza na digitálne (0 až 256) pomocou ADC0804 a dodáva sa do mikrokontroléra 8051. Mikrokontrolér 8051 prevádza túto digitálnu hodnotu na teplotu v stupňoch Celzia. Potom sa táto teplota prevedie do ascii formy, ktorá je vhodná na zobrazenie. Tieto hodnoty ascii sú napájané na 16 * 2 LCD, ktorý zobrazuje teplotu na obrazovke. Tento proces sa opakuje po zadanom intervale.
Nižšie je obrázok nastavenia pre digitálny teplomer LM35 s použitím 8051:
Všetky digitálne teplomery založené na LM35 nájdete tu.
Vysvetlenie kódu:
Kompletný program C pre tento digitálny teplomer využívajúci LM35 je uvedený na konci tohto projektu. Kód je rozdelený na malé zmysluplné bloky a je vysvetlený nižšie.
Pre rozhranie 16 * 2 LCD s mikrokontrolérom 8051 musíme definovať kolíky, na ktorých je 16 * 2 lcd pripojený k mikrokontroléru 8051. RS pin 16 * 2 lcd je pripojený k P2.7, RW pin 16 * 2 lcd je pripojený k P2.6 a E pin 16 * 2 lcd je pripojený k P2.5. Dátové piny sú pripojené k portu 0 mikrokontroléra 8051.
sbit rs = P2 ^ 7; // Register Select (RS) pin of 16 * 2 lcd sbit rw = P2 ^ 6; // Čítanie / Zápis (RW) pin 16 * 2 lcd sbit en = P2 ^ 5; // Povoliť (E) pin 16 * 2 LCD
Podobne pre rozhranie ADC0804 s mikrokontrolérom 8051 musíme definovať piny, na ktorých je ADC0804 pripojený k mikrokontroléru 8051. Pin RD ADC0804 je pripojený k P3.0, pin WR ADC0804 je pripojený k P3.1 a pin INTR ADC0804 je pripojený k P3.2. Dátové kolíky sú pripojené k portu 1 mikrokontroléra 8051.
sbit rd_adc = P3 ^ 0; // Čítanie (RD) kolíka ADC0804 sbit wr_adc = P3 ^ 1; // Napíš (WR) pin ADC0804 sbit intr_adc = P3 ^ 2; // Prerušenie (INTR) kolíka ADC0804
Ďalej musíme definovať niektoré funkcie, ktoré sa v programe používajú. Funkcia oneskorenia sa používa na vytvorenie zadaného časového oneskorenia, funkcia c mdwrt sa používa na zasielanie príkazov na displej LCD 16 * 2, funkcia datawrt na zasielanie údajov na displej LCD 16 * 2 a funkcia convert_display sa používa na prevod údajov ADC na teplotu. a zobraziť na 16 * 2 lcd displeji.
neplatnosť oneskorenia (unsigned int); // funkcia na vytvorenie delay void cmdwrt (unsigned char); // funkcia na posielanie príkazov na 16 * 2 lcd displej void datawrt (unsigned char); // funkcia na posielanie dát na 16 * 2 lcd displej void convert_display (nepodpísaný znak); // funkcia na prevod hodnoty ADC na teplotu a jej zobrazenie na 16 * 2 lcd displeji
V spodnej časti kódu zasielame príkazy na 16 * 2 lcd. Príkazy, ako je jasný displej, prírastok kurzora vynútiť kurzor na začiatok 1 prvom riadku sú odosielané do 16 * 2 LCD displej jeden po druhom po určitej zadanej časovej odmlke.
for (i = 0; i <5; i ++) // odosielanie príkazov na 16 * 2 lcd zobrazenie jedného príkazu súčasne {cmdwrt (cmd); // volanie funkcie na posielanie príkazov na 16 * 2 oneskorenie LCD displeja (1); }
V tejto časti kódu odosielame údaje na 16 * 2 LCD. Údaje, ktoré sa majú zobraziť na displeji LCD 16 * 2, sa po určitom zadanom časovom oneskorení odosielajú na zobrazenie jeden po druhom.
for (i = 0; i <12; i ++) // odosielanie dát na 16 * 2 lcd zobrazenie po jednom znaku {datawrt (data1); // volanie funkcie na posielanie dát na 16 * 2 LCD oneskorenie zobrazenia (1); } V tejto časti kódu prevádzame analógové napätie produkované snímačom LM35 na digitálne dáta a potom je prevedené na teplotu a zobrazené na 16 * 2 lcd displeji. Aby ADC0804 zahájil konverziu, musíme na pin WR ADC0804 vyslať impulz nízkeho až vysokého impulzu, potom musíme počkať na koniec konverzie. Na konci konverzie sa INTR zníži. Akonáhle sa INTR zníži, RD sa zníži na kopírovanie digitálnych údajov na port 0 mikrokontroléra 8051. Po stanovenom časovom oneskorení sa spustí ďalší cyklus. Tento proces sa navždy opakuje.
while (1) // opakovať navždy {wr_adc = 0; // poslať LOW až HIGH impulz na oneskorenie kolíka WR (1); wr_adc = 1; while (intr_adc == 1); // čakať na koniec konverzie rd_adc = 0; // urob RD = 0 na nacitanie dat z ADC0804 hodnota = P1; // kopírovanie údajov ADC convert_display (hodnota); // volanie funkcie na prevod údajov ADC na teplotu a jej zobrazenie pri oneskorení 16 * 2 lcd displeja (1000); // interval medzi kazdymi cyklami rd_adc = 1; // urob RD = 1 pre ďalší cyklus}
V spodnej časti kódu zasielame príkazy na 16 * 2 lcd displej. Príkaz sa skopíruje na port 0 mikrokontroléra 8051. RS je nízka pre zápis príkazu. RW je nastavený na nízku hodnotu pre operáciu zápisu. Na aktiváciu (E) pinu sa použije vysoký až nízky impulz na spustenie operácie zápisu príkazu.
void cmdwrt (nepodpísaný znak x) {P0 = x; // pošle príkaz na Port 0, na ktorom je pripojené 16 * 2 lcd rs = 0; // urob RS = 0 pre príkaz rw = 0; // make RW = 0 for write operation en = 1; // vyslanie impulzu HIGH to LOW na kolíku Enable (E) na spustenie oneskorenia operácie príkazového zápisu (1); en = 0; }
V tejto časti kódu zasielame údaje na 16 * 2 lcd displej. Dáta sa skopírujú na port 0 mikrokontroléra 8051. RS je vysoko pre zápis príkazov. RW je nastavený na nízku hodnotu pre operáciu zápisu. Na zapnutie (E) pinu sa použije vysoký až nízky impulz na spustenie operácie zápisu údajov.
void datawrt (nepodpísané char y) {P0 = y; // pošle dáta na Port 0, na ktorom je pripojené 16 * 2 lcd rs = 1; // urob RS = 1 pre príkaz rw = 0; // make RW = 0 for write operation en = 1; // vyslanie impulzu HIGH to LOW na kolíku Enable (E) na spustenie oneskorenia operácie zápisu dát (1); en = 0; }
V tejto časti kódu prevádzame digitálne údaje na teplotu a zobrazujeme ich na 16 * 2 lcd displeji.
void convert_display (hodnota nepodpísaného znaku) {nepodpísaný znak x1, x2, x3; cmdwrt (0xc6); // príkaz na nastavenie kurzora na 6. pozíciu 2. riadku na 16 * 2 lcd x1 = (hodnota / 10); // vydelíme hodnotu 10 a kvocient uložíme do premennej x1 x1 = x1 + (0x30); // premena premennej x1 na ascii pridaním 0x30 x2 = hodnota% 10; // vydelíme hodnotu 10 a zvyšok uložíme do premennej x2 x2 = x2 + (0x30); // premena premennej x2 na ascii pridaním 0x30 x3 = 0xDF; // hodnota ascii stupňa (°) symbol datawrt (x1); // teplota displeja na 16 * 2 lcd displeji datawrt (x2); datawrt (x3); datawrt („C“); }
Skontrolujte tiež ďalšie teplomery pomocou LM35 s rôznymi mikrokontrolérmi:
- Digitálny teplomer využívajúci Arduino a LM35
- Meranie teploty pomocou mikrokontroléra LM35 a AVR
- Meranie izbovej teploty pomocou Raspberry Pi