Šiame projekte mes suprojektuosime temperatūros matavimo grandinę. Ši grandinė sukurta naudojant linijinės įtampos jutiklį „ LM35 “. Temperatūra paprastai matuojama „Centigrade“ arba „Faraheite“. „LM35“ jutiklis pateikia išvestį pagal Celsijaus skalę.
LM35 yra trijų kontaktų tranzistorius panašus įtaisas. Jis turi VCC, GND ir OUTPUT. Šis jutiklis suteikia kintamą įtampą išėjime, atsižvelgiant į temperatūrą.
Kaip parodyta aukščiau esančiame paveikslėlyje, padidinus + 1mC temperatūrą, padidėjus + 1mC temperatūrai Taigi, jei temperatūra yra 0 ° C, jutiklio išvestis bus 0 V, jei temperatūra yra 10 ° C, jutiklio galia bus + 100 mV, jei temperatūra yra 25 ° C, jutiklio galia bus + 250 mV.
Taigi kol kas su LM35 temperatūra gaunama kintamos įtampos pavidalu. Ši nuo temperatūros priklausanti įtampa pateikiama kaip įvestis ATMEGA32A ADC (analoginiam skaitmeniniam keitikliui). Gauta skaitmeninė vertė po perskaičiavimo 16x2 LCD ekrane rodoma kaip temperatūra.
Būtini komponentai
Aparatūra: ATMEGA32 mikrovaldiklis, maitinimo šaltinis (5v), AVR-ISP PROGRAMMERIS, JHD_162ALCD (16x2LCD), 100uF kondensatorius (dvi dalys), 100nF kondensatorius, LM35 temperatūros jutiklis.
Programinė įranga: „ Atmel studio 6.1“, „progisp“ arba „flash magic“.
Grandinės schema ir paaiškinimas
Grandinėje ATMEGA32 PORTB yra prijungtas prie LCD duomenų prievado. Čia reikia nepamiršti išjungti JTAG ryšio PORTC ar ATMEGA, pakeičiant saugiklių baitus, jei norite naudoti PORTC kaip įprastą ryšio prievadą. 16x2 LCD ekrane yra 16 kontaktų, jei yra užpakalinė lemputė, jei nėra užpakalinės šviesos, bus 14 kontaktų. Galima maitinti arba palikti galinio apšvietimo kaiščius. Dabar 14 kaiščių yra 8 duomenų kaiščiai (7-14 arba D0-D7), 2 elektros tiekimo kaiščių (1 & 2 arba Vss & VDD arba GND & + 5V), 3 -oji kaištis kontrasto valdymas (V formos,-kontroliuoja, kaip storio simboliai turėtų būti parodyta), 3 valdymo kaiščiai (RS & RW & E).
Grandinėje galite pastebėti, kad paėmiau tik du valdymo kaiščius, nes tai suteikia galimybę geriau suprasti. Kontrasto bitai ir READ / WRITE nėra dažnai naudojami, todėl juos galima sutrumpinti. Tai padidina LCD kontrasto ir skaitymo režimą. Mes tiesiog turime valdyti ENABLE ir RS smeigtukus, kad galėtume atitinkamai siųsti simbolius ir duomenis.
LCD jungtys pateikiamos žemiau:
PIN1 arba VSS ------------------ žemė
PIN2 arba VDD arba VCC ------------ + 5v maitinimas
PIN3 arba VEE --------------- žemė (pradedantiesiems geriausiai suteikia maksimalų kontrastą)
PIN4 arba RS (registro pasirinkimas) --------------- uC PD6
PIN5 arba RW (skaitymas / rašymas) ----------------- įžeminimas (LCD ekranas perkeliamas į skaitymo režimą, palengvina vartotojo ryšį)
PIN6 arba E (įjungti) ------------------- UC PD5
PIN7 arba D0 ----------------------------- PB0 iš uC
PIN8 arba D1 ----------------------------- PB1 iš uC
PIN9 arba D2 - uC PB2
PIN10 arba D3 ----------------------------- u3 PB3
PIN11 arba D4 ----------------------------- PB u4
PIN12 arba D5 ----------------------------- PB5 iš uC
PIN13 arba D6 ----------------------------- u6 PB6
PIN14 arba D7 ----------------------------- PB7 iš uC
Grandinėje matote, kad mes naudojome 8 bitų ryšį (D0-D7), tačiau tai nėra privaloma, mes galime naudoti 4 bitų ryšį (D4-D7), tačiau su 4 bitų ryšio programa tampa šiek tiek sudėtinga, todėl aš pasirinkau 8 bitų bendravimas.
Taigi vien nuo stebėjimo iš viršaus lentelės mes prijungiame 10 LCD kontaktų su valdikliu, kuriame 8 kontaktai yra duomenų kaiščiai ir 2 valdikliai. Jutiklio tiekiama įtampa nėra visiškai tiesinė; tai bus triukšmingas. Norėdami ištrinti triukšmą, prie jutiklio išėjimo reikia įdėti kondensatorių, kaip parodyta paveikslėlyje.
Prieš eidami į priekį turime kalbėti apie ATMEGA32A ADC. ATMEGA32A mes galime suteikti analoginę įvestį bet kuriam iš aštuonių PORTA kanalų, nesvarbu, kurį kanalą pasirenkame, nes visi yra vienodi. Mes pasirinksime PORTA 0 arba PIN0 kanalą. ATMEGA32A, ADC yra 10 bitų skiriamoji geba, todėl valdiklis gali aptikti prasmę minimalų Vref / 2 ^ 10 pokytį, taigi, jei atskaitos įtampa yra 5 V, gauname skaitmeninį išėjimo prieaugį kiekvieniems 5/2 ^ 10 = 5mV. Taigi už kiekvieną 5mV įvesties prieaugį skaitmeniniame išėjime turėsime po vieną.
Dabar turime nustatyti ADC registrą, remdamiesi šiais terminais:
1. Pirmiausia turime įgalinti ADC funkciją ADC.
2. Kadangi mes matuojame kambario temperatūrą, mums iš tikrųjų nereikia didesnių nei šimto laipsnių verčių (LM35 1000mV galia). Taigi mes galime nustatyti didžiausią ADC vertę arba nuorodą į 2,5 V.
3. Valdiklis turi paleidimo konversijos funkciją, tai reiškia, kad ADC konversija vyksta tik po išorinio trigerio, nes mes nenorime, kad mums reikia nustatyti registrus, kad ADC veiktų nepertraukiamai veikiant laisvai.
4. Bet kokiam ADC konversijų dažnis (analoginė vertė į skaitmeninę vertę) ir skaitmeninės išvesties tikslumas yra atvirkščiai proporcingi. Taigi, norėdami geresnio skaitmeninio išvesties tikslumo, turime pasirinkti mažesnį dažnį. Mažesniam ADC laikrodžiui nustatome išankstinį ADC vertę iki didžiausios vertės (128). Kadangi mes naudojame vidinį 1MHz laikrodį, ADC laikrodis bus (1000000/128).
Tai yra vieninteliai keturi dalykai, kuriuos turime žinoti, norėdami pradėti naudoti ADC. Visas minėtas keturias ypatybes nustato du registrai.
RED (ADEN): Šis bitas turi būti nustatytas norint įjungti ATMEGA ADC funkciją.
MĖLYNA (REFS1, REFS0): Šie du bitai naudojami nustatyti etaloninę įtampą (arba maksimalią įėjimo įtampą, kurią ketiname suteikti). Kadangi norime, kad atskaitos įtampa būtų 2,56 V, REFS0 ir REFS1 turėtų būti nustatyti pagal lentelę.
LIGHT GREEN (ADATE): Šis bitas turi būti nustatytas, kad ADC veiktų nuolat (laisvo veikimo režimas).
PINK (MUX0-MUX4): Šie penki bitai skirti įvesties kanalui pasakyti. Kadangi mes ketiname naudoti ADC0 arba PIN0, nereikia nustatyti jokių bitų, kaip nurodyta lentelėje.
BROWN (ADPS0-ADPS2): šie trys bitai skirti nustatyti išankstinį ADC skalę. Mes naudojame 128 išankstinį skalę, todėl turime nustatyti visus tris bitus.
DARK GREEN (ADSC): šis bitas nustatytas ADC pradėti konversiją. Šį bitą programoje galima išjungti, kai mums reikia sustabdyti konversiją.
Norėdami sukurti šį projektą naudodami „Arduino“, žiūrėkite šią pamoką: Skaitmeninis termometras naudojant „Arduino“
Programavimo paaiškinimas
TEMPARATURE MATAVIMAS geriausiai paaiškinamas toliau pateiktu C kodo žingsniu:
#include // antraštė, kad įgalintumėte duomenų srautų valdymą kaiščiams
#define F_CPU 1000000 // prijungtas valdiklio kristalo dažnis
# įtraukti
#define E 5 // suteikiant pavadinimą „įjungti“ 5 -ajam PORTD kaiščiui, nes jis yra prijungtas prie LCD įjungimo kaiščio
#define RS 6 // pavadinimo „registerselection“ suteikimas 6 -ajam PORTD kaiščiui, nes jis prijungtas prie LCD RS kaiščio
void send_a_command (nepasirašyta char komanda);
void send_a_character (nepasirašytas simbolis);
void send_a_string (char * string_of_characters);
int main (negaliojantis)
{
DDRB = 0xFF; // portB ir portD įdėjimas kaip išvesties kaiščiai
DDRD = 0xFF;
_delay_ms (50); // suteikiant 50ms vėlavimą
DDRA = 0; // Priėmimas portasA.
ADMUX - = (1 <
ADCSRA - = (1 <0)
{
send_a_character (* simbolių eilutė_ ++);
}
}