U ovom ćemo projektu izraditi sklop za mjerenje temperature. Ovaj se krug razvija pomoću " LM35 ", linearnog osjetnika napona. Temperatura se obično mjeri u "Celzijevim stupnjevima" ili "Faraheite". Senzor "LM35" daje izlaz na temelju ljestvice Celzija.
LM35 je tropolni tranzistorski uređaj. Ima VCC, GND i IZLAZ. Ovaj senzor daje promjenjivi napon na izlazu na temelju temperature.

Kao što je prikazano na gornjoj slici, za svako +1 povišenje temperature bit će + 10mV veća snaga. Dakle, ako je temperatura 0◦C, izlaz senzora će biti 0V, ako je temperatura 10◦C, izlaz senzora će biti + 100mV, ako je temperatura 25◦C, izlaz senzora će biti + 250mV.
Tako za sada s LM35 dobivamo temperaturu u obliku promjenjivog napona. Ovaj napon ovisan o temperaturi daje se kao ulaz u ADC (analogni u digitalni pretvarač) ATMEGA32A. Digitalna vrijednost nakon dobivene konverzije prikazana je na LCD zaslonu 16x2 kao temperatura.
Komponente potrebne
Hardver: ATMEGA32 mikrokontroler, napajanje (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), kondenzator 100uF (dva komada), kondenzator 100nF, temperaturni senzor LM35.
Softver: Atmel studio 6.1, progisp ili flash magic.
Kružni dijagram i objašnjenje

U krugu je PORTB ATMEGA32 spojen na podatkovni priključak LCD-a. Ovdje treba imati na umu onemogućavanje JTAG komunikacije u PORTC-u od ATMEGA promjenom bajtova osigurača, ako želite koristiti PORTC kao uobičajeni komunikacijski priključak. Na LCD zaslonu 16x2 postoji 16 pinova ako postoji pozadinsko svjetlo, a ako nema pozadinskog svjetla, bit će 14 pinova. Može se napajati ili ostaviti igle stražnjeg svjetla. Sada u 14 pinova postoji 8 podatkovnih pinova (7-14 ili D0-D7), 2 pina za napajanje (1 & 2 ili VSS & VDD ili gnd & + 5v), treći pinski za kontrolu kontrasta (VEE - kontrolira koliko debeli znakovi trebaju biti prikazano), 3 upravljačka zatiča (RS & RW & E).
U krugu možete primijetiti da sam uzeo samo dvije upravljačke igle jer to daje fleksibilnost boljeg razumijevanja. Kontrastni bit i READ / WRITE se ne koriste često, tako da se mogu kratko spojiti na masu. Ovo LCD postavlja u najveći kontrast i način čitanja. Samo trebamo kontrolirati ENABLE i RS igle da bi u skladu s tim slali znakove i podatke.
Priključci koji se rade za LCD prikazani su u nastavku:
PIN1 ili VSS ------------------ uzemljenje
PIN2 ili VDD ili VCC ------------ + 5v snage
PIN3 ili VEE --------------- uzemljenje (daje maksimalni kontrast najbolji za početnike)
PIN4 ili RS (odabir registra) --------------- PD6 od uC
PIN5 ili RW (čitanje / pisanje) ----------------- (stavlja LCD u način čitanja olakšava komunikaciju za korisnika)
PIN6 ili E (Omogući) ------------------- PD5 od uC
PIN7 ili D0 ----------------------------- PB0 od uC
PIN8 ili D1 ----------------------------- PB1 od uC
PIN9 ili D2 ----------------------------- PB2 od uC
PIN10 ili D3 ----------------------------- PB3 od uC
PIN11 ili D4 ----------------------------- PB4 od uC
PIN12 ili D5 ----------------------------- PB5 od uC
PIN13 ili D6 ----------------------------- PB6 od uC
PIN14 ili D7 ----------------------------- PB7 od uC
U krugu možete vidjeti da smo koristili 8-bitnu komunikaciju (D0-D7), međutim to nije obvezno, možemo koristiti 4-bitnu komunikaciju (D4-D7), ali s 4-bitnim komunikacijskim programom postaje pomalo složen pa sam odabrao 8-bitnu komunikacija.
Dakle, iz pukog promatranja iz gornje tablice spajamo 10 pinova LCD-a na kontroler u kojem su 8 pinova podatkovne i 2 pina za kontrolu. Izlazni napon koji daje senzor nije potpuno linearan; bit će bučna. Da bi se filtrirao šum, kondenzator treba postaviti na izlaz senzora, kao što je prikazano na slici.
Prije nego što krenemo naprijed, moramo razgovarati o ADC-u ATMEGA32A. U ATMEGA32A možemo dati analogni ulaz na bilo koji od osam kanala PORTA, nije važno koji ćemo kanal odabrati jer su svi isti. Odabrat ćemo kanal 0 ili PIN0 PORTA-e. U ATMEGA32A, ADC je 10-bitne razlučivosti, tako da regulator može prepoznati minimalnu promjenu Vref / 2 ^ 10, pa ako je referentni napon 5V, dobit ćemo digitalni priraštaj za svakih 5/2 ^ 10 = 5mV. Dakle, za svakih 5mV prirasta na ulazu imat ćemo priraštaj od jednog na digitalnom izlazu.
Sada moramo postaviti registar ADC-a na temelju sljedećih pojmova:
1. Prije svega moramo omogućiti značajku ADC u ADC-u.
2. Budući da mjerimo sobnu temperaturu, zapravo nam ne trebaju vrijednosti veće od stotinu stupnjeva (1000mV izlaz LM35). Tako možemo postaviti maksimalnu vrijednost ili referencu ADC-a na 2,5 V.
3. Kontroler ima značajku pretvorbe okidača, što znači da se pretvorba ADC-a odvija samo nakon vanjskog okidača, jer ne želimo da moramo postaviti registre da ADC radi u kontinuiranom slobodnom načinu rada.
4. Za bilo koji ADC, učestalost pretvorbe (analogna vrijednost u digitalnu vrijednost) i točnost digitalnog izlaza su obrnuto proporcionalne. Stoga za bolju točnost digitalnog izlaza moramo odabrati manju frekvenciju. Za manji ADC sat postavljamo pretprodaju ADC-a na maksimalnu vrijednost (128). Budući da koristimo interni sat od 1 MHz, ADC će biti (1000000/128).
To su jedine četiri stvari koje moramo znati da bismo započeli s ADC-om. Sve gore navedene četiri značajke postavljaju dva registra.


