0% au considerat acest document util (0 voturi)
126 vizualizări24 pagini

Micro

Documentul prezintă un proiect care constă în dezvoltarea a două plăci electronice conectate prin intermediul unei interfețe seriale RS232. Fiecare placă conține câte un microcontroler Atmega16 și are rolul fie de a măsura umiditatea aerului folosind un senzor specific, fie de a afișa valorile măsurate pe un ecran LCD.

Încărcat de

Adrian Nae
Drepturi de autor
© Attribution Non-Commercial (BY-NC)
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
126 vizualizări24 pagini

Micro

Documentul prezintă un proiect care constă în dezvoltarea a două plăci electronice conectate prin intermediul unei interfețe seriale RS232. Fiecare placă conține câte un microcontroler Atmega16 și are rolul fie de a măsura umiditatea aerului folosind un senzor specific, fie de a afișa valorile măsurate pe un ecran LCD.

Încărcat de

Adrian Nae
Drepturi de autor
© Attribution Non-Commercial (BY-NC)
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 24

Microcontrolere Proiect

Profesor Indrumator
S.I.dr.ing. Angel Ciprian Cormos

Student
Nae Adrian

Microcontrolere Cuprins

Page 2

1.Cuprins.....................................................................2 2.Prezentare generala.....................................................3 2.1 Descrierea comerciala.............................................3 2.2 Scurt istoric.........................................................4 3.Proiectare conceptuala..................................................5 3.1 Schema Bloc.........................................................5 3.2 Descrierea Blocurilor...............................................6 4.Prezentare placa de dezvoltarea Easy AVR...........................8 5.Proiectare Hardware....................................................10 5.1 Schema electrica placa emisie..................................10 5.2 Schema electrica placa receptie................................12 6. Cablaj imprimat.........................................................14 6.1 PCB placa emisie...................................................14 6.2 PCB placa receptie.................................................14 7.Proiectare Software......................................................15 7.1 Organigrama codului...............................................15 7.2 Codul sursa placa emisie..........................................16 7.3 Codul sursa placa receptie........................................19 8.Masuri de siguranta si mentenanta....................................22 9.Costuri productie.........................................................23 10.Biografie..................................................................24

Microcontrolere

Page 3

2.Prezentare generala
2.1.Descrierea comerciala
Stiati ca o valoare ridicata a umiditatii poate genera conditii favorabile inmultirii agentilor patogeni, alergenilor sau aparitia mucegaiului? Umiditatea este un factor important n meninerea nivelurilor optime de confort i a unei caliti bune a aerului n interior. O valoarea a umiditatii prea scazuta provoaca o senzatie de frig organismului si uscaciune in gat. Totodata, favorizeaza aparitia acarienilor, virusilor si bacteriilor care pot duce la infectii respratorii. O valoare a umiditatii prea ridicata provoaca o senzatie de fierbinte, iar organismul nu mai reuseste sa-si elimine surplusul caloric prin transpiratie. Un mediu prea umed reprezinta un mediu de inmultire propice pentru bacterii si paraziti, ceea ce duce implicit la aparitia mucegaiului si a igrasiei. De aceea,umiditatea este un factor important n meninerea nivelurilor optime de confort i a unei caliti bune a aerului interior, nivelul optim sanatatii fiind cuprins intre 40% - 60%. Niciodat nu a fost mai simplu s controlai climatul interior i s aveti grija de sanatate! Umidometrul digital este un dispozitiv versatil folosit pentru determinarea nivelului de apa din aer. Cu o greutate redusa, usor de utilizat si un design ergonomic, acesta permite determinarea rapida si precisa a umiditatii aerului din dormitor, laborator sau chiar depozit. Un ecran LCD cu functia de modificare a contrastului permite vizualizarea permanenta a informatiilor despre valoarea umiditatii relative din interior, gama de masurare a acesteia fiind intre 10-95%. Un toc rezistent pentru acoperirea senzorului, confera performan i via lung. Beneficiind de o dimesiune redusa si o greutate de 143g, acest dispozitiv cu functii multiple poate fi montat cu usurinta pe un perete sau pozitionat in picioare cu ajutorul suportului integrat. Bateria de alimentare garanteaza o durata lunga de viata a acestui umidometru de calitate excelenta si cu aspect deosebit.

