Ebben a projektben egy áramkört tervezünk a hőmérséklet mérésére. Ezt az áramkört az „ LM35 ”, egy lineáris feszültségérzékelő segítségével fejlesztették ki. A hőmérsékletet általában „Celsius-fokban” vagy „Faraheite-ben” mérik. Az „LM35” érzékelő a kimenetet a Celsius-fok skálája alapján biztosítja.
Az LM35 három tűs tranzisztorszerű eszköz. Van VCC, GND és OUTPUT. Ez az érzékelő változó feszültséget biztosít a kimeneten a hőmérséklet alapján.
Amint az a fenti ábrán látható, minden +1 Celsius-fokos hőmérsékletemelkedésnél + 10 mV-mal nagyobb teljesítmény lesz. Tehát, ha a hőmérséklet 0 ° C, az érzékelő kimenete 0 V lesz, ha a hőmérséklet 10 ° C, akkor az érzékelő kimenete + 100 mV, ha a hőmérséklet 25 ° C, az érzékelő kimenete + 250 mV lesz.
Tehát egyelőre az LM35-vel változó feszültség formájában kapjuk meg a hőmérsékletet. Ezt a hőmérsékletfüggő feszültséget az ATMEGA32A ADC (analóg-digitális átalakító) bemeneteként adják meg. Az átváltás után kapott digitális értéket a 16x2 LCD kijelző mutatja hőmérsékletként.
Szükséges alkatrészek
Hardver: ATMEGA32 mikrokontroller, tápegység (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), 100uF kondenzátor (két darab), 100nF kondenzátor, LM35 hőmérséklet-érzékelő.
Szoftver: Atmel studio 6.1, progisp vagy flash magic.
Áramkör diagram és magyarázat
Az áramkörben az ATMEGA32 PORTB-ja csatlakozik az LCD adatportjához. Itt nem szabad elfelejteni letiltani a JTAG kommunikációt a PORTC-ban vagy az ATMEGA-ban a biztosíték byte-ok megváltoztatásával, ha a PORTC-ot normál kommunikációs portként akarja használni. A 16x2 LCD-ben 16 érintkező van, ha van háttérvilágítás, ha nincs háttérvilágítás, akkor 14 tű lesz. A hátsó lámpa csapjai bekapcsolhatók, vagy elhagyhatók. Most a 14 csapok vannak 8 adatok csapok (7-14 vagy D0-D7), 2 tápegység csapok (1 & 2 vagy VSS & VDD vagy GND & + 5V), 3 rd pin kontraszt vezérlő (VEE-kontrollok milyen vastag a karaktereket kell lennie ábra), 3 vezérlőcsap (RS & RW & E).
Az áramkörben megfigyelheti, hogy csak két vezérlő csapot vettem, mivel ez a jobb megértés rugalmasságát biztosítja. A kontrasztbitet és a READ / WRITE-t nem használják gyakran, így testzárlat lehet. Ez az LCD-t a legnagyobb kontrasztú és olvasási módba helyezi. Csak az ENABLE és RS csapokat kell vezérelnünk, hogy a karaktereket és az adatokat ennek megfelelően küldhessük el.
Az LCD-hez kapcsolódó csatlakozások az alábbiak:
PIN1 vagy VSS ------------------ föld
PIN2 vagy VDD vagy VCC ------------ + 5v teljesítmény
PIN3 vagy VEE --------------- föld (a legjobb kontrasztot nyújtja a kezdőknek)
PIN4 vagy RS (Register Selection) --------------- az uC PD6-ja
PIN5 vagy RW (olvasás / írás) ----------------- földelés (az LCD-t olvasási módba állítja, megkönnyíti a kommunikációt a felhasználó számára)
PIN6 vagy E (engedélyezés) ------------------- PD5 az uC-től
PIN7 vagy D0 ----------------------------- u0 PB0
PIN8 vagy D1 ----------------------------- u1 PB1
PIN9 vagy D2 ----------------------------- u2 PB2
PIN10 vagy D3 ----------------------------- u3 PB3
PIN11 vagy D4 ----------------------------- u4 PB4
PIN12 vagy D5 ----------------------------- u5 PB5
PIN13 vagy D6 ----------------------------- u6 PB6
PIN14 vagy D7 ----------------------------- u7 PB7
Az áramkörben látható, hogy 8 bites kommunikációt használtunk (D0-D7), de ez nem kötelező, használhatunk 4 bites kommunikációt (D4-D7), de a 4 bites kommunikációs program kissé összetetté válik, ezért én választottam a 8 bites kommunikáció.
Tehát puszta megfigyelésből a fenti táblázatból 10 érintkezős LCD-t csatlakoztatunk a vezérlőhöz, amelyben 8 érintkező adat és 2 érintkező a vezérléshez. Az érzékelő által biztosított feszültség kimenete nem teljesen lineáris; zajos lesz. A zaj kiszűréséhez egy kondenzátort kell elhelyezni az érzékelő kimenetén, az ábra szerint.
Mielőtt továbblépnénk, beszélnünk kell az ATMEGA32A ADC-jéről. Az ATMEGA32A-ban analóg bemenetet adhatunk a PORTA nyolc csatornájának bármelyikéhez, nem mindegy, hogy melyik csatornát választjuk, mivel mindegyik ugyanaz. A PORTA 0. vagy PIN0 csatornáját választjuk. Az ATMEGA32A-ban az ADC 10 bites felbontású, így a vezérlő érzékelni tudja a Vref / 2 ^ 10 minimális változását, így ha a referenciafeszültség 5V, akkor 5/2 ^ 10 = 5mV-ra digitális kimeneti növekedést kapunk. Tehát a bemenet minden 5mV-os növekményéhez egyet kell növelni a digitális kimeneten.
Most meg kell állítanunk az ADC nyilvántartását a következő feltételek alapján:
1. Először engedélyeznünk kell az ADC funkciót az ADC-ben.
2. Mivel szobahőmérsékletet mérünk, valójában nincs szükségünk száz foknál nagyobb értékekre (az LM35 1000mV kimenete). Tehát beállíthatjuk az ADC maximális értékét vagy referenciáját 2,5 V-ra.
3. A vezérlő rendelkezik triggerkonverziós funkcióval, ami azt jelenti, hogy az ADC átalakításra csak egy külső indítás után kerül sor, mivel nem akarjuk, hogy beállítsuk a regisztereket az ADC folyamatos folyamatos futási módban történő futtatásához.
4. Bármely ADC esetében az átalakítás gyakorisága (analóg érték digitális értékre) és a digitális kimenet pontossága fordítottan arányos. Tehát a digitális kimenet pontossága érdekében kisebb frekvenciát kell választanunk. Kisebb ADC óra esetén az ADC előértékét maximális értékre állítjuk (128). Mivel az 1MHZ belső óráját használjuk, az ADC órája (1000000/128) lesz.
Ez az egyetlen négy dolog, amit tudnunk kell az ADC használatának megkezdéséhez. A fenti négy jellemzőt két regiszter állítja be.
PIROS (ADEN): Ezt a bitet be kell állítani az ATMEGA ADC szolgáltatásának engedélyezéséhez.
KÉK (REFS1, REFS0): Ez a két bit használható a referenciafeszültség (vagy a maximális bemeneti feszültség megadására). Mivel azt szeretnénk, hogy a referencia feszültség 2,56 V legyen, a REFS0-t és a REFS1-et egyaránt meg kell adni a táblázatnak.
LIGHT GREEN (ADATE): Ezt a bitet be kell állítani, hogy az ADC folyamatosan fusson (szabadon futó mód).
PINK (MUX0-MUX4): Ez az öt bit a bemeneti csatorna megmondására szolgál. Mivel az ADC0 vagy PIN0 kódot fogjuk használni, nem kell biteket beállítanunk, mint a táblázat.
BROWN (ADPS0-ADPS2): ez a három bit az ADC preskalarjának beállítására szolgál. Ha 128-as előskálát használunk, akkor mindhárom bitet be kell állítanunk.
SÖTÉT ZÖLD (ADSC): ez a bit beállítva az ADC számára az átalakítás megkezdéséhez. Ez a bit letiltható a programban, ha le kell állítanunk az átalakítást.
A projekt Arduinóval való elkészítéséhez tekintse meg ezt az oktatóanyagot: Digitális hőmérő az Arduino segítségével
Programozási magyarázat
A HŐMÉRSÉKLET-MÉRÉS működését a legjobban az alább megadott C-kód lépésről lépésre magyarázhatja:
#include // header az adatfolyam irányításának engedélyezéséhez a csapok felett
#define F_CPU 1000000 // a vezérlő kristály frekvenciája mellékelve
#include
#define E 5 // név „engedélyezés” megadása a PORTD ötödik tűjéhez, mivel az LCD engedélyező tűhöz csatlakozik
#define RS 6 // adó neve „registerselection” 6 th csapját PORTD, mivel van kötve LCD RS pin
void send_a_command (aláíratlan char parancs);
void send_a_character (aláíratlan karakter);
void send_a_string (char * karakterlánc_ karakterei);
int main (érvénytelen)
{
DDRB = 0xFF; // a portB és a portD elhelyezése kimeneti csapokként
DDRD = 0xFF;
_delay_ms (50); // 50ms késleltetést ad
DDRA = 0; // Az A portot veszi bemenetként.
ADMUX - = (1 <
ADCSRA - = (1 <0)
{
send_a_character (* karakter_lánc_figurája ++);
}
}