V tem projektu bomo zasnovali vezje za merjenje temperature. To vezje je razvito z uporabo linearnega napetostnega senzorja " LM35 ". Temperatura se običajno meri v stopinjah Celzija ali Faraheite. Senzor “LM35” zagotavlja izhod na podlagi stopnje Celzija.
LM35 je naprava s tremi nožicami, podobna tranzistorju. Ima VCC, GND in OUTPUT. Ta senzor zagotavlja spremenljivo napetost na izhodu glede na temperaturo.
Kot je prikazano na zgornji sliki, bo za vsako +1 stopinjsko zvišanje temperature prišlo do + 10mV večje moči. Torej, če je temperatura 0◦C, bo izhod senzorja 0V, če je temperatura 10◦C, bo izhod senzorja + 100mV, če je temperatura 25◦C, bo izhod senzorja + 250mV.
Za zdaj z LM35 dobimo temperaturo v obliki spremenljive napetosti. Ta napetost odvisna napetost je podana kot vhod v ADC (analogni v digitalni pretvornik) ATMEGA32A. Digitalna vrednost po pridobljeni pretvorbi je prikazana na LCD-zaslonu 16x2 kot temperatura.
Potrebne komponente
Strojna oprema: Mikrokrmilnik ATMEGA32, napajalnik (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), kondenzator 100uF (dva kosa), kondenzator 100nF, temperaturni senzor LM35.
Programska oprema: Atmel studio 6.1, progisp ali flash magic.
Shema vezja in razlaga
V vezju je PORTB ATMEGA32 priključen na podatkovna vrata LCD. Tukaj ne pozabite onemogočiti komunikacije JTAG v PORTC ot ATMEGA s spremembo bajtov varovalk, če želite uporabljati PORTC kot običajna komunikacijska vrata. Na 16x2 LCD-ju je 16 zatičev, če obstaja osvetlitev ozadja, če ni osvetlitve ozadja, bo 14 zatičev. Lahko napajate ali pustite zatiče zadnje luči. Sedaj v 14 zatiči obstaja 8 podatkovnih zatiči (7-14 ali D0-D7), 2 Mrežni zatiči (1 & 2 ali VSS in VDD ali gnd in +5), 3 rd pin za nadzor kontrasta (vee-kontrole kako debela mora biti znake prikazano), 3 krmilne nožice (RS & RW & E).
V vezju lahko opazite, da sem vzel le dva krmilna zatiča, saj to daje prožnost za boljše razumevanje. Kontrastni bit in READ / WRITE se ne uporabljata pogosto, zato jih je mogoče kratko skleniti na tla. To LCD zaslon postavi v najvišji kontrast in način branja. Samo nadzorovati moramo ENABLE in RS pin, da ustrezno pošljemo znake in podatke.
Povezave za LCD so podane spodaj:
PIN1 ali VSS ------------------ ozemljitev
PIN2 ali VDD ali VCC ------------ + 5v moči
PIN3 ali VEE --------------- ozemljitev (daje največji kontrast najboljši za začetnike)
PIN4 ali RS (izbira registra) --------------- PD6 od uC
PIN5 ali RW (branje / pisanje) ----------------- ozemljitev (LCD v načinu branja olajša komunikacijo za uporabnika)
PIN6 ali E (Omogoči) ------------------- PD5 uC
PIN7 ali D0 ----------------------------- PB0 od uC
PIN8 ali D1 ----------------------------- PB1 od uC
PIN9 ali D2 ----------------------------- PB2 od uC
PIN10 ali D3 ----------------------------- PB3 od uC
PIN11 ali D4 ----------------------------- PB4 iz uC
PIN12 ali D5 ----------------------------- PB5 od uC
PIN13 ali D6 ----------------------------- PB6 od uC
PIN14 ali D7 ----------------------------- PB7 iz uC
V vezju lahko vidite, da smo uporabili 8-bitno komunikacijo (D0-D7), vendar to ni obvezno, lahko uporabimo 4-bitno komunikacijo (D4-D7), vendar s 4-bitnim komunikacijskim programom postane nekoliko zapleten, zato sem izbral 8-bitno komunikacijo.
Iz zgolj opazovanja iz zgornje tabele torej na krmilnik priključimo 10 nožic LCD-ja, pri čemer je 8 nožic podatkovnih nožic in 2 nožici za nadzor. Izhodna napetost, ki jo zagotavlja senzor, ni popolnoma linearna; bo hrupno. Za filtriranje hrupa je treba na izhod senzorja postaviti kondenzator, kot je prikazano na sliki.
Preden se premaknemo naprej, se moramo pogovoriti o ADC ATMEGA32A. V ATMEGA32A lahko damo analogni vhod na katerega koli od osmih kanalov PORTA, ni pomembno, kateri kanal bomo izbrali, saj so vsi enaki. Izbrali bomo kanal 0 ali PIN0 za PORTA. V ATMEGA32A je ADC 10-bitne ločljivosti, tako da lahko krmilnik zazna najmanjšo spremembo Vref / 2 ^ 10, tako da če je referenčna napetost 5V, dobimo prirast digitalnega izhoda za vsakih 5/2 ^ 10 = 5mV. Tako bomo za vsakih 5mV prirastka na vhodu imeli prirastek enega pri digitalnem izhodu.
Zdaj moramo nastaviti register ADC glede na naslednje pogoje:
1. Najprej moramo v ADC omogočiti funkcijo ADC.
2. Ker merimo sobno temperaturo, v resnici ne potrebujemo vrednosti nad sto stopinj (1000mV izhod LM35). Tako lahko nastavimo največjo vrednost ali referenco ADC na 2,5V.
3. Krmilnik ima funkcijo pretvorbe sprožilca, kar pomeni, da pretvorba ADC poteka šele po zunanjem sprožilcu, saj ne želimo, da bi morali registrirati, da ADC deluje v neprekinjenem načinu prostega teka.
4. Za kateri koli ADC sta frekvenca pretvorbe (analogna vrednost v digitalno vrednost) in natančnost digitalnega izhoda obratno sorazmerna. Za boljšo natančnost digitalnega izhoda moramo izbrati manj pogostost. Za manjšo uro ADC nastavimo predprodajo ADC na največjo vrednost (128). Ker uporabljamo interno uro 1MHZ, bo ura ADC (1000000/128).
To so edine štiri stvari, ki jih moramo vedeti za začetek uporabe ADC. Vse zgornje štiri značilnosti nastavita dva registra.
RDEČA (ADEN): Ta bit je treba nastaviti, da omogočite funkcijo ADC ATMEGA.
MODRA (REFS1, REFS0): Ta dva bita se uporabljata za nastavitev referenčne napetosti (ali največje vhodne napetosti, ki jo bomo podali). Ker želimo imeti referenčno napetost 2,56 V, je treba v tabeli nastaviti oba REFS0 in REFS1.
LIGHT GREEN (ADATE): Ta bit mora biti nastavljen, da se ADC neprekinjeno izvaja (način prostega teka).
PINK (MUX0-MUX4): Teh pet bitov služi za sporočanje vhodnemu kanalu. Ker bomo uporabili ADC0 ali PIN0, nam ni treba nastaviti nobenih bitov kot v tabeli.
BROWN (ADPS0-ADPS2): ti trije biti so namenjeni nastavitvi predkalarja za ADC. Ker uporabljamo preskalar 128, moramo nastaviti vse tri bite.
DARK GREEN (ADSC): ta bit je nastavljen za ADC, da začne pretvorbo. Ta bit lahko v programu onemogočite, ko moramo pretvorbo ustaviti.
Če želite narediti ta projekt z Arduinom, glejte to vadnico: Digitalni termometer z uporabo Arduina
Pojasnilo programiranja
Delovanje TEMPARATURNEGA MERJENJA je najbolje razloženo po korakih spodaj navedene kode C:
#include // header, da omogoči nadzor pretoka podatkov nad zatiči
#define F_CPU 1000000 // pripovedovalna frekvenca kristalnega krmilnika
#include
# define E 5 // daje ime "omogoči" do 5 th pin PORTD, saj je povezan z LCD omogočiti pin
# define RS 6 // daje ime "registerselection" do 6 th pin PORTD, saj je povezan z LCD RS pin
void send_a_command (nepodpisani ukaz char);
void send_a_character (nepodpisan znak char);
neveljavno string_a_string (char * string_of_characters);
int main (void)
{
DDRB = 0xFF; // dajanje portB in portD kot izhodna zatiča
DDRD = 0xFF;
_delay_ms (50); // podaja zamudo 50ms
DDRA = 0; // Vhod portA kot vhod.
ADMUX - = (1 <
ADCSRA - = (1 <0)
{
send_a_character (* string_of_characters ++);
}
}