Šajā projektā mēs izstrādāsim temperatūras mērīšanas ķēdi. Šī shēma ir izstrādāta, izmantojot lineāro sprieguma sensoru “ LM35 ”. Temperatūru parasti mēra “Centigrade” vai “Faraheite”. Sensors “LM35” nodrošina izvadi, pamatojoties uz Celsija skalu.
LM35 ir trīs kontaktu tranzistoram līdzīga ierīce. Tam ir VCC, GND un OUTPUT. Šis sensors nodrošina mainīgu spriegumu izejā, pamatojoties uz temperatūru.
Kā parādīts iepriekš redzamajā attēlā, par katru + 1 Celsija temperatūras paaugstināšanos būs + 10mV augstāka jauda. Tātad, ja temperatūra ir 0◦C, sensora izeja būs 0V, ja temperatūra ir 10◦C, sensora jauda būs + 100mV, ja temperatūra ir 25◦C, sensora jauda būs + 250mV.
Tātad pagaidām ar LM35 mēs iegūstam temperatūru mainīga sprieguma formā. Šis temperatūras atkarīgs spriegums tiek norādīts kā ievads ATMEGA32A ADC (analogais cipars pārveidotājs). Iegūtā digitālā vērtība pēc pārveidošanas tiek parādīta 16x2 LCD kā temperatūra.
Nepieciešamās sastāvdaļas
Aparatūra: ATMEGA32 mikrokontrolleris, barošanas avots (5v), AVR-ISP PROGRAMMERIS, JHD_162ALCD (16x2LCD), 100uF kondensators (divi gabali), 100nF kondensators, LM35 temperatūras sensors.
Programmatūra: Atmel studio 6.1, progisp vai flash magic.
Shēmas shēma un paskaidrojums
Ķēdē ATMEGA32 PORTB ir pievienots LCD datu portam. Šeit jāatceras atspējot JTAG sakarus PORTC vai ATMEGA, mainot drošinātāju baitus, ja vēlaties PORTC izmantot kā parastu sakaru portu. 16x2 LCD ekrānā ir 16 tapas, ja ir aizmugures apgaismojums, ja aizmugures apgaismojuma nav, būs 14 tapas. Var darbināt vai atstāt aizmugurējās gaismas tapas. Tagad 14 tapas ir 8 datu tapas (7-14 vai D0-D7), 2 el piegādes tapas (1 un 2 vai VSS un VDD vai GND & + 5v), 3 rd pin kontrasta kontrole (Vee-kontrolē, cik biezu rakstzīmēm jābūt attēlā), 3 vadības tapas (RS & RW & E).
Kontūrā jūs varat novērot, ka esmu paņēmis tikai divus vadības tapas, jo tas ļauj labāk izprast. Kontrasta bits un READ / WRITE netiek bieži lietoti, tāpēc tos var saīsināt. Tas nodrošina LCD kontrasta un lasīšanas režīmu. Mums vienkārši jākontrolē ENABLE un RS tapas, lai atbilstoši nosūtītu rakstzīmes un datus.
LCD savienojumi ir izveidoti zemāk:
PIN1 vai VSS ------------------ zeme
PIN2 vai VDD vai VCC ------------ + 5v jauda
PIN3 vai VEE --------------- zeme (iesācējam vislabāk nodrošina maksimālu kontrastu)
PIN4 vai RS (Register Selection) --------------- PD6 no uC
PIN5 vai RW (lasīšana / rakstīšana) ----------------- zeme (LCD displejs tiek iestatīts lasīšanas režīmā, atvieglojot saziņu lietotājam)
PIN6 vai E (iespējot) - uC PD5
PIN7 vai D0 ----------------------------- PB0 no uC
PIN8 vai D1 ----------------------------- PB1 no uC
PIN9 vai D2 ----------------------------- PB2 no uC
PIN10 vai D3 ----------------------------- PB3 no uC
PIN11 vai D4 ----------------------------- PB4 no uC
PIN12 vai D5 ----------------------------- PB5 no uC
PIN13 vai D6 ----------------------------- PB6 no uC
PIN14 vai D7 ----------------------------- PB7 no uC
Shēmā jūs varat redzēt, ka esam izmantojuši 8 bitu sakarus (D0-D7), taču tas nav obligāti, mēs varam izmantot 4 bitu sakarus (D4-D7), bet ar 4 bitu sakaru programma kļūst mazliet sarežģīta, tāpēc es esmu izvēlējies 8 bitu komunikācija.
Tātad, vienkārši novērojot no tabulas augšpusē, mēs savienojam 10 LCD tapas ar kontrolieri, kurā 8 tapas ir datu tapas un 2 tapas kontrolei. Sensora nodrošinātā sprieguma izeja nav pilnīgi lineāra; tas būs trokšņains. Lai filtrētu troksni, sensora izejā jānovieto kondensators, kā parādīts attēlā.
Pirms virzīties uz priekšu, mums jārunā par ATMEGA32A ADC. ATMEGA32A ierīcē mēs varam dot analogo ievadi jebkuram no astoņiem PORTA kanāliem, nav svarīgi, kuru kanālu mēs izvēlamies, jo visi ir vienādi. Mēs izvēlēsimies PORTA kanālu 0 vai PIN0. ATMEGA32A ierīcē ADC ir 10 bitu izšķirtspēja, tāpēc kontrolieris var noteikt minimālu Vref / 2 ^ 10 izmaiņu, tādēļ, ja atskaites spriegums ir 5 V, mēs iegūstam digitālo izejas pieaugumu par katriem 5/2 ^ 10 = 5mV. Tātad par katru 5mV pieaugumu ieejā mums būs pieaugums viens pie digitālās izejas.
Tagad mums ir jāizveido ADC reģistrs, pamatojoties uz šādiem noteikumiem:
1. Pirmkārt, mums ir jāiespējo ADC funkcija ADC.
2. Tā kā mēs mēra istabas temperatūru, mums patiesībā nav vajadzīgas vērtības, kas pārsniedz simts grādus (LM35 1000mV izeja). Tātad mēs varam iestatīt ADC maksimālo vērtību vai atsauci uz 2,5 V.
3. Kontrolierim ir trigera pārveidošanas funkcija, tas nozīmē, ka ADC pārveidošana notiek tikai pēc ārēja trigera, jo mēs nevēlamies, lai mums būtu jāiestata reģistri, lai ADC darbotos nepārtrauktā brīvas darbības režīmā.
4. Jebkurai ADC pārveidošanas biežums (analogās vērtības pret digitālo vērtību) un digitālās izejas precizitāte ir apgriezti proporcionāla. Tāpēc, lai uzlabotu digitālās izejas precizitāti, mums jāizvēlas mazāka frekvence. Mazākam ADC pulkstenim mēs iestatām ADC sākotnējo vērtību līdz maksimālajai vērtībai (128). Tā kā mēs izmantojam 1MHZ iekšējo pulksteni, ADC pulkstenis būs (1000000/128).
Šīs ir vienīgās četras lietas, kas mums jāzina, lai sāktu darbu ar ADC. Visas iepriekš minētās četras funkcijas nosaka divi reģistri.
RED (ADEN): Šis bits ir jāiestata, lai iespējotu ATMEGA ADC funkciju.
ZILA (REFS1, REFS0): Šie divi biti tiek izmantoti, lai iestatītu atsauces spriegumu (vai maksimālo ieejas spriegumu, kuru mēs piešķiram). Tā kā mēs vēlamies, lai atsauces spriegums būtu 2,56 V, REFS0 un REFS1 būtu jāiestata tabulā.
LIGHT GREEN (ADATE): Šis bits ir jāiestata, lai ADC darbotos nepārtraukti (brīvās darbības režīms).
PINK (MUX0-MUX4): Šie pieci biti ir paredzēti ieejas kanāla atrašanai. Tā kā mēs izmantosim ADC0 vai PIN0, mums nav jāiestata biti kā pēc tabulas.
BROWN (ADPS0-ADPS2): šie trīs biti ir paredzēti, lai iestatītu ADC preskalāru. Mēs izmantojam preskalāru 128, un mums ir jāiestata visi trīs biti.
DARK GREEN (ADSC): šis bits ir iestatīts ADC, lai sāktu pārveidošanu. Šo bitu var atspējot programmā, kad mums jāpārtrauc konvertēšana.
Lai izveidotu šo projektu ar Arduino, skatiet šo apmācību: Digitālais termometrs, izmantojot Arduino
Programmēšanas skaidrojums
TEMPARATURE MĒRĪŠANA vislabāk tiek izskaidrota zemāk norādītā C koda soli pa solim:
#include // header, lai iespējotu datu plūsmas kontroli pār tapām
#define F_CPU 1000000 // pievienota stāsta kontroliera kristāla frekvence
# iekļaut
#define E 5 // norādot vārdu "ļauj" 5 th pin PORTD, jo tas ir saistīts ar LCD ļautu pin
#define RS 6 // piešķirot nosaukumu "registerselection", 6 th pin PORTD, jo ir saistīta ar LCD RS pin
void send_a_command (neparakstīta char komanda);
void send_a_character (neparakstīta rakstzīme);
void send_a_string (char * string_of_characters);
int main (anulēts)
{
DDRB = 0xFF; // portBB un portD ievietošana kā izvades tapas
DDRD = 0xFF;
_delay_ms (50); // dodot 50ms kavēšanos
DDRA = 0; // Par ieeju tiek ņemts ports A.
ADMUX - = (1 <
ADCSRA - = (1 <0)
{
send_a_character (* rakstzīmju virkne ++);
}
}