Microcontrolere Cap 2

download Microcontrolere Cap 2

of 24

Transcript of Microcontrolere Cap 2

  • 8/2/2019 Microcontrolere Cap 2

    1/24

    Microcontrolere

    Capitolul 2

    Microcontrolere PIC

    1.1 Unitatea de memorie

    Memoria este o parte a microcontrolerului a crei funcie este de a nmagazina date. Cel maiuor mod de a explica este de a-l descrie ca un dulap mare cu multe sertare. Dac presupunem cam marcat sertarele ntr-un asemenea fel nct s nu fie confundate, oricare din coninutul lor va fiatunci uor accesibil. Este suficient s se tie denumirea sertarului i astfel coninutul lui ne va ficunoscut n mod sigur.

    Componentele de memorie sunt exact aa. Pentru o anumit intrare obinem coninutul uneianumite locaii de memorie adresate i aceasta este totul. Dou noi concepte sunt prezente:adresarea i locaia de memorie. Memoria const din toate locaiile de memorie, i adresareanu este altceva dect selectarea uneia din ele. Aceasta nseamn c noi trebuie s selectm locaia de

    memorie la un capt, i la cellalt capt trebuie s ateptm coninutul acelei locaii. n afar decitirea dintr-o locaie de memorie, memoria trebuie de asemenea s permit scrierea n ea. Aceastase face prin asigurarea unei linii adiionale numit linie de control. Vom denumi aceast linie cuR/W (citete /scrie). Linia de control este folosit n urmtorul fel: dac R/W=1, se face citirea, idac R/W=0 atunci se face scrierea n locaia de memorie. Memoria este primul element, dar avemnevoie i de altele pentru ca microcontrolerul nostru s funcioneze.

    1.2 Unitatea central de procesare

    S adugm alte 3 locaii de memorie pentru un bloc specific ce va avea o functiiincorporate de adunare, nmulire, mprire, scdere. Partea pe care tocmai am adugat-o estenumit "unitatea central de procesare " (CPU). Locaiile ei de memorie sunt numite registre.

  • 8/2/2019 Microcontrolere Cap 2

    2/24

    Microcontrolere

    Registrele sunt deci locaii de memorie al cror rol este de a ajuta prin executarea a variateoperaii matematice sau a altor operaii cu date oriunde se vor fi gsit datele. S privim la situaiacurent. Avem dou entiti independente (memoria i CPU) ce sunt interconectate, i astfel oriceschimb de informaii este ascuns, ca i funcionalitatea sa. Dac, de exemplu, dorim s adugm

    coninutul a dou locaii de memorie i ntoarcem rezultatul napoi n memorie, vom avea nevoie deo conexiune ntre memorie i CPU. Mai simplu formulat, trebuie s avem o anumit "cale" prin caredatele circul de la un bloc la altul.

    1.3 Bus-ul

    Calea este numit "bus"- magistral. Fizic, el reprezint un grup de 8, 16, sau mai multe fire.Sunt dou tipuri de bus-uri: bus de adres i bus de date. Primul const din attea linii ct esteadresa (in biti) de memorie ce dorim s o adresm, iar cellalt este att de lat ct sunt datele, ncazul nostru 8 bii sau linia de conectare. Primul servete la transmiterea adreselor de la CPU lamemorie, iar cel de al doilea la conectarea tuturor blocurilor din interiorul microcontrolerului.

    n ceea ce privete funcionalitatea, situaia s-a mbuntit, dar o nou problem a aprut deasemenea: avem o unitate ce este capabil s lucreze singur, dar ce nu are nici un contact cu lumeade afar, sau cu noi! Pentru a nltura aceast deficien, s adugm un bloc ce conine ctevalocaii de memorie al cror singur capt este conectat la bus-ul de date, iar cellalt are conexiune cu

    liniile de ieire la microcontroler ce pot fi vzute cu ochiul liber ca pini la componenta electronic.

  • 8/2/2019 Microcontrolere Cap 2

    3/24

    Microcontrolere

    1.4 Unitatea intrare-ieire

    Aceste locaii ce tocmai le-am adugat sunt numite "porturi". Sunt diferite tipuri de porturi:intrare, ieire sau porturi pe dou-ci. Cnd se lucreaz cu porturi, mai nti de toate este necesar sse aleag cu ce port urmeaz s se lucreze, i apoi s se trimit date la, sau s se ia date de la port.

    Cnd se lucreaz cu el portul se comport ca o locaie de memorie. Ceva este pur i simpluscris n sau citit din el, i este posibil de a remarca uor aceasta la pinii microcontrolerului.

    1.5 Comunicaia serial

    Cu aceasta am adugat la unitatea deja existent posibilitatea comunicrii cu lumea de afar.Totui, acest mod de comunicare are neajunsurile lui. Unul din neajunsurile de baz este numrul delinii ce trebuie s fie folosite pentru a transfera datele. Ce s-ar ntmpla dac acestea ar trebuitransferate la distan de civa kilometri? Numrul de linii nmulit cu numrul de kilometri nu

    promite costuri eficiente pentru proiect. Nu ne rmne dect s reducem numrul de linii ntr-un aafel nct s nu scdem funcionalitatea. S presupunem c lucrm doar cu 3 linii, i c o linie estefolosit pentru trimiterea de date, alta pentru recepie i a treia este folosit ca o linie dereferin att pentru partea de intrare ct i pentru partea de ieire. Pentruca aceasta s funcioneze, trebuie s stabilim regulile de schimb ale datelor. Aceste reguli suntnumite protocol. Protocolul este de aceea definit n avans ca s nu fie nici o nenelegere ntre

    prile ce comunic una cu alta. De exemplu, dac un om vorbete n francez, i altul vorbete nenglez, este puin probabil c ei se vor nelege repede i eficient unul cu altul. S presupunem c

    avem urmtorul protocol.Unitatea logic "1" este setat pe linia de transmisie pn ce ncepe transferul. Odat ce

    ncepe transferul, coborm linia de transmisie la "0" logic pentru o perioad de timp (pe care o vomdesemna ca T), aa c partea receptoare va ti c sunt date de primit, aa c va activa mecanismul eide recepie. S ne ntoarcem acum la partea de transmisie i s ncepem s punem zero-uri i unu-uri

    pe linia de transmisie n ordine, de la un bitul cel mai putin semnificativ, la cel mai semnificativ. Slsm ca fiecare bit s rmn pe linie pentru o perioad de timp egal cu T, i la sfrit, sau dup al8-lea bit, s aducem unitatea logic "1" napoi pe linie ce va marca sfritul transmisiei unei date.Protocolul ce tocmai l-am descris este numit n literatura profesional NRZ (Non-Return to Zero).

  • 8/2/2019 Microcontrolere Cap 2

    4/24

  • 8/2/2019 Microcontrolere Cap 2

    5/24

    Microcontrolere

    Bineneles, cnd aceasta se ntmpl cu un calculator, l resetm pur i simplu i vacontinua s lucreze. Totui, nu exist buton de resetare pe care s-l apsm n cazulmicrocontrolerului care s rezolve astfel problema noastr. Pentru a depi acest obstacol, avemnevoie de a introduce nc un bloc numit watchdog-cinele de paz. Acest bloc este de fapt un altcontor liber (free-run) unde programul nostru trebuie s scrie zero ori de cte ori se execut corect.n caz c programul se "nepenete", nu se va mai scrie zero, iar contorul se va reseta singur laatingerea valorii sale maxime. Aceasta va duce la rularea programului din nou, i corect de aceastdat pe toat durata. Acesta este un element important al fiecrui program ce trebuie s fie fiabilfr supravegherea omului.

    1.8 Convertorul Analog-Digital

    Pentru c semnalele de la periferice sunt substanial diferite de cele pe care le poate nelegemicrocontrolerul (zero i unu), ele trebuie convertite ntr-un mod care s fie neles demicrocontroler. Aceast sarcin este ndeplinit de un bloc pentru conversia analog-digital sau deun convertorAD. Acest bloc este responsabil pentru convertirea unei informaii despre o anumitvaloare analogic ntr-un numr binar i pentru a o transmite unui bloc CPU sub forma in care

    blocul CPU o poate procesa.

    Astfel microcontrolerul este acum terminat, i tot ce mai rmne de fcut este de a-l punentr-o component electronic unde va accesa blocurile interioare prin pinii exteriori. Imaginea demai jos arat cum arat un microcontroler n interior.

    Configuraia fizic a interiorului unui microcontroler

  • 8/2/2019 Microcontrolere Cap 2

    6/24

    Microcontrolere

    Liniile subiri ce merg din interior ctre prile laterale ale microcontrolerului reprezint fireconectnd blocurile interioare cu pinii capsulei microcontrolerului. Schema urmtoare reprezintseciunea central a microcontrolerului.

    Pentru o aplicaie real, un microcontroler singur nu este de ajuns. n afar de microcontroler, avemnevoie de un program pe care s-l execute, i alte cteva elemente ce constituie o interfa logicspre elementele de executie (ce se va discuta n capitolele urmtoare).

  • 8/2/2019 Microcontrolere Cap 2

    7/24

    Microcontrolere

    1.9 Programul

    Scrierea programului este un domeniu special de lucru al microcontolerului i este denumit"programare". S ncercm s scriem un mic program ce l vom crea singuri i pe care oricine va fin stare s-l neleag.

    STARTREGISTER1=MEMORY LOCATION_AREGISTER2=MEMORY LOCATION_BPORTA=REGISTER1 + REGISTER2END

    Programul adun coninutul a dou locaii de memorie, i vede suma lor la portul A.

    Prima linie a programului este pentru mutarea coninutul locaiei de memorie "A" ntr-unuldin registrele unitii de procesare centrale. Pentru c avem nevoie i de celelalte date, le vom mutade asemenea n cellalt registru al unitii de procesare centrale.

    Urmtoarea instruciune instruiete unitatea de procesare central s adune coninutul celordou registre si sa trimit rezultatul obinut la portul A, nct suma acestei adunri s fie vizibil

    pentru toat lumea de afar. Pentru o problem mai complex, programul care s lucreze larezolvarea ei va fi mai mare.

    Programarea poate fi fcut n cteva limbaje ca Assembler, C i Basic care sunt cele maifolosite limbaje. Assembler aparine limbajelor de nivel sczut ce sunt programate lent, dar folosesccel mai mic spaiu n memorie i dau cele mai bune rezultate cnd se are n vedere viteza deexecuie a programului.

    Pentru c este cel mai folosit limbaj n programarea microcontrolerelor va fi discutat ntr-uncapitol ulterior. Programele n limbajul C sunt mai uor de scris, mai uor de neles, dar sunt mailente n executare dect programele n Assembler. Basic este cel mai uor de nvat, iinstruciunile sale sunt cele mai aproape de modul de gndire a omului, dar ca i limbajul de

    programare C este de asemenea mai lent dect Assembler-ul. n orice caz, nainte de a v hotr nprivina unuia din aceste limbaje trebuie s studiai cu atenie cerinele privind viteza de execuie,mrimea memoriei i timpul disponibil pentru asamblarea sa.

    Dup ce este scris programul, trebuie s instalm microcontrolerul ntr-un aparat i s-llsm s lucreze. Pentru a face aceasta trebuie s adugm cteva componente externe necesare

    pentru funcionarea sa. Mai nti trebuie s dm via microcontrolerului prin conectarea sa la o

    surs (tensiune necesar pentru operarea tuturor instrumentelor electronice) i oscilatorului al cruirol este similar inimii din corpul uman. Bazat pe ceasul su microcontrolerul execut instruciunile

    programului. ndat ce este alimentat, microcontrolerul va executa un scurt control asupra sa, se vauita la nceputul programului i va ncepe s-l execute. Cum va lucra aparatul depinde de muli

    parametri, cel mai important fiind priceperea dezvoltatorului de hardware, i de experienaprogramatorului n obinerea maximului din aparat cu programul su.

  • 8/2/2019 Microcontrolere Cap 2

    8/24

    Microcontrolere

    Microcontrolerul PIC16F84

    Introducere

    PIC16F84 aparine unei clase de microcontrolere de 8 bii cu arhitectur RISC. Structura luigeneral este artat n schia urmtoare reprezentnd blocurile de baz.

    Memoria program (FLASH)-pentru memorarea unui program scris.

    Pentru c memoria ce este fcut n tehnologia FLASH poate fi programat i tears de mai multeori, ceea ce face ca microcontrolerul sa poata fi utilizat pentru dezvoltare deaplicatii.

    EEPROM-memorie de date ce trebuie s fie salvate cnd nu mai este alimentare. Este nmod uzual folosit pentru memorarea de date importante ce nu trebuie pierdute dac sursa de

    alimentare se ntrerupe dintr-o dat. De exemplu, o astfel de dat este o temperatur prestabilit nregulatoarele de temperatur. Dac n timpul ntreruperii alimentrii aceast dat se pierde, va trebuis facem ajustarea nc o dat la revenirea alimentrii.

    RAM-memorie de date folosit de un program n timpul executrii sale.

    n RAM sunt memorate toate rezultatele intermediare sau datele temporare ce nu sunt cruciale lantreruperea sursei de alimentare.

  • 8/2/2019 Microcontrolere Cap 2

    9/24

    Microcontrolere

    PORTUL A i PORTUL B sunt conexiuni fizice ntre microcontroler i lumea de afar.Portul A are 5 pini, iar portul B are 8 pini.

    TIMER-UL LIBER (FREE-RUN) este un registru de 8 bii n interiorul

    microcontrolerului ce lucreaz independent de program. La fiecare al patrulea impuls de ceas aloscilatorului i ncrementeaz valoarea lui pn ce atinge maximul (255), i apoi ncepe s numeretot din nou de la zero. Dup cum tim timpul exact dintre fiecare dou incrementri ale coninutuluitimer-ului, poate fi folosit pentru msurarea timpului ce este foarte util in unele aplicatii.

    UNITATEA DE PROCESARE CENTRAL are rol de coordonare a celorlalte blocuriale microcontrolerului i execut programul utilizatorului

    CISC, RISC

    S-a spus deja c PIC1684 are o arhitectur RISC. Acest termen este adeseori gsit nliteratura despre calculatoare, i are nevoie s fie explicat aici mai n detaliu. Arhitectura Harvardeste un concept mai nou dect von-Neumann. S-a nscut din nevoia de mrire a vitezeimicrocontrolerului. n arhitectura Harvard, bus-ul de date i bus-ul de adrese sunt separate. Astfeleste posibil un mare debit de date prin unitatea de procesare central, i bineneles, o vitez maimare de lucru. Separarea programului de memoria de date face posibil ca mai departe instruciuniles nu trebuiasc s fie cuvinte de 8 bii. PIC16F84 folosete 14 bii pentru instruciuni ceea ce

    permite ca toate instruciunile s fie instruciuni dintr-un singur cuvnt. Este de asemenea tipicpentru arhitectura Harvard s aib mai puine instruciuni dect von-Newmann i s aibinstruciuni executate uzual intr-un ciclu.

    Microcontrolerele cu arhitectur Harvard sunt de asemenea numite "microcontrolere RISC".RISC nseamn Reduced Instruction Set Computer. Microcontrolerele cu arhitectura von-

    Newmann sunt numite "microcontrolere CISC". Titlul CISC nseamn Complex Instruction SetComputer.

    Pentru c PIC16F84 este un microcontroler RISC, aceasta nseamn c are un set redus deinstruciuni, mai precis 35 de instruciuni (de ex. microcontrolerele INTEL i Motorola au peste 100de instruciuni). Toate aceste instruciuni sunt executate ntr-un ciclu cu excepia instruciunilor

    jump i branch. Conform cu ceea ce spune constructorul, PIC16F84 ajunge la rezultate de 2:1 ncompresia cod i 4:1 n vitez n comparaie cu alte microcontrolere de 8 bii din clasa sa.

  • 8/2/2019 Microcontrolere Cap 2

    10/24

    Microcontrolere

    Aplicaii

    PIC16F84 este utilizabil n multe aplicatii, de la industriile auto i aplicaiile de controlcasnice la instrumentele industriale, senzori la distan, mnere electrice de ui i dispozitivele desecuritate. Este de asemenea ideal pentru cardurile smart ca i pentru aparatele alimentate de bateriedin cauza consumului lui mic.

    Memoria EEPROM face mai uoar aplicarea microcontrolerelor la aparate unde se cerememorarea permanent a unor parametri (coduri pentru transmitoare, viteza motorului,frecvenele receptorului, etc.). Costul sczut, consumul sczut, utilizarea uoar i flexibilitatea facPIC16F84 aplicabil chiar i n domenii unde microcontrolerele nu au fost prevzute nainte(exemple: funcii de timer, nlocuirea interfeei n sistemele mari, aplicaiile coprocesor, etc.).Programabilitatea sistemului acestui cip (mpreun cu folosirea a doar doi pini n transferul de date)face posibil flexibilitatea produsului, dup ce asamblarea i testarea au fost terminate.

    Clock-ul /ciclul instruciune

    Clock-ul sau ceasul determina viteza de lucru a microcontrolerului, i este generat de un"oscilator". Dac ar fi s comparm un microcontroler cu un ceas de timp, "clock-ul" nostru ar fi unticit pe care l-am auzi de la ceasul de timp. n acest caz, oscilatorul ar putea fi comparat cu arcul ceeste rsucit astfel ca ceasul de timp s mearg. De asemenea, fora folosit pentru a ntoarce ceasul

    poate fi comparat cu o surs electric. Clock-

    ul de la oscilator intr ntr-un microcontroler prin pinul OSC1 unde circuitul intern almicrocontrolerului divide clock-ul n 4 clock-uri egale Q1, Q2, Q3 i Q4 ce nu se suprapun. Aceste4 clock-uri constituie un ciclu de o singur instruciune (numit de asemenea ciclu main) n timpulcreia instruciunea este executat.

    Executarea instruciunii ncepe prin apelarea unei instruciuni care este urmtoarea nprogram. Instruciunea este apelat din memoria program la fiecare Q1 i este scris n registrul deinstruciuni la Q4. Decodarea i executarea instruciunii sunt fcute ntre urmtoarele cicluri Q1 iQ4. n urmtoarea diagram putem vedea relaia dintre ciclul instruciunii i clock-ul oscilatorului(OSC1) ca i aceea a clock-urilor interne Q1-Q4. Contorul de program (PC) reine informaia despre

    adresa urmtoarei instruciuni.

  • 8/2/2019 Microcontrolere Cap 2

    11/24

    Microcontrolere

    Pipelining

    Ciclul instruciune const din starile Q1, Q2, Q3 i Q4. Ciclurile de instruciuni de apelare iexecutare sunt conectate ntr-un aa fel nct pentru a face o apelare, este necesar un ciclu cu o

    instruciune, i mai este nevoie de nc unul pentru decodare i executare. Totui, datoritpipelining-ului (folosirea unei pipeline-conduct, este aducerea unei instruciuni din memorie ntimp ce se execut alta), fiecare instruciune este executat efectiv ntr-un singur ciclu. Dacinstruciunea cauzeaz o schimbare n contorul programului, i PC-ul nu direcioneaz spreurmtoarea ci spre alte adrese (poate fi cazul cu subprogramele jumps sau calling), 2 cicluri suntnecesare pentru executarea unei instruciuni. Aceasta pentru c instruciunea trebuie procesat dinnou, dar de data aceasta de la adresa corect. Ciclul ncepe cu clock-ul Q1, prin scrierea n registrulinstruction register (IR). Decodarea i executarea ncepe cu clock-urile Q2, Q3 i Q4.

  • 8/2/2019 Microcontrolere Cap 2

    12/24

    Microcontrolere

    TYC0 citete instruciunea MOVLW 55h (nu are importan pentru noi ce instruciune afost executat, ce explic de ce nu este un dreptunghi desenat n partea de jos).

    TCYI execut instruciunea MOVLW 55h i citete MOVWF PORTB.TCY2 execut MOVWF PORTB i citete CALL SUB_1.TCY3 execut o apelare a subprogramului CALL SUB_1, i citete instruciunea BSF

    PORTA, BIT3. Pentru c instruciunea aceasta nu este aceea de care avem nevoie, sau nu este primainstruciune a subprogramului SUB_1 a crei execuie este urmtoarea n ordine, instruciuneatrebuie citit din nou. Acesta este un bun exemplu a unei instruciuni avnd nevoie de mai mult deun ciclu.

    TCY4 ciclul instruciunii este total folosit pentru citirea primei instruciuni din subprogramla adresa SUB_1.

    TCY5 execut prima instruciune din subprogram SUB_1 i citete urmtoarea.

    Semnificaia pinilor

    PIC16F84 are un numr total de 18 pini. Cel mai adesea se gsete ntr-o capsul de tipDIP18 dar se poate gsi de asemenea i ntr-o capsul SMD care este mai mic ca cea DIP. DIP este

    prescurtarea de la Dual In Package. SMD este prescurtarea de la Surface Mount Devices sugerndc gurile pentru pini nu sunt necesare n lipirea acestui tip de component.

    Pinii microcontrolerului PIC16F84 au urmtoarea semnificaie:

    Pin 1=RA2 pinul 2 al portului A. (nu are funcie adiional).Pin 2=RA3 pinul 3 al portului A. (nu are funcie adiional).Pin 3=RA4pinul 4 al portului A (TOCK1 de la timer este functia aditionala)

    Pin 4=MCLR intrare de reset i tensiune de programare Vpp .Pin 5=VSS Alimentare, mas.

    Pin 6=RB0pinul 0 al portului B. Intrarea ntrerupere este o funcie adiional.Pin 7=RB1pinul 1 al portului B. Nu are funcie adiional.

    Pin 8= RB2 pinul 2 al portului B. Nu are funcie adiional.Pin 9= RB3 pinul 3 al portului B. Nu are funcie adiional.

  • 8/2/2019 Microcontrolere Cap 2

    13/24

    Microcontrolere

    Pin 10= RB4pinul 4 al portului B. Nu are funcie adiional.Pin 11= RB5pinul 5 al portului B. Nu are funcie adiional.Pin 12= RB6 pinul 6 al portului B. Linia de 'Clock' n mod programare.Pin 13= RB7 pinul 7 al portului B. Linia 'Data' n mod programare.Pin 14= Vdd polul pozitiv al sursei.

    Pin 15= OSC2 pin desemnat pentru conectarea la un oscilator.Pin 16= OSC1 pin desemnat pentru conectarea la un oscilator.Pin 17= RA0 pinul 0 al portului A. Nu are funcie adiional.Pin 18= RA1 pinul 1 al portului A. Nu are funcie adiional.

    2.1 Generator de ceas oscilator

    Circuitul oscilator este folosit pentru a da microcontrolerului un ceas-clock. Ceasul este

    necesar pentru ca microcontrolerul s execute programul sau instruciunile din program.

    Tipuri de oscilatoarePIC16F84 poate lucra cu patru configuraii diferite de oscilator. Pentru c configuraiile cu

    oscilator cu cristal i rezistor-condensator (RC) sunt cele utilizate cel mai frecvent, doar pe ele levom meniona aici. Tipul de microcontroler cu oscilator cu cristal este desemnat ca XT, iarmicrocontrolerul cu perechea rezistor-condensator are desemnarea RC. Aceasta este important

    pentru c trebuie s numii tipul de oscilator cnd cumprai un microcontroler.

    Oscilatorul XT

    Oscilatorul cu cristal se afl intr-o carcasmetalic cu doi pini pe care este nscrisfrecvena la care cristalul oscileaz. Mai suntnecesare doua condensatore ceramice de 30pF,cu cellalt capt la mas, a fi conectate la fiecare

    pin.

    Oscilatorul i condensatorii pot fi ncapsulaimpreun ntr-o carcas cu trei pini. Unasemenea element se numete rezonator ceramic.Pinii centrali ai elementului sunt masa, iar piniiterminali sunt conectai la pinii OSC1 i OSC2 aimicrocontrolerului. Cnd se proiecteaz unaparat, regula este s plasai oscilatorul ct maiaproape de microcontroler, pentru a elimina oriceinterferen de pe liniile pe care microcontrolerul

    primete tactul de ceas.

  • 8/2/2019 Microcontrolere Cap 2

    14/24

    Microcontrolere

    Oscilatorul RC

    n aplicaiile unde nu este nevoie de o mare precizie de timp, oscilatorul RC permiteeconomii adiionale la cumprare. Fecvena de rezonan a oscilatorului RC depinde de valoarea

    tensiunii de alimentare, rezistorul R, condensatorul C i temperatura de lucru. Trebuie menionat cfrecvena de rezonan este de asemenea influenat de variaiile normale ale parametrilor de proces,de tolerana extern a componentelor R i C, etc.

    Diagrama de mai sus arat cum este conectat oscilatorul RC la PIC16F84. La valoarearezistorului mai mic 2.2k, oscilatorul poate deveni instabil, sau oscilaia se poate chiar opri. Lavalori mari a lui R (ex.1M) oscilatorul devine foarte sensibil la zgomot i umezeal. Se recomandca valoarea rezistorului R s fie ntre 3 i 100k. Trebuie folosit un condensator extern (C=0pF), de

    peste 20pF pentru zgomot i stabilitate. Indiferent de ce oscilator este folosit, pentru a obine un

    ceas la care s funcioneze microcontrolerul, ceasul trebuie divizat la 4. Un ceas al oscilatoruluidivizat cu 4 se poate obine la pinul OSC2/CLKOUT, i poate fi folosit pentru testarea sausincronizarea altor circuite logice.

    Dup alimentare, oscilatorul ncepe s oscileze. Oscilaia la nceput are o perioad i oamplitudine instabile, dar dup un timp devin stabilizate.

  • 8/2/2019 Microcontrolere Cap 2

    15/24

    Microcontrolere

    Pentru a preveni ca un asemenea ceas inexact s influeneze performanelemicrocontrolerului, trebuie s inem microcontrolerul n starea reset pe durata stabilizrii ceasului

    oscilatorului. Diagrama de mai sus arat o form tipic de semnal pe care microcontrolerul oprimete de la oscilatorul cu cuar dup alimentare.

    2.2 Reset-ul

    Resetul este folosit pentru a pune microcontrolerul ntr-o stare 'initiala'. Pentru a funcionacorect trebuie resetat, nsemnnd c toi registrii vor fi pui ntr-o stare de start. Resetul nu estefolosit numai cnd microcontrolerul nu se comport cum vrem noi, dar poate de asemenea s fiefolosit cnd apare o ntrerupere n programul de execuie.

    Pentru a preveni ajungerea unui zero logic lapinul MCLR accidental (linia de deasupra nseamn cresetul este activat de un zero logic), MCLR trebuie sfie conectat printr-un rezistor la polul pozitiv al surseide alimentare. Rezistorul trebuie s fie ntre 5 i 10k.Acest rezistor a crui funcie este de a menine oanumit linie la starea logic unu, preventiv, senumete o scoatere-pull up.

    Microcontrolerul PIC16F84 are cteva surse de reset:a) Reset la alimentare, POR (Power-On Reset)

    b) Reset n timpul lucrului obinuit prin aducerea unui zero logic la pinul MCLR almicrocontrolerului.c) Reset n timpul regimului SLEEPd) Reset la depirea timer-ului watchdog (WDT)

    e) Reset n timpul depirii WDT n timpul regimului SLEEP.

  • 8/2/2019 Microcontrolere Cap 2

    16/24

    Microcontrolere

    Cele mai importante surse de reset sunt a) i b). Prima are loc de fiecare dat cnd estealimentat microcontrolerul i servete la aducerea toturor regitrilor la starea iniial a poziiei destart. A doua este pentru a aduce un zero logic la pinul MCLR n timpul operaiei normale amicrocontrolerului. Este des folosit n dezvoltarea de programe.

    n timpul unui reset, locaiile de memorie RAM nu sunt resetate. Ele sunt necunoscute laalimentare i nu sunt schimbate la nici un reset. Spre deosebire de acestea, regitrii SFR sunt resetaila o stare iniial a poziiei de start. Unul din cele mai importante efecte ale resetului este setareacontorului de program (PC) la zero (0000h), ceea ce permite programului s nceap executarea dela prima instruciune scris.

    Resetul la scderea tensiunii de alimentare dincolo de limita permisibil (Brown-out Reset)

    Impulsul pentru resetare n timpul creterii tensiunii este generat de microcontroler nsui

    cnd detecteaz o cretere n tensiunea Vdd (n domeniul de la 1.2V la 1.8V). Acest impuls dureaz72 ms ceea ce este un timp suficient pentru oscilator ca s se stabilizeze. Aceste 72 ms suntasigurate de un timer intern PWRT care are oscilatorul lui RC. Microcontrolerul este n modul resetct timp PWRT este activ. Totui, cnd montajul funcioneaz, probleme apar cnd sursa nu scadela zero ci cnd scade mai jos de limita ce garanteaz funcionarea corect a microcontrolerului.Acesta este un caz real din practic, n special n mediile industriale unde perturbaiile iinstabilitile sursei de alimentare sunt ceva foarte curent. Pentru a rezolva aceast problem trebuies ne asigurm c microcontrolerul trece ntr-o stare de reset de fiecare dat cnd tensiunea surseiscade sub limita admis.

    Dac specificaiile electrice ale circuitului intern de resetare a microcontrolerului nu poatesatisface aceste cerine, se pot folosi componente electronice speciale ce sunt capabile s generezesemnalul de reset dorit. n afar de aceast funcie, ele pot asigura supravegherea tensiunii de

    alimentare. Dac tensiunea scade mai jos de nivelul specificat, un zero logic va aparea la pinul

  • 8/2/2019 Microcontrolere Cap 2

    17/24

    Microcontrolere

    MCLR ce ine microcontrolerul n starea de reset pn ce tensiunea este n limitele ce garanteazfuncionarea corect.

    2.3 Unitatea de Procesare Central

    Unitatea de procesare central (CPU) este creierul microcontrolerului. Aceast parte esteresponsabil cu gsirea i aducerea (citirea din memorie) instruciunii corecte ce trebuie executat,cu decodarea acelei instruciuni, i n final cu executarea ei.

    Unitatea Logic si Aritmetic (ALU)

    Unitatea aritmetic si logica este responsabil de executarea operaiilor ca adunarea,scderea, mutarea (la stnga sau la dreapta ntr-un registru) i de operaiile logice. Mutarea datelorntr-un registru se mai numete 'shifting'- transferare. PIC16F84 conine o unitate logic aritmeticde 8 bii i regitri de lucru de 8 bii.

  • 8/2/2019 Microcontrolere Cap 2

    18/24

    Microcontrolere

    n instruciunile cu doi operanzi, n mod obinuit un operand este n registrul de lucru(registrul W), iar cellalt este unul din regitri sau o constant. Prin operand nelegem coninutulasupra cruia se fac unele operaii, iar un registru este oricare din regitrii GPR sau SFR. GPR esteo prescurtare de la 'General Purposes Registers'- Regitri cu Scopuri Generale, iar SFR de la'Special Function Registers'-Regitri cu Funcie Special. n instruciunile cu un operand, acesta

    este fie in registrul W fie in unul din regitre. Pe lng operaiile aritmetice i logice, ALUcontroleaz biii de stare (bii gsii n registrul STATUS). Executarea unor instruciuni afecteaz

    biii de stare, de care depinde rezultatul nsui. Depinznd de ce instruciune este executat, ALUpoate afecta valorile biilorCarry (C), Digit Carry (DC), i Zero (Z) n registrul STATUS.

    Registrul STATUS

    bit 0 = C (Carry) TransportBit care este afectat de operaiile de adunare, scdere i transfer.1= transferul produs din bitul cel mai nalt al rezultatului0= transferul nu s-a produsBitul C este afectat de instruciunile ADDWF, ADDLW, SUBLW, SUBWF.bit 1 = DC (Digit Carry) DC TransportBit afectat de operaiile de adunare, scdere i transfer. Spre deosebire de bitul C, acest bitreprezint transferul din al patrulea loc rezultat. Este setat de adunare cnd exista un transport de la

    bitul 3 la bitul 4, sau de scdere cnd exista mprumut de la bitul 4 la bitul 3, sau de transfer nambele direcii.1= transfer produs la al patrulea bit conform cu ordinea, al rezultatului.0= transferul nu s-a produsBitul DC este afectat de instruciunile ADDWF, ADDLW, SUBLW, SUBWF.

    bit 2 = Z (Zero bit) Indicarea unui rezultat zero.Acest bit este setat cnd rezultatul unei operaii aritmetice sau logice executate este zero.1= rezultatul egal cu zero0= rezultatul nu este egal cu zero

    bit 3 = PD (Power-down bit)Bit ce este setat cnd microcontrolerul este alimentat atunci cnd ncepe s funcioneze, dup

    fiecare reset obinuit i dup executarea instruciunii CLRWDT. Instruciunea SLEEP l reseteazcnd microcontrolerul intr n regimul consum/uzaj redus. Setarea lui repetat este posibil prinreset sau prin pornirea sau oprirea sursei. Starea poate fi schimbata de asemenea de un semnal la

    pinul RB0/INT, de o schimbare la portul RB, de terminarea scrierii n EEPROM-ul de date intern, ide watchdog de asemenea.1= dup ce sursa a fost pornit

    0= executarea instruciunii SLEEP

  • 8/2/2019 Microcontrolere Cap 2

    19/24

    Microcontrolere

    bit 4 = TO Time-out ; depirea-overflow watchdog-ului.Bitul este setat dup pornirea sursei i executarea instruciunilor CLRWDT i SLEEP. Bitul esteresetat cnd watchdog-ul ajunge la sfrit semnalnd c ceva nu este n ordine.1= depirea-oveflow nu s-a produs0= depirea-overflow s-a produs

    bit6:5 = RP1:RP0 (Register Bank Select bits-Bii de Selectare a Bancului de Regitri)Aceti doi bii sunt partea superioar a adresei la adresarea direct. Pentru c instruciunile ceadreseaz memoria direct au doar apte bii, ei au nevoie doar de nc un bit pentru a adresa cei 256

    bytes adic ci are PIC16F84. Bitul RP1 nu este folosit, dar este lsat pentru expansiuni viitoareale microcntrolerului.01= primul banc00= bancul zero

    bit 7= IRP (Register Bank Select bit-Bit de Selectare a Bancului de Regitri)Bit al crui rol este de a fi al optulea bit la adresarea indirect a RAM-ului intern.

    1= bancul 2 i 30= bancul 0 i 1 (de la 00h la FFh)

    Registrul STATUS conine starea aritmetic ALU (C, DC, Z), starea RESET (TO, PD) i biiipentru selectarea bancului de memorie (IRP, RP1, RP0). Considernd c selecia bancului dememorie este controlat prin acest registru, el trebuie s fie prezent n fiecare banc. Bancul dememorie se va discuta mai n detaliu n capitolul Organizarea memoriei. Registrul STATUS poate firegistru de destinaie pentru orice instruciune, cu oricare alt registru ca sursa. Dac registrulSTATUS este o destinaie pentru instruciunile ce afecteaz biii Z, DC or C, atunci scrierea naceti trei bii nu este posibil.

    2.4 Porturi

    Portul se refer la un grup de pini ai unui microcontroler ce pot fi accesai simultan, sau lacare putem seta combinaia dorit de zero-uri i unu-uri, sau de la care putem citi o stare existent.Fizic, portul este un registru n interiorul unui microcontroler ce este conectat cu fire la piniimicrocontrolerului. Porturile reprezint conexiunea fizic a Unitii de Procesare Central cu lumeaexterioar. Microcontrolerul le folosete pentru a monitoriza sau controla alte componente sau

    aparate. Datorit funcionalitii, unii pini au rol dublu ca RA4/TOCKI de exemplu, care estesimultan al patrulea bit la portul A i o intrare extern pentru contorul liber (free-run). Selecia uneiadin aceste dou funcii ale pinului se face n unul din regitrii configuraionali. O ilustraie aacesteia este al cincilea bit T0CS n registrul OPTION. Selectnd una din funcii cealalt estedezactivat.

  • 8/2/2019 Microcontrolere Cap 2

    20/24

    Microcontrolere

    Toi pinii portului pot fi definii ca intrare sau ieire, conform cu nevoile unui montaj ce esten dezvoltare. Pentru a defini un pin ca pin de intrare sau ca pin de ieire, trebuie scris combinaiacorect de zero-uri i unu-uri n registrul TRIS. Dac n locul potrivit este scris "1" logic n registrulTRIS, acel pin este pin de intrare, iar dac este valabil contrariul, este un pin de ieire. Fiecare portare registrul lui TRIS. Astfel, portul A are TRISA la adresa 85h, iar portul B are TRISB la adresa86h.

    PORT_B

    PORTB are 8 pini. Registrul adecvat pentru direcia datelor este TRISB la adresa 86h.Setarea unui bit n registrul TRISB definete pinul portului corespunztor ca pin de intrare, iresetarea unui bit n registrul TRISB, definete pinul portului corespunztor ca pin de ieire. Fiecare

    pin la PORTB are un rezistor slab intern pull-up (scoatere) (rezistor care definete o linie la unulogic) care poate fi activat prin resetarea celui de-al aptelea bit RBPU n registrul OPTION. Acetirezistori 'pull-up' se nchid automat cnd pinul portului este configurat ca o ieire. Cnd pornetemicrocontrolerul, 'pull-up'-ii sunt dezactivai.

    Patru pini ai portului PORTB, RB7:RB4 pot primi o ntrerupere, cnd starea lor se schimbde la unu logic la zero logic i invers. Numai pinii configurai ca intrare pot servi o ntrerupere (dacfiecare pin RB7:RB4 este configurat ca o ieire, nu va fi generat o ntrerupere la schimbarea strii).Aceast opiune de ntrerupere cu rezistorii 'pull-up' fac mai uoar rezolvarea problemelor din

    practic, de exemplu o tastatur matriceal. Dac rndurile tastaturii sunt conectate la aceti pini,fiecare apsare a unei clape va cauza o ntrerupere. Microcontrolerul va determina care clap esteapsat n timp ce se proceseaz o ntrerupere. Nu se recomand s apelai la portul B n timp ce se

    proceseaz ntreruperea.

  • 8/2/2019 Microcontrolere Cap 2

    21/24

    Microcontrolere

    Exemplul de mai sus arat cum pinii 0, 1, 2, i 3 sunt declarai ca intrare, i pinii 4, 5, 6 i 7 caieire.

    PORT_A

    PORTA are 5 pini. Registrul corespunztor pentru direcia datelor este TRISA la adresa 85h. Ca ila portul B, setarea unui bit n registrul TRISA definete de asemenea pinul portului corespunztorca un pin de intrare, i resetarea unui bit n registrul TRISA definete pinul portului corespunztor

    ca pin de ieire.

    Al cincilea pin al portului A are funcie dual. La acel pin se afl de asemenea o intrare externpentru timer-ul TMRO. Una din aceste dou opiuni este aleas prin setarea sau resetarea bituluiTOCS (TMR0 Clock Source Select bit-bit de Selecie a Sursei Ceasului TMRO). Acest pin permitetimer-ului TMRO sa-i creasc starea fie de la oscilatorul intern fie prin impulsuri externe la pinulRA4/T0CKI.

    Exemplul arat cum pinii 0, 1, 2, 3, i 4 sunt declarai ca intrare iar 5, 6 i 7 ca pini de ieire.

    2.5 Organizarea memoriei

    PIC16F84 are dou blocuri separate de memorie, unul pentru date i cellalt pentruprograme. Memoria EEPROM i regitrii GPR n memoria RAM constituie un bloc, i memoriaFLASH constituie un bloc de programe.

    Memoria program a fost realizat n tehnologia FLASH ceea ce face posibil de a programa unmicrocontroler de mai multe ori nainte de a fi instalat ntr-un montaj, i chiar dup instalarea sadac se ntmpl unele schimbri n program sau parametri de proces. Mrimea memoriei programeste de 1024 locaii cu lime de 14 bii unde locaiile zero i patru sunt rezervate pentru reset i

    pentru vectorul_ntrerupere.

  • 8/2/2019 Microcontrolere Cap 2

    22/24

    Microcontrolere

    Memoria de date const din memoriile EEPROM i RAM. Memoria EEPROM const din 64 delocaii de opt bii a cror coninut nu este pierdut n timpul opririi sursei de alimentare. EEPROM-ulnu este direct adresabil, dar este accesat indirect prin regitrii EEADR i EEDATA. Pentru cmemoria EEPROM este folosit curent la memorarea unor parametri importani (de exemplu, o

    temperatur dat n regulatoarele de temperatur), exist o procedur strict de scriere n EEPROMce trebuie urmat pentru a preveni scrierea accidental. Memoria RAM pentru date ocup un spaiuntr-o hart a memoriei de la locaia 0x0C la 0x4F ceea ce nseamn 68 de locaii. Locaiilememoriei RAM sunt de asemenea denumite regitri GPR care este o abreviere General PurposeRegisters-Regitri cu Scop General. Regitrii GPR pot fi accesai indiferent de ce banc este selectatla un moment.

    Registrele ce ocup primele 12 locaii n bancurile 0 i 1 i sunt registre cu funcii specializatereferitoare la unele blocuri ale microcontrolerului. Acetia sunt numii Special Function Registers-Regitri cu Funcii Speciale.

    Bancuri de Memorien afar de aceast diviziune n 'lungime' a regitrilor SFR i GPR, harta memoriei este de

    asemenea mprit n 'lime' (vezi harta precedent) n dou zone numite 'bancuri'. Selectareaunuia din bancuri se face de biii RPO i RP1 n registrul STATUS-stare.

    Exemplu:bcf STATUS, RP0Instruciunea BCF terge bitul RPO (RP0=0) n registrul STATUS i astfel seteaz bancul 0.

    bsf STATUS, RP0Instruciunea BSF seteaz bitul RPO (RP0=1) n registrul STATUS i astfel seteaz bancul 1.

    Uzual, grupurile de instruciuni care sunt adesea n uz, sunt conectate ntr-o singur unitatece poate fi uor apelat ntr-un program, i a crei nume are o semnificaie clar, aa-numitulMacros-macrocomand. Cu ajutorul lor, selecia dintre dou bancuri devine mai clar i programulmult mai elegibil.

    BANK0 macroBcf STATUS, RP0 ;Select memory bank 0

    Endm

    BANK1 macroBsf STATUS, RP0 ;Select memory bank 1Endm

  • 8/2/2019 Microcontrolere Cap 2

    23/24

    Microcontrolere

    Locaiile 0Ch - 4Fh sunt regitri cu scop general (GPR) ce sunt folosii ca memorie RAM.

    Cnd sunt accesate locaiile 8Ch - CFh n Bancul 1, accesm de fapt exact aceleai locaii n

    Bancul 0. Cu alte cuvinte, cnd dorii s accesai unul din regitrii GPR, nu trebuie s v

    ngrijorai c nu tii n ce banc suntei!

    Contorul de Program

  • 8/2/2019 Microcontrolere Cap 2

    24/24

    Microcontrolere

    Contorul de program (PC) este un registru de 13 bii ce conine adresa instruciunii ce seexecut. Prin incrementarea sau schimbarea sa (ex. n caz de salturi) microcontrolerul executinstruciunile de program pas-cu-pas.

    Stiva

    PIC16F84 are o stiv de 13 bii cu 8 nivele, sau cu alte cuvinte, un grup de 8 locaii dememorie de 13 bii lime cu funcii speciale. Rolul su de baz este de a pstra valoarea contoruluide program dup un salt din programul principal la o adres a unui subprogram. Pentru ca un

    program s tie cum s se ntoarc la punctul de unde a pornit, trebuie s napoieze valoareacontorului programului din stiv. Cnd se mut dintr-un program ntr-un subprogram, contorul

    programului este mpins n stiv (un exemplu de acesta este instruciunea CALL). Cnd se executinstruciuni ca RETURN, RETLW sau RETFIE ce au fost executate la sfritul unui subprogram,contorul programului a fost luat dintr-o stiv, aa ca programul s poat continua de unde a fost

    oprit nainte de a fi ntrerupt. Aceste operaii de plasare ntr-o i luare dintr-o stiv de contor deprogram sunt numite PUSH i POP, i sunt numite conform cu instruciunile similare ale unormicrocontrolere mai mari.