Micro
Micro
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
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 Numeric
Microcontroler Atmega16
Microcontroler Atmega16
Codare
Decodare
Convertor Max232
Convertor Max232
Mufa RS232
Mufa RS232
Microcontrolere
Page 6
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
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
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.
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
Microcontrolere
Page 15
7.Proiectare software
7.1 Organigrama codului
START
Placa Emisie
Initializare
NU
DA
Convertire valoare
Codare
Transmisie
START
Placa Receptie
Initializare
NU
Microcontrolere
Page 16
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
Microcontrolere
humidity = read_humidity(); itoa(humidity,humidity_str,10); umiditatea in sir ascii
Page 19
//citeste umiditatea // converteste
#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);
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
Microcontrolere
Page 23
9.Costuri de productie
Microcontroler Atmega16 20 RON x 2 buc Circuit integrat Max232 Potentometru 10k Rezistenta 10k -
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 -
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/