CRVENA (ADEN): Ovaj bit mora biti postavljen za omogućavanje ADC značajke ATMEGA-e.
PLAVO (REFS1, REFS0): Ova dva bita koriste se za postavljanje referentnog napona (ili maksimalnog ulaznog napona koji ćemo dati). Budući da želimo imati referentni napon 2,56 V, REFS0 i REFS1 trebaju se postaviti prema tablici.

SVIJETLO ZELENO (ADATE): Ovaj bit mora biti postavljen da bi se ADC neprekidno izvodio (način slobodnog rada).
PINK (MUX0-MUX4): Ovih pet bitova služi za kazivanje ulaznog kanala. Budući da ćemo koristiti ADC0 ili PIN0, ne trebamo postavljati nikakve bitove kao u tablici.

SMEĐE (ADPS0-ADPS2): ova tri bita služe za podešavanje predskalara za ADC. Ako koristimo preskalar 128, moramo postaviti sva tri bita.

TAMNO ZELENO (ADSC): ovaj bit postavljen za ADC da započne pretvorbu. Taj se bit može onemogućiti u programu kada moramo zaustaviti pretvorbu.
Da biste napravili ovaj projekt s Arduinom, pogledajte ovaj vodič: Digitalni termometar koji koristi Arduino
Objašnjenje programiranja
Rad TEMPARATURNOG MJERENJA najbolje je objasniti korak po korak C koda navedenog u nastavku:
#include // zaglavlje kako bi se omogućila kontrola protoka podataka nad iglama
#define F_CPU 1000000 // pripojena kristalna frekvencija kontrolera
#include
#define E 5 // davanje naziva „omogućiti” na 5 th pin PORTD, budući da je spojen na LCD omogućiti pin
#define RS 6 // dajući naziv „registerselection” do 6 th pin PORTD, jer je spojen na pin LCD RS
void send_a_command (nepotpisana naredba char);
void send_a_character (nepotpisani znak znaka);
poništi string_a_string (char * string_of_characters);
int main (void)
{
DDRB = 0xFF; // stavljanje portB i portD kao izlazne igle
DDRD = 0xFF;
_delay_ms (50); // davanje kašnjenja od 50 ms
DDRA = 0; // Uzimanje portA kao ulaza.
ADMUX - = (1 <
ADCSRA - = (1 <0)
{
send_a_character (* string_of_characters ++);
}
}
