Sunteți pe pagina 1din 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
mai uor mod de a explica este de a-l descrie ca un dulap mare cu multe sertare. Dac presupunem
c am marcat sertarele ntr-un asemenea fel nct s nu fie confundate, oricare din coninutul lor
va fi atunci uor accesibil. Este suficient s se tie denumirea sertarului i astfel coninutul lui ne
va fi cunoscut n mod sigur.

Componentele de memorie sunt exact aa. Pentru o anumit intrare obinem coninutul
unei anumite 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 adresarea
nu 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 de
citirea dintr-o locaie de memorie, memoria trebuie de asemenea s permit scrierea n ea. Aceasta
se face prin asigurarea unei linii adiionale numit linie de control. Vom denumi aceast linie cu
R/W (citete /scrie). Linia de control este folosit n urmtorul fel: dac R/W=1, se face citirea, i
dac R/W=0 atunci se face scrierea n locaia de memorie. Memoria este primul element, dar
avem nevoie 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 functii
incorporate de adunare, nmulire, mprire, scdere. Partea pe care tocmai am adugat-o este
numit "unitatea central de procesare " (CPU). Locaiile ei de memorie sunt numite registre.

Microcontrolere

Registrele sunt deci locaii de memorie al cror rol este de a ajuta prin executarea a variate
operaii matematice sau a altor operaii cu date oriunde se vor fi gsit datele. S privim la situaia
curent. Avem dou entiti independente (memoria i CPU) ce sunt interconectate, i astfel orice
schimb 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
de o conexiune ntre memorie i CPU. Mai simplu formulat, trebuie s avem o anumit "cale" prin
care datele 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 este
adresa (in biti) de memorie ce dorim s o adresm, iar cellalt este att de lat ct sunt datele, n
cazul nostru 8 bii sau linia de conectare. Primul servete la transmiterea adreselor de la CPU la
memorie, 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
de asemenea: avem o unitate ce este capabil s lucreze singur, dar ce nu are nici un contact cu
lumea de afar, sau cu noi! Pentru a nltura aceast deficien, s adugm un bloc ce conine
cteva locaii 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.

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 s se 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 simplu
scris 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 de linii ce trebuie s fie folosite pentru a transfera datele. Ce s-ar ntmpla dac acestea
ar trebui transferate 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 aa fel nct s nu scdem funcionalitatea. S presupunem c lucrm doar cu 3 linii,
i c o linie este folosit pentru trimiterea de date, alta pentru recepie i a treia este folosit ca o
linie de referin att pentru partea de intrare ct i pentru partea de ieire.
Pentru ca aceasta s funcioneze, trebuie s stabilim regulile de schimb ale datelor. Aceste
reguli sunt numite 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 n englez, 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
vom desemna ca T), aa c partea receptoare va ti c sunt date de primit, aa c va activa
mecanismul ei de 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. S lsm ca fiecare bit s rmn pe linie pentru o perioad de timp egal cu T,
i la sfrit, sau dup al 8-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).

Microcontrolere

Unitatea serial folosit pentru a trimite date, dar numai prin trei linii
Pentru c avem linii separate de recepie i de transmitere, este posibil s recepionm i s
transmitem date (informaii) n acelai timp. Blocul aa numit full-duplex model ce permite acest
mod de comunicare este numit blocul de comunicare serial. Spre deosebire de transmisia
paralel, datele sunt mutate aici bit cu bit, sau ntr-o serie de bii, de unde vine i numele de
comunicaie serial. Dup recepia de date, trebuie s le citim din locaia de transmisie i s le
nmagazinm n memorie. La transmitere procesul este invers: datele circul din memorie prin
bus ctre locaia de trimitere, i de acolo ctre unitatea de recepie conform protocolului.

1.6 Unitatea timer


Acum c avem comunicaia serial, putem recepiona, trimite i procesa date.

Totui, pentru noi ca s putem s l folosim n industrie mai avem nevoie de cteva
blocuri. Unul din acestea este blocul timer care este important pentru noi pentru c ne d
informaia de timp, durat, protocol etc. Unitatea de baz a timer-ului este un contor liber (freerun) care este de fapt un registru a crui valoare numeric crete cu unu la intervale egale, aa
nct lundu-i valoarea dup intervalele T1 i T2 i pe baza diferenei lor s putem determina ct
timp a trecut. Acesta este o parte foarte important a microcontrolerului al crui control cere cea
mai mare parte a timpului nostru.