Microcontrolere

Page 4

2.2 Scurt istoric


Umidometrul este un dispozitiv care masoara cantitatea de apa aflata intr-un esantion de aer. Cel mai cunoscut umidometru este Psychometrul ud si uscat e compus din doua termometre cu mercur, unul avand baza uscata iar celalalt are la baza un recipient cu apa. Apa din recipient se evapora absorbind caldura, deci indicatia termometrului va scadea. Umiditatea relativa se determina pe baza unui tabel de calcul si a indicatiilor celor 2 termometre.

Un alt tip de hidrometru timpuriu este cel cu par uman (blond). Aceste dispozitive mecanice se bazeaza pe principiul ca parul uman isi schimba volumul ca raspuns al umiditatii relative. Contractia si dilatarea parului actioneaza un ac indicand astfel umiditatea. In 1783, fizicianul elvetian si geolog , Horace Benedict de Saussure a construit primul higrometru cu fir de pr uman. Leonardo da Vinci a construit primul higrometru brut n 1400 . Francesco Folli a inventat un higrometru mai practic n 1664 .

Microcontrolere

Page 5

3.Proiectare conceptuala
3.1 Schema bloc

Emisie
Alimentare

Receptie
Afisaj LCD

Senzor Umiditate

Convertor Analog Digital

Convertor Numeric

Microcontroler Atmega16

Microcontroler Atmega16

Codare

Decodare

Convertor Max232

Convertor Max232

Mufa RS232

Mufa RS232

Microcontrolere

Page 6

3.2 Descrierea blocurilor


Blocul de alimentare : realizeaza conectarea circuitului la sursa externa de tensiune. Senzor de umiditate Hch 1000 : este un senzor capacitiv de polimer, cu precizie relativ buna, proiectat pentru masurarea umiditatii in spatii inchise. Un polimer special este folosit ca material detector de umiditate datorita propietatilor acestuia dependenta redusa la temperatura si rezistentei imbunatatite la contaminare. Convertorul Analog Digital : accepta o mrime analogic (curent, tensiune) la intrare, furniznd la iesire un numr care constituie o aproximare a valorii analogice a semnalului de la intrare.Spre deosebire de o mrime analogic ale crei valori se pot gsi n orice punct din domeniul su de variaie, mrimea numeric (sau digital) posed numai o varia ie n trepte. Astfel, ntreg domeniul de variaie este divizat ntr-un numr finit de cuante (trepte elementare) de mrime determinat de rezoluia sistemului, n acest mod, diferena ntre cele mai apropiate valori numerice nu poate fi fcut mai mic dect aceast treapt elementar. Microcontrolerul AtMega16 : ATmega 16 este un microcontroler CMOS de 8 bii de mic putere bazat pe arhitectura RISC AVR imbunataita.Dispune de un set de 131 instruciuni i 32 de registre de uz general. Cele 32 de registre sunt direct adresabile de Unitatea Logica Aritmetica (ALU), permitand accesarea a doua registre independente intr-o singura instruciune. Se obtine astfel o eficiena sporita in executie (de pana la zece ori mai rapide decat microcontrorelerele conventionale CISC).ATmega16 este un microcontroler RISC pe 8 biti realizat de firma Atmel. Codarea : Codarea se va face automat de catre microcontrolerul ATMega16 pentru modulul de comunicatie RS232 si va fi transmisa mai departe spre placa de receptie. Convertorul RS232 Max232 : este un circuit integrat care converteste semnalele de la un port serial RS-232 la semnalele adecvate pentru utilizare n circuite compatibile TTL logice digitale. MAX232 este folosit atat la transmiterea datelor cat si la receptie. Mufa si mediul de transmisie RS232 : Legatura intre cele doua microcontrolere este realizata cu interfata seriala RS232.Aceasta realizeaza transferul de date punct la punct. Este in mod frecvent utilizata in aplicatiile de

