Circuit Pentru Testarea Ultracapacitoarelor
Capitolul 4. Microcontrolerul PIC. Periferice
4.1. Microcontrolerul PIC
Un microcontroler este un sistem folosit pentru a comanda si prelua stari de la un proces sau aspect al mediului inconjurator. PIC (MicroChip) sunt primele MC RISC aparute, cu un numar mic de instructiuni (tipic 33). Simplitatea arhitecturii duce la realizarea unui chip de mici dimensiuni, cu putini pini, consum redus, viteza mare si pret mic.
Unitatea de memorie
Memoria este o parte a microcontrolerului a carei functie este de a inmagazina date.
Cel mai usor mod de a explica este de a-l descrie ca un dulap mare cu multe sertare. Daca presupunem ca am marcat sertarele intr-un asemenea fel incat sa nu fie confundate, oricare din continutul lor va fi atunci usor accesibil. Este suficient sa se stie desemnarea sertarului si astfel continutul lui ne va fi cunoscut in mod sigur.
Pentru o anumita intrare obtinem continutul unei anumite locatii de memorie adresate si aceasta este totul. Doua noi concepte ne sunt aduse: adresarea si locatia de memorie. Memoria consta din toate locatiile de memorie, si adresarea nu este altceva decat selectarea uneia din ele. Aceasta inseamna ca noi trebuie sa selectam locatia de memorie la un capat, si la celalalt capat trebuie sa asteptam continutul acelei locatii. In afara de citirea dintr-o locatie de memorie, memoria trebuie de asemenea sa permita scrierea in ea. Aceasta se face prin asigurarea unei linii aditionale numita linie de control. Vom desemna aceasta linie ca R/W (citeste /scrie). Linia de control este folosita in urmatorul fel: daca R/W=1, se face citirea, si daca opusul este adevarat atunci se face scrierea in locatia de memorie. Memoria este primul element, dar avem nevoie si de altele pentru ca microcontrolerul nostru sa functioneze.
Unitatea de procesare centrala
Sa adaugam alte 3 locatii de memorie pentru un bloc specific ce va avea o capabilitate incorporata de inmultire, impartire, scadere si sa-i mutam continutul dintr-o locatie de memorie in alta. Partea pe care tocmai am adaugat-o este numita "unitatea de procesare centrala" (CPU). Locatiile ei de memorie sunt numite registri.
Registrii sunt deci locatii de memorie al caror rol este de a ajuta prin executarea a variate operatii matematice sau a altor operatii cu date oriunde se vor fi gasit datele. Sa privim la situatia curenta. Avem doua entitati independente (memoria si CPU) ce sunt interconectate, si astfel orice schimb de informatii este ascuns, ca si functionalitatea sa. Daca, de exemplu, dorim sa adaugam continutul a doua locatii de memorie si intoarcem rezultatul inapoi in memorie, vom avea nevoie de o conexiune intre memorie si CPU. Mai simplu formulat, trebuie sa avem o anumita "cale" prin care datele circula de la un bloc la altul.
Bus-ul
Calea este numita "bus"- magistrala. Fizic, el reprezinta un grup de 8, 16, sau mai multe fire. Sunt doua tipuri de bus-uri: bus de adresa si bus de date. Primul consta din atatea linii cat este cantitatea de memorie ce dorim sa o adresam, iar celalalt este atat de lat cat sunt datele, in cazul nostru 8 biti sau linia de conectare. Primul serveste la transmiterea adreselor de la CPU la memorie, iar cel de al doilea la conectarea tuturor blocurilor din interiorul microcontrolerului.
In ceea ce priveste functionalitatea, situatia s-a imbunatatit, dar o noua problema a aparut de asemenea: avem o unitate ce este capabila sa lucreze singura, dar ce nu are nici un contact cu lumea de afara, sau cu noi! Pentru a inlatura aceasta deficienta, sa adaugam un bloc ce contine cateva locatii de memorie al caror singur capat este conectat la bus-ul de date, iar celalalt are conexiune cu liniile de iesire la microcontroler ce pot fi vazute cu ochiul liber ca pini la componenta electronica.
Unitatea intrare-iesire
Aceste locatii ce tocmai le-am adaugat sunt numite "porturi". Sunt diferite tipuri de porturi: intrare, iesire sau porturi pe doua-cai. Cand se lucreaza cu porturi, mai intai de toate este necesar sa se aleaga cu ce port urmeaza sa se lucreze, si apoi sa se trimita date la, sau sa se ia date de la port.
Cand se lucreaza cu el portul se comporta ca o locatie de memorie. Ceva este pur si simplu scris in sau citit din el, si este posibil de a remarca usor aceasta la pinii microcontrolerului.
Comunicatia seriala
Cu aceasta am adaugat la unitatea deja existenta posibilitatea comunicarii cu lumea de afara. Totusi, acest mod de comunicare are neajunsurile lui. Unul din neajunsurile de baza este numarul de linii ce trebuie sa fie folosite pentru a transfera datele. Ce s-ar intampla daca acestea ar trebui transferate la distanta de cativa kilometri? Numarul de linii inmultit cu numarul de kilometri nu promite costuri eficiente pentru proiect. Nu ne ramane decat sa reducem numarul de linii intr-un asa fel incat sa nu scadem functionalitatea. Sa presupunem ca lucram doar cu 3 linii, si ca o linie este folosita pentru trimiterea de date, alta pentru receptie si a treia este folosita ca o linie de referinta atat pentru partea de intrare cat si pentru partea de iesire. Pentru ca aceasta sa functioneze, trebuie sa stabilim regulile de schimb ale datelor. Aceste reguli sunt numite protocol. Protocolul este de aceea definit in avans ca sa nu fie nici o neintelegere intre partile ce comunica una cu alta. De exemplu, daca un om vorbeste in franceza, si altul vorbeste in engleza, este putin probabil ca ei se vor intelege repede si eficient unul cu altul. Sa presupunem ca avem urmatorul protocol. Unitatea logica "1" este setata pe linia de transmisie pana ce incepe transferul. Odata ce incepe transferul, coboram linia de transmisie la "0" logic pentru o perioada de timp (pe care o vom desemna ca T), asa ca partea receptoare va sti ca sunt date de primit, asa ca va activa mecanismul ei de receptie. Sa ne intoarcem acum la partea de transmisie si sa incepem sa punem zero-uri si unu-uri pe linia de transmisie in ordinea de la un bit a celei mai de jos valori la un bit a celei mai de sus valori. Sa lasam ca fiecare bit sa ramana pe linie pentru o perioada de timp egala cu T, si la sfarsit, sau dupa al 8-lea bit, sa aducem unitatea logica "1" inapoi pe linie ce va marca sfarsitul transmisiei unei date. Protocolul ce tocmai l-am descris este numit in literatura profesionala NRZ (Non-Return to Zero).
Unitatea seriala folosita pentru a trimite date, dar numai prin trei linii
Pentru ca avem linii separate de receptie si de transmitere, este posibil sa receptionam si sa transmitem date (informatii) in acelasi timp. Blocul asa numit full-duplex mode ce permite acest mod de comunicare este numit blocul de comunicare seriala. Spre deosebire de transmisia paralela, datele sunt mutate aici bit cu bit, sau intr-o serie de biti, de unde vine si numele de comunicatie seriala. Dupa receptia de date trebuie sa le citim din locatia de transmisie si sa le inmagazinam in memorie in mod opus transmiterii unde procesul este invers. Datele circula din memorie prin bus catre locatia de trimitere, si de acolo catre unitatea de receptie conform protocolului.
Unitatea timer
Acum ca avem comunicatia seriala, putem receptiona, trimite si procesa date.
Totusi, pentru noi ca sa putem sa il folosim in industrie mai avem nevoie de cateva blocuri. Unul din acestea este blocul timer care este important pentru noi pentru ca ne da informatia de timp, durata, protocol etc. Unitatea de baza a timer-ului este un contor liber (free-run) care este de fapt un registru a carui valoare numerica creste cu unu la intervale egale, asa incat luandu-i valoarea dupa intervalele T1 si T2 si pe baza diferentei lor sa putem determina cat timp a trecut. Acesta este o parte foarte importanta a microcontrolerului al carui control cere cea mai mare parte a timpului nostru.
Watchdog-ul
Inca un lucru ce necesita atentia noastra este functionarea fara defecte a microcontrolerului in timpul functionarii. Sa presupunem ca urmare a unei anumite interferente (ce adesea se intampla in industrie) microcontrolerul nostru se opreste din executarea programului, sau si mai rau, incepe sa functioneze incorect.
Bineinteles, cand aceasta se intampla cu un calculator, il resetam pur si simplu si va continua sa lucreze. Totusi, nu exista buton de resetare pe care sa-l apasam in cazul microcontrolerului care sa rezolve astfel problema noastra. Pentru a depasi acest obstacol, avem nevoie de a introduce inca un bloc numit watchdog-cainele de paza. Acest bloc este de fapt un alt contor liber (free-run) unde programul nostru trebuie sa scrie un zero ori de cate ori se executa corect. In caz ca programul se "intepeneste", nu se va mai scrie zero, iar contorul se va reseta singur la atingerea valorii sale maxime. Aceasta va duce la rularea programului din nou, si corect de aceasta data pe toata durata. Acesta este un element important al fiecarui program ce trebuie sa fie fiabil fara supravegherea omului.
Convertorul Analog-Digital
Pentru ca semnalele de la periferice sunt substantial diferite de cele pe care le poate intelege microcontrolerul (zero si unu), ele trebuie convertite intr-un mod care sa fie inteles de microcontroler. Aceasta sarcina este indeplinita de un bloc pentru conversia analog-digitala sau de un convertor AD. Acest bloc este responsabil pentru convertirea unei informatii despre o anumita valoare analogica intr-un numar binar si pentru a o urmari pe tot parcursul la un bloc CPU asa ca blocul CPU sa o poata procesa.
Astfel microcontrolerul este acum terminat, si tot ce mai ramane de facut este de a-l pune intr-o componenta electronica unde va accesa blocurile interioare prin pinii exteriori. Imaginea de mai jos arata cum arata un microcontroler in interior.
Configuratia fizica a interiorului microcontrolerului
Liniile subtiri ce merg din interior catre partile laterale ale microcontrolerului reprezinta fire conectand blocurile interioare cu pinii capsulei microcontrolerului. Schema urmatoare reprezinta sectiunea centrala a microcontrolerului.
Pentru o aplicatie reala, un microcontroler singur nu este de ajuns. In afara de microcontroler, avem nevoie de un program pe care sa-l execute, si alte cateva elemente ce constituie o interfata logica catre elementele de stabilizare (ce se va discuta in capitolele urmatoare).
Generator de ceas – oscilator
Circuitul oscilator este folosit pentru a da microcontrolerului un ceas-clock. Ceasul este necesar pentru ca microcontrolerul sa execute programul sau instructiunile din program.
Tipuri de oscilatoare
PIC 16F877 poate lucra cu patru configuratii diferite de oscilator. Pentru ca configuratiile cu oscilator cu cristal si rezistor-condensator (RC) sunt cele utilizate cel mai frecvent, doar pe ele le vom mentiona aici. Tipul de microcontroler cu oscilator cu cristal este desemnat ca XT, iar microcontrolerul cu perechea rezistor-condensator are desemnarea RC. Aceasta este important pentru ca trebuie sa numit tipul de oscilator cand se cumpara un microcontroler.
Oscilatorul XT
Oscilatorul cu cristal se afla intr-o carcasa metalica cu doi pini pe care este inscrisa frecventa la care cristalul oscileaza. Mai este necesar cate un condensator ceramic de 30pF cu celalalt capat la masa de a fi conectati la fiecare pin.
Conectarea oscilatorului la PIC
Oscilatorul si condensatorii pot fi incapsulati impreuna intr-o carcasa cu trei pini. Un asemenea element se numeste rezonator ceramic si este reprezentat in scheme ca cel de mai jos. Pinii centrali ai elementului sunt masa, iar pinii terminali sunt conectati la pinii OSC1 si OSC2 ai microcontrolerului. Cand se proiecteaza un aparat, regula este sa plasati oscilatorul cat mai aproape de microcontroler, pentru a elimina orice interferenta de pe liniile pe care microcontrolerul primeste tactul de ceas.
Oscilatorul RC
In aplicatiile unde nu este nevoie de o mare precizie de timp, oscilatorul RC permite economii aditionale la cumparare. Fecventa de rezonanta a oscilatorului RC depinde de valoarea tensiunii de alimentare, rezistorul R, condensatorul C si temperatura de lucru. Trebuie de mentionat ca frecventa de rezonanta este de asemenea influentata de variatiile normale ale parametrilor de proces, de toleranta externa a componentelor R si C, etc.
Diagrama de mai sus arata cum este conectat oscilatorul RC la PIC 16F877. La valoarea rezistorului mai mica 2.2k, oscilatorul poate deveni instabil, sau oscilatia se poate chiar opri. La valori mari a lui R (ex.1M) oscilatorul devine foarte sensibil la zgomot si umezeala. Se recomanda ca valoarea rezistorului R sa fie intre 3 si 100k. Chiar daca oscilatorul va lucra fara un condensator extern (C=0pF), trebuie totusi folosit un condensator de peste 20pF pentru zgomot si stabilitate. Indiferent de ce oscilator este folosit, pentru a obtine un ceas la care sa functioneze microcontrolerul, ceasul trebuie divizat la 4. Un ceas al oscilatorului divizat cu 4 se poate obtine la pinul OSC2/CLKOUT, si poate fi folosit pentru testarea sau sincronizarea altor circuite logice.
Dupa alimentare, oscilatorul incepe sa oscileze. Oscilatia la inceput are o perioada si o amplitudine instabile, dar dupa un timp devin stabilizate.
Pentru a preveni ca un asemenea ceas inexact sa influenteze performantele microcontrolerului, trebuie sa tinem microcontrolerul in starea reset pe durata stabilizarii ceasului oscilatorului. Diagrama de mai sus arata o forma tipica de semnal pe care microcontrolerul o primeste de la oscilatorul cu cuart dupa alimentare.
Reset-ul
Resetul este folosit pentru a pune microcontrolerul intr-o conditie 'cunoscuta'. Aceasta inseamna practic ca microcontrolerul poate sa se comporte incorect in unele conditii nedorite. Pentru a continua sa functioneze corect trebuie resetat, insemnand ca toti registrii vor fi pusi intr-o stare de start. Resetul nu este folosit numai cand microcontrolerul nu se comporta cum vrem noi, dar poate de asemenea sa fie folosit cand se incearca un montaj ca o intrerupere intr-un program de executie sau cand se pregateste un microcontroler de a citi un program.
Pentru a preveni ajungerea unui zero logic la pinul MCLR accidental (linia de deasupra inseamna ca resetul este activat de un zero logic), MCLR trebuie sa fie conectat printr-un rezistor la polul pozitiv al sursei de alimentare. Rezistorul trebuie sa fie intre 5 si 10k. Acest rezistor a carui functie este de a mentine o anumita linie la starea logica unu ca o prevenire, se numeste o scoatere-pull up.
Microcontrolerul PIC 16F877 are cateva surse de reset:
a) Reset la alimentare, POR (Power-On Reset)
b) Reset in timpul lucrului obisnuit prin aducerea unui zero logic la pinul MCLR al microcontrolerului.
c) Reset in timpul regimului SLEEP
d) Reset la depasirea timer-ului watchdog (WDT)
e) Reset in timpul depasirii WDT in timpul regimului SLEEP.
Cele mai importante resurse de reset sunt a) si b). Prima are loc de fiecare data cand este alimentat microcontrolerul si serveste la aducerea toturor registrilor la starea initiala a pozitiei de start. A doua este pentru a aduce un zero logic la pinul MCLR in timpul operatiei normale a microcontrolerului. Este des folosita in dezvoltarea de programe.
In timpul unui reset, locatiile de memorie RAM nu sunt resetate. Ele sunt necunoscute la alimentare si nu sunt schimbate la nici un reset. Spre deosebire de acestea, registrii SFR sunt resetati la o stare initiala a pozitiei de start. Unul din cele mai importante efecte ale resetului este setarea contorului de program (PC) la zero (0000h), ceea ce permite programului sa inceapa executarea de la prima instructiune scrisa.
Resetul la scaderea tensiunii de alimentare dincolo de limita permisibila (Brown-out Reset)
Impulsul pentru resetare in timpul cresterii tensiunii este generat de microcontrolerul insusi cand detecteaza o crestere in tensiunea Vdd (in domeniul de la 1.2V la 1.8V). Acest impuls dureaza 72 ms ceea ce este un timp suficient pentru oscilator ca sa se stabilizeze. Aceste 72 ms sunt asigurate de un timer intern PWRT care are oscilatorul lui RC. Microcontrolerul este in modul reset cat timp PWRT este activ. Totusi, cand montajul functioneaza, probleme apar cand sursa nu scade la zero ci cand scade mai jos de limita ce garanteaza functionarea corecta a microcontrolerului. Acesta este un caz real din practica, in special in mediile industriale unde perturbatiile si instabilitatile sursei de alimentare sunt ceva foarte curent. Pentru a rezolva aceasta problema trebuie sa ne asiguram ca microcontrolerul este intr-o stare de reset de fiecare data cand tensiunea sursei scade sub limita admisa.
Daca, conform cu specificatiile electrice, circuitul intern de resetare a microcontrolerului nu poate satisface aceste cerinte, se pot folosi componente electronice speciale ce sunt capabile sa genereze semnalul de reset dorit. In afara de aceasta functie, ele pot functiona pentru supravegherea tensiunii de alimentare. Daca tensiunea scade mai jos de nivelul specificat, un zero logic va apare la pinul MCLR ce tine microcontrolerul in starea de reset pana ce tensiunea nu este in limitele ce garanteaza functionarea corecta.
Porturi
Portul se refera la un grup de pini ai unui microcontroler ce pot fi accesati simultan, sau la care putem seta combinatia dorita de zero-uri si unu-uri, sau de la care putem citi o stare existenta. Fizic, portul este un registru in interiorul unui microcontroler ce este conectat cu fire la pinii microcontrolerului. Porturile reprezinta conexiunea fizica a Unitatii de Procesare Centrala cu lumea exterioara. Microcontrolerul le foloseste pentru a monitoriza sau controla alte componente sau aparate. Datorita functionalitatii, unii pini au rol dublu ca RA4/TOCKI de exemplu, care este simultan al patrulea bit la portul A si o intrare externa pentru contorul liber (free-run). Selectia uneia din aceste doua functii ale pinului se face in unul din registrii configurationali. O ilustratie a acesteia este al cincilea bit T0CS in registrul OPTION. Selectand una din functii cealalta este dezactivata.
Toti pinii portului pot fi definiti ca intrare sau iesire, conform cu nevoile unui montaj ce este in dezvoltare. Pentru a defini un pin ca pin de intrare sau ca pin de iesire, trebuie scrisa combinatia corecta de zero-uri si unu-uri in registrul TRIS. Daca in locul potrivit este scris "1" logic in registrul TRIS, acel pin este pin de intrare, iar daca este valabil contrariul, este un pin de iesire. Fiecare port are registrul lui TRIS. Astfel, portul A are TRISA la adresa 85h, iar portul B are TRISB la adresa 86h.
PORT B
PORT B are 8 pini legati la el. Registrul adecvat pentru directia datelor este TRISB la adresa 86h. Setarea unui bit in registrul TRISB defineste pinul portului corespunzator ca pin de intrare, si resetarea unui bit in registrul TRISB, defineste pinul portului corespunzator ca pin de iesire. Fiecare pin la PORTB are un rezistor slab intern pull-up (scoatere) (rezistor care defineste o linie la unu logic) care poate fi activat prin resetarea celui de-al saptelea bit RBPU in registrul OPTION. Acesti rezistori 'pull-up' se inchid automat cand pinul portului este configurat ca o iesire. Cand porneste microcontrolerul, 'pull-up'-ii sunt dezactivati.
Patru pini ai portului PORTB, RB7:RB4 pot cauza o intrerupere, care se intampla cand starea lor se schimba de la unu logic la zero logic si invers. Numai pinii configurati ca intrare pot cauza aceasta intrerupere sa se intample (daca fiecare pin RB7:RB4 este configurat ca o iesire, nu va fi generata o intrerupere la schimbarea starii). Aceasta optiune de intrerupere cu rezistorii 'pull-up' fac mai usoara rezolvarea problemelor din practica, ca de exemplu o tastatura matriceala. Daca randurile tastaturii sunt conectate la acesti pini, fiecare apasare a unei clape va cauza o intrerupere. Microcontrolerul va determina care clapa este apasata in timp ce se proceseaza o intrerupere. Nu se recomanda sa apelati la portul B in timp ce se proceseaza intreruperea.
Exemplul de mai sus arata cum pinii 0, 1, 2, si 3 sunt declarati ca intrare, si pinii 4, 5, 6 si 7 ca iesire.
PORT A
PORT A are 5 pini legati la el. Registrul corespunzator pentru directia datelor este TRISA la adresa 85h. Ca si la portul B, setarea unui bit in registrul TRISA defineste de asemenea pinul portului corespunzator ca un pin de intrare, si resetarea unui bit in registrul TRISA defineste pinul portului corespunzator ca pin de iesire.
Al cincilea pin al portului A are functie duala. La acel pin se afla de asemenea o intrare externa pentru timer-ul TMRO. Una din aceste doua optiuni este aleasa prin setarea sau resetarea bitului TOCS (TMR0 Clock Source Select bit-bit de Selectie a Sursei Ceasului TMRO). Acest pin permite timer-ului TMRO sa-si creasca starea fie de la oscilatorul intern fie prin impulsuri externe la pinul RA4/T0CKI.
Exemplul arata cum pinii 0, 1, 2, 3, si 4 sunt declarati ca intrare iar 5, 6 si 7 ca pini de iesire.
4.2. Afisaj alfanumeric cu LCD
Cristalele lichide sunt o categorie de substante organice avand molecule mari si
asimetrice fapt ce le confera proprietati ce le situeaza intr-o stare, intre starea solida caracteristica unui cristal si cea lichida.
Sub actiunea unui camp electric exterior moleculele isi modifica orientarea in
spatiu ceea ce duce la modificarea proprietatilor optice ale mediului. Deci cristalele lichide nu produc lumina ci doar isi modifica transparenta sub influenta campului electric.
Afisajul cu cristale lichide
In figura este aratat principiul de realizare a unui sistem de afisare cucristal lichid. Electrodul E1 trebuie sa fie transparent iar E2 sa aiba depus un strat deoglinda orientata spre cristal. Electrodul E1, va avea forma impusa de modelulcaracterelor ce se doresc a fi afisate.
Comanda electrica se face de obicei in curent alternativ cu amplitudinea 2-10V
si frecventa 30-400 Hz.
Principalul avantaj al acestui afisaj il constituie consumul foarte mic de putere
(μW). De asemenea se pot realiza usor configuratii de afisaj alfa-numeric. Au insa dezavantajul unui timp mare de raspuns si al unui contrast scazut fata de afisajele cu LED-uri..
Afisaj LCD
Multe dispozitive cu microcontroler folosesc LCD-uri inteligente pentru a afisa informatia vizuala. Urmatorul material se ocupa de conectarea unui afisaj LDC Hitachi la un microcontroler PIC. Afisajele LCD proiectate cu HD44780, modulul pentru LCD fabricat de Hitachi, nu sunt scumpe si sunt usor de folosit, si chiar posibil sa produca verificarea datelor afisate folosind cei 8×80 pixeli ai afisajului. Afisajele LCD Hitachi contin un set de caractere ASCII plus simboluri japoneze, grecesti si matematice.
Afisaj 16×2 HD44780
Fiecare dintre cei 640 de pixeli ai afisajului trebuie sa poata fi accesat individual si aceasta se poate realiza cu un numar de integrate SMD pentru control montate pe spatele afisajului. Aceasta ne salveaza de o cantitate enorma de fire si de un control adecvat astfel incat sunt necesare doar cateva linii pentru a accesa afisajul. Putem comunica cu afisajul prin intermediul unui bus de date pe 8 biti sau de 4 biti. Pentru un bus de 8 biti, afisajul are nevoie de o tensiune de alimentare de +5v si 11 linii I/O. Pentru un bus de 4 biti sunt necesare doar liniile de alimentare si 7 linii. Cand afisajul LCD nu este pornit liniile de date sunt TRI-STATE, ceea ce inseamna ca ele sunt in stare de inalta impedanta (ca si cum ar fi deconectate) si astfel nu interfereaza cu functionabilitatea microcontrolerului cand afisajul nu este adresat. LCDul necesita de 3 linii de control de la microcontroler.
Linia Enable (E) permite accesul la afisaj prin intermediul liniilor R/W si RS. Cand aceasta linie este LOW, LCDul este dezactivat si ignora semnalele de la R/W si RS. Cand linia (E) este HIGH, LCDul verifica starea celor doua linii de control si raspunde corespunzator.
Linia Read/Write (R/W) stabileste directia datelor dintre LCD si microcontroler. Cand linia este LOW, datele sunt scrise in LCD. Cand este HIGH, datele sunt citite de la LCD.
Cu ajutorul liniei Register select (RS), LCD interpreteaza tipul datelor de pe liniile de date. Cand este LOW, o instructiune este scrisa in LCD. Cand este HIGH, un caracter este scris in LCD.
Starea logica a liniilor de control:
E – 0 -Accesul la LCD dezactivat
– 1 -Accesul la LCD activat
R/W – 0 -Scrie date in LCD
– 1 – Citeste date din LCD
RS – 0 -Instructiuni
– 1 -Caracter
Scrierea datelor in LCD se realizeaza in cativa pasi:
– se seteaza bitul R/W LOW
– se seteaza bitul RS in 0 sau 1 logic (instructiune sau caracter)
– se trimit datele catre liniile de date (daca se executa o scriere)
– se seteaza linia E HIGH
– se citesc datele de la liniile de date (daca se executa o citire)
Citirea datelor de la LCD se realizeaza similar, cu deosebirea ca linia de control R/W trebuie sa fie HIGH. Cand trimitem un HIGH catre LCD, el se va reseta si va accepta instructiuni. Instructiunile tipice care sunt transmise catre un afisaj LCD dupa reset sunt: pornirea afisajului, activarea cursorului si scrierea caracterelor de la stanga spre dreapta. In momentul in care un LCD este initializat, el este pregatit sa primeasca date sau instructiuni. Daca receptioneaza un caracter, el il va afisa si va muta cursorul un spatiu la dreapta. Cursorul marcheaza locatia urmatoare unde un caracter va fi afisat. Cand dorim sa scriem un sir de caractere, mai intai trebuie sa setam adresa de start, si apoi sa trimitem cate un caracter pe rand. Caracterele care pot fi afisate pe ecran sunt memorate in memoria video DD RAM (Data Display RAM). Capacitatea memoriei DD RAM este de 80 bytes.
Afisajul LCD mai contine 64 bytes CG RAM ( Character Generator RAM). Aceasta memorie este rezervata pentru caracterele definite de utilizator. Datele din CG RAM sunt reprezentate sub forma de caractere bitmap de 8 biti. Fiecare caracter ocupa maxim 8 bytes in CG RAM, astfel numarul total de caractere pe care un utilizator poate sa le defineasca este 8. Pentru a afisa caracterul bitmap pe LCD, trebuie setata adresa CG RAM la punctul de start (de obicei 0) si apoi sa fie scrise datele in afisaj. Definirea unui caracter ‚special’ este exemplificata in figura.
Inainte de a accesa DD RAM, dupa definirea unui caracter special, programul trebuie sa seteze adresa in DD RAM. Orice scriere si citire a datelor din memoria LCD este realizata de la ultima adresa care a fost setata, folosind instructiunea set-adress. Odata ce adresa DD RAM este setata, un caracter nou va fi afisat in locul potrivit pe ecran. Pana acum am discutat operatia de scriere si citire a memoriei unui LCD ca si cum ar fi o memorie obisnuita. Acest lucru nu este adevarat. Controlerul LCD are nevoie de 40 pana la 120 microsecunde (us) pentru scriere si citire. Alte operatii pot dura pana la 5 ms. In acest timp microcontrolerul nu poate accesa LCDul, astfel un program trebuie sa stie cand un LCD este ocupat. Putem rezolva aceasta in doua metode.
O metoda este verificarea bitului BUSY de pe linia de date D7. Aceasta nu este cea mai buna metoda pentru ca LCDul se poate bloca si programul va sta intr-o bucla infinita verificand bitul BUSY. O alta metoda este introducerea unei intarzieri in program. Intarzierea trebuie sa fie destul de lunga pentru ca LCDul sa termine operatia in desfasurare. Instructiunile pentru scriere si citire cu memoria LCDului sunt afisate mai sus. La inceput am mentionat ca avem nevoie de 11 linii I/O pentru a comunica cu un LCD. Oricum, putem comunica cu un LCD printr-un bus de 4 linii. Putem reduce numarul total de linii de comunicatie la 7. Schema pentru conectarea printr-un bus de 4 biti este in imaginea de mai jos.
Macro pentru lucrul cu LCD
Macroul LCDinit este utilizat pentru a initializa portul conectat la LCD. LCDul este configurat sa mearga in modul de 4 biti.
Exemplu: LCDinit
LCDchar LCDarg scrie un caracter ASCII. Argumentul este caracterul ASCII.
Exemplu: LCDchar ‚d’
LCDw scrie caracterul din registul W.
Exemplu: movlw ‚p’
LCDw
LCDcmd LCDcommand trimite comenzi.
Exemplu: LCDcmd LCDCH
LCD_DDAdr DDRamAddress seteaza adresa DD RAM
Exemplu: LCD_DDAdr .3
LCDline line_num seteaza pozitia cursorului la inceputul primei sau celei de-a doua linie.
Exemplu: LCDline 2
Cand lucram cu microcontrolere numerele sunt reprezentate in forma binara. Din aceasta cauza ele nu pot fi afisate. Pentru aceasta este necesar sa schimbam numerele dintr-un sistem binar intr-un sistem zecimal pentru ca ele sa fie usor de inteles. Sursele celor doua macrouri LCDval_08 si LCDval_16 sunt prezentate mai jos.
Macroul LCDval_08 realizeaza conversia unui numar binar de 8 biti intr-un numar zecimal de la 0 la 255 si il afiseaza. Este necesar sa declaram urmatoarele variabile in programul principal: TEMP1, TEMP2, LO, LO_TEMP, Bcheck. Numarul binar de 8 biti este in variabila LO. Cand macroul este executat, echivalentul zecimal al acestui numar este afisat. Zerourile precedente numarului nu sunt afisate.
4.3. Magistrale seriale de comunicatie
Magistralele seriale se utilizeaza ca suport pentru transferul de informatii intre calculatoare sau intre componentele autonome ale unui sistem de calcul. Caracteristica principala a a oricarei magistrale seriale este transmisia secventiala, bit cu bit, a informatiilor, folosindu-se un numar redus de semnale (linii de comunicatie). In contrast, o magistrala paralela permite transferul simultan al mai multor biti (8, 16, 32), folosind in acest scop mai multe linii de date. In principiu transmisia seriala asigura o viteza de transfer mai redusa, in comparatie cu transmisia paralela, insa este mai economica (numar mai redus de linii de transmisie), iar distanta maxima de transfer este semnificativ mai mare.
Magistralele seriale pot fi clasificate dupa mai multe criterii :
dupa modul de sincronizare :
transfer sincron – se utilizeaza un semnal explicit de ceas (de sincronizare) pentru specificarea momentului in care un bit de data este valid;
transfer asincron – nu se utilizeaza semnal de ceas, sincronizarea intre unitatea emitenta si cea receptoare se face in mod implicit pe baza structurii specifice a datei transmise.
dupa lungimea blocului de date transmis :
transfer pe octet;
transfer pe bloc (numar mai mare de octeti).
dupa numarul de unitati comunicante
transfer serial de tip punct-la-punct : legatura se realizeaza intre doua echipamente;
transfer serial multipunct : legatura se realizeaza simultan intre mai multe echipamente, din care la un moment dat unul transmite si restul asculta.
dupa directia de transfer
transfer unidirectional (intr-un singur sens);
transfer bidirectional sau „full duplex”(simultan in doua sensuri);
transfer bidirectional pe o singura linie sau „half duplex ”(se transmite pe rind in cele doua directii).
dupa domeniul de utilizare
magistrale de sistem – folosite pentru interconectarea componentelor unui microsistem (ex : microcontrolor, memorii, convertoare A/D si D/A etc.);
canale de comunicatie seriala – folosite pentru interconectarea unor echipamente inteligente (ex : calculatoare, imprimanta , consola ) prin legatura punc-la-punct;
retea de comunicatie – folosita pentru asigurarea comunicatiei multipunct intre un set de echipamente de calcul (observatie : intr-o acceptiune mai restrinsa retelele de comunicatie nu fac parte din clasa magistralelor seriale).
Transferul serial se realizeaza pe baza unui set de reguli care alcatuiesc protocolul de comunicatie. Doua echipamente care comunica pe o magistrala seriala (canal serial) trebuie sa respecte acelasi protocol si aceeasi parametri de transmisie (viteza de transfer, mod de sincronizare, lungimea blucului de date, etc.).
Pentru a asigura interoperabilitatea intre diferite echipamente realizate de diversi producatori, s-au definit o serie de standarde internationale, care specifica :
modul de transmisie a datelor (sincron/asincron),
modul de structurare a datelor transmise (octet, bloc),
viteza de transmisie,
mecanismele de detectie si corectie a eventualelor erori
tipul semnalelor folosite pentru transmisie ( tensiune, curent, tensiune diferentiala, etc.)
mecanismele de sincronizare a echipamentelor comunicante (ex : protocol XON/XOFF, sincronizare prin semnale explicite, etc.)
tipul de conectori folositi
natura si parametri fizici ai mediului de transmisie (ex : cablu bifilar torsadat, cablu coaxial, fibra optica, etc.)
Cele mai cunoscute standarde folosite pentru comunicatia seriala sunt : RS 232 (V24), RS 485, I2C si HDLC/SDLC. In continuare se prezinta citeva caracteristici mai importante ale acestor standarde.
4.3.1.Standardul RS232
Este cel mai cunoscut si utilizat standard de comunicatie seriala asincrona. El a fost definit de mai multe organisme internationale de standardizare sub diferite nume : IEC232, CCITT-V24, RS232C. Initial standardul a fost conceput cu scopul de a permite conectarea unui terminal inteligent la un calculator central printr-o legatura telefonica. Standardul precizeaza interfata dintre un echipament de calcul (DTE- Data Terminal Equipment) si adaptorul sau la linia telefonica (DCE- Data Circuit-terminating Equipment), cunoscut si sub numele de modem (Modulator/Demodulator). Interfata permite comunicatia seriala bidirectionala intre cele doua echipamente, si este simetrica la cele doua capete ale liniei. Ulterior specificatiile acestei interfete s-au folosit pentru a realiza legaturi seriale intre diverse echipamente fara a se mai folosi un modem.
Principalele precizari ale standardului RS232 se refera la :
– modul de transmisie : serial asincron, bidirectional (pe doua linii de date separate)
codificarea informatiilor binare : prin nivele de tensiune sau curent (bucla de curent) :
1 logic – (-3V … -15V)
0 logic – (+3V… +15V)
structura informatiei elementare transmise :
un bit de start (0 logic)
5-8 biti de date
0-1 bit de paritate (paritate para sau impara)
1-2 biti de stop (1 logic)
Structura unui caracter transmis conform standardului RS232
semnale utilizate pentru transmisia de date si pentru controlul fluxului de date ;
tipul de conectori folositi (RK 25, mufa si soclu) si pozitia semnalelor pe pinii conectorilor;
modul de interconectare a semnalelor la cele doua capete ale unui cablu de transmisie;
viteza de transmisie (110, 300, 600, 1200, 2400, 4800, 9600, 19200 bauds);
reguli de control al fluxului de date (control hardware – protocolul DTR/DSR sau software – protocolul XON/XOFF);
In tabelul de mai jos s-a indicat numele si semnificatia celor mai importante semnale definite de standardul RS232. De asemenea s-a indicat pozitia acestor semnale pe un conector de 25 pini si pe unul de 9 pini. Directia este indicata intre calculator (DTE) si modem (DCE).
Tabelul 1
In cazul transmisiei seriale asincrone, sincronizarea intre unitatea emitenta si cea receptoare se realizeaza la inceputul fiecarui caracter prin bitul de start (0 logic). De precizat ca in repaus linia este in 1 logic. Citirea datelor se face secvential, la jumatatea intervalelor de bit care urmeaza bitului de start. Protocolul asigura citirea corecta a datelor chiar si in cazul in care exista mici diferente (sub 2%) intre frecventa de emisie si cea de citire a datelor. Aceasta sincronizare nu s-ar pastra in cazul in care lungimea datelor utile ar fi mai lunga. Pentru controlul fluxului de date transmise se poate utiliza un protocol hardware sau unul software. In primul caz se utilizeaza semnale explicite (grupul de semnale DTR/DSR sau RTS/CTS) prin care unitatea receptoare poate sa opreasca temporar fluxul de date transmis. In acest fel se poate sincroniza frecventa de emisie a datelor la viteza de prelucrare a unitatii receptoare. A doua metoda nu utilizeaza semnale de control , in schimb foloseste un set de coduri speciale prin care poate sa opreasca (codul XOFF) sau sa reporneasca (codul XON) fluxul de date. Aceasta metoda se poate utiliza numai la transmiterea unor date in codificare ASCII. La transmisia binara codurile de control ar putea sa fie prezente in datele de transmis.
In cazul in care se conecteaza doua echipamente aflate la distanta mica (ex : in interiorul unei incaperi) se pot utiliza numai o parte din semnalele precizate in interfata RS232. In acest fel cablul de legatura devine mai ieftin si mai usor de manipulat. In continuare se prezinta citeva configuratii tipice de interconectare.
Transmisie unidirectionala, fara controlul fluxului de date
Transmisie bidirectionala folosind protocolul XON/XOFF
Transmisie bidirectionala folosind protocolul DTR/DSR
Transmisie bidirectionala folosind interfata completa RS232
Majoritatea calculatoarelor actuale dispun de cel putin o interfata seriala. La calculatoarele de tip PC una din interfetele seriale este utilizata de obicei pentru a asigura legatura cu dispozitivul de indicare de tip mouse.
4.4.2. Surse de curent constant
O sursa de curent este o retea activa sau un circuit electronic activ care genereaza la bornele de iesire un semnal electric sub forma unui curent controlabil.
1. Calculul rezistentei de iesire a sursei de curent simple, cel mai frecvent utilizata in circuitele integrate.
Sursa simpla de curent cu doua tranzistoare este un circuit propriu structurii integrate si reprezinta un generator de curent comandat in curent. Intre curentul comandat si cel de comanda exista o relatie ce se poate determina usor daca se presupune ca cei doi curenti de baza sunt egali intre ei si egali cu unitatea. Considerand cele doua tranzistoare identice, .
și la curent mic este de ordinul .
Valoarea rezistentei dinamice a unei diode realizata cu tranzistor (motivul folosirii tranzistorului drept dioda este : compensarea termica pentru efectele lui dar și β, ceea ce o diodă simplă – o joncțiune emitoare – nu asigură ) este calculata astfel:
care, la curent de ordinul 20 este de cca 1 .
Stabilitatea termica a sursei de curent se exprima prim coeficientul si se determina calculand derivata curentului in raport cu temperatura. Daca se presupune ca numai este dependenta de temperatura, se obtine:
Pentru R de ordinul coeficientul de temperatura este foarte mic si pozitiv.
2. Calculul rezistenței de ieșire a sursei de curent "Widlar".
Sursa de curent Widlar se foloseste pentru obtinerea unor curenti de polarizare mici, de ordinul , fara un consum excesiv din aria de siliciu pentru rezistenta totala din circuit.
Se considera parametrii tranzistoarelor apropiati, pentru simplicitate.
Aici , deci
Numeric, pentru un curent de 20 și RE = 1, se obtine Re = 10.
3. Calculul rezistentei de iesire a sursei ,,cascoda". Circuitul se utilizeaza deoarece permite obtinerea unei rezistente Re1 de valoare mare, intrucat T1 are in emitor o rezistenta RE=Re2, de valoare mare.
Se considera tranzistoarele la acelasi curent. Reactia din baza lui T2 si prin diodele D1,D2 este foarte slaba.
Circuitul simplificat are forma :
Pentru aceasta:
In baza diodei D2 se vede rezistenta
Pe circuitul simplificat
Deci
Adica o valoare foarte mare pentru de valoare mare. La curenti mai mari este mai mica.
Sursa de curent cascoda se utilizeaza atunci cand se cere o foarte buna stabilizare a curentului la variatiile sarcinii.
4. Surse de curent multiple
Sursele de curent multiple folosesc o singura referinta si mai multe ramuri de iesire. Sursele multiple se pot realiza cu tranzistoare npn sau pnp.
a. b.
Surse de curent multiple realizate: (a.) cu tranzistoare npn; (b.) cu tranzistoare pnp;
5. Sursa de curent constant cu doua tranzistoare si cu diode
Aceasta sursa scoate la iesire un curent constant de 1A.
6. Sursa de curent constant realizata cu circuitul LM 317
Sursa de curent constant
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: Circuit Pentru Testarea Ultracapacitoarelor (ID: 162110)
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.
