Sunteți pe pagina 1din 15

Proiect Circuite Complexe

Indicator al nivelului unui lichid intr-un


recipient cu o raza egala pe toata inaltimea
utilizand PIC16F877A

Profesor Coordonator : Laurentiu Baicu


Studenti : Naziru Adrian ; Barbu Marius Alexandru
Cuprins:

1. Introducere;
2. Programarea Pic-ului;
3. Schema electronica;
4. Simularea Circuitului;
5. Proiectare Cablaj;
6. Bibliografie si Anexe.
Introducere

Am ales aceasta tema pentru potentiala utilitate ce o poate avea acest


dispozitiv, dar si pentru capacitatea temei de a demostra si exersa cunostintele si
abilitatile tehnice dobandite in anii de studii in cadrul specializarii noastre de Electronica
aplicata.
In prezentul proiect am folosit cunostintele dobandite de la materiile cu care
ne-am confruntat in anii ce au trecut, de la materii precum Senzori si Traductoare,
Circuite Digitale sau Programarea Calculatoarelor, dar nu numai, ce au coroborat in a
ne ajuta sa intelegem un dispozitiv electronic chiar si unul complex in totalitatea lui, de
la modul de functionare pana la limitele impuse de mediu si tehnologia actuala.
Considerand faptul ca am dorit o integrare a mai multor elemente ce tin de
specializarea noastra am optat pentru a realiza acest proiect ca o echipa formata din 2
studenti in care sarcinile ni le-am imparit egal tinand cont de capacitatile individuale in
anumite arii de lucru.
Numele temei proiectului sugereza si utilizarea lui , scopul fiind de a ne indica
pe un afisor LDC nivelul de umplere, cu un lichid, a unui recipient de preferat cu raza
egala pe toata inaltimea recipientului .
Utilitatea acestui proiect poate fi usor modificata in aflarea distantei parcurse
de ceva anume spre exemplu o masina.
Am ales sa folosim un microcontroller de tip PIC16F877 pentru a expune
cunostintele legate de programarea a acestor componente dar si datorita utilizarii pe
scara larga in industria actuala fiind folositi in diverse aplicatii, de la cele mai simple
pana la cele mai complexe .
Ce este un PIC?.
Un PIC, pe scurt este un microcontroller produs de compania Americana ‘’ Microchip
Technology’’ , numele de PIC provenea initial de la Peripheral Interface Controller .
Microcontrolere contra Microprocesoare, desi poate asemanatoare privind perceptia
noastra (a studentilor) de pana acum, aceste doua componente difera in multe feluri . In
primul rand, functionalitatea lor . Un microprocesor are nevoie si de alte componente
pentru a putea fi folosit de exemplu memorie sau componente pentru primirea si
trimiterea de date, in schimb microcontrollerul are incorporate toate aceste elemente,
astfel fiind economisit timp si spatiu pentru construirea de aparate.
•Unitatea de memorie este partea microcontrolerului a carei functie este de a
inmagazina date. Daca presupunem ca am marcat sertarele într-un asemenea fel încât
sa nu fie confundate, oricare din continutul lor va fi atunci usor accesibil. Este suficient
sa se stie desemnarea sertarului ai astfel continutul lui ne va fi cunoscut în mod sigur.
• Unitatea de procesare a datelor (CPU) contine locatii de memorie – aceste
locatii speciale de memorie sunt denumite registri . Acesti registrii au rolul de a realiza
diferite operatii matematice precum adunare sacdere inmultire sau impartire.
• Bus-ul, denumit si magistrala , el fizic reprezinta un grup de 8 16 sau mai
multe fire ce realizeaza transmiterea de date in interiorul microcontrolerului . Sunt totusi
doua tipuri de magistrale, de adrese si de date. Prima serveste la transmiterea
adreselor de la CPU la memorie, iar cel de al doilea la conectarea tuturor blocurilor din
interiorul microcontrolerului.
• Unitatea de intrare-iesire (Unitate I/O) Aceste locatii sunt numite “porturi” .
Sunt diferite porturi: de intrare de iesire sau pe ambele cai.
• Unitatea timer este o componenta importanta in microcontroller cat si in
aplicatia noastra deoarece este partea ce se ocupa cu evidenta timpului . In general
timpul este determinat prin un registru a carui valoare creste numeric cu 1 in intervale
egale.
Desi in interiorul unui microcontroller gasim multe alte componente ce ajuta la o mai
buna functionare a lui cat si in cresterea capacitatii de realizare a anumitor procese ne-
am rezumat la cele de mai sus pentru ca de ele ne vom folosi pentru realizarea
proiectului , totusi alte componente ale unui microcontroller pot fi : timer watchdog,
convertor a/d ,etc.
Microcontrollerele pot fi programate prin diverse metode si programe cat si prin limbaje
diferite de programare .
In cazul limbajelor de programare a microcontrollerelor cel mai des folosit este
considerant limbajul de asmblare, unde , chiar si in dataheetul pic-urilor gasim coduri ce
ne ajuta sa utilizam diferite functii ale acestora. Alt limbaj de programare des intanlit
este limbajul C, folosit pe scara larga si cu o aplicatibiliate ridicata in o multime de arii
ale tehnologiei .
Programarea Pic-ului