Microcontrolere
stocare a datelor cat si pentru transferul acestora.

Page 7

Decodarea : se va face din nou automat de catre microcontrolerul ATMega16. Convertor Numeric : converteste semnalul primit de la cel de al doilea microcontroler in semnal numeric si il transmite spre afisajul LCD. Afisajul LCD : este un afisaj electronic cu o gama larga de aplicatii. Un ecran LCD 16x2 este un modul de baza foarte frecvent utilizat n diverse dispozitive si circuite deoarece este economic, usor programabil, avand functii afisare a caracterelor speciale, chiar si a celor personalizate, animatii, samd.

Microcontrolere

Page 8

4.Prezentare placa de dezvoltare Easy AVR4


Proiectul este realizat folosind doua microcontrolere ATMega 16 aflate pe placile de dezvoltare EasyAvr4. Acestea sunt conectate folosind interfata seriala de transmisie RS232. Placa de dezvoltare EasyAvr4 EasyAVR4 este o placa de dezvoltare realizata de firma Mikroelectronika si permite realizarea de aplicatii cu microcontrolere Atmel. Placa dispune de urmtoarele resurse hardware : programator cu interfaa USB; bloc de alimentare a placii cu posibilitatea de a utiliza o sursa de tensiune externa sau tensiunea furnizata de interfata USB; SW pushbuton conectate la toate porturile microcontrolerului; LED-uri conectate la toate porturile microcontrolerului; rezistene externe de pull-up sau pull-down pentru fiecare pin al fiecrui port; referin extern precis de tensiune pentru utilizarea blocului de ADC cu aceast facilitate; generator de semnal de tact cu frecvena de 8MHz; modul de afiare cu LED-uri tip 7 segmente; interfa serial RS 232; modul de afiare LCD 2x16 caractere.

Microcontrolere
ATmega16 este un microcontroler RISC pe 8 bii realizat de firma Atmel.

Page 9

Caracteristicile principale ale acestuia sunt: - 16KB de memorie Flash reinscriptibil pentru stocarea codului - 1KB de memorie RAM - 512B de memorie EEPROM - dou numrtoare/temporizatoare de 8 bii - un numrtor/temporizator de 16 bii - conine un convertor analog digital cu intrri multiple - conine un comparator analogic - conine un modul USART pentru comunicaie serial - dispune de oscilator intern - ofer 32 de linii I/O organizate n patru porturi.

ATmega16 conine 32 de registre de uz general i 64 de registre speciale pentru modulele I/O. Aceste registre sunt mapate la adrese din memoria RAM cuprinse ntre 0000h i 005Fh. Una din caracteristicile foarte importante pentru orice procesor si in particular pentru microcontrolere este sistemul de intreruperi. O intrerupere reprezinta un semnal generat de un modul extern unitatii centrale de procesare (CPU) pentru a anunta aparitia unui eveniment care trebuie tratat. Utilizarea unui astfel de sistem permite implementarea de module specializate care sa execute operatii n paralel cu CPU si sa solicite interventia acestuia numai la terminarea operatiilor sau in alte cazuri definite. ATmega16 dispune de 21 surse de intrerupere. Atunci cand una dintre ele devine activa se suspenda cursul normal de executie si se face salt automat la o adresa prestabilita din memoria program.

Microcontrolere

Page 10

5.Proiectare Hardware
5.1 Schema electrica placa emisie

Componente folosite : U1 U2 U3 C1,C3,C4,C5,C6 R1 J1 Jmp1 P1 Pushbuton Reset


Microcontroler ATMega16 pe 8 biti

Convertorul Max232 Senzorul de umiditate HCH - 1000 Condensatoare de 100nF/1uF/1uF/100nF/470uF Rezistenta de 10k Conector USB pentru alimentarea microcontrolerului Jumper Conector RS232

Microcontrolere

Page 11

