- Požadované komponenty:
- Kruhový diagram:
- Měření teploty pomocí LM35 pomocí 8051:
- 16x2 LCD:
- ADC0804 IC:
- Snímač teploty LM35:
- Vysvětlení kódu:
Někdy je pro lidi obtížné číst teplotu z analogového teploměru kvůli kolísání. Takže zde postavíme jednoduchý digitální teploměr využívající mikrokontrolér 8051, ve kterém se pro měření teploty používá senzor LM35. Také jsme použili LM35 k vytvoření digitálního teploměru pomocí Arduino, NodeMCU, PIC, Raspberry Pi a dalších mikrokontrolérů.
Tento projekt bude také sloužit jako správné propojení ADC0804 s 8051 a 16 * 2 LCD s mikrokontrolérem 8051.
Požadované komponenty:
- 8051 vývojová deska
- Deska ADC0804
- 16 * 2 LCD displej
- Senzor LM35
- Potenciometr
- Propojovací vodiče
Kruhový diagram:
Schéma zapojení obvodu digitálního teploměru používajícího LM35 je uvedeno níže:
Měření teploty pomocí LM35 pomocí 8051:
Mikrokontrolér 8051 je 8bitový mikrokontrolér, který má 128 bajtů paměti RAM na čipu, 4 bajty paměti ROM na čipu, dva časovače, jeden sériový port a čtyři 8bitové porty. Mikrokontrolér 8052 je rozšíření mikrokontroléru. Níže uvedená tabulka ukazuje srovnání 8051 členů rodiny.
Vlastnosti |
8051 |
8052 |
ROM (v bajtech) |
4K |
8 tis |
RAM (bajty) |
128 |
256 |
Časovače |
2 |
3 |
I / O piny |
32 |
32 |
Sériový port |
1 |
1 |
Přerušit zdroje |
6 |
8 |
16x2 LCD:
16 * 2 LCD je široce používaný displej pro vestavěné aplikace. Zde je stručné vysvětlení pinů a fungování 16 * 2 LCD displeje. Uvnitř LCD jsou dva velmi důležité registry. Jedná se o datový registr a příkazový registr. Registr příkazů se používá k odesílání příkazů, jako je jasný displej, kurzor doma atd., Datový registr se používá k odesílání dat, která se mají zobrazit na 16 * 2 LCD. Níže uvedená tabulka zobrazuje popis kolíku 16 * 2 LCD.
Kolík |
Symbol |
I / O |
Popis |
1 |
Vss |
- |
Přízemní |
2 |
Vdd |
- |
+ 5V napájení |
3 |
Vee |
- |
Napájení pro ovládání kontrastu |
4 |
RS |
Já |
RS = 0 pro příkazový registr, RS = 1 pro datový registr |
5 |
RW |
Já |
R / W = 0 pro zápis, R / W = 1 pro čtení |
6 |
E |
I / O |
Umožnit |
7 |
D0 |
I / O |
8bitová datová sběrnice (LSB) |
8 |
D1 |
I / O |
8bitová datová sběrnice |
9 |
D2 |
I / O |
8bitová datová sběrnice |
10 |
D3 |
I / O |
8bitová datová sběrnice |
11 |
D4 |
I / O |
8bitová datová sběrnice |
12 |
D5 |
I / O |
8bitová datová sběrnice |
13 |
D6 |
I / O |
8bitová datová sběrnice |
14 |
D7 |
I / O |
8bitová datová sběrnice (MSB) |
15 |
A |
- |
+ 5 V pro podsvícení |
16 |
K. |
- |
Přízemní |
Níže uvedená tabulka zobrazuje často používané příkazové kódy LCD.
Kód (hex) |
Popis |
01 |
Jasná obrazovka |
06 |
Přírůstkový kurzor (pravý posun) |
0A |
Displej vypnutý, kurzor zapnutý |
0C |
Displej zapnutý, kurzor vypnutý |
0F |
Zobrazení zapnuto, kurzor bliká |
80 |
Posuňte kurzor na začátek 1. řádku |
C0 |
Posuňte kurzor na začátek 2. řádku |
38 |
2 řádky a matice 5 * 7 |
ADC0804 IC:
ADC0804 IC je 8-bitový paralelní ADC v rodině ADC0800 série od National Semiconductor. Pracuje s +5 volty a má rozlišení 8 bitů. Velikost kroku a rozsah Vin se liší pro různé hodnoty Vref / 2. Tabulka níže ukazuje vztah mezi rozsahem Vref / 2 a Vin.
Vref / 2 (V) |
Vin (V) |
Velikost kroku (mV) |
otevřeno |
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šem případě je Vref / 2 připojen k 1,28 voltu, takže velikost kroku je 10 mV. Pro ADC0804 se velikost kroku počítá jako (2 * Vref / 2) / 256.
Pro výpočet výstupního napětí se používá následující vzorec:
Dout = Vin / velikost kroku
Kde Dout je výstup digitálních dat v desítkové soustavě, Vin = analogové vstupní napětí a velikost kroku (rozlišení) jsou nejmenší změnou. Zjistěte více o ADC0804 zde, zkontrolujte také propojení ADC0808 s 8051.
Snímač teploty LM35:
LM35 je teplotní senzor, jehož výstupní napětí je lineárně úměrné teplotě Celsia. LM35 je dodáván již kalibrovaný, a proto nevyžaduje žádnou externí kalibraci. Vydává 10 mV pro každý stupeň teploty Celsia.
Senzor LM35 produkuje napětí odpovídající teplotě. Toto napětí je převedeno na digitální (0 až 256) pomocí ADC0804 a je napájeno do mikrokontroléru 8051. Mikrokontrolér 8051 převádí tuto digitální hodnotu na teplotu ve stupních Celsia. Poté se tato teplota převede do ascii formy, která je vhodná pro zobrazení. Tyto hodnoty ascii jsou přiváděny na 16 * 2 LCD, který zobrazuje teplotu na své obrazovce. Tento proces se opakuje po zadaném intervalu.
Níže je obrázek nastavení digitálního teploměru LM35 s použitím 8051:
Zde najdete všechny digitální teploměry založené na LM35.
Vysvětlení kódu:
Kompletní program C pro tento digitální teploměr využívající LM35 je uveden na konci tohoto projektu. Kód je rozdělen na malé smysluplné bloky a je vysvětleno níže.
Pro rozhraní 16 * 2 LCD s mikrokontrolérem 8051 musíme definovat piny, na kterých je 16 * 2 LCD připojeno k mikrokontroléru 8051. Pin RS 16 * 2 lcd je připojen k P2.7, RW pin 16 * 2 lcd je připojen k P2.6 a pin E 16 * 2 lcd je připojen k P2.5. Datové piny jsou připojeny k portu 0 mikrokontroléru 8051.
sbit rs = P2 ^ 7; // Registr Select (RS) pin 16 * 2 lcd sbit rw = P2 ^ 6; // Pin pro čtení / zápis (RW) 16 * 2 lcd sbit en = P2 ^ 5; // Enable (E) pin of 16 * 2 lcd
Podobně pro rozhraní ADC0804 s mikrokontrolérem 8051 musíme definovat piny, na kterých je ADC0804 připojen k mikrokontroléru 8051. Pin RD ADC0804 je připojen k P3.0, pin WR ADC0804 je připojen k P3.1 a pin INTR ADC0804 je připojen k P3.2. Datové piny jsou připojeny k portu 1 mikrokontroléru 8051.
sbit rd_adc = P3 ^ 0; // Číst (RD) pin ADC0804 sbit wr_adc = P3 ^ 1; // Zápis (WR) pinu ADC0804 sbit intr_adc = P3 ^ 2; // Přerušení (INTR) kolíku ADC0804
Dále musíme definovat některé funkce, které se v programu používají. Funkce zpoždění se používá k vytvoření zadaného časového zpoždění, funkce c mdwrt se používá k odesílání příkazů na displej LCD 16 * 2, funkce datawrt se používá k odesílání dat na displej LCD 16 * 2 a funkce convert_display se používá k převodu dat ADC na teplotu a zobrazit jej na 16 * 2 lcd displeji.
void delay (unsigned int); // funkce pro vytvoření delay void cmdwrt (unsigned char); // funkce pro odesílání příkazů na 16 * 2 lcd displej void datawrt (nepodepsaný znak); // funkce pro odesílání dat na 16 * 2 lcd displej void convert_display (nepodepsaný znak); // funkce pro převod hodnoty ADC na teplotu a její zobrazení na 16 * 2 lcd displeji
V níže uvedené části kódu zasíláme příkazy na 16 * 2 LCD. Příkazy, jako je jasné zobrazení, přírůstek kurzoru, vynucení kurzoru na začátek 1. řádku, se po určitém časovém zpoždění posílají po jednom na 16 * 2 LCD displej.
for (i = 0; i <5; i ++) // odeslat příkazy na 16 * 2 lcd zobrazit po jednom příkazu {cmdwrt (cmd); // volání funkce k odeslání příkazů na 16 * 2 LCD zpoždění displeje (1); }
V této části kódu zasíláme data na 16 * 2 LCD. Data, která se mají zobrazit na displeji LCD 16 * 2, se po určitém časovém zpoždění odesílají k zobrazení jeden po druhém.
for (i = 0; i <12; i ++) // odeslat data na 16 * 2 lcd zobrazit po jednom znaku {datawrt (data1); // volání funkce k odeslání dat na 16 * 2 zpoždění displeje LCD (1); } V této části kódu převádíme analogové napětí produkované senzorem LM35 na digitální data a poté je převedeno na teplotu a zobrazeno na 16 * 2 lcd displeji. Aby ADC0804 zahájil převod, musíme na pin WR ADC0804 vyslat pulz nízký až vysoký, pak musíme počkat na konec převodu. INTR se na konci konverze sníží. Jakmile se INTR sníží, RD se sníží a zkopíruje digitální data na port 0 mikrokontroléru 8051. Po zadaném časovém zpoždění začíná další cyklus. Tento proces se opakuje navždy.
while (1) // opakovat navždy {wr_adc = 0; // poslat LOW na HIGH puls na zpoždění pinů WR (1); wr_adc = 1; while (intr_adc == 1); // čekání na konec konverze rd_adc = 0; // make RD = 0 to read the data from ADC0804 value = P1; // kopírování dat ADC convert_display (hodnota); // volání funkce pro převod dat ADC na teplotu a jejich zobrazení na zpoždění displeje 16 * 2 lcd (1000); // interval mezi jednotlivými cykly rd_adc = 1; // udělat RD = 1 pro další cyklus}
V dolní části kódu zasíláme příkazy na 16 * 2 lcd displej. Příkaz je zkopírován na port 0 mikrokontroléru 8051. RS je nízké pro zápis příkazu. RW je pro operaci zápisu snížen. Na aktivaci (E) pinu je aplikován vysoký až nízký impuls pro spuštění operace zápisu příkazu.
void cmdwrt (unsigned char x) {P0 = x; // pošle příkaz na Port 0, na kterém je připojeno 16 * 2 lcd rs = 0; // make RS = 0 for command rw = 0; // make RW = 0 for write operation en = 1; // odeslání impulzu HIGH to LOW na kolíku Enable (E) pro spuštění zpoždění operace příkazového zápisu (1); en = 0; }
V této části kódu zasíláme data na 16 * 2 LCD displej. Data se zkopírují na port 0 mikrokontroléru 8051. RS je vysoké pro zápis příkazů. RW je pro operaci zápisu snížen. Na aktivaci (E) pinu je aplikován vysoký až nízký impuls pro spuštění operace zápisu dat.
void datawrt (nepodepsané char y) {P0 = y; // odeslání dat na port 0, na kterém je připojeno 16 * 2 lcd rs = 1; // uděláme RS = 1 pro příkaz rw = 0; // make RW = 0 for write operation en = 1; // odeslání impulzu HIGH to LOW na kolíku Enable (E) pro spuštění zpoždění operace zápisu dat (1); en = 0; }
V této části kódu převádíme digitální data na teplotu a zobrazujeme je na 16 * 2 LCD displeji.
void convert_display (unsigned char value) {unsigned char x1, x2, x3; cmdwrt (0xc6); // příkaz pro nastavení kurzoru na 6. pozici 2. řádku na 16 * 2 lcd x1 = (hodnota / 10); // vydělte hodnotu 10 a uložte kvocient do proměnné x1 x1 = x1 + (0x30); // převést proměnnou x1 na ascii přidáním 0x30 x2 = hodnota% 10; // vydělte hodnotu 10 a zbytek uložte do proměnné x2 x2 = x2 + (0x30); // převést proměnnou x2 na ascii přidáním 0x30 x3 = 0xDF; // hodnota ascii stupně (°) symbol datawrt (x1); // teplota displeje na 16 * 2 LCD displej datawrt (x2); datawrt (x3); datawrt („C“); }
Zkontrolujte také jiné teploměry pomocí LM35 s různými mikrokontroléry:
- Digitální teploměr využívající Arduino a LM35
- Měření teploty pomocí LM35 a mikrokontroléru AVR
- Měření teploty v místnosti s Raspberry Pi