Sunteți pe pagina 1din 24

Profesor Indrumator Student

S.I.dr.ing. Angel Ciprian Cormos Nae Adrian


Microcontrolere
Proiect

Page 2 Microcontrolere
Cuprins

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
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.






2.1.Descrierea comerciala
2.Prezentare generala

Page 4 Microcontrolere



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 .












2.2 Scurt istoric

Microcontrolere Page 5













































3.Proiectare conceptuala

Alimentare
Convertor
Analog
Digital
Microcontroler
Atmega16
Codare

Senzor
Umiditate
Alimentar
e
Convertor
Max232
Convertor
Max232
Decodare
Microcontroler
Atmega16
Convertor
Numeric
Afisaj LCD
Emisie
Receptie
Mufa
RS232
Mufa
RS232
3.1 Schema bloc

Page 6 Microcontrolere




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 variaie 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
3.2 Descrierea blocurilor

Microcontrolere Page 7
stocare a datelor cat si pentru transferul acestora.

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.













Page 8 Microcontrolere



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.



4.Prezentare placa de dezvoltare Easy AVR4

Microcontrolere Page 9

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






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.



Page 10 Microcontrolere






Componente folosite :

U1 Microcontroler ATMega16 pe 8 biti
U2 Convertorul Max232
U3 Senzorul de umiditate HCH - 1000
C1,C3,C4,C5,C6 Condensatoare de 100nF/1uF/1uF/100nF/470uF
R1 Rezistenta de 10k
J1 Conector USB pentru alimentarea microcontrolerului
Jmp1 Jumper
P1 Conector RS232
Pushbuton Reset

5.Proiectare Hardware
5.1 Schema electrica placa emisie

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 Microcontrolere



Componente folosite :
U1 Microcontrolerul ATMega16 pe 8 biti
U2 Convertorul Max232
Lcd1 Afisaj LCD 16x2
Rv1 Rezistenta Reglabila
C1, C3, C4, C5, C6 Condensatoare de 100nF/1uF/1uF/100nF/470nF
J1 Conector USB pentru alimentarea microcontrolerului
Jp1 Jumper
R1 Rezistenta de 10k
P1 Conector Rs232
Pushbuton pentru Reset



5.2 Schema electrica placa receptie

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







































Page 14 Microcontrolere













6.Cablaj imprimat
6.1 PCB placa emisie
6.2 PCB placa receptie

Microcontrolere Page 15








START





Initializare































7.Proiectare software
7.1 Organigrama codului
Am primit
date de la
senzor?
Convertire
valoare
Codare Transmisie
START
Initializare
S-au primit
date pe
magistrala ?
Decodare
Conversie
numerica
Afisare
LCD
Placa Emisie
Placa Receptie
DA
DA
NU
NU

Page 16 Microcontrolere



#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) { // functie pentru citirea bitilor
while(!(UCSRA & (1<<RXC))); // cat timp inca nu avem
date de citit
return UDR;
}



7.2 Codul sursa placa emisie

Microcontrolere Page 17
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();
}


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;
}





Page 18 Microcontrolere
int read_humidity( void ){
unsigned int counter_value;
int humidity_value;
float m = 0.147929; // slope
float a = 427.515; // 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 ); // initializeaza USART pentru
comunicatia seriala


DDRB |= (1<<DDB1);
PORTB |= (1<<PB1); // reseteaza oscilatorul de umiditate

while( 1 ){ // bucla infinita


Microcontrolere Page 19
humidity = read_humidity(); //citeste umiditatea

itoa(humidity,humidity_str,10); // converteste
umiditatea in sir ascii



send_string(humidity_str); // trimite date portului
serial
send_string(" %RH");
_delay_ms(1000);
}
return 0;
}









#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 LCD_cmd(unsigned char cmd);
void init_LCD(void);
void LCD_write(unsigned char data);
void LCD_clear();

void usart_init();
void usart_putch(unsigned char send);
unsigned int usart_getch();

int main()
{
unsigned char value;
7.2 Codul sursa placa receptie

Page 20 Microcontrolere
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); // initializare LCD 16x2
_delay_ms(1);

LCD_cmd(0x01); // clear LCD
_delay_ms(1);

LCD_cmd(0x0E); // cursor ON
_delay_ms(1);

LCD_cmd(0x80); // Prima linie la inceput
_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 Page 21
ctrl = (1<<rs)|(0<<rw)|(0<<en);
_delay_ms(50);
return ;
}

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
}






















Page 22 Microcontrolere





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:
pubrel@dupelectronic.ro


8.Masuri de siguranta si mentenanta

Microcontrolere Page 23




Microcontroler Atmega16 20 RON x 2 buc - 40 RON;

Circuit integrat Max232 25RON x 2buc - 50 RON;

Potentometru 10k - 4RON x 1buc - 4 RON;

Rezistenta 10k - 0.6RON x 2buc - 1.2RON;

Senzor umiditate HCH -1000 30RON x 1buc - 30RON;

Condensator 100nF - 0.4RON x 4buc -2.4RON;

Con. electrolitic 470nF - 2RON x 2buc - 4RON;

Con. electrilitic 1nF - 1.5RON x 4buc - 6RON;

Display LCD 16x2 25 RON x 1buc 25RON;

Cablaj imprimat - 7.5RON x 2buc - 15RON;

Total 177.6RON





















9.Costuri de productie

Page 24 Microcontrolere








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/


10.Bibliografie