Circuitul Reset este realizat dintr-un Pushbuton, o rezistenta de 10k si un condensator de 100nF. Rezistenta confera condensatorului timp sa se incarce iar condensatorul e folosit pentru stabilizarea circuitului, la specificatiile producatorului.

Circuitul RS232 este realizat folosind: Circuitul integrat MAX232 folosit pentru convertirea semnalelor Condensatoare de 1uF Mufa COMPIM cu 9 pini specifica RS232

Circuitul este realizat astfel la specificatia producatorului pentru a asigura buna functionare si stabilitate.

Ansamblul de alimentare foloseste tensiunea de la portul USB asigurand un voltaj de 5V. Condensatoarele C5 si C6 sunt folosite la filtrarea curentului ce intra pe USB, la specificatia producatorului.

Senzor de umiditate Hch 1000 : este un senzor capacitiv de polimer, cu precizie relativ buna, proiectat pentru masurarea umiditatii in spatii inchise.

Microcontrolere 5.2 Schema electrica placa receptie

Page 12

Componente folosite : U1 U2 Lcd1 Rv1 C1, C3, C4, C5, C6 J1 Jp1 R1 P1 Pushbuton pentru Reset

Microcontrolerul ATMega16 pe 8 biti Convertorul Max232 Afisaj LCD 16x2 Rezistenta Reglabila Condensatoare de 100nF/1uF/1uF/100nF/470nF Conector USB pentru alimentarea microcontrolerului Jumper Rezistenta de 10k Conector Rs232

Microcontrolere

Page 13

Blocul de afisare LCD e format dintr-un display 16x2. Rezistenta variabila RV1 este conectata pentru a varia contrastul afisajului pentru o mai buna claritate

Microcontrolere

Page 14

6.Cablaj imprimat
6.1 PCB placa emisie

6.2 PCB placa receptie

Microcontrolere

Page 15

7.Proiectare software
7.1 Organigrama codului

START

Placa Emisie

Initializare

NU

Am primit date de la senzor?

DA

Convertire valoare

Codare

Transmisie

START

Placa Receptie
Initializare

NU

S-au primit date pe magistrala ?

DA Decodare Conversie numerica Afisare LCD

Microcontrolere

Page 16

7.2 Codul sursa placa emisie


#include <avr/io.h> #include <string.h> #define F_CPU 8000000 // 8 MHz #include <util/delay.h> #include <stdlib.h> #include <avr/interrupt.h> #define BAUD 9600 #define MYUBRR F_CPU/16/BAUD-1 void initalize_USART( unsigned int ubrr){ UBRRH = (unsigned char)(ubrr>>8); //seteaza rata de transfer bit h UBRRL = (unsigned char)ubrr; // seteaza rata de transfer bit h UCSRB = (1<<RXEN)|(1<<TXEN); // activeaza transmisia si receptia UCSRC = (1<<URSEL)|(0<<USBS)|(3<<UCSZ0); // Format : 8 biti, 1 bit de stop void send_byte(unsigned char byt){ // transmite un singur caracter interfetei seriale while (!(UCSRA & (1<<UDRE))); // Asteapta daca nu e pregatit transferul UDR = byt; // trimite bit } void send_string(char * str) { // trimite un sir interfetei seriale folosind un pointer while(*str) { // cat timp nu am ajuns la sfarsitul pointerului send_byte(*str++); // continua trimiterea bitilor din sir } } unsigned char read_byte(void) { while(!(UCSRA & (1<<RXC))); date de citit return UDR; } // functie pentru citirea bitilor // cat timp inca nu avem