Inainte de a arata modul de programare, consideram ca ar fi relevant sa


expunem si anumite elemente ce ne-au ajutat in alegerea acestui
microcontroller in detrimentul altor modele.

Microcontrollerul PIC16F877A produs de catre compania Microchip, detine o


multitudine de caracteristici de operare insa cele pe care noi le-am considerat
importante pentru proiect sunt urmatoarele :
- Capacitate de intrerupere (14 surse )
- Performanta ridicata a CPU
- Doar 35 de instructiuni de invatat
- Poate fi alimentat de la 2V pana la 5V
- Memorie Flash 8k
- Frecventa de operare 20MHz

Programarea microcontrollerului a fost realizata in mikro C , iar motivul


alegerii acestui limbaj de programare este simplitatea data de librariile acestui
limbaj cat si de o mai usoara intelegere a codului sursa de catre utilizatori. In
scopul de a arata si cunostintele de programare in limbajul de programare, in
capitolul anexe este atasat si codul sursa .

Aici vom detalia codul sursa in limbajul mikro C datorita caracteristicii lui
minimaliste.
Am incercat ca la majoritatea liniilor de cod sa atasam totodata si o descriere
succita despre ce anume reprezinta.

// modul de conectare a LCD


sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;


sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// terminarea modului de conectare a LDC

char txt1[] = "Proiect Circuite Complexe"; //TEXT 1


char txt2[] = "Dezvoltat de : "; //TEXT 2
char txt3[] = "Naziru Adrian si Barbu Marius"; //TEXT 3
char txt4[] = "ACIEE 2341 ------- ACIEE 2341"; //TEXT 4

char motor1[] = "MOTOR"; //TEXT


char motor2[] = "INCHIS"; //TEXT STATUS MOTOR
char motor3[] = "DESCHIS"; //TEXT STATUS MOTOR

char apa1[] = "NIVEL: "; //TEXT


char apa2[] = "0%"; //TEXT NIVELUL
REZERVORULUI
char apa3[] = "25%"; //TEXT NIVELUL
REZERVORULUI
char apa4[] = "50%"; //TEXT NIVELUL
REZERVORULUI
char apa5[] = "75%"; //TEXT NIVELUL
REZERVORULUI
char apa6[] = "100%"; //TEXT NIVELUL
REZERVORULUI

void main() //PINII DE INPUT SUNT ACTIVI