1.7 Watchdog-ul
nc un lucru ce necesit atenia noastr este funcionarea fr defecte a microcontrolerului
n timpul funcionrii. S presupunem c urmare a unei anumite interferene (ce adesea se
ntmpl n industrie) microcontrolerul nostru se oprete din executarea programului, sau i mai
ru, ncepe s funcioneze incorect.

Microcontrolere

Bineneles, cnd aceasta se ntmpl cu un calculator, l resetm pur i simplu i va


continua s lucreze. Totui, nu exist buton de resetare pe care s-l apsm n cazul
microcontrolerului care s rezolve astfel problema noastr. Pentru a depi acest obstacol, avem
nevoie de a introduce nc un bloc numit watchdog-cinele de paz. Acest bloc este de fapt un alt
contor 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 la atingerea valorii sale maxime. Aceasta va duce la rularea programului din nou, i corect
de aceast dat pe toat durata. Acesta este un element important al fiecrui program ce trebuie s
fie fiabil fr supravegherea omului.

1.8 Convertorul Analog-Digital


Pentru c semnalele de la periferice sunt substanial diferite de cele pe care le poate
nelege microcontrolerul (zero i unu), ele trebuie convertite ntr-un mod care s fie neles de
microcontroler. Aceast sarcin este ndeplinit de un bloc pentru conversia analog-digital sau
de un convertor AD. Acest bloc este responsabil pentru convertirea unei informaii despre o
anumit valoare 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 pune
ntr-o component electronic unde va accesa blocurile interioare prin pinii exteriori. Imaginea de
mai jos arat cum arat un microcontroler n interior.

Configuraia fizic a interiorului unui microcontroler

Microcontrolere
Liniile subiri ce merg din interior ctre prile laterale ale microcontrolerului reprezint fire
conectnd blocurile interioare cu pinii capsulei microcontrolerului. Schema urmtoare reprezint
seciunea central a microcontrolerului.

Pentru o aplicaie real, un microcontroler singur nu este de ajuns. n afar de microcontroler,


avem nevoie de un program pe care s-l execute, i alte cteva elemente ce constituie o interfa
logic spre elementele de executie (ce se va discuta n capitolele urmtoare).

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 fi n stare s-l neleag.
START
REGISTER1=MEMORY LOCATION_A
REGISTER2=MEMORY LOCATION_B
PORTA=REGISTER1 + REGISTER2
END
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-unul
din registrele unitii de procesare centrale. Pentru c avem nevoie i de celelalte date, le vom
muta de asemenea n cellalt registru al unitii de procesare centrale.
Urmtoarea instruciune instruiete unitatea de procesare central s adune coninutul
celor dou 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
la rezolvarea ei va fi mai mare.
Programarea poate fi fcut n cteva limbaje ca Assembler, C i Basic care sunt cele mai
folosite limbaje. Assembler aparine limbajelor de nivel sczut ce sunt programate lent, dar
folosesc cel mai mic spaiu n memorie i dau cele mai bune rezultate cnd se are n vedere viteza
de execuie a programului.
Pentru c este cel mai folosit limbaj n programarea microcontrolerelor va fi discutat ntrun capitol ulterior. Programele n limbajul C sunt mai uor de scris, mai uor de neles, dar sunt
mai lente n executare dect programele n Assembler. Basic este cel mai uor de nvat, i
instruciunile 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 n
privina 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-l
lsm 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
crui rol 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 va uita 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
experiena programatorului n obinerea maximului din aparat cu programul su.

Microcontrolere

Microcontrolerul PIC16F84
Introducere
PIC16F84 aparine unei clase de microcontrolere de 8 bii cu arhitectur RISC. Structura
lui general 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
multe ori, ceea ce face ca microcontrolerul sa poata fi utilizat pentru dezvoltare
de aplicatii.
EEPROM-memorie de date ce trebuie s fie salvate cnd nu mai este alimentare. Este n
mod 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 n
regulatoarele de temperatur. Dac n timpul ntreruperii alimentrii aceast dat se pierde, va
trebui s 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 la
ntreruperea sursei de alimentare.

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 al
oscilatorului i ncrementeaz valoarea lui pn ce atinge maximul (255), i apoi ncepe s
numere tot din nou de la zero. Dup cum tim timpul exact dintre fiecare dou incrementri ale
coninutului timer-ului, poate fi folosit pentru msurarea timpului ce este foarte util in unele
aplicatii.
UNITATEA DE PROCESARE CENTRAL are rol de coordonare a celorlalte blocuri
ale microcontrolerului i execut programul utilizatorului