Microcontrolere
void initalize_ADC( void ){ // seteaza CAN ADMUX=(1<<REFS0); // Aref = AVcc; ADCSRA=(1<<ADEN)|(7<<ADPS0); // activeaza CAN } int read_ADC(char ch){ // citeste CAN int n, av=64; // media can unsigned int average_adc = 0; // variabila pt stocare suma ADMUX |= (ch & 0x07); //seteaza canalul CAN for(n=0; n<av; n++){ // de cate ori citeste ADCSRA |= (1<<ADSC); //Start conversie unica while( !(ADCSRA & (1<<ADIF)) ); //asteapta sa se termine conversia ADCSRA |= (1<<ADIF); //reseteaza ADIF : ADIF=1 average_adc += ADC; //suma tutror adc citite } average_adc /= av; // calcularea mediei adc return (int) average_adc; // converteste la o valoare cu semn } void zero_counter( void ){ // seteaza numaratorul de 16 biti la 0 unsigned char sreg; sreg = SREG; // salveaza intreruperile globale cli(); TCNT1 = 0; // seteaza registrul de numarare la 0 SREG = sreg; sei(); }

Page 17

unsigned int read_counter( void ){ // citeste numaratorul de 16 biti unsigned char sreg; unsigned int count; sreg = SREG; cli(); count = TCNT1; // citeste registrul SREG = sreg; sei(); return count; }

Microcontrolere
int read_humidity( void ){ unsigned int counter_value; int humidity_value; float m = 0.147929; float a = 427.515;

Page 18

// slope // offset

zero_counter(); // numaratorul de 16 biti se seteaza la 0 PORTB &= ~(1<<PB1); TCCR1B |= ((0<<CS12)|(1<<CS11)|(0<<CS10)); // seteaza timerul 1 while((!(PINB & 1)) & (TCNT1<65000)); // asteptam ca iesirea senzorului sa fie in 1 logic TCCR1B &= ~((1<<CS12)|(1<<CS11)|(1<<CS10)); // opreste timerul 1 PORTB |= (1<<PB1); counter_value = read_counter(); // citeste numaratorul humidity_value = (m * counter_value) - a; // converteste valoarea in umiditate relativa return humidity_value; // returneaza valoarea } void delay_minutes( int delay ){ int t; for (t = 0; t < (delay * 60); t++){ _delay_ms(1000); } }

int main( void ){ char humidity_str[8]; int humidity; initalize_USART( MYUBRR ); comunicatia seriala DDRB |= (1<<DDB1); PORTB |= (1<<PB1); while( 1 ){ // initializeaza USART pentru

// reseteaza oscilatorul de umiditate // bucla infinita

Microcontrolere
humidity = read_humidity(); itoa(humidity,humidity_str,10); umiditatea in sir ascii

Page 19
//citeste umiditatea // converteste

send_string(humidity_str); serial send_string(" %RH"); _delay_ms(1000); } return 0; }

// trimite date portului

7.2 Codul sursa placa receptie

#define F_CPU 8000000 #define USART_BAUDRATE 9600 // rata de transfer #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) #include<avr/io.h> #include<util/delay.h> #define LCD_DATA PORTA //portul de date al LCD #define ctrl PORTB #define en PB2 // activeaza semnalul #define rw PB1 // citeste/ scrie #define rs PB0 // rs= pb0 void void void void LCD_cmd(unsigned char cmd); init_LCD(void); LCD_write(unsigned char data); LCD_clear();

void usart_init(); void usart_putch(unsigned char send); unsigned int usart_getch(); int main() { unsigned char value;

Microcontrolere

Page 20

DDRA=0xff; // portul a e setat ca port de iesire DDRB=0x07; // semnalul de iesire al LDC init_LCD(); _delay_ms(50); // intarziere 50ms usart_init(); // initializare USART while(1) { value=usart_getch(); // functie pentru a primi date din usart LCD_cmd(0xC0); // a doua linie, la inceput a LCD LCD_write(value); // scrie } return 0; } void init_LCD(void) { LCD_cmd(0x38); _delay_ms(1); LCD_cmd(0x01); _delay_ms(1); LCD_cmd(0x0E); _delay_ms(1); LCD_cmd(0x80); _delay_ms(1); return; } void LCD_cmd(unsigned char cmd) { LCD_DATA=cmd; ctrl =(0<<rs)|(0<<rw)|(1<<en); _delay_ms(1); ctrl =(0<<rs)|(0<<rw)|(0<<en); _delay_ms(50); return; } void LCD_write(unsigned char data) { LCD_DATA= data; ctrl = (1<<rs)|(0<<rw)|(1<<en); _delay_ms(1);

// initializare LCD 16x2 // clear LCD // cursor ON // Prima linie la inceput

Microcontrolere
ctrl = (1<<rs)|(0<<rw)|(0<<en); _delay_ms(50); return ; }

Page 21

void usart_init() { UCSRB |= (1 << RXEN) | (1 << TXEN); // activeaza circuiteul de transmitere si receptie UCSRC |= (1 << URSEL) | (1<<USBS) | (1 << UCSZ0) | (1 << UCSZ1); // foloseste caractere de 8 biti UBRRL = BAUD_PRESCALE; // incarca bitul inferior rata de transfer UBRRH = (BAUD_PRESCALE >> 8); // incarca bitul superior } unsigned int usart_getch() { while ((UCSRA & (1 << RXC)) == 0); // nu face nimic pana cand nu s-au primit date la UDR si sunt gata de afisat return(UDR); // returnteaz bit }

Microcontrolere

Page 22

8.Masuri de siguranta si mentenanta


Daca aparatul nu porneste, verificati conexiunea dispozitivului la alimentare. Daca intampinati probleme in functionarea dispozitivului apasati butonul RESET pentru reinitializare. Daca afisajul LCD prezinta este dificil de citit verificati contrastul acestuia. Pentru o vizualizare buna a mesajului afisat, modificati valoarea potentiometrului pana la nivelul dorit. Daca intampinati probleme legate de software, contactati producatorul pentru reprogramarea microcontrolerelor. Daca aparatul functioneaza necorespunzator si nu puteti remedia problema consultati unul dintre atelierele noastre pentru garantia aparatului. Aparatul nu este o jucrie, prin urmare, nu se va lsa la ndemna copiilor. Aparatul nu trebuie supus ocului mecanic puternic. Aparatul nu trebuie expus la temperaturi extreme, raze solare directe, vibraii intense. Dac exist dubii cu privire la buna functionare al aparatului, atunci apa ratul trebuie imediat scos din functiune i asigurat mpotriva repornirii neintentionate. Functionarea n siguranta nu mai este posibil dac aparatul: - prezint semne vizibile de deteriorare; - a fost depozitat in conditii nefavorabile - a fost supus socului mecanic puternic in timpul transportului Evitati temperaturile extreme, vibratiile i ocurile, pentru c acestea pot afecta unitatile si pot conduce la prognoze si date eronate. Nu scufundati aparatul n apa! Nu incercati sa reparati singur unitatea! Pentru orice alte intrebari/sugestii/reclamatii va stam la dispozitie: [email protected]

Microcontrolere

Page 23

9.Costuri de productie
Microcontroler Atmega16 20 RON x 2 buc Circuit integrat Max232 Potentometru 10k Rezistenta 10k -

- 40 RON; - 50 RON; - 4 RON;


- 1.2RON; - 30RON; -2.4RON;

25RON x 2buc 4RON x 1buc


0.6RON x 2buc

Senzor umiditate HCH -1000 30RON x 1buc Condensator 100nF 0.4RON x 4buc

Con. electrolitic 470nF Con. electrilitic 1nF Display LCD 16x2 Cablaj imprimat Total -

2RON x 2buc 1.5RON x 4buc 25 RON x 1buc 7.5RON x 2buc

- 4RON; - 6RON; 25RON; - 15RON; 177.6RON

Microcontrolere

Page 24

10.Bibliografie

http://www.tet.pub.ro http://www.atmel.com http://www.mikroe.com http://www.avrbeginners.net/ http://www.engineersgarage.com/ http://www.adelaida.ro/ http://www.avrfreaks.net/ http://cs.curs.pub.ro http://www.datasheetcatalog.com http://www.datasheets360.com http://www.conexelectronic.ro http://www.e-piese.ro http://www.youtube.com http://office.microsoft.com/ro-ro/templates/

S-ar putea să vă placă și