PE 0;
{

int i = 0; //declarare variabile


int c = 16; //declarare variabile
int b = 0; //declarare variabile
CMCON = 0x07; //INCHIDE COMPARATORUL PIC-
ULUI
ADCON1 = 0x06; // PENTRU A FUNCTIONA CA
ANALOG PORTA
TRISA = 0x0F; // SETEAZA PORTUL PENTRU
INPUT
PORTA = 0x00; // ACTIVEAZA PORT A
PORTD = 0x00; // ACTIVEAZA PORT D
PORTC = 0x00; // ACTIVEAZA PORT C
TRISB = 0x00; // SETEAZA PORTUL PENTRU
OUTPUT
TRISC = 0x00; // SETEAZA PORTUL PENTRU
OUTPUT
TRISD = 0x80; // SETEAZA PORTUL PENTRU
OUTPUT

PORTD.F2 = 1;
PORTD.F7 = 1;

Lcd_Init(); // functie pentru initializarea LCD-ului


Lcd_Cmd(_LCD_CLEAR); // goleste displayul
Lcd_Cmd(_LCD_CURSOR_OFF); // cursor inchis
Lcd_Out(1,1,txt1); // scrie textul pe primul rand
Lcd_Out(2,1,txt2); // scrie textul pe al doilea rand
Delay_ms(800); //delay
Lcd_Cmd(_LCD_CLEAR); // goleste displayul
Lcd_Out(1,1,txt3); // scrie textul pe primul rand
Lcd_Out(2,1,txt4); // scrie textul pe al doilea rand
Delay_ms(800); //delay

// MUTA TEXTUL
for(i=15; i>0; i--)
{
Lcd_Cmd(_LCD_SHIFT_LEFT); // MUTA TEXTUL LA STANGA DE 15 ORI
Delay_ms(155); //delay
}
i=0;

do
{
Lcd_Cmd(_LCD_CLEAR); // goleste displayul
Lcd_Out(1,1,apa1); // scrie textul pe primul rand
Lcd_Out(2,1,motor1); // scrie textul pe al doilea rand
if(c>0)
{
PORTD.F2 = 1; // configureaza PORTD1 pe input
c--;
}
else
PORTD.F2 = 0; // configureaza PORTD0 pe output

if(b>0)
{
PORTD.F0 = 1;
Delay_ms(125);
PORTD.F0 = 0;
b--;
}

if(PORTD.F7 == 0) // configureaza PORTD1 pe input


c = 16;

if(PORTA == 0x0F) // daca nici un senzor nu este activ


{
PORTD.F1 = 1;
Lcd_Out(1,8,apa2); // scrie textul pe primul rand
Lcd_Out(2,7,motor3); // scrie textul pe al doilea rand
PORTC = 1;
if(i == 0)
{
c = 16;
b=3;
}
i=1;
}
else if(PORTA == 0x0E) // daca primii doi senzori sunt activi
{
Lcd_Out(1,8,apa3); // scrie textul pe primul rand
if(i == 1)
Lcd_Out(2,7,motor3); // scrie textul pe al doilea rand
else
Lcd_Out(2,7,motor2); // scrie textul pe al doilea rand
PORTC = 3;
}
else if(PORTA == 0x0C)
{
Lcd_Out(1,8,apa4); // conditia pentru nivelul 3 de incarcare
if(i == 1)
Lcd_Out(2,7,motor3); // scrie textul pe al doilea rand
else
Lcd_Out(2,7,motor2); // scrie textul pe al doilea rand
PORTC = 7;
}
else if(PORTA == 0x08) // daca primii 3 snezori sunt activi
{
Lcd_Out(1,8,apa5); // conditia pentru nivelul 4 de incarcare
if(i == 1)
Lcd_Out(2,7,motor3); // scrie textul pe al doilea rand
else
Lcd_Out(2,7,motor2); // scrie textul pe al doilea rand
PORTC = 15;
}

else if(PORTA == 0x00) // daca rezervorul este plin


{
Lcd_Out(1,8,apa6); // scrie textul pe primul rand
Lcd_Out(2,7,motor2); // scrie textul pe al doilea rand
PORTD.F1 = 0;
if(i == 1)
{
c = 16;
b = 3;
}
i=0;
PORTC = 31; // inchide motorul
}
else
PORTA = 0x0F;
Delay_ms(125);

}while(1); // bucla infinita


}
-SCHEMA ELECTRONICA

Schema a fost realizata cu ajutorul programului de simulare si proiectare Proteus,


versiunea 8. Motivul alegerii acestui program pentru realizarea schemei cat si a
simularii este dat de faptul ca acest program dispune de un numar mare de instrumente
ce poate ajuta orice pasionat sau profesionist in domeniul electronicii. Spre exemplu, cu
acest program putem incarca un fisier de tip .hex in care il implementeaza intr-un
microcontroller simulat, in cazul nostru vorbim de PIC16F877A. Un alt instrument ce ne
sta la dispozitie este reprezentat de ARES. Acest instrument ne foloseste in realizarea
unui model simulat de cablaj, fiind doar un exemplu din capacitatile acestui program.
Am preferat ca in locul unor leduri ce ar avea semnificatia unui procent din nivelul
lichidului , am ales un ecran LCD in care sa afisam date despre nivelul lichidului si
despre stadiul motorului, totusi am pastrat in proiect si implementarea initiala, cea cu o
serie de leduri .
Pentru simularea senzorilor au fost folosite o serie de butoane ce raman in starea lor si
nu revin in forma initiala dupa actionare deoarece programul folosit pentru PIC se
foloseste de functia delay pentru aflarea valorilor si nu este programat pentru a memora
valorile primite la portul A.
Pentru actionarea motorului am folosit in releu, in ideea in care circuitul este alimentat
cu o tensiune de 5V iar motorul va functiona cu o tensiune de 12 V .
Simularea si Functionarea Circuitului