CISC, RISC
S-a spus deja c PIC1684 are o arhitectur RISC. Acest termen este adeseori gsit n
literatura despre calculatoare, i are nevoie s fie explicat aici mai n detaliu. Arhitectura Harvard
este un concept mai nou dect von-Neumann. S-a nscut din nevoia de mrire a vitezei
microcontrolerului. n arhitectura Harvard, bus-ul de date i bus-ul de adrese sunt separate. Astfel
este posibil un mare debit de date prin unitatea de procesare central, i bineneles, o vitez mai
mare de lucru. Separarea programului de memoria de date face posibil ca mai departe
instruciunile s 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 tipic pentru arhitectura Harvard s aib mai puine instruciuni dect von-Newmann
i s aib instruciuni executate uzual intr-un ciclu.
Microcontrolerele cu arhitectur Harvard sunt de asemenea numite "microcontrolere RISC".
RISC nseamn Reduced Instruction Set Computer. Microcontrolerele cu arhitectura vonNewmann sunt numite "microcontrolere CISC". Titlul CISC nseamn Complex Instruction
Set Computer.
Pentru c PIC16F84 este un microcontroler RISC, aceasta nseamn c are un set redus de
instruciuni, mai precis 35 de instruciuni (de ex. microcontrolerele INTEL i Motorola au peste
100 de instruciuni). Toate aceste instruciuni sunt executate ntr-un ciclu cu excepia
instruciunilor jump i branch. Conform cu ceea ce spune constructorul, PIC16F84 ajunge la

Microcontrolere
rezultate de 2:1 n compresia cod i 4:1 n vitez n comparaie cu alte microcontrolere de 8 bii
din clasa sa.

Aplicaii
PIC16F84 este utilizabil n multe aplicatii, de la industriile auto i aplicaiile de control
casnice la instrumentele industriale, senzori la distan, mnere electrice de ui i dispozitivele de
securitate. Este de asemenea ideal pentru cardurile smart ca i pentru aparatele alimentate de
baterie din cauza consumului lui mic.
Memoria EEPROM face mai uoar aplicarea microcontrolerelor la aparate unde se cere
memorarea permanent a unor parametri (coduri pentru transmitoare, viteza motorului,
frecvenele receptorului, etc.). Costul sczut, consumul sczut, utilizarea uoar i flexibilitatea
fac PIC16F84 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
un ticit pe care l-am auzi de la ceasul de timp. n acest caz, oscilatorul ar putea fi comparat cu
arcul ce este 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
al microcontrolerului divide clock-ul n 4 clock-uri egale Q1, Q2, Q3 i Q4 ce nu se suprapun.
Aceste 4 clock-uri constituie un ciclu de o singur instruciune (numit de asemenea ciclu main)
n timpul creia instruciunea este executat.
Executarea instruciunii ncepe prin apelarea unei instruciuni care este urmtoarea n
program. Instruciunea este apelat din memoria program la fiecare Q1 i este scris n registrul
de instruciuni la Q4. Decodarea i executarea instruciunii sunt fcute ntre urmtoarele cicluri
Q1 i Q4. 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.

Microcontrolere

Pipelining
Ciclul instruciune const din starile Q1, Q2, Q3 i Q4. Ciclurile de instruciuni de apelare
i executare 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, datorit
pipelining-ului (folosirea unei pipeline-conduct, este aducerea unei instruciuni din memorie n
timp ce se execut alta), fiecare instruciune este executat efectiv ntr-un singur ciclu. Dac
instruciunea cauzeaz o schimbare n contorul programului, i PC-ul nu direcioneaz spre
urmtoarea ci spre alte adrese (poate fi cazul cu subprogramele jumps sau calling), 2 cicluri sunt
necesare pentru executarea unei instruciuni. Aceasta pentru c instruciunea trebuie procesat din
nou, dar de data aceasta de la adresa corect. Ciclul ncepe cu clock-ul Q1, prin scrierea n
registrul instruction register (IR). Decodarea i executarea ncepe cu clock-urile Q2, Q3 i Q4.

