Modul programabil pentru sistem de irigații prin picurare cu PIC16F877A [301782]
Universitatea “Politehnica” [anonimizat]16F877A
[anonimizat]: [anonimizat].Dr.Ing. [anonimizat]
2015
Copyright © 2015, Andrei-Constantin CIUCU
Toate drepturile rezervate
Autorul acordă UPB dreptul de a reproduce și de a [anonimizat].
CUPRINS
LISTA FIGURILOR 11
LISTA ACRONIMELOR 13
INTRODUCERE 17
1. SCHEMA ELECTRICĂ 19
1.1. PROIECTAREA SCHEMEI ELECTRICE 20
1.2. PRINCIPIUL DE FUNCȚIONARE 22
2. MICROCONTROLER 25
2.1. SCHEMA BLOC A MICROCONTROLER-ULUI PIC16F877A 26
2.2. ORGANIZAREA MEMORIEI 27
2.2.1. NUMĂRĂTORUL 28
2.2.2. STIVA 29
2.2.3. EEPROM 29
2.3. PORTURI DE INTRARE/IEȘIRE 30
2.3.1. PORT A 31
2.3.2. PORT B 31
2.3.3. PORT C 32
2.3.4. PORT D 33
2.3.5. PORT E 34
2.4. TIMERE 34
2.4.1. TIMER0 34
2.4.2. TIMER 1 35
2.4.3. TIMER 2 36
2.5. [anonimizat] (CCP) 37
2.5.1. MODUL DE CAPTURĂ 37
2.5.2. MODUL DE COMPARARE 38
2.5.3. MODUL PWM 39
2.6. [anonimizat] 40
2.6.1. MODUL SPI 41
2.6.2. MODUL I2C 43
2.7. [anonimizat] 44
2.8. MODULUL COMPARATOR 45
2.9. CARACTERISTICI SPECIALE ALE CPU 45
2.9.1. ÎNTRERUPERILE 45
2.9.2. WDT 46
3. SENZORI 47
3.1. FOTODIODA 47
3.2. SENZOR DE TEMPERATURĂ 49
3.3. [anonimizat]-D5 53
4. ALTE COMPONENTE UTILIZATE 55
4.1. DISPLAY 55
4.2. TRANSFORMATORUL ELECTRIC 56
4.3. CABLAJUL IMPRIMAT 58
4.4 TRANZISTORUL BIPOLAR 60
4.5 DIODA SCHOTTKY 61
4.6. STABILIZATORUL DE TENSIUNE 61
CONCLUZII 63
BIBLIOGRAFIE 65
ANEXE 67
LISTA FIGURILOR
Fig. 1.1 Schema electrică
Fig. 1.2 Schema bloc
Fig. 1.3 Așezarea componentelor pe placă
Fig. 2.1 Schema bloc a microcontrolerului
Fig. 2.2 Organizarea memoriei
Fig. 2.3 Registrul de stare
Fig. 2.4 Încărcarea numărătorului în două situații diferite
Fig. 2.5 Registrul EECON1
Fig. 2.6 Diagrama pinilor microcontrolerului PIC16F877A
Fig. 2.7 Diagrama bloc a pinului RA4/T0CLK
Fig. 2.8 Diagrama bloc a pinilor RB7:RB4
Fig. 2.9 Diagrama bloc a portului C
Fig. 2.10 Diagrama bloc a portului D
Fig. 2.11 Diagrama bloc a portului E
Fig. 2.12 Diagrama bloc a timerului 0
Fig. 2.13 [anonimizat]. 2.14 Diagrama bloc timer 1
Fig. 2.15 Diagrama bloc timer2
Fig. 2.16 Diagrama bloc a operațíilor din modul de captură
Fig. 2.17 Diagrama bloc a operațíilor din modul de memorare
Fig. 2.18 Diagrama bloc simplificată PWM
Fig. 2.19 Ieșiri PWM
Fig. 2.20 Diagrama bloc MSSP pentru modul SPI
Fig. 2.21 Conexiune SPI de tip Master/Slave
Fig. 2.22 Diagrama bloc MSSP pentru modul I2C
Fig. 2.23 Diagrama bloc a [anonimizat]. 2.24 Diagrama bloc a ieșirii comparatorului
Fig. 2.25 Diagrama bloc a modulului WDT
Fig. 3.1 Fotodioda PIN
Fig. 3.2 Variația curentului de întuneric
Fig. 3.3 Răspunsul fotodiodei în funcție de lungimea de undă
Fig. 3.4 Caracteristica de sensibilitate spectrală
Fig. 3.5 Senzori de temperatură
Fig. 3.6 Diagrama bloc a termometrului digital
Fig. 3.7 Curba de performanță
Fig. 3.8 Configurația senzorului de umiditate
Fig. 3.9 Variația rezistenței în funcție de umiditate
Fig. 4.1 Display
Fig. 4.2 Transformator
Fig. 4.3 Principiu de funcționare a transformatorului
Fig. 4.4 Vederea de sus a cablajului imprimat
Fig. 4.5 Vedere de jos a cablajului imprimat
Fig. 4.6 Structura tranzistorului npn
LISTA ACRONIMELOR
RAM – Random Acces Memory
EEPROM – Electrically Erasable Programmable Read Only Memory
LCD – Liquid Crystal Display
RISC – Reduced Instruction Set Computer
LED – Light Emiting Diodes
USART – Universal Synchronous/Asynchronous Receiver Transmitter
SPI – Serial Peripheral Interface
PWM – Pulse Width Modulation
WDT – WatchDog Timer
CMOS – Complementary Metal-Oxide Semiconductor
MSSP – MASTER SYNCHRONOUS SERIAL PORT
SDI – Serial Data In
SDO – Serial Data Out
SCK – Serial Clock
TH – Temperature High
TL – Temperature Low
ROM – Read-Only Memory
FSR – File Select Register
CCP – Capture/Compare/PWM
TTL – Transistor-Transistor Logic
I2C – Inter-Integrated Circuit
SS – Slave Select
HVAC – High Voltage Alternating Current
Mi-am ales ca temă pentru lucrarea de diplomă, “Modul Programabil pentru Sistem de Irigație prin Picurare cu PIC16F877A”. Unul din motivele principale pentru care m-am oprit asupra acestei teme îl reprezintă importanța pe care o deține apa, ea reprezentând unul din elementele principale din viața oamenilor. De aceea managementul ei și economisirea sa prin orice metodă reprezintă un subiect de care ar trebui să se preocupe multe persoane. Sistemul meu are ca rol, printre multe altele, și economisirea cantității de apă folosită în irigație. Plantele primesc exact atata apă cată au nevoie, fără ca aceasta să fie consumată în van.
În plus, volumul de lucru este mult mai redus. Acest sistem ușurează viața oamenilor, le oferă mai mult timp liber, și le cere mai puțin efort fizic. Acesta este alt motiv pentru care mi-am ales să prezint un astfel de sistem.
Un alt lucru care m-a determinat să aleg această temă este importanța pe care o acord agriculturii. Un sistem de irigații prin picurare ajută la producerea unei recolte mai bune atât din punct de vedere cantitativ, cât și calitativ. În plus consider că acest sistem este de viitor, câștigând din ce în ce mai mult teren în fața altor tipuri de irigații. De aceea ar trebui cunoscut de cât mai multe persoane care să contribuie la evoluția și la imbunătățirea sa.
L-am ales pentru ca mi se pare sistemul care se aproprie cel mai mult de ideal. Un sistem care oferă mai mult, și care necesită timp și efort mai puțin.
INTRODUCERE
Irigarea prin picurare a devenit foarte utilizată în domenii precum horticultura sau agricultura modernă. Ca orice alt sistem și acesta are avantajele și dezavantajele sale, pe care le voi prezenta în continuare.
Sistem de Irigații prin Picurare
Organizația Națiunilor Unite a realizat diverse statistici, conform cărora necesarul de apă pentru consumul anual crește cu 64 de miliarde de metri cubi în fiecare an. Acest lucru se datorează, în primul rând, creșterii anuale a populației globului cu 80 de milioane de persoane.
70% din consumul global de apă se folosește în agricultură, pentru irigarea culturilor. Culturile irigate au o eficiență foarte crescută. Deși agricultura irigată reprezintă doar 20% din totalul pământului cultivat, aceasta generează 40% din hrană.
Irigarea prin picurare câștigă din ce în ce mai mult teren în rândurile horticultorilor și ale agricultorilor, aducând beneficii majore pe termen lung, dar și pe termen scurt.
Acest sistem are numeroase avantaje, și voi prezenta câteva din cele mai importante. Unul dintre acestea este reducerea forței de muncă și a efortului. De exemplu, aplicarea îngrășămintelor se face prin dizolvarea în apa de udat. Acest lucru implică și costuri mai scăzute cu mâna de lucru. În plus, aceste sisteme de irigare lucrează la presiuni mult mai mici decât sistemele clasice, reducându-se astfel și costul de pompare.
Alt avantaj deosebit de important este eficiența acestui sistem în aplicarea apei. Prin picurare, apa va fi aplicată la fiecare plantă în parte, strict pe rânduri. Din acest motiv, este redusă și creșterea buruienilor, deoarece solul dintre rândurile de plante rămâne uscat. În plus, există și posibilitatea de a iriga terenuri cu formă neregulată.
Tub de Irigații prin Picurare
În continuare voi prezenta și dezavantajele pe care le are sistemul de irigare prin picurare. Unul din acestea ar fi pierderile de apă, în cazul în care sistemul nu este instalat cu atenție. Dacă apa nu este filtrată corespunzător, duzele foarte fine se pot înfunda, ducând la pierderea unor plante.
În plus, există riscul scurtării duratei de viață a conductelor de irigare, din cauza radiațiilor solare.
Deși costul inițial este destul de ridicat, acesta se amortizează într-un an sau doi.
Numeroasele avantaje pe care le prezintă acest sistem sporește siguranța în exploatare, calitatea și cantitatea producțiilor obținute. De aceea metoda de irigare prin picurare este cea mai utilizată metodă la culturile de legume în câmp, culturile de porumb sau de cartofi, sere, livezi.
În concluzie, controlul apei este crucial în agricultura modernă, dacă se dorește obținerea unor recolte demne de a susține o populație care se află într-un ritm alert de creștere. [12]
SCHEMA ELECTRICĂ
Fig. 1.1 Schema electrică
PROIECTAREA SCHEMEI ELECTRICE
Am ales toate componentele din schema electrică după două reguli. Unele sunt impuse de către producătorul lor, în timp ce pe altele le-am ales în funcție de valorile curenților sau tensiunilor din schemă.
Mai jos am realizat schema bloc a montajului :
Fig. 1.2. Schema bloc
Pentru sursa de alimentare, s-au folosit următoarele componente : transformatorul electric TR1, dioda D2 Schottky, condensatoarele C3, C4, C5 și C6 și stabilizatorul de tensiune IC2 7805.
Transformatorul electric are rolul de a coborî tensiunea de la 220Vca, la 12Vca. Tensiunea de 12 V este necesară pentru releu.
Am folosit un transformator cu înfășurare secundară simetrică pentru a obține un curent mai mare prin sistemul de redresare.
Dioda Schottky dublă, cu catod comun, am folosit-o ca punte redresoare în contra-timp dublă alternanță pentru dublarea curentului. Acest lucru înseamnă că putem obține dublarea curentului nominal suportat de secundarul transformatorului. Am ales această diodă în detrimentul a două diode normale, deoarece dioda Schottky este foarte rapidă, și suportă un curent mai mare de 1A.
Condensatoarele C3 și C6 sunt folosite la deparazitare, iar C4 și C5 sunt folosite la filtare. Ultimele două condensatoare sunt polarizate și contează poziția în care sunt așezate în circuit.
Am folosit stabilizatorul de tensiune pentru a asigura o bună stabilizare a tensiunii la 5Vcc atât pentru afișajul LCD, cât și pentru microcontroler.
Panoul de comandă ( sau de control ) este format din 4 butoane de tip touch button. Ele asigură comanda unor funcții de selecție, ajustează valorile impuse de utilizator, și resetează microcontrolerul. Aceste butoane sunt S1, S2, S4 și S6.
Pentru ca microcontrolerul să interpreteze semnalul aplicat la pinii de intrare, este necesară folosirea unor rezistențe de stare în repaus. Acest lucru înseamnă că dacă alegem din program ca microcontrolerul să răspundă când detectează un semnal de 0 logic, pinii de intrare trebuie să fie menținuți la valoarea de 1 logic. Acest lucru îl putem realiza folosind rezistențe cu valori cuprinse între 4.7k și 10k, la tensiunea de 5Vcc.
Eu am ales rezistențe de valoarea de 10K, deoarece cu cât sunt mai mici, se folosesc pentru frecvențe mai înalte. Dacă valoarea lor ar fi mai mare de 10K, e posibil sa își tot schimbe semnul, microcontrolerul nedându-și seama daca pinii sunt la 0 sau la 1 logic.
Acest lucru este valabil atunci când utilizăm portul de intrare ca intrare logică. În cazul în care pinul sau portul utilizat sunt ca intrare analogică, ca în cazul meu, nu va mai exista 0 logic și 1 logic, ci va fi un interval de tensiune între 0V și 5V. Dacă tensiunea este prea mare, vom avea nevoie de un divizor rezistiv care să o aducă în intervalul necesar.
Microcontrolerul PIC16F877A are maxim 8 intrări analogice, pe 12 biți fiecare. Acest lucru înseamnă că fiecare intrare a convertorului analog-digital are o rezoluție de 1022 valori, între 0 și 5V.
În montajul meu, am folosit 3 dintre aceste intrări, pentru a îndeplini cei trei factori necesari în buna administrare a dozării apei pentru plante. Aceștia sunt intensitatea luminii, temperatura și umiditatea. Toate cele trei semnale sunt semnale analogice, care sunt afișate pe display. Prin folosirea celor trei potențiometre de 10k, se simulează aceste trei condiții : intensitatea luminii, nivelul de temperatură și cel de umiditate, corespunzătoare senzorilor care ar face acest lucru în realitate.
Am mai adăugat un modul și cu senzorii propriu-ziși. Montajul poate funcționa cu potențiometrele sau cu senzorii. Acest lucru se alege printr-un switch, care comută între folosirea celor trei potențiometre pentru modificarea temperaturii, a umidității și a luminozității, și între utilizarea senzorilor și măsurarea celor 3 factori în timp real.
Rezistența R18 este folosită pentru polarizarea fotodiodei. Aceasta are și o rezistență proprie, care scade pe măsură ce luminozitatea crește. Rezistența R19 este o rezistență semireglabilă, care poate lua valori în intervalul 0 – 500K. Aceasta are rol în determinarea temperaturii de plecare. Dioda folosită are ca scop protejarea senzorului de temperatură.
Am ales ca microcontroler PIC16F877A, datorită numărului necesar de porturi și a numarului mare de intrări analogice. În plus are destulă memorie FLASH, și nu era necesar sa aleg un microcontroler cu mai multă memorie, deoarece nu o foloseam, și se mărea și prețul. PIC16F877A lucrează la o frecvență de ceas de 4MHz, aceasta fiind suficientă vitezei de răspuns pentru funcțiile necesare.
Folosirea grupului de condensatoare de 33 pF la oscilatorul Quartz este impusă de producător, în funcție de viteza de lucru. Am folosit un oscilator Quartz ca ceas extern, deoarece este mult mai stabil, ceasul intern al microcontrolerului neavând o precizie foarte bună.
Alegerea porturilor pentru funcțiile dorite nu sunt stricte în cazul funcțiilor de intrare/ieșire, cu excepția intrărilor analogice care sunt impuse de producător. În cazul meu, portul A. Ca intrări analogice mai pot fi utilizați și pinii portului E, dar nu este uzual. În cazul meu portul E este folosit ca port de ieșire.
Altă componentă importantă este afișajul. Acesta este unul alfanumeric, cu două linii și 16 coloane. Interfața de comunicare și control este de tip paralel, cu 8 biți de date. Controlul și comunicarea cu afișajul, se face prin această interfață, de către microcontroler, în cazul meu, prin portul B. Însă el poate fi legat la oricare dintre porturile digitale B, C sau D.
În cazul meu, sunt 4 pini de date și 2 pini de control.
Etajul de ieșire este format din R2, Q2, releul K1 GL5 și D1.
Rezistența R2 de 1K este folosită pentru reducerea curentului de bază, un curent de comandă a tranzistorului Q2 BC547. Atunci când se aplică semnal de comandă din microcontroler prin portul E, prin pinul RE.0, tranzistorul intră în stare de saturație și comandă releul K1. Dioda D1 are rolul de a proteja joncțiunea colector-emitor a tranzistorului la decuplarea releului.
Când releul este decuplat, din cauza câmpului electromagnetic, apare o tensiune electromotoare inversă de valoare foarte mare numită tensiune periculoasă. Aceasta poate străpunge joncțiunea tranzistorului. În cazul folosirii diodei polarizată invers în paralel cu bobina releului, vârful tensiunii periculoase este împiedicat să se scurgă prin joncțiunea tranzistorului. Astfel dioda începe să conducă, iar bobina releului este practic scurtcircuitată pe durata acestui vârf periculos.
Ledurile 1 și 2 indică activarea circuitului de forță și scierea sau citirea memoriei EEPROM a microcontrolerului. Rezistențele de 220 Ohmi au ca rol limitarea curentului prin LED-uri pentru a nu se strica joncțiunea acestora. În plus, aceste rezistențe protejează porturile.
PRINCIPIUL DE FUNCȚIONARE
Sistemul de irigație este un dispozitiv folosit mai ales în sere sau grădini de diferite dimensiuni. Are ca scop principal controlul dozării apei, pentru ca planta să fie menținută sănătoasă.
Pentru o bună administrare a sistemului, trebuie să se țină cont de următorii factori : luminozitate, temperatură și umiditate. În funcție de acești factori, dispozitivul alimentează cu apă prin citirea valorilor analogice de la semnalele provenit de la senzori. Aceste semnale sunt captate prin intermediul sistemului convertor analog-digital. Dispozitivul are trei astfel de intrări, pe 12 biți. Datele lor sunt stocate în memoria RAM internă. Procesorul va compara nivelul cerut cu cel real care se află în memorie, luând astfel decizia de a porni sau nu sistemul de evacuare al apei.
Fig. 1.3. Așezarea componentelor pe placă
Pentru orice tip de plantă se pot programa nivelele celor trei factori : luminozitate, temperatură și umiditate. Acestea sunt stocate în memoria EEPROM a microcontrolerului.
Pe ecran se vor afișa scalele corespunzătoare fiecărui factor. Pentru luminozitate și pentru umiditate, acestea sunt date în procente (%), iar pentru temperatură, în grade Celsius (șC).
Dispozitivul dispune și de o tastatură, prin intermediul căreia se pot ajusta nivelele limită ale celor trei factori. Aceste nivele sunt memorate iar atunci când nivelele reale ating pragurile, va începe procesul de irigație.
Afișarea datelor se face pe un LCD alfanumeric, cu 2 linii a câte 16 caractere, pentru a avea posibilitatea de a urmări atât valorile reale provenite de la senzori, cât și valorile impuse.
Componenta de bază folosită pentru acest proces este microcontrolerul PIC16F877A, din familia Microchip. Acesta are o frecvență de lucru de 4 MHz.
Alimentarea cu energie se face de la o sursă de tensiune de 220 – 240 Vca, iar prin blocul de alimentare se asigură două tensiuni : una de 12 Vcc și una de 5Vcc. Etajul de ieșire pentru comanda electrovalvelor este format din grupul de componente : releu 12VDC, tranzistorul bipolar de tip npn BC547, rezistența de valoare 1Kohm și dioda 1N4148.
Microcontrolerul aplică un semnal ce acționează tranzistorul prin această rezistență. Ea are ca rol limitarea curentului de bază. Tranzistorul acționează la rândul său releul, permițând scurgerea curentului prin înfășurarea bobinei din releu și prin joncțiunea colector-emitor, astfel încât prin acest proces se realizează închiderea circuitului.
MICROCONTROLER
Microcontrolerele PIC16 sunt microcontrolere ușor de utilizat datorită arhitecturii RISC. Ele folosesc arhitectura Harvard modificată, cu magistrale diferite pentru date și instrucțiuni. Acest lucru permite ca magistrala de instrucțiuni sa fie mai mare, având în acest caz 14 biți.
PIC16 are un număr de 35 de instrucțiuni, majoritatea executându-se într-un singur ciclu, iar cele de salt se execută în două cicluri. Setul de instrucțiuni au un grad mare de ortogonalitate, ceea ce reduce mult timpul necesar realizării unei aplicații.
Microcontrolerele PIC16 admit o frecvență maximă de până la 20 MHz, spre deosebire de PIC12, ce admit o frecvență de maxim 4 MHz.
Este oferită posibilitatea de lucru în întreruperi, cu 7 surse interne și o sursă externă. Întreruperile sunt controlate de un registru de comandă, ce poate valida sau invalida, fie global, sistemul de întreruperi, fie individual pe fiecare linie. Toate interfețele care pot cere o întrerupere au atașat un bit prin intermediul căruia poate fi determinată sursa întreruperii. Întreruperile pot fi mascate.
Microcontrolerele PIC16 au 13 linii de intrare-ieșire cu posibilitatea stabilirii individuale a sensului de transfer, și cu o linie de putere de comandă directă a unui LED.
Pentru a crește siguranța în funcționare, această familie de microcontrolere are integrat un circuit de protecție care generează un RESET la scăderea tensiunii de alimentare, circuit ce poate fi validat sau invalidat cu un bit de comandă.
Spre deosebire de alte microcontrolere, cele din familia PIC16 pot fi echipate cu o diversitate foarte mare de interfețe, ca de exemplu : comparatoare, convertoare analog-digitale sau digital-analogice, USART, SPI, PWM, WDT etc.
În plus se înscriu în categoria microcontrolerelor flexibile, fiind posibilă adăugarea altor periferice, sau, dacă este necesar, a mai multă memorie. Acest lucru este unul din criteriile importante la care trebuie sa ne gândim atunci când alegem un tip de microcontroler. Pe lângă flexibilitate, microcontrolerele PIC16, îndeplinesc și criteriul fiabilității. Nu este sigur să alegem un microcontroler nou apărut, deoarece poate avea probleme, chiar dacă face parte dintr-o familie atât de consacrată, iar PIC16 a apărut de multă vreme și a fost destul timp pentru a corecta posibilele probleme. [1]
2.1. SCHEMA BLOC A MICROCONTROLER-ULUI PIC16F877A
Fig. 2.1. Schema bloc a microcontrolerului
2.2. ORGANIZAREA MEMORIEI
În microcontrolerul PIC16F877A sunt trei blocuri de memorie. Memoria de date și memoria de program au magistrale separate.
PIC16F877A are un numărător pe 13 biți, capabil să adreseze 8K x 14 cuvinte. Dacă se accesează o locație dincolo de adresa fizică implementată, se va genera o buclă. Vectorul de reset este la 0000h, în timp ce vectorul de întrerupere este la 0004h.
Fig. 2.2 Organizarea memoriei
Memoria de date este împărțită în mai multe blocuri care conțin registre generale și registre speciale de funcții. Fiecare bloc se întinde până la 128 de biți. Cea mai mică locație din fiecare bloc este rezervată pentru registrele speciale. Deasupra lor se află registrele de uz general, implementate ca memorie RAM statică. Toate blocurile conțin registre speciale de funcții. Fișierul de registru poate fi accesat fie direct, fie indirect prin FSR.
Registrele speciale sunt folosite de procesor și de modulele periferice pentru a controla operațiile dorite ale microcontrolerului. Aceste registre sunt implementate ca memorie RAM statică. Pot fi clasificate în două categorii : nucleu (procesor) și periferic.
Registrele de stare conțin starea aritmetică a unității aritmetico-logice, starea de resetare si blocul de selectare al biților pentru memoria de date. Registrele de stare pot fi destinația oricărei instrucțiuni. Dacă registrul de stare reprezintă destinația unei instrucțiuni care afectează biții Z, DC sau C, atunci scrierea către acești trei biți este dezactivată. Biții TO și PD nu pot fi setați, prin urmare, rezultatul unei instrucțiuni care are registrul de stare ca destinație, poate fi diferit decât cel așteptat.
Fig. 2.3 Registrul de stare
Bitul TO este bitul time-out. Acesta are valoarea 1 la aprindere și 0 când apare o întrerupere WDT.
Bitul PD este bitul de stingere. Acesta este 1 la aprindere, și 0 după execuția instrucțiunii SLEEP.
Bitul Z este bitul zero. Acesta este 1 dacă rezultatul unei operații aritmetice sau logice este zero, și 0 dacă rezultatul unei operații este diferit de zero.
Bitul DC este un bit de transport/împrumut care are valoarea 1 daca a avut loc un transport de la al patrulea cel mai puțin semnificativ bit al rezultatului, și zero în rest.
Bitul C este 1 dacă apare un transport la cel mai semnificativ bit, și 0 dacă nu apare.
2.2.1. NUMĂRĂTORUL
Numărătorul este pe 13 biți. Cel mai de jos octet provine din registrul PCL, registru care poate fi scris sau citit. Biții superiori nu pot fi citiți, însă pot fi scriși indirect prin intermediul registrului PCLATH . La fiecare RESET, biții superiori vor fi șterși.
Fig. 2.4 Încărcarea numărătorului în două situații diferite
Figura de mai sus prezintă cele doua situații de încărcare a numărătorului. Primul exemplu arată cum numărătorul este încărcat cu o scriere PCL, iar cel de-al doilea exemplu arată cum el este încărcat in timpul unui apel sau a unei instrucțiuni GOTO.
Când are loc o instrucțiune CALL sau GOTO, cei mai semnificativi 2 biți ai adresei sunt selectați de PCLATH<4:3>. Când se face o instrucțiune CALL sau GOTO, utilizatorul trebuie să se asigure că biții sunt programați astfel încât memoria de program dorită este adresată. Dacă o întoarcere din instrucțiunea CALL este executată, numărătorul este scos din stivă. De aceea, manipularea biților PCLATH<4:3> nu este necesară pentru instructțiunea RETURN.
2.2.2. STIVA
Microcontrolerul PIC16F877A are o stivă cu 8 nivele a câte 13 biți. Spațiul stivei nu este parte din niciun spațiu de date sau de program. Indicatorul de stiva nu poate fi citit sau scris. Numărătorul este împins în stivă când o instrucțiune CALL este executată sau când este provocată o întrerupere. PCLATH nu este afectat de operațiile PUSH și POP.
Stiva funcționează ca o buclă. Acest lucru înseamnă ca după ce operația PUSH este executată de 8 ori, a noua operație revine pe nivelul întâi în stivă.
2.2.3. EEPROM
Memoria EEPROM de date și memoria FLASH de program poate fi scrisă și citită în timpul funcționării normale. Această memorie nu este mapată direct în spațiul registrelor. În schimb, este adresată indirect prin intermediul registrelor speciale de funcții. Sunt 6 astfel de registre folosite pentru a scrie și a citi memoria. Aceștia sunt EECON1, EECON2, EEDATA, EEDATH, EEADR, EEADRH.
EEDATA păstrează datele de 8 biți pentru citire sau scriere și EEADR păstrează adresa locației EEPROM care este accesată. Registrele EEDATA și EEDATH formează un cuvânt de doi octeți ce păstrează datele de 14 biți pentru scriere și citire, iar registrele EEADR și EEADRH formează un cuvânt de doi octeți ce păstrează adresa de 13 biți a locației memoriei de program care este accesată. Aceste dispozitive au 4 sau 8K de cuvinte, cu o gamă de adrese de la 0000H până la 1FFFH. Adresele care depășesc acest interval vor reveni la începutul memoriei de program.
Memoria EEPROM permite citirea și scrierea unui singur octet. Memoria Flash permite citirea unui singur cuvânt și scrierea unui bloc de patru cuvinte. Un octet scris în memoria de date EEPROM șterge automat locația și scrie noile date. Timpul de scriere este controlat de un timer.
Când dispozitivul este protejat de un cod, procesorul poate sa continue să citească și să scrie memoria de date EEPROM. În funcție de setări, dispozitivul poate fi, sau nu, capabil să scrie anumite blocuri de memorie de program. În orice caz, citirea memoriei de program este permisă. Când este protejat de cod, utilizatorul dispozitivului nu mai poate accesa nici memoria de program, nici memoria de date.
Perechea de registre EEADRH și EEADR poate adresa până la 256 octeți de date EEPROM sau până la 8k cuvinte de program EEPROM. Când se selectează valoarea unei adrese a unei date, doar bitul cel mai puțin semnificativ al adresei este scris in registrul EEADR. Când se selectează valoarea unei adrese de program, bitul cel mai semnificativ este scris în registrul EEADRH, iar bitul cel mai puțin semnificativ este scris în registrul EEADR. EECON1 este registrul de control pentru accesul în memorie.
Fig. 2.5 Registrul EECON1
Bitul de control EEPGD determină dacă accesul va fi pentru o memorie de date sau pentru o memorie de program. Când acesta are valoarea 1, va fi accesată memoria de program, iar când are valoarea 0 se va accesa memoria de date.
Biții de control RD și WR inițiază citirea și scrierea sau ștergerea. Acești biți nu pot fi ștersi, doar setați în software. Când bitul RD are valoarea 1, se începe citirea EEPROM , iar când are valoarea 0, citirea nu poate fi inițiată. Când bitul WR are valoarea 1 se începe scrierea. Un bit este șters de hardware atunci când scrierea este completă. Bitul WR are valoarea 0 atunci când scrierea este completă.
Atunci când bitul WREN este setat, va fi permisă scrierea sau ștergerea operațiilor. La aprindere, acest bit este 0.
Bitul WRERR are valoarea 1 atunci când o operație de ștergere sau de scriere a fost întreruptă în timpul funcționării normale. În astfel de situații, în urma reset-ului, utilizatorii pot verifica acest bit, și pot rescrie locația. Data și adresele vor fi neschimbate în registrele EEDATA și EEADR.
2.3. PORTURI DE INTRARE/IEȘIRE
Unii pini ai porturilor de intrare/ieșire sunt multiplexați cu diferite funcții pentru caracteristicile periferice ale dispozitivului. În general, când un periferic este pornit, acel pin poate să nu fie folosit ca un pin de intrare/ieșire.
Fig. 2.6 Diagrama pinilor microcontrolerului PIC16F877A
2.3.1. PORT A
Portul A este un port bidirecțional de 6 biți. TRISA este registrul corespondent portului A. Setând TRISA pe bitul 1, pinul de la portul A va fi de intrare. Atunci când TRISA are valoarea 0, pinul de la portul A va fi de ieșire.
Toate operațiile de scriere pot fi citite și modificate. Scrierea într-un port implică citirea pinilor portului, modificarea valorii și apoi scrierea datelor.
Pinul RA4 este multiplexat cu intrarea de ceas a timer-ului 0 și devine pinul RA4/T0CLK. Toți pinii portului A au nivele de intrare TTL și drivere de ieșire CMOS. Alți pini ai portului A sunt multiplexați cu intrări analogice. Operația pentru fiecare pin este selectată prin ștergerea sau setarea biților de control adecvați din registrele ADCON1 și/sau CMCON.
Registrul TRISA controlează direcția pinilor portului chiar și atunci când aceștia sunt folosiți ca intrări analogice. Utilizatorul trebuie să se asigure că biții registrului TRISA rămân setați atunci când sunt folosiți ca intrări analogice.
Fig. 2.7 Diagrama bloc a pinului RA4/T0CLK
2.3.2. PORT B
Portul B este un port bidirecțional pe 8 biți. Registrul de date corespondent este TRISTB. Setând bitul TRISTB la valoarea 1 , pinul de la portul B va fi pin de intrare, iar atunci când va avea valoarea 0, pinul va fi de ieșire. Trei pini de la portul B sunt multiplexați cu un debugger integrat și o funcție pentru programarea la tensiune joasă : RB3/PGM, RB6/PGC, RB7/PGD.
Fiecare dintre pinii portului B are o rezistență internă de tip pull-up. Un singur bit de control poate activa toate aceste rezistențe. Acest lucru se realizează setând bitul RBPU la valoarea 0. Rezistențele sunt închise automat când pinul portului este configurat ca ieșire. În plus, acestea sunt dezactivate în timpul reset-ului.
Patru dintre pinii portului B, RB7:RB4, au o caracteristică de schimbare la întrerupere. Doar pinii configurați ca intrare pot provoca această întrerupere. Pinii de intrare sunt comparați cu vechea valoare de la ultima citire de pe portul B.
Întreruperea poate trezi dispozitivul din modul SLEEP. Utilizatorul, poate opri o întrerupere astfel : orice citire sau scriere în portul B va pune capăt condiției de nepotrivire, iar apoi utilizatorul trebuie să șteargă bitul RBIF.
Fig. 2.8 Diagrama bloc a pinilor RB7:RB4
2.3.3. PORT C
Portul C este un port bidirecțional pe 8 biți. Registrul de date corespondent este TRISTC. Setând bitul TRISTC la valoarea 1 , pinul de la portul C va fi pin de intrare, iar atunci când va avea valoarea 0, pinul va fi de ieșire.
Portul C este multiplexat cu diferite funcții periferice. Când magistrala I2C este activată, pinii PORTC<4:3> pot fi configurați cu nivele normale ale magistralei I2C.
Când se activează funcțiile periferice, trebuie definiți cu grijă biții TRIS pentru fiecare pin al portului C. Unele periferice nu țin cont de biții TRIS pentru a face un pin de ieșire sau de ieșire. Deoarece bitul TRIS nu este luat în seamă doar atunci când perifericul este activ, intrucțiunile de citire, modificare și scriere cu TRISC ca destinație ar trebui evitate.
Fig. 2.9 Diagrama bloc a portului C
2.3.4. PORT D
Portul D poate fi configurat ca un port microprocesor pe 8 biți, setând bitul de control PSPMODE. În acest mod buffer-ele de intrare sunt TTL.
Fig. 2.10 Diagrama bloc a portului D
2.3.5. PORT E
Portul E are trei pini : RE0/RD/AN5, RE1/WR/AN6 și RE2/CS/AN7. Aceștia se pot configura individual ca intrare sau ieșire. Pinii portului E devin intrările de control pentru portul microprocesor când bitul PSPMODE (TRISE<4>) este setat. În acest mod, utilizatorul trebuie să se asigure că biții TRISE<2:0> sunt setați și ca pinii sunt configurați ca intrări digitale. De asemenea, trebuie să se asigure că ADCON1 este configurat pentru intrări și ieșiri digitale. În acest mod, buffer-ele de intrare sunt TTL.
Pinii portului E sunt multiplexați cu intrări analogice. Când sunt selectați ca intrări analogice, acești pini vor deveni 0.
Fig. 2.11 Diagrama bloc a portului E
2.4. TIMERE
2.4.1. TIMER0
Modulul timer0 are un numărător pe 8 biți. Poate fi scris și citit ușor. Există posibilitatea de a selecta ceasul intern sau extern. Generează întreruperi când se trece peste FFh, și se sare la 00h.
Modul timer este selectat setând bitul T0CS la valoarea 0. În modul timer, Timerul0 va incrementa fiecare ciclu de instrucțiune. Dacă registrul TMR0 este scris, incrementarea se oprește pentru următoarele două cicluri de instrucțiune.
Modul de numărare este selectat setând bitul T0CS la valoarea 1. În modul de numărare, Timer0 se va incrementa, fie pe fronturile crescătoare, fie pe cele descrescătoare ale pinului RA4/T0CKL. Frontul pe care se incrementează este determinat de bitul T0SE al Timerului0.
Întreruperea TMR0 este generată atunci când registrul TMR0 trece de valoarea FFh și sare la 00h. Această depășire setează bitul TMR0IF. Întreruperea poate fi ascunsă modificând valoarea bitului TMR0IE la 0. Întreruperea TMR0 nu poate scoate procesorul din modul Sleep deoarece timer-ul este stins.
Fig. 2.12 Diagrama bloc a timerului 0
2.4.2. TIMER 1
Modulul Timer1este un numărător/temporizator pe 16 biți ce conține două registre de 8 biți : TMR1H și TMR1L, care pot fi scrise și citite. Perechea de registre TMR1H și TMR1L se incrementează de la 0000h până la FFFFh, iar apoi se intoarce la 0000h. Întreruperea TMR1, dacă este activă, va genera o depășire care este memorată în fanionul TMR1F. Această întrerupere poate fi activată sau dezactivată setând valoarea bitului TMR1IE la 1, respectiv 0.
Timer-ul 1 poate opera ca temporizator, sau ca numărător. Modul în care operează este determinat de bitul de selecție TMR1CS.
În modul temporizator, Timer-ul 1 se incrementează la fiecare ciclu de instrcuțiune. În modul numărător, el se incrementează pe fiecare front crescător al intrării de ceas extern. Timer-ul 1 poate fi activat sau dezactivat, setând valoarea bitului de control TMR1ON la 1, respectiv 0.
Timer 1 are de asemenea și o intrare de Reset internă.
Fig. 2.13 Registru de control al timer-ului
Modul temporizator este selectat setând bitul TMR1CS la valoarea 0. În acest mod, intrarea de ceas este FOSC/4. Bitul de control sincronizat, T1SYNC nu are niciun efect deoarece ceasul intern este întotdeauna sincronizat.
Timerul 1 poate opera atât în modul sincron, cât și în modul asincron, în funcție de valoarea bitului TMR1CS. Când Timer 1 este incrementat printr-o sursa externă, incrementarea va avea loc pe frontul crescător. După ce Timer-ul este activat în modul numărător, modulul trebuie să aibă prima data un front descrescător, iar apoi va începe să incrementeze.
Fig. 2.14 Diagrama bloc timer 1
2.4.3. TIMER 2
Timer-ul 2 este timer pe 8 biți care are un prescalar și un postscalar. Poate fi folosit ca bază de timp PWM pentru modul PWM. Registrul TMR2 poate fi citit și scris și este eliminat de pe orice dispozitiv Reset.
Intrarea de ceas are mai multe opțiuni de prescalare: 1:1 , 1:4 sau 1:16. Opțiunile se selectează cu ajutorul biților de control T2CKPS1 : T2CKPS0. Ieșirea registrului TMR2 trece printr-un postscalar de 4 biți, pentru a genera o întrerupere, memorată în fanionul TMR2IF.
Timer2 poate fi oprit dacă bitul de control TMR2ON are valoarea 0, pentru a minimiza consumul de energie.
Prescalarul și postscalarul sunt șterse când se scrie în registrul TMR2, sau în registrul T2CON, sau în caz de resetare.
Fig. 2.15 Diagrama bloc timer2
2.5. MODULELE DE CAPTURĂ, DE COMPARARE ȘI MODULUL PWM (CCP)
Fiecare modul CCP conține un registru de 16 biți care poate opera ca un registru de captură, un registru de comparare sau ca un registru PWM.
Modulele CCP1 și CCP2 sunt identice din punct de vedere al operațiilor, cu excepția operațiilor de declanșare a evenimentelor speciale.
Registrele CCPR1, respectiv CCPR2 sunt formate fiecare din două registre de 8 biți : CCPR1L și CCPR1H, respectiv CCPR2L și CCPR2H. Operațiile din cele două module sunt controlate de registrul CCP1CON, respectiv CCP2CON. Declanșarea evenimentelor speciale este generată printr-o comparare și va reseta Timerul1. În cazul modulului CCP2, dupa resetare, va începe o conversie analog-digitală, dacă modulul analog-digital este activat.
2.5.1. MODUL DE CAPTURĂ
În modul de captură, CCPR1H:CCPR1L captează valoarea pe 16 biți a registrului TMR1 atunci când are loc un eveniment la pinul RC2/CCP1. Aceste evenimente sunt : fiecare front crescător, fiecare front descrescător, multiplii de patru ai fronturilor crescătoare și multiplii de 16 ai acelorași fronturi. Tipul evenimentului este ales prin biții de control CCP1M3:CCP1M0. Când are loc o captare, fanionul de întrerupere CCP1F va avea valoarea 1. Fanionul de întrerupere trebuie sa fie șters din software. Dacă se înregistrează altă valoare înainte ca registrul CCP1 să fie citit, vechea valoare va fi înlocuită cu cea nouă.
În acest mod, RC2/CCP1 va fi configurat ca intrare prin setarea bitului TRISC<2>.
Timerul1 trebuie să se afle în modul temporizator sau în modul numărare sincronă, pentru ca modul CCP sa folosească captura. În modul de numărare asincronă este posibil ca această operație sa nu funcționeze.
Fig. 2.16 Diagrama bloc a operațíilor din modul de captură
Când modul captură este schimbat, poate fi generată o întrerupere de captură falsă.
Există patru setări de prescalar, specificate de biții CCP1M3:CCP1M0. De fiecare dată când modulul CCP nu se află în modul captură, numărătorul prescalarului este șters. În plus, orice resetare va șterge acest numărător. Trecând de la un prescalar de captare la altul se poate genera o întrerupere.
2.5.2. MODUL DE COMPARARE
În modul de comparare, valoarea registrului pe 16 biți CCPR1 este în permanență comparată cu valoarea registrului TMR1.
Ca și în cazul modului de captură, și în modul de comparare Timerul1 trebuie să se afle în modul de temporizare sau în modul de numărare sincronă. În modul de numărare asincronă este posibil ca operația de comparare să nu funcționeze.
Fig. 2.17 Diagrama bloc a operațíilor din modul de memorare
2.5.3. MODUL PWM
În acest mod, pinul CCPx produce o rezoluție de maxim 10 biți la ieșirea PWM. Deoarece pinul CCP1 este multiplexat, bitul TRISC<2> trebuie sa aibă valoarea 0 pentru ca CCP1 să fie pin de ieșire.
Fig. 2.18 Diagrama bloc simplificată PWM
O ieșire PWM are o perioadă, și o durată în care ieșirea va avea valoarea 1 logic ( un ciclu ). Frecvența reprezintă inversul perioadei.
Perioada PWM este specificată în registrul PR2. Aceasta poate fi folosită folosind formula :
Când TMR2 este egal cu PR2, în următorul ciclu de incrementare vor avea loc 3 evenimente: TMR2 este șters, pinul CCP1 va avea valoarea 1 cu excepția cazului în care ciclul PWM este de 0%, iar ciclul este fixat din CCPR1L în CCPR1H.
Ciclul PWM este specificat prin scrierea în registrul CCPR1L și în biții CCP1CON<5:4>. CCPR1L conține cei mai semnificativi 8 biți, iar CCP1CON<5:4> conține cei mai putin semnificativi 2 biți. Ciclul PWM se calculează cu următoarea formulă :
CCPR1L și CCP1CON<5:4> pot fi scriși în orice moment, dar valoarea ciclului nu este fixată în CCPR1H decât după ce are loc o potrivire între PR2 și TMR2. În modul PWM, CCPR1H este un registru care poate fi doar citit.
Rezoluția maximă pentru o frecvență PWM dată se poate calcula cu următoarea formulă :
Dacă valoarea ciclului PWM este mai mare decât perioada PWM, atunci pinul CCP1 nu va fi șters.
Fig. 2.19 Ieșiri PWM
Atunci când se configurează modulul CCP pentru operațiile PWM trebuie setată întâi perioada PWM, scriind valoarea sa în registrul PR2. Apoi trebuie scrisă valoarea ciclului PWM în registrul CCPR1L și în biții CCP1CON<5:4>. Pinul CCP1 trebuie făcut pin de ieșire prin setarea bitului TRISC<2> la valoarea 0. Se setează valoarea prescalată TMR2 și se activează Timerul 2 prin scrierea în T2CON, și apoi se poate configura modulul CCP1 pentru operația PWM.
2.6. PORTUL SERIAL SINCRON DE TIP MASTER – MSSP
Modulul MSSP este o interfață serială folosită pentru comunicarea cu alte periferice sau microcontrolere. Perifericele acestea pot fi registre de deplasare, EEPROM-uri seriale, convertoare analog-digitale. Modulul MSSP poate opera în două moduri : SPI sau I2C. Interfața I2C suportă trei moduri în hardware : modul de tip Master, modul de tip Multi-Master sau modul Slave.
Modulul MSSP are trei registre asociate. Acestea includ un registru de stare – SSPSTAT și două registre de control – SSPCON și SSPCON2. Utilizarea acestor registre și biții lor de configurație individuali diferă semnificativ, în funcție de modul în care operează modulul MSSP.
2.6.1. MODUL SPI
Modul SPI permite transmiterea sincronă și recepția simultană a datelor de 8 biți. Pentru a realiza comunicarea, sunt folosiți trei pini : ieșirea de date serială (SDO) – RC5/SDO , intrarea de date serială (SDI) – RC4/SDI/SDA , ceasul serial (SCK ) – RC3/SCK/SCL. Uneori este folosit și un al patrulea pin în modul de operare de tip Slave – selecția de tip Slave (SS) – RA5/AN4/SS/C2OUT.
Fig. 2.20 Diagrama bloc MSSP pentru modul SPI
Modulul MSSP are patru registre pentru modul SPI. Acestea sunt Registrul de Control MSSP (SSPCON), Registrul de Stare MSSP (SSPSTAT), Registrul Buffer serial de primire sau transmitere (SSPBUF) și registrul de deplasare MSSP (SSPSR), care nu poate fi accesat direct. Registrul SSPCON poate fi și scris și citit. În cazul registrului SSPSTAT, cei mai semnificativi doi biți pot fi și scriși și citiți, în timp ce restul de 6 biți pot fi doar citiți. Registrul SSPSR este folosit pentru deplasarea datelor de intrare sau de ieșire, începând cu biții cei mai semnificativi. În operațiile în care se primesc date, SSPSR și SSPBUF formează împreună un buffer dublu de primire. Când SSPSR primește un octet complet, acesta este tansferat către SSPBUF. Bitul de detecție BF (SSPSTAT<0>) și fanionul de întrerupere SSPIF vor avea valoarea 1. Acest buffer dublu de primire permite ca următorul bit să fie recepționat înaintea ca datele care tocmai au fost primite să fie citite. Orice scriere în registul SSPBUF în timpul transmisiei sau recepției datelor va fi ignorată, și bitul de detecție WCOL (SSPCON<7>) va avea valoarea 1.
Când se așteaptă primirea datelor, SSPBUF ar trebui să fie citit înainte ca următorul octet de date transferat să fie scris în SSPBUF. Bitul BF indică momentul în care se încarcă date noi și se termină transmisia. Când SSPBUF este citit, bitul BF va avea valoarea 0.
SSPSR nu poate fi citit sau scris în mod direct. El poate fi accesat doar prin adresarea registrului SSPBUF.
Pentru a inițializa modul SPI, trebuie specificate mai multe opțiuni. Acestea se realizează prin intermediul biților de control SSPCON<5:0> și SSPSTAT<7:6>.
Pentru a activa portul serial, bitul SSPEN ( SSPCON<5>) va trebui să aibă valoarea 1, iar pentru a reseta modul SPI va trebui ca acesta să aibă valoarea 0, apoi să se reinițializeze registrele SSPCON, iar apoi sa i se modifice valoarea înapoi la 1. Acest lucru setează pinii SDI, SDO, SCK și SS ca pini ai portului serial.
Atunci când se realizează o conexiune între două microcontrolere, cel de tip Master inițiază transferul de date trimițând semnalul SCK. Datele sunt mutate din ambele registre de deplasare pe frontul de ceas programat, și fixate pe celălalt front. Ambele procesoare ar trebui să fie programate la același CKP, astfel încât microcontrolerele vor trimite și vor primi date în același timp.
Fig. 2.21 Conexiune SPI de tip Master/Slave
Microcontrolerul de tip Master poate porni transferul de date oricând, deoarece el controlează SCK.
În modul Master, datele sunt transmise sau primite imediat ce registrul SSPBUF este scris. Dacă SPI doar va primi date, ieșirea SDO poate fi dezactivată. Registrul SSPSR va continua sa deplaseze semnalul de pe pinul SDI. Pe măsură ce fiecare octet este primit, el va fi încărcat în registrul SSPBUF.
Polaritatea semnalului de ceas este selectată prin setarea bitului CKP(SSPCON<4>). În modul Master, frecvența semnalului de ceas poate avea una din valorile : FOSC/4, FOSC/16 sau FOSC/64. Acest lucru permite o viteza a datelor de maxim 10.00 Mbps.
În modul Slave, datele sunt transmise și primite atunci când impulsurile ceasului extern apar la SCK. După ce ultimul bit este fixat, fanionul SSPIF devine 1.
Pinul SS permite un mod sincron de tip Slave. SPI trebuie să fie în modul Slave cu pinul SS activat. Pinul nu trebuie sa aiba valoarea 0 logic pentru ca pinul SS să funcționeze ca intrare. Când pinul SS este 0, transmisia și recepția sunt activate.
Când se resetează modulul SPI, bitul de numărare este forțat sa devină 0. Acest lucru poate fi făcut fie forțând pinul SS să aibă valoarea 1 logic, fie setând bitul SSPEN la 0.
2.6.2. MODUL I2C
Modulul MSSP în modul I2C implementează toate funcțiile de tip Master și Slave, și generează întreruperi la biții de Start și Stop pentru a determina o magistrala liberă. Sunt folosiți doi pini pentru transferul datelor : semnalul de ceas serial (SCL) – RC3/SCK/SCL și date de tip serial (SDA) – RC4/SDI/SDA.
Fig. 2.22 Diagrama bloc MSSP pentru modul I2C
Modulul MSSP are șase registre pentru I2C. SSPCON, SSPCON2 și SSPSTAT sunt registre de control și de stare ai acestui mod. Registrele SSPCON și SSPCON2 pot fi citite și scrise. La fel și cei mai semnificativi doi biți din SSPSTAT. Ceilalți șase biți pot fi doar citiți. Registrul de deplasare SSPSR este utilizat pentru deplasarea datelor de intrare sau de ieșire. SSPBUF este registrul de tip buffer în care are loc scrierea și citirea octeților. Registrul SSPADD deține adresa dispozitivului de tip Slave atunci când SSP este configurat în modul I2C de tip Slave.
La primirea datelor, registrele SSPSR și SSPBUF se comportă ca la modul SPI.
2.7. CONVERTOARE ANALOG-DIGITALE
Un semnal de intrare analogic va fi transformat într-un număr digital pe 10 biți. Modulul A/D are tensiuni de referință de intrare joase și înalte, și pot fi selectate prin software cu unele combinații ale VDD, VSS, RA2 sauu RA3. Convertorul A/D are caracteristica unică de a fi capabil să funcționeze în timp ce dispozitivul se află în modul Sleep. Pentru acest lucru, semnalul de ceas A/D trebuie sa provină din oscilatorul RC intern al A/D.
Convertorul A/D are patru registre : ADRESH, ADRESL, ADCON0 și ADCON1. Registrul ADCON0 controlează operațiile, iar ADCON1 configurează pinii porturilor, ce pot fi intrări analogice sau intrări/ieșiri digitale. Registrele ADRESH:ADRESL conțin rezultatul pe 10 biți al conversiei. Când conversia este completă, rezultatul este încărcat în această pereche de registre, bitul GO/DONE are valoarea 0 și fanionul ADIF devine 1. După ce convertorul a fost configurat, trebuie să se selecteze canalul dorit înainte sa înceapă conversia.
Fig. 2.23 Diagrama bloc a convertorului analog-digital
Timpul de conversie A/D pentru fiecare bit este definit ca TAD. Conversia necesită minim 12 TAD pentru 10 biți. Pentru o conversie corectă, ceasul de conversie trebuie să fie ales astfel încât să asigure o valoare minimă pentru TAD de 1.6 µs.
O resetare a dispozitivului forțează toate registrele să intre în starea de Reset. Acest lucru forțează convertorul A/D să se stingă și orice conversie este abandonată. Toți pinii de intrare A/D sunt configurați ca intrări analogice. Valoarea care se află în registrele ADRESH:ADRESL nu se modifică pentru resetare. După resetare aceste registre vor conține date necunoscute.
2.8. MODULUL COMPARATOR
Modulul comparator conține 2 comparatoare analogice. Intrările comparatorului sunt multiplexate cu pinii porturilor I/O RA0 – RA3, în timp ce ieșirile sunt multiplexate cu pinii RA4-RA5. Tensiunea de referință poate fi de asemenea intrare în comparatoare.
Există 8 moduri de operare. Registrul CMCON este folosit pentru a selecta aceste moduri. Registrul TRISA controlează direcția datelor a pinilor comparatorului pentru fiecare mod.
Ieșirile comparatorului sunt citite prin intermediul registrului CMCON. Acesști biți pot fi doar citiți. Ieșirile comparatorului pot fi de asemenea direct ieșirile pinilor I/O RA4 și RA5. Biții TRISA vor funcționa ca activare/dezactivare a ieșirilor pentru pinii RA4 și RA5. Polaritatea ieșirilor comparatorului poate fi schimbată folosind biții C2INV și C1INV.
Fig. 2.24 Diagrama bloc a ieșirii comparatorului
2.9. CARACTERISTICI SPECIALE ALE CPU
2.9.1. ÎNTRERUPERILE
Familia PIC16F877A are până la 15 surse de întrerupere. Registrul de control al Întreruperilor (INTCON) înregistrează individual cererile de întrerupere în fanioane. Are de asemenea biți de activare individuală și globală a întreruperii.
Un bit de activare globală a întreruperii, GIE ( INTCON<7>), activează toate întreruperile nemascate sau dezactivează toate întreruperile. Întreruperile individuale pot fi dezactivate prin biții de activare corespondenți din diferite registre. Biții de întrerupere sunt setați în funcție de valoarea bitului GIE. Bitul GIE devine 0 la resetare.
Instrucțiunea de reîntoarcere din întrerupere, RETFIE, iese din rutina de întrerupere și seteaza bitul GIE la valoarea 1, ceea ce reactivează întreruperile.
Fanioanele întreruperii periferice se află în Registrele Speciale de Funcții, PIR1 și PIR2. Biții de activare a întreruperii corespondenți se găsesc în Registrele Speciale de Funcții PIE1 și PIE2, iar bitul de activare a întreruperii periferice se află în registrul INTCON.
2.9.2. WDT
Modulul WDT este independent, fiind folosit atunci când este necesară revenirea din situații dificile. Nu necesită nicio componentă externă.
WDT va funcționa chiar dacă semnalul de ceas de la pinii OSC1/CLKI și OSC2/CLKO a fost oprit, de exemplu, prin executarea instrucțiunii SLEEP. În timpul operării normale, o pauză a WDT-ului generează o resetare a dispozitivului. Dacă dispozitivul este în modul SLEEP, o pauză a WDT-ului va face dispozitivul să pornească și să continue cu funcționarea normală. Bitul TO din registrul de stare va avea valoarea 0 când are loc o pauză.
WDT poate fi dezactivat permanent setând bitul de configurație WDTE la valoarea 0.
Fig. 2.25 Diagrama bloc a modulului WDT
SENZORI
FOTODIODA
Fotodioda este un dispozitiv semiconductor care transformă lumina în curent. Curentul este generat atunci când fotonii sunt absorbiți în fotodiodă. Este totuși produs un curent mic chiar și atunci când nu există lumină.
Cel mai importantă element al unei fotodiode este placuța de germaniu de tip n. În interiorul acesteia se realizează joncțiunea p-n. Se realizează prin așezarea unei bobițe de indiu pe o placuță de germaniu. Această bobiță de topește prin încălzire, deoarece temperatura de topire a indiului este mai mică decât cea a germaniului. Prin topire, atomii de indiu difuzează în plăcuța de germaniu, rezultând o regiune cu conducție prin goluri. [2]
Fotodiodele pot conține filtre optice, și pot avea suprafețe mai mari sau mai mici. De obicei, timpul lor de răspuns scade odată cu creșterea suprafeței. Multe dintre diodele care sunt folosite ca fotodiode folosesc joncțiune PIN în locul joncțiunii p-n, pentru a mării micșora timpul de răspuns.
În această lucrare am folosit o fotodiodă de siliciu PIN, cu timp foarte mic de răspuns.
Fotodioda PIN este cel mai răspândit fotodetector. Aceasta are trei straturi semiconductoare, spre deosebire de o fotodiodă cu joncțiune p-n. Straturile p și n sunt foarte puternic dopate, în timp ce stratul i este foarte puțin dopat, și are o concentrație foarte redusă de concentrăți donoare.
Fig. 3.1 Fotodioda PIN
Când un foton cu energie suficientă lovește dioda, se creează o pereche electron-gol. Acest mecanism este cunoscut ca efectul fotoelectric intern. Dacă absorbția are loc în zona de golire acești purtători sunt mutați de la joncțiune de câmpul electric al regiunei de golire. Golurile se mută înspre anod, electronii se duc înspre catod, și se produce astfel un fotocurent. Curentul total prin fotodiodă este suma dintre fotocurent și curentul de întuneric, curent care este generat în absența luminii. Acest curent trebuie sa fie cât mai mic, pentru a mări senzitivitatea dispozitivului. Curentul de întuneric include fotocurentul generat de radiația de fond și curentul de saturație al joncțiunii semiconductoare. [3]
Curentul de întuneric trebuie sa fie reprezentat pentru calibrare, dacă fotodioda este folosită pentru măsurători exacte de putere optică. Acesta este de asemenea o sursă de zgomot atunci când fotodioda este folosită într-un sistem optic de comunicații. Variația lui în funcție de tensiune este reprezentată în graficul următor :
Fig. 3.2 Variația curentului de întuneric
O mărime importantă care caracterizează fotodiodele este responzivitatea. Aceasta reprezintă o măsura a sensibilității fotodiodei. Se calculează ca fiind raportul dintre fotocurentul de la ieșire și puterea luminoasă incidentă la fotodiodă.
Fig. 3.3 Răspunsul fotodiodei în funcție de lungimea de undă
Caracteristica de sensibilitate spectrală a fotodiodei prezintă un maxim în jurul lungimii de unde de 800 nm.
Fig. 3.4 Caracteristica de sensibilitate spectrală
Fotodioda folosită, din seria SFH, este potrivită pentru aplicații cu o lungime de undă în intervalul 400 nm și 1100 nm. Are un timp de răspuns foarte mic, de 5 ns. Intervalul de temperatură în care funcționează este de la -40șC la 100șC. Tensiunea inversă are o valoare de 50V, iar puterea totală disipată este de 150 mW. În cazul acestei fotofiode, maximul caracteristicii de sensibilitate spectrală este la 850 nm. La temperatura ambiantă de 25ș, dispozitivul va avea următorii parametri : valoarea fotocurentul este de 135 µA, curentul de scurtcircuit este de 125 µA, în timp ce curentul de întuneric este de 1 nA. Răspunsul fotodiodei SFH la o lungime de undă de 870 nm va avea valoarea de 0.62 A/W.
Fotodiodele sunt folosite în aplicații precum sisteme de transmisie din fibră optică, electronice industriale și în circuite de control.
SENZOR DE TEMPERATURĂ
Senzorii de temperatură reprezintă un element vital în multe produse folosite în viața de zi cu zi. Temperatura se schimbă în funcție de energia medie a mișcării moleculare. Atunci când aceasta crește, în mediu se percepe ca o creștere a temperaturii. Este dificil, totuși să se măsoare direct energia mișcării moleculare, de aceea senzorii sunt făcuți pentru a măsura o anumită proprietate care se schimbă odată cu schimbarea temperaturii.
Sunt două tipuri de senzori de temperatură : senzori cu contact, și senzori fără contact.
Senzorii de contact măsoară temperatura unui obiect cu care senzorul este în contact. Această măsurare se bazează pe faptul că obiectul și senzorul sunt în echilibru termic. Din această categorie fac parte termocuplul, termorezistorul și termometrul
Cel mai comun senzor de contact este termometrul. [4]
În cadrul acestei lucrări am folosit un termometru digital, din seria DS1820. Acesta citește valori pe 9 biți care indică temperatura dispozitivului. Informația este trimisă la/de la DS1820 printr-o interfață cu un singur fir. Acel fir trebuie să fie conectat de la un microprocesor central la DS1820. Puterea pentru citire, scriere și pentru conversia temperaturilor poate fi luată din linia de date, nefiind necesară o sursa de putere externă.
Deoarece fiecare DS1820 are o identitate unică, pot exista mai multe dispozitive pe același fir. Acest lucru permite plasarea senzorilor de temperatură în diferite locuri.
Fig. 3.5 Senzori de temperatură
Aplicațiile în care este folositoare această caracteristică includ controale de mediu HVAC, detectări de temperatură în interiorul clădirilor, echipamente sau mașini.
Unul din avantajele sale este fapul că nu necesită nicio componentă externă. Măsoară temperaturi de la -55șC la 125șC, cu pas de 0.5șC. Echivalentul în grade Fahrenheit este intervalul de temperatură -67șF la 257șF, cu pas de 0.9șF. Temperatura este citită ca o valoare digitală pe 9 biți. Convertește temperatura în 200ms.
Diagrama bloc arată componentele importante ale termometrului digital DS1820. Acesta are trei componente principale : ROM de 64 biți, senzor de temperatură și declanșatoare de alarmă la temperaturi care nu fac parte din intervalul de măsurare.
O funcție de control va comanda dispozitivului să măsoare temperatura. Rezultatul acestei măsurători va fi pus în memoria scratchpad, și poate fi citit printr-o comandă specifică. Declanșatoarele de alarma pentru temperaturi înalte sau joase constau într-un bit EEPROM fiecare. Accesul la registrele TH și TL se face prin memoria scratchpad. Toate datele sunt citite și scrise pornind de la bitul cel mai puțin semnificativ. În cazul în care declanșatoarele de alarmă nu sunt aplicate acestui dispozitiv, registrele TL și TH pot fi folosite ca registre de uz general.
Fig. 3.6 Diagrama bloc a termometrului digital
Această diagramă arată puterea parazită a circuitului. Circuitul fură putere de fiecare dată când pinii VDD sau I/O au valoarea 1 logic. Această putere are două avantaje. Unul din ele ar fi faptul că nu mai este necesară nicio sursă locală de putere, și al doilea este citirea memoriei ROM în absența puterii normale.
Pentru ca DS1820 să fie capabil să efectueze conversii de temperatură exacte, trebuie furnizată destulă putere la linia I/O, atunci când are loc o conversie. Deoarece curentul de operare este maxim 1 mA, linia I/O nu va avea destula energie din cauza rezistenței de tip pull-up de 5K. Această problemă este și mai mare dacă mai multe dispozitive se află pe aceeași linie I/O și convertesc simultan.
Folosirea puterii parazite nu este recomandată la temperaturi mai mari de 100șC, din moment ce nu poate susține comunicații din cauza scurgerilor mari de curent.
În graficul următor se pot observa performanțele termometrului digital, pe tot domeniul lui de temperatură, între -55șC și 125șC.
Fig. 3.7 Curba de performanță
DS1820 măsoară temperatura numărând ciclurile de ceas prin care trece un oscilator cu un coeficient mic de temperatură, în timpul unei perioade a porții determinată de un oscilator cu un coeficient mare de temperatură. Numărătorul este presetat cu un număr de bază care corespunde temperaturii de -55șC Dacă numărătorul ajunge la 0 înainte ca perioada porții să se termine, registrul de temperatură, care este de asemenea presetat la -55șC, este incrementat, arătând faptul că temperatura este mai mare de -55șC.
Temperatura poate fi calculată folosind formula :
TEMPCITITĂ reprezintă valoarea temperaturii, în care se trunchiază bitul cel mai puțin semnificativ.
Valoarea rămasă în numărător după ce perioada porții a încetat reprezinta NR RĂMAS.
NR GRAD reprezintă numărul pe un grad Celsius.
Fiecare DS1820 conține un cod ROM unic de 64 biți. Primii 8 biți reprezintă codul specific dispozitivelor cu un singur fir ( în acest caz este 10h). Următorii 48 de biți sunt o serie unică. Ultimii biți reprezintă CRC-ul primilor 56 de biți.
SENZOR DE UMIDITATE – HCZ-D5
Acest senzor este folosit în măsurarea relativă a umidității, control și afișaj. Sunt foarte multe produse finale care pot fi folosite. De exemplu : aer condiționat, umidificator, dezumidificator, transmițător.
Fig. 3.8 Configurația senzorului de umiditate
Acest senzor este rezistent la șocuri, la vibrații și la caldură. Poate rezista 1000 de ore la 70șC sau la -30șC.
Părțile principale ale senzorului sunt : carcasa senzorului, substratul din alumină, materialul de detecție din polimer, electrodul din argint/carbon și cadrul.
Senzorul de umiditate HCZ-D5 este format din electrozi conductori de argint-carbon, plasați pe un strat foarte subțire de material sensibil la umezeala – polimer.
O mărime importantă este umiditatea relativă a aerului, RH. Aceasta reprezintă raportul dintre umiditatea la un moment de timp, la o anumită temperatură, și umiditatea maximă care poate exista la aceeași temperatură.
La un RH de 50%, aerul conține jumătate din umiditatea posibilă la o anumită temperatură, în timp ce pentru un RH de 100%, aerul va fi saturat complet cu aburi de apă.
Senzorul HCZ-D5 este un senzor rezistiv. Acesta masoară impedanța electrică a polimerului. Valoarea acestei rezistențe se modifică odată cu umiditatea. Rezistența polimerului este aproape infinită în condiții complet uscate. Umezeala de pe suprafața senzorului scade rezistența polimerului care leagă cei doi electrozi.
Senzorul are rezistență într-un domeniu de temperatură cuprins între 5 și 60 șC, dar domeniul de interes principal este intervalul de temperatura cuprins între 30 și 40 șC. Acest interval este prezentat în graficele de mai jos :
Fig. 3.9 Variația rezistenței în funcție de umiditate
Graficul arată o variație neliniară a impedanței senzorului cu nivelul de umiditate. Este de asemenea evident din grafic că variația temperaturii are un efect semnificativ asupra impedanței senzorului pentru un nivel de umiditate cuprins între 20% – 45% RH. După acesta, efectul este minim. Deoarece temperatura pielii este între 32 și 37 șC, graficul pentru 35 șC s-a considerat ca fiind cel mai potrivit pentru etalonarea senzorului de umiditate.
ALTE COMPONENTE UTILIZATE
DISPLAY
Display-ul LCD este construit ca un controler LSI, controler care are două registre de 8 biți, un registru de instrucțiuni (IR) și un registru de date (DR).
Registrul IR păstrează coduri de instrucțiuni, informații ale adreselor pentru DDRAM și generator de caractere (CGRAM). Acesta poate fi scris doar din MPU. Registrul DR stochează date temporar, care sunt citite și scrie de DDRAM și CGRAM. Selecția acestor registre se face cu un registru de selecție (RS).
Display-ul are 32 de caractere, 2 linii cu câte 16 caractere fiecare. Tensiunea VDD are valoarea de 5V, VOP este de 6.5V. Dimensiunile sale sunt de 80.00 mm lungime și 36.00 mm lățime. Mărimea caracterelor este de 2.95 mm x 5.55 mm.
Alinierea pe verticală este o formă de LCD-uri în care cristalele lichide se aliniază vertical pe substratul de sticlă. Când nu este aplicată nicio tensiune, aceste cristale rămân perpendiculare pe acel substrat, creându-se astfel un ecran negru. Atunci când se aplică tensiune, cristalele iși schimbă poziția, permițând luminii să treacă și să creeze un ecran în diverse nunațe de gri, în funcție de înclinarea generată de câmpul electric.
Fig. 4.1 Display
TRANSFORMATORUL ELECTRIC
Transformatorul electric este o mașină electrică ce funcționează pe baza legii inducției electromagnetice. Acesta transferă energia electrică dintr-un circuit, denumit primarul transformatorului, în alt circuit, denumit secundarul transformatorului.
Fig. 4.2 Transformator
El primește puterea electrică aplicată circuitului primar, în curent alternativ, și o reda cu aceeași frecvență la bornele circuitului secundar. La ieșire, energia ar trebui sa fie practic egală cu cea de intrare, dar în calculele de proiectare se iau în considerare și pierderile de energie din transformator.
Transformatorul este alcătuit dintr-un miez feromagnetic, ce realizează un circuit format din tole izolate între ele. Acest lucru duce la micșorarea pierderilor prin curenți turbionari. Tolele sunt realizate din ferosiliciu. Pe acest miez sunt dispuse două înfășurări din sârmă de cupru. La frecvențe mai mari de 10 Khz, transformatorul se realizează fara miez magnetic. Înfășurările constituie una din cele mai importante părți ale transformatorului. Ele asigură o rigiditate dielectrică și o stabilitate dinamică și termică mare. Se garantează astfel o funcționare bună a transformatorului și atunci când apar supratensiuni.
Fig. 4.3 Principiu de funcționare a transformatorului
Transferul de energie electrice se face cu ajutorul energiei magnetice. Deci pentru transformarea unei cantități de energie cat mai mare, este necesar un flux cât mai mare. Fluxul magnetic alternativ apare atunci când se aplică o tensiune alternativă U1 transformatorului în primar. Valoarea instantanee a acestui se calculează cu formula :
Fluxul străbate spirele înfășurătorilor, făcând să apară câte o tensiune electromotoare în cele două circuite.
În primar, această tensiune se va calcula conform formulei :
iar în secundar : .
Tensiunile electromotoare e1 și e2 sunt în fază.
Raportul tensiunilor la bornele înfășurărilor, la mersul în gol, se notează cu k și reprezintă raportul de transformare al transformatorului.
Daca k < 1, transformatorul se numește ridicător de tensiune, iar dacă k > 1, transformatorul se numește coborâtor de tensiune. În cazul în care k=1, transformatorul separă electric circuitele, ele rămânând cuplate inductiv. [6]
CABLAJUL IMPRIMAT
Utilizarea cablajelor imprimate reprezintă cea mai performantă și răspândită soluție constructivă de interconectare a componentelor.
Cablajul imprimat are două roluri importante. Unul din ele este susținerea mecanică a componentelor electrice, iar cel de-al doilea este realizarea celor mai multe conexiuni dintre componente.
O placă de cablaj este realizată dintr-un strat izolator, cu diverse grosimi. Pe acest strat se află una sau două folii de cupru.
Acest cablaj are numeroase avantaje. Unul din ele îl reprezintă stabilitatea și uniformitatea parametrilor electrici și mecanici. Spre deosebire de circuitele cablate cu sârmă de conexiune, în cazul cablajului imprimat se reduce volumul și greutatea subasamblurilor funcționale.
Este asigurată poziționarea precisă și fixă a componentelor electronice. Pe lângă asta, se asigură și o rezistență superioară la solicitările mecanice și termice.
În plus, se reduce foarte mult cantitatea de lucru pentru asamblare, ceea ce conduce la o productivitate mai mare, creându-se astfel condiții pentru mecanizare și automatizare. Pe langă o execuție rapidă, și verificarea este la fel de rapidă, deoarece se reduc foarte mult punctele de control. Acest lucru reprezintă încă un avantaj important.
Fiind mai simplu de realizat, posibilitățile de montare sau de execuție greșite sunt destul de mici, ceea ce ii mărește fiabilitatea.
Cablajul imprimat prezintă totuși și unele dezavantaje. Unul din cele mai importante este faptul că modificările ulterioare sunt foarte greu de efectuat. În plus, sunt necesare anumite precauții la lipirea sau dezlipirea terminalelor componentelor, deoarece cablajele imprimate sunt sensibile la șoc termic.
Metoda cea mai bună de realizare a circuitului imprimat este metoda fotografică.
Procedeul fotografic constă în 5 etape.
Prima etapă este acoperirea întregii suprafețe de cupru cu o substanță fotosensibilă. Această substanță are o grosime între 4 și 12 µm. Următoarea etapă este expunerea la lumină a plăcii sensibilizate.
În continuare, substanța fotosensibilă trebuie developată, fixată și îndepărtată de pe placă. Ultimele două etape sunt spălarea și corodarea.
Această metodă are ca avantaje un utilaj redus, și trasee fine, cu o rezoluție bună. Ca dezavantaj, este costul destul de ridicat. [7][8]
Fig. 4.4 Vederea de sus a cablajului imprimat
Fig. 4.5 Vedere de jos a cablajului imprimat
4.4 TRANZISTORUL BIPOLAR
Denumirea de tranzistor bipolar provine de la curentul din dispozitiv, care este transportat de două tipuri de purtări : electroni și goluri. Tranzistorul este format din două joncțiuni pn : joncțiune baza-colector și joncțiunea bază emitor.
Tranzistorul bipolar este de fapt un amplificator de curent. Curentul de colector-emitor este controlat de curentul din bază, care este mult mai mic rapor,tul dintre cei doi curenți reprezentând factorul de amplificare în curent, β. Cu cât acest factor este mai mare, cu atât tranzistorul este mai bun. [9]
În proiectul meu am folosit un tranzistor bipolar din seria BC547, de tip npn. Structura unui tranzistor de tip npn este prezentată în figura de mai jos.
Fig. 4.6 Structura tranzistorului npn
Tranzistorul BC547 este folosit în principal cu rolul de a amplifica sau de a comuta. El poate fi depozitat la temperaturi ce aparțin intervalului -65șC și 150șC. La temperatura ambiantă, de 25șC, acest tranzistor are următorii parametrii : tensiunea colector-bază are o valoare de 50 V, tensiunea colector-emitor este de 45 V, iar tensiunea emitor-bază este de 6V. Curentul de colector are valoarea de 100 mA, iar puterea disipată pe colector este de 500 mW. Temperatura joncțiunii este de 150șC.
Tensiunea colector-emitor de saturație depinde de curentul de bază, și de cel de colector. Pentru un curent de colector de 10 mA și un curent de bază de 0.5 mA, VCE,sat are valoarea de 90 mV, iar VBE,sat are valoarea de 700 mV. Dacă curenții cresc, vor crește și tensiunile de saturație ale tranzistorului.
DIODA SCHOTTKY
Spre deosebire de o diodă obișnuită, dioda Schottky este formată dintr-o joncțiune metal-semiconductor.
La conducție participă doar electronii, care sunt purtători majoritari. Purtătorii minoritari, golurile, nu participă la conducție. Acesta este motivul pentru care timpii de comutare ai acestei diode sunt mult mai mici decat în cazul unei diode cu siliciu obișnuită.
Datorită acestui timp de comutare redus, diodele Schottky sunt folosite în circuite de comutație și în aplicațiile de frecvențe înalte, de până la 2GHz.
Alt avantaj este tensiunea de deschidere mică, cu valori cuprinse între 0,3V și 0,4V. Tensiunile de străpungere nu depășesc 50V, ele având valori uzuale în intervalul 10V – 50V.
Datorită acestor caracteristici, diodele Schottky sunt recomandate în aplicațiile de electronică de putere, cu rol de redresoare cu eficiență mare. [10]
4.6. STABILIZATORUL DE TENSIUNE
Stabilizatorul de tensiune este un dispozitiv care are rolul de a menține valori constante ale tensiunii. Ideal, acesta asigură la ieșire o tensiune independentă de alți parametri, printre care : tensiunea de intrare, curentul de sarcină sau de temperatură. Un circuit real insă nu realizează o independență totală.
În cadrul acestui montaj, am folosit un stabilizator LM7805. Motivele pentru care l-am ales sunt simplitatea utilizării, dar și raportul optim cost-performanță. Acest stabilizator are protecție termică internă. În plus, limitează curentul intern. Curentul maxim poate atinge 1A. [11]
CONCLUZII
În cadrul acestei lucrări am realizat practic un sistem de irigații. Consider că importanța acestui subiect este foarte mare. Mi-am ales această temă deoarece apa reprezintă un element vital, și nu ne putem permite să îl irosim. Iar acest sistem este precis și nu irosește apa, fiind programat să cunoască cantitatea necesară de apă fiecărei plante. Deci un motiv important care m-a determinat să mă opresc asupra acestei teme este faptul că irigarea prin picurare reprezintă, cred, cea mai inovatoare descoperire în domeniul utilizării apei în agricultură.
Când a fost folosit prima dată în Israel, acum mai bine de 35 de ani, la noi în țară acest sistem era privit ca ceva ce aparținea de domeniul fantasticului, rezultatele obținute de israelieni fiind spectaculoase.
Astăzi, irigațiile prin picurare sunt din ce in ce mai folosite în horticultura, câștigând foarte mult teren în fața celorlalte tipuri de irigații. Ele s-au răspândit exponențial, și se află într-o continuă dezvoltare, devenind, din punctul meu de vedere, o necesitate a secolului 21.
Așa cum reiese și din titlul lucrării, montajul pentru realizarea unui sistem de irigații prin picurare are ca element central microcontrolerul, acesta fiind capabil de multiple funcții, după cum am prezentat în această lucrare. Microcontrolerul reprezintă componenta care ia deciziile, în funcție de valorile primite de la senzorii folosiți ( senzorul de temperatură, senzorul de umiditate și fotodioda ), și execută funcțiile corespunzătoare.
Am ales un microcontroler din familia PIC deoarece sunt mult mai sigure și oferă o protecție mai ridicată a codului. În plus, microcontrolerul ales, PIC16F877A, are destule porturi și intrări analogice pentru proiectul meu. Dar motivul principal este memoria FLASH, care este de ajuns pentru ceea ce am nevoie, nefiind necesar un microcontroler cu memorie mai multă.
Consider că această lucrare m-a făcut să înțeleg mai bine modul în care funcționează un microcontroler sau cum se interconectează cu etajele de intrare sau de ieșire.
În consecință, punând în practică tot ce am învățat în anii de studiu în această facultate, și în mod deosebit la această specializare, și aprofundând unele dintre cunoștințe, am incercat să realizez un sistem, a cărui importanță ar trebui să fie cunoscută și apreciată de toată lumea, deoarece, dacă nu se iau astfel de măsuri în managementul apei și dacă se irosește în continuare, aceasta ar putea deveni noul petrol.
BIBLIOGRAFIE
[1] Rodica Constantinescu – Microcontrolere, Note de curs
[2] Fotodioda – Laboratorul de Fizică Atomică și Fizica Corpului Solid BN031B; Universitatea Polirehnica București, Departamentul de Fizică
[3] http://www.electrical4u.com/p-i-n-photodiode-avalanche-photo-diode/ – accesat la data de 22.06.2015
[4] https://controls.engin.umich.edu/wiki/index.php/TemperatureSensors – accesat la data de 22.06.2015
[5] Yamazoe N., Shimizu Y. – “Sensors and Actuators”, Ed Elsevier, 12 noiembrie 1986
[6] Centea O – “Transformatorul electric”, Ed Matrixrom
[7] https://ro.wikipedia.org/wiki/Circuit_imprimat – accesat la data de 23.06.2015.
[8] http://ro.scribd.com/doc/52647928/CABLAJE-IMPRIMATE#scribd – accesat la data de 23.06.2015
[9] Rusu I., Babaradă F., Drăghici F. – “Dispozitive electronice. Îndrumar de laborator”, Ed Rosetti Educațional, București, 2011.
[10] Crăciun A.V. – “Electronică analogică. Dispozitive și aplicații”, Ed. Universității Transilvania, Brașov, 2010
[11] http://www.rasfoiesc.com/inginerie/electronica/STABILIZATOARE-DE-TENSIUNE86.php – accesat la data de 24.06.2015
[12] http://www.fabricadeplante.ro/irigarea-prin-picurare-necesitatea-secolului-21 – accesat la data de 15.06.2015
ANEXE
ANEXA 1 – MONTAJUL
ANEXE 2 – COD SURSĂ
var LCD_RS : sbit at RB7_bit;
var LCD_EN : sbit at RB6_bit;
var LCD_D4 : sbit at RB5_bit;
var LCD_D5 : sbit at RB4_bit;
var LCD_D6 : sbit at RB3_bit;
var LCD_D7 : sbit at RB2_bit;
var LCD_RS_Direction : sbit at TRISB7_bit;
var LCD_EN_Direction : sbit at TRISB6_bit;
var LCD_D4_Direction : sbit at TRISB5_bit;
var LCD_D5_Direction : sbit at TRISB4_bit;
var LCD_D6_Direction : sbit at TRISB3_bit;
var LCD_D7_Direction : sbit at TRISB2_bit;
Label sett1,sett2,sett3,modes,mode1,mode2,mode3,reset;
var text1,text2 : array[16] of char;
txt1,txt2,txt3 : array[3] of char;
var lum,temp,umd,lm,tm,um : word;
{ Declarations section }
begin
TRISA := 0x07; // PORTA este port de intrare
TRISB := 0;
TRISD.0 := $01;
TRISD.1 := $01;
TRISD.2 := $01;
TRISE := 0;
PORTB := 0;
PORTD.0 := $01;
PORTD.1 := $01;
PORTD.2 := $01;
PORTE := 0;
lum := 0; temp := 0; umd := 0; lm := 0; tm := 0; um := 0;
Lcd_Init(); // Inițializare LCD
Lcd_Cmd(_LCD_CLEAR); // Ștergere Display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
text1 := 'Student: Andrei ';
text2 := 'Constantin Ciucu';
LCD_Out(1,1,text1); // Scrie textul pe prima linie
LCD_Out(2,1,text2); // Scrie textul pe a doua linie
Delay_ms(2000); //Introduce o întârziere de 2000ms
text1 := 'Incarcare valori';
text2 := 'din EEPROM… ';
LCD_Out(1,1,text1);
LCD_Out(2,1,text2);
PORTE := 4;
Delay_ms(1000);
lm := EEPROM_Read(0x01);
Delay_ms(200);
tm := EEPROM_Read(0x02);
Delay_ms(200);
um := EEPROM_Read(0x03);
Delay_ms(200);
//în continuare se resetează variabilele lm, tm și um în momentul în care ajung la valoarea 255
if lm = 255 then lm := 0;
if tm = 255 then tm := 0;
if um = 255 then um := 0;
PORTE := 0;
sett1:
text1 := 'SET parametru! ';
text2 := 'Lumina [ ]%';
LCD_Out(1,1,text1);
LCD_Out(2,1,text2);
ByteToStr(lm, txt1); //conversie de la tipul byte la tipul string
LCD_Out(2,12,txt1);
Delay_ms(200);
if PORTD.0 = 0 then
begin
lm := lm+1;
if lm >= 100 then
begin
lm := 100;
end;
end;
if PORTD.1 = 0 then
begin
lm := lm-1;
if lm <= 1 then
begin
lm := 0;
end;
end;
if PORTD.2 = 0 then
begin
EEPROM_Write(0x01, lm);
Delay_ms(500);
goto sett2;
end;
goto sett1;
sett2:
text1 := 'SET parametru! ';
text2 := 'Temp. [ ]C';
LCD_Out(1,1,text1);
LCD_Out(2,1,text2);
ByteToStr(tm, txt2);
LCD_Out(2,12,txt2);
Delay_ms(200);
if PORTD.0 = 0 then
begin
tm := tm+1;
if tm >= 100 then
begin
tm := 100;
end;
end;
if PORTD.1 = 0 then
begin
tm := tm-1;
if tm <= 1 then
begin
tm := 0;
end;
end;
if PORTD.2 = 0 then
begin
EEPROM_Write(0x02, tm);
Delay_ms(500);
goto sett3;
end;
goto sett2;
sett3:
text1 := 'SET parametru! ';
text2 := 'Umiditate [ ]%';
LCD_Out(1,1,text1);
LCD_Out(2,1,text2);
ByteToStr(um, txt3);
LCD_Out(2,12,txt3);
Delay_ms(200);
if PORTD.0 = 0 then
begin
um := um+1;
if tm >= 100 then
begin
um := 100;
end;
end;
if PORTD.1 = 0 then
begin
um := um-1;
if um <= 1 then
begin
um := 0;
end;
end;
if PORTD.2 = 0 then
begin
EEPROM_Write(0x03, um);
Delay_ms(500);
goto modes;
end;
goto sett3;
modes:
text1 := 'SET parametrii! ';
text2 := '[1] [2] [3] ';
LCD_Out(1,1,text1);
LCD_Out(2,1,text2);
if PORTD.0 = 0 then
begin
Delay_ms(500);
goto mode1;
end;
if PORTD.2 = 0 then
begin
Delay_ms(500);
goto mode2;
end;
if PORTD.1 = 0 then
begin
Delay_ms(500);
goto mode3;
end;
goto modes;
mode1:
ADCON1 := $80;
lum := ADC_Read(0); // Rezultatul pe 10b al conversiei analog-digitale
temp := ADC_Read(1
if lum >= 100 then lum := 100; //Dacă variabila lum depășește valoarea 100, nu se mai incrementează, rîmânând constantă la 100
if temp >= 50 then temp := 50;
text1 := 'Valori: L[ ]%';
text2 := 'T[ ]C U[–]%';
LCD_Out(1,1,text1);
LCD_Out(2,1,text2);
ByteToStr(lum, txt1);
ByteToStr(temp, txt2);
LCD_Out(1,12,txt1);
LCD_Out(2,3,txt2);
Delay_ms(300);
if lum >= lm then
begin
if temp >= tm then
begin
PORTE := 3;
end;
end;
if lum < lm then PORTE := 0;
if temp < tm then PORTE := 0;
if PORTD.2 = 0 then
begin
PORTE := 0;
Delay_ms(500);
goto sett1;
end;
if PORTD.1 = 0 then
begin
Delay_ms(500);
goto reset;
end;
goto mode1;
mode2:
ADCON1 := $80;
lum := ADC_Read(0);
umd := ADC_Read(2);
text1 := 'Valori: L[ ]%';
text2 := 'T[–]C U[ ]%';
LCD_Out(1,1,text1);
LCD_Out(2,1,text2);
ByteToStr(lum, txt1);
ByteToStr(umd, txt3);
LCD_Out(1,12,txt1);
LCD_Out(2,12,txt3);
Delay_ms(300);
if lum >= lm then
begin
if umd >= um then
begin
PORTE := 3;
end;
end;
if lum < lm then PORTE := 0;
if umd < um then PORTE := 0;
if PORTD.2 = 0 then
begin
PORTE := 0;
Delay_ms(500);
goto sett1;
end;
if PORTD.1 = 0 then
begin
Delay_ms(500);
goto reset;
end;
goto mode2;
mode3:
ADCON1 := $80;
lum := ADC_Read(0);
temp := ADC_Read(1);
umd := ADC_Read(2);
if lum >= 100 then lum := 100;
if temp >= 50 then temp := 50;
if umd >= 100 then umd := 100;
text1 := 'Valori: L[ ]%';
text2 := 'T[ ]C U[ ]%';
LCD_Out(1,1,text1);
LCD_Out(2,1,text2);
ByteToStr(lum, txt1);
ByteToStr(temp, txt2);
ByteToStr(umd, txt3);
LCD_Out(1,12,txt1);
LCD_Out(2,3,txt2);
LCD_Out(2,12,txt3);
Delay_ms(300);
if lum >= lm then
begin
if temp >= tm then
begin
if umd >= um then
begin
PORTE := 3;
end;
end;
end;
if lum < lm then PORTE := 0;
if temp < tm then PORTE := 0;
if umd < um then PORTE := 0;
if PORTD.2 = 0 then
begin
PORTE := 0;
Delay_ms(500);
goto sett1;
end;
if PORTD.1 = 0 then
begin
Delay_ms(500);
goto reset;
end;
goto mode3;
reset:
text1 := 'RESET ';
text2 := 'PARAMETRII! ';
LCD_Out(1,1,text1);
LCD_Out(2,1,text2);
Delay_ms(1500);
PORTE := 4;
EEPROM_Write(0x01, 0);
Delay_ms(200);
EEPROM_Write(0x02, 0);
Delay_ms(200);
EEPROM_Write(0x03, 0);
Delay_ms(200);
PORTE := 0;
lm := 0; tm := 0; um := 0;
goto sett1;
end.
ANEXA 3 – SCHEMA LOGICĂ A PROGRAMULUI
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Modul programabil pentru sistem de irigații prin picurare cu PIC16F877A [301782] (ID: 301782)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