Pentru simularea circuitului am folosit in continuare programul Proteus .

Simularea acestui circuit este mai concludenta atunci cand punem alaturi senzorii
bazinului (in cazul de fata comutatoare) si ecranul LCD unde se pot observa cu usurinta
toate etapele simularii si functionarii .
In imaginile de mai jos este afisat derularea pasilor plecand de la ideea ca bazinul este
gol iar in care motorul comandat de catre microcontroller va umple bazinul pana la
nivelul maxim iar apoi va fi oprit . Desi alimentarea dispozitivului face ca LCD-ul sa
afiseze mesajul de bun venit aceasta etapa nu am detaliat-o in randurile ce urmeaza.
In prima faza pe afisorul LCD va aparea nivelul lichidului din bazin, respectiv 0 %, pe
primul rand , iar pe randul al doilea va fi afisat statusul motorului, respectiv inchis sau
deschis.

Dispozitivul semnaland nivelul de 0 %, tine motorul in stare deschisa pana la umplere.


Senzorii, in prezenta unui lichid ei trec in pozitia de 0 logic.
Nivelul de umplere de 25 % :

Nivelul de umplere de 50 % :

Nivelul de umplere de 75 % :

Nivelul de umplere de 100 % :


In ultima parte a simularii se poate vedea cum statusul motorului trece din ,,DESCHIS,,
in starea de ,,INCHIS,, .
Acest status al motorului se pastreaza pana in momentul in care toti cei 4 senzori vor fi
din nou pe pozitia de 1 logic , adica in momentul in care bazinul este gol, iar atunci pasii
se reiau.
In conditiile inca care unul dintre senzori este defect sau in care avem parte de o
situatie in care intampinam o functionare anormala a senzorilor motorul va ramane
inchis pana la o eventuala indeplinire a conditiilor de functionare normal.
Mai exact, in situatia in care am nota cei 4 senzori cu numere, respectiv 1 ,2 ,3 ,4, iar
senzorul 2 sa spunem ar indica faptul ca se afla in prezenta unui lichid dar senzorul 1
nu indica acest lucru, motorul va ramane inchis.

Proiectarea cablajului

In acest sens am apelat tot la programul Proteus 8 pentru realizarea cablajului intr-un
mediu digital. Datorita numarului ridicat de conexiuni dintre componentele proiectului,
folosirea unui singur strat de cupru nu am reusit sa o realizam, insa am incercat pe cat
se poate sa folosim cat mai putin metode precum, un alt strat sau o punte pentru
conexiuni.
In viziunea noastra, aspectul dispozitivului ar semana cu un patrat, a caror laturi sa fie
de 8,5 cm.
Cu siguranta dimensiunile dispozitivului pot fi minimalizate in timp. In acelasi sens
putem vorbi depsre capacitatile acestuia, unde i se pot programa functii suplimentare
ceea ce il poate face multifunctional .
Piesele folosite in proiectarea acestuia le-am ales in functie de accesibilitatea librariilor
din program si nu cautand cele mai ieftine sau mai eficiente piese pentru tema in cauza
.
In acelasi capitol a fost realizata si o proiectie 3D a acestui circuit insa o imagine
sugestiva in acest sens nu a putut fi proiectata intr-un document word, insa toate
documentele cu privire la acest sens se pot gasi la linkul din ANEXE . La acel link se
vor afla : datasheetul Pic-ului, toate programele legate de simulare proiectare si cablaj
a dispozitivului pentru programul Proteus, cat si proiectul in format electronic.
Bibliografie si Anexe

-curs CIA
-curs ST
-curs MPA
-www.extremecircuits.net
-www.wikipedia.rog
-www.hep.upenn.edu
-www.adelaida.ro
-www.connexelectronics.ro

Linkul unde se afla toate datele in format electronic, inclusiv acest


text. :

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