Microcontrolere
TYC0 citete instruciunea MOVLW 55h (nu are importan pentru noi ce instruciune a
fost 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
prima instruciune a subprogramului SUB_1 a crei execuie este urmtoarea n ordine,
instruciunea trebuie citit din nou. Acesta este un bun exemplu a unei instruciuni avnd nevoie
de mai mult de un ciclu.
TCY4 ciclul instruciunii este total folosit pentru citirea primei instruciuni din
subprogram la 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 tip
DIP18 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
sugernd c 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=RA4 pinul 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=RB0 pinul 0 al portului B. Intrarea ntrerupere este o funcie adiional.
Pin 7=RB1 pinul 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.

Microcontrolere
Pin 10= RB4 pinul 4 al portului B. Nu are funcie adiional.
Pin 11= RB5 pinul 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 oscilatoare
PIC16F84 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 le
vom meniona 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 c trebuie s numii tipul de oscilator cnd cumprai un microcontroler.
Oscilatorul XT

Oscilatorul cu cristal se afl intr-o carcas


metalic cu doi pini pe care este nscris
frecvena la care cristalul oscileaz. Mai sunt
necesare doua condensatore ceramice de 30pF,
cu cellalt capt la mas, a fi conectate la
fiecare pin.
Oscilatorul i condensatorii pot fi ncapsulai
mpreun ntr-o carcas cu trei pini. Un
asemenea element se numete rezonator
ceramic. Pinii centrali ai elementului sunt masa,
iar pinii terminali sunt conectai la pinii OSC1 i
OSC2 ai microcontrolerului. Cnd se
proiecteaz un aparat, regula este s plasai
oscilatorul ct mai aproape de microcontroler,
pentru a elimina orice interferen de pe liniile
pe care microcontrolerul primete tactul de ceas.

Microcontrolere
Oscilatorul RC
n aplicaiile unde nu este nevoie de o mare precizie de timp, oscilatorul RC permite
economii 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
c frecvena 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 valoarea
rezistorului mai mic 2.2k, oscilatorul poate deveni instabil, sau oscilaia se poate chiar opri. La
valori mari a lui R (ex.1M) oscilatorul devine foarte sensibil la zgomot i umezeal. Se recomand
ca 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 oscilatorului
divizat cu 4 se poate obine la pinul OSC2/CLKOUT, i poate fi folosit pentru testarea sau
sincronizarea altor circuite logice.

Dup alimentare, oscilatorul ncepe s oscileze. Oscilaia la nceput are o perioad i o


amplitudine instabile, dar dup un timp devin stabilizate.

Microcontrolere

Pentru a preveni ca un asemenea ceas inexact s influeneze performanele


microcontrolerului, 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 o
primete de la oscilatorul cu cuar dup alimentare.

2.2 Reset-ul
Resetul este folosit pentru a pune microcontrolerul ntr-o stare 'initiala'. Pentru a funciona
corect trebuie resetat, nsemnnd c toi registrii vor fi pui ntr-o stare de start. Resetul nu este
folosit numai cnd microcontrolerul nu se comport cum vrem noi, dar poate de asemenea s fie
folosit cnd apare o ntrerupere n programul de execuie.
Pentru a preveni ajungerea unui zero logic la
pinul MCLR accidental (linia de deasupra nseamn
c resetul este activat de un zero logic), MCLR
trebuie s fie conectat printr-un rezistor la polul
pozitiv al sursei de alimentare. Rezistorul trebuie s
fie ntre 5 i 10k. Acest rezistor a crui funcie este de
a menine o anumit linie la starea logic unu,
preventiv, se numete 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 al
microcontrolerului.
c) Reset n timpul regimului SLEEP
d) Reset la depirea timer-ului watchdog (WDT)
e) Reset n timpul depirii WDT n timpul regimului SLEEP.

Microcontrolere
Cele mai importante surse de reset sunt a) i b). Prima are loc de fiecare dat cnd este
alimentat microcontrolerul i servete la aducerea toturor regitrilor la starea iniial a poziiei de
start. A doua este pentru a aduce un zero logic la pinul MCLR n timpul operaiei normale a
microcontrolerului. Este des folosit n dezvoltarea de programe.
n timpul unui reset, locaiile de memorie RAM nu sunt resetate. Ele sunt necunoscute la
alimentare i nu sunt schimbate la nici un reset. Spre deosebire de acestea, regitrii SFR sunt
resetai la o stare iniial a poziiei de start. Unul din cele mai importante efecte ale resetului este
setarea contorului de program (PC) la zero (0000h), ceea ce permite programului s nceap
executarea de la 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
dureaz 72 ms ceea ce este un timp suficient pentru oscilator ca s se stabilizeze. Aceste 72 ms
sunt asigurate de un timer intern PWRT care are oscilatorul lui RC. Microcontrolerul este n
modul reset ct timp PWRT este activ. Totui, cnd montajul funcioneaz, probleme apar cnd
sursa nu scade la 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 i instabilitile sursei de alimentare sunt ceva foarte curent. Pentru a rezolva aceast
problem trebuie s ne asigurm c microcontrolerul trece ntr-o stare de reset de fiecare dat
cnd tensiunea sursei scade sub limita admis.

Dac specificaiile electrice ale circuitului intern de resetare a microcontrolerului nu poate


satisface aceste cerine, se pot folosi componente electronice speciale ce sunt capabile s genereze
semnalul 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

Microcontrolere
MCLR ce ine microcontrolerul n starea de reset pn ce tensiunea este n limitele ce garanteaz
funcionarea corect.

2.3 Unitatea de Procesare Central


Unitatea de procesare central (CPU) este creierul microcontrolerului. Aceast parte este
responsabil 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 datelor
ntr-un registru se mai numete 'shifting'- transferare. PIC16F84 conine o unitate logic
aritmetic de 8 bii i regitri de lucru de 8 bii.

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 coninutul
asupra cruia se fac unele operaii, iar un registru este oricare din regitrii GPR sau SFR. GPR
este o 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, ALU
controleaz 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, ALU
poate afecta valorile biilor Carry (C), Digit Carry (DC), i Zero (Z) n registrul STATUS.
Registrul STATUS

bit 0 = C (Carry) Transport


Bit care este afectat de operaiile de adunare, scdere i transfer.
1= transferul produs din bitul cel mai nalt al rezultatului
0= transferul nu s-a produs
Bitul C este afectat de instruciunile ADDWF, ADDLW, SUBLW, SUBWF.
bit 1 = DC (Digit Carry) DC Transport
Bit afectat de operaiile de adunare, scdere i transfer. Spre deosebire de bitul C, acest bit
reprezint 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 n
ambele direcii.
1= transfer produs la al patrulea bit conform cu ordinea, al rezultatului.
0= transferul nu s-a produs
Bitul 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 zero
0= 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 reseteaz
cnd microcontrolerul intr n regimul consum/uzaj redus. Setarea lui repetat este posibil prin
reset 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,
i de watchdog de asemenea.
1= dup ce sursa a fost pornit
0= executarea instruciunii SLEEP

Microcontrolere
bit 4 = TO Time-out ; depirea-overflow watchdog-ului.
Bitul este setat dup pornirea sursei i executarea instruciunilor CLRWDT i SLEEP. Bitul este
resetat cnd watchdog-ul ajunge la sfrit semnalnd c ceva nu este n ordine.
1= depirea-oveflow nu s-a produs
0= 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 ce
adreseaz 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
viitoare ale microcntrolerului.
01= primul banc
00= 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 3
0= bancul 0 i 1 (de la 00h la FFh)
Registrul STATUS conine starea aritmetic ALU (C, DC, Z), starea RESET (TO, PD) i biii
pentru selectarea bancului de memorie (IRP, RP1, RP0). Considernd c selecia bancului de
memorie este controlat prin acest registru, el trebuie s fie prezent n fiecare banc. Bancul de
memorie se va discuta mai n detaliu n capitolul Organizarea memoriei. Registrul STATUS poate
fi registru de destinaie pentru orice instruciune, cu oricare alt registru ca sursa. Dac registrul
STATUS este o destinaie pentru instruciunile ce afecteaz biii Z, DC or C, atunci scrierea n
aceti 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 la
care 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 pinii
microcontrolerului. Porturile reprezint conexiunea fizic a Unitii de Procesare Central cu
lumea exterioar. 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 este
simultan al patrulea bit la portul A i o intrare extern pentru contorul liber (free-run). Selecia
uneia din aceste dou funcii ale pinului se face n unul din regitrii configuraionali. O ilustraie
a acesteia este al cincilea bit T0CS n registrul OPTION. Selectnd una din funcii cealalt este
dezactivat.

Microcontrolere

Toi pinii portului pot fi definii ca intrare sau ieire, conform cu nevoile unui montaj ce
este n dezvoltare. Pentru a defini un pin ca pin de intrare sau ca pin de ieire, trebuie scris
combinaia corect de zero-uri i unu-uri n registrul TRIS. Dac n locul potrivit este scris "1"
logic n registrul TRIS, acel pin este pin de intrare, iar dac este valabil contrariul, este un pin de
ieire. Fiecare port are registrul lui TRIS. Astfel, portul A are TRISA la adresa 85h, iar portul B
are TRISB la adresa 86h.
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, i
resetarea 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 unu logic) care poate fi activat prin resetarea celui de-al aptelea bit RBPU n registrul
OPTION. Aceti rezistori 'pull-up' se nchid automat cnd pinul portului este configurat ca o
ieire. Cnd pornete microcontrolerul, 'pull-up'-ii sunt dezactivai.
Patru pini ai portului PORTB, RB7:RB4 pot primi o ntrerupere, cnd starea lor se
schimb de la unu logic la zero logic i invers. Numai pinii configurai ca intrare pot servi o
ntrerupere (dac fiecare 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 este apsat n timp ce se proceseaz o ntrerupere. Nu se recomand s
apelai la portul B n timp ce se proceseaz ntreruperea.

Microcontrolere

Exemplul de mai sus arat cum pinii 0, 1, 2, i 3 sunt declarai ca intrare, i pinii 4, 5, 6 i 7 ca
ieire.
PORT_A
PORTA are 5 pini. Registrul corespunztor pentru direcia datelor este TRISA la adresa 85h. Ca
i la portul B, setarea unui bit n registrul TRISA definete de asemenea pinul portului
corespunztor ca 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 extern
pentru timer-ul TMRO. Una din aceste dou opiuni este aleas prin setarea sau resetarea bitului
TOCS (TMR0 Clock Source Select bit-bit de Selecie a Sursei Ceasului TMRO). Acest pin
permite timer-ului TMRO sa-i creasc starea fie de la oscilatorul intern fie prin impulsuri externe
la pinul RA4/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 pentru
programe. Memoria EEPROM i regitrii GPR n memoria RAM constituie un bloc, i memoria
FLASH constituie un bloc de programe.
Memoria program a fost realizat n tehnologia FLASH ceea ce face posibil de a programa un
microcontroler de mai multe ori nainte de a fi instalat ntr-un montaj, i chiar dup instalarea sa
dac se ntmpl unele schimbri n program sau parametri de proces. Mrimea memoriei
program este de 1024 locaii cu lime de 14 bii unde locaiile zero i patru sunt rezervate pentru
reset i pentru vectorul_ntrerupere.

Microcontrolere
Memoria de date const din memoriile EEPROM i RAM. Memoria EEPROM const din 64 de
locaii de opt bii a cror coninut nu este pierdut n timpul opririi sursei de alimentare. EEPROMul nu este direct adresabil, dar este accesat indirect prin regitrii EEADR i EEDATA. Pentru c
memoria 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
EEPROM ce trebuie urmat pentru a preveni scrierea accidental. Memoria RAM pentru date
ocup un spaiu ntr-o hart a memoriei de la locaia 0x0C la 0x4F ceea ce nseamn 68 de locaii.
Locaiile memoriei RAM sunt de asemenea denumite regitri GPR care este o abreviere General
Purpose Registers-Regitri cu Scop General. Regitrii GPR pot fi accesai indiferent de ce banc
este selectat la un moment.
Registrele ce ocup primele 12 locaii n bancurile 0 i 1 i sunt registre cu funcii specializate
referitoare la unele blocuri ale microcontrolerului. Acetia sunt numii Special Function RegistersRegitri cu Funcii Speciale.
Bancuri de Memorie
n 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'. Selectarea
unuia din bancuri se face de biii RPO i RP1 n registrul STATUS-stare.
Exemplu:
bcf STATUS, RP0
Instruciunea BCF terge bitul RPO (RP0=0) n registrul STATUS i astfel seteaz bancul 0.
bsf STATUS, RP0
Instruciunea 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 unitate
ce poate fi uor apelat ntr-un program, i a crei nume are o semnificaie clar, aa-numitul
Macros-macrocomand. Cu ajutorul lor, selecia dintre dou bancuri devine mai clar i
programul mult mai elegibil.
BANK0 macro
Bcf STATUS, RP0 ;Select memory bank 0
Endm
BANK1 macro
Bsf STATUS, RP0 ;Select memory bank 1
Endm

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

Microcontrolere
Contorul de program (PC) este un registru de 13 bii ce conine adresa instruciunii ce se
execut. Prin incrementarea sau schimbarea sa (ex. n caz de salturi) microcontrolerul execut
instruciunile 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 de
memorie de 13 bii lime cu funcii speciale. Rolul su de baz este de a pstra valoarea
contorului de 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 valoarea
contorului 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
execut instruciuni 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 de program sunt numite PUSH i POP, i sunt numite conform cu instruciunile similare ale
unor microcontrolere mai mari.

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