Documente Academic
Documente Profesional
Documente Cultură
61
Facultatea de Elctrotehnica si Electroenergetica
62
Facultatea de Elctrotehnica si Electroenergetica
Mod de utilizare
Convertorul analog-digital are 8 intrări de măsură. În urma conversiei unui
semnal analog se obţine reyultatul digital pe 10 biţi. Modulul A/D are intrări pentru
tensiune de referinţă mare şi mică selectabilă soft prin combinaţii între VDD, VSS, RA2
şi RA3. Modulul A/D poate opera în timp ce microcontrolerul este in modul “SLEEP”.
Pentru a opera în modul “SLEEP” ceasul pentru convertor trebuie obţinut din
oscilatorul RC intern al modulului A/D.
Modulul A/D are 4 regiştri: ADRESH, ADRESL (în aceşti regiştrii este depus rezultatul
după efectuarea conversiei), ADCON0 şi ADCON1 (regiştrii de control).
Registrul ADCON0 controlează operarea modulului A/D. Prin configurarea
biţilor 7 (ADCS1) şi 6 (ADSC0) se setează ceasul pentru conversie. Biţii 5 (CHS2), 4
(CHS1) şi 3 (CHS0) permit 8 configuraţii care selectează canalul activ pe care se face
masurătoarea, la acest microcontroler fiind posibile însă numai primele 5 combinaţii
între cei 3 biţi de configurare având doar 5 canale analogice. Bitul 2 (GO/DONE) al
registrului este bitul de pornire a conversiei analog-digitale prin setarea acestuia, bit
care este resetat la 0 în momentul în care conversia s-a terminat. Bitul 1 nu este folosit
şi este citit “0”. Bitul 0 (ADON) este bitul prin care se porneşte sau se opreşte
convertorul analog-digital.
Registrul ADCON0 configurează funcţiile pinilor prin biţii de la 3 (PCFG3), 2
(PCFG2), 1 (PCFG1) şi 0 (PCFG0). Prin configurarea acestor 4 biţi se setează numarul
de intrări analogice dorite şi selecţia tensiunii de referinţă a modului A/D. Mai prezintă
un bit şi anume bitul 7 (ADFM) care selectează formatul rezultatului (aranjarea spre
dreapta sau spre stânga a rezultatului). Bitul 6 (ADCS2) completeaza biţii din ADCON0
63
Facultatea de Elctrotehnica si Electroenergetica
care selectează ceasul pentru conversie, astfel având de ales între 8 moduri diferite de
ceas. Biţii 5 şi 4 sunt neutilizaţi şi sunt citiţi ca “0”.
În regiştrii ADRESH şi ADRESL este depus rezultatul conversiei analog-digitale
după terminarea acesteia. Terminarea conversiei este semnalizată prin curăţarea bitului
GO/DONE din ADCON0 şi bitul ADIF este setat. Pentru a putea executa o conversie
analog-digitală pinii corespunzatori canalalor analogice folosite trebuie setaţi ca intrare
în registrul TRISA, portul A fiind portul pe care este multiplexat modulul analog-
digital.
Timpul de achiziţie
Pentru ca convertorul sa funcţioneze cu acurateţe maximă trebuie asigurată
încărcarea condensatorului de intern al convertorului (C HOLD) la nivelul tensiunii de
intrare. Impedanţa sursei (RS) şi impedanţa interna (RSS) influenţează direct timpul
necesar încărcării condensatorului intern. Impedanţa interna variază în funcţie de
tensiunea de alimentare. Impedanţa maximă recomandată pentru sursa analogică este de
64
Facultatea de Elctrotehnica si Electroenergetica
10 K. Cu cât impedanţa este mai scăzută scade şi timpul necesar încărcării
condensatorului intern. După schimbarea canalului trebuie să se aştepte timpul necesar
achiziţiei înainte de a începe conversia analog-digitală.
Portul A (PORTA)
Portul A este un port bi-direcţional de 7 biţi. Direcţia corespunzătoare pinilor
portului A este setabilă din registrul TRISA. Setând un bit în TRISA pe “1” are ca efect
activarea funcţiei de intrare pentru pinul corespunzător al portului, iar setarea acestuia
pe “0” are ca efect activarea funcţiei de ieşire pentru pinul corespunzător. Citirea
registrului PORTA înseamnă citirea stării pinilor în momentul în care s-a efectuat
operaţia, iar scrierea în registrul PORTA va afecta buffer-ul de ieşire al portului. Pinul
RA4 este multiplexat cu intrarea de ceas pentru Timer0. Pinul este o intrare Schmitt
65
Facultatea de Elctrotehnica si Electroenergetica
Trigger şi ieşire cu colector în gol. Toţi ceilalţi pini au nivele TTL pe intrare şi drivere
de ieşire CMOS. Ceilalţi pini ai portului sunt multiplexaţi cu modulul A/D şi tensiuni de
referinţa pentru modulele A/D convertor şi comparator. Funcţia pinilor este selectată
prin configurarea biţilor din regiştrii ADCON1 şi CMCON.
Registrul TRISA controlează direcţia portului chiar şi în cazul în care pinii sunt
setaţi ca intrări analogice. Din această cauză utilizatorul trebuie să se asigure ca biţii din
TRISA corespunzători intrărilor analogice folosite să rămână tot timpul setaţi pe “1”.
Portul B (PORTB)
La fel ca portul A, portul B are programabilă funcţia de intrare/ieşire sin
registrul corespunzător portului – TRISB. Deosebirea faţa de portul A este ca portul B
66
Facultatea de Elctrotehnica si Electroenergetica
are 8 biţi în loc de 7 şi, bineînţeles, modulele multiplexate cu acest port sunt altele decât
la portul A.
Portul B este multiplexat cu funcţia de In-Circuit Debugger şi Low Voltage
Programming pe pinii RB3 (PGM), RB6 (PGC) şi RB7 (PGD). Fiecare dintre pinii
portului B o rezistenţă internă la +5 V. Activarea acestei funcţii se face prin setarea pe
“0” a bitului RBPU din OPTION_REG. Rezistenţa la +5 V este automat anulată în
cazul în care pinul este setat ca ieşire. Opţiunea este dezactivată la Power-on Reset.
Patru dintre pinii portului B, RB7-RB4, au posibilitatea de a genera întrerupere la
schimbarea stării. Doar pinii configuraţi ca intrare pot genera aceasta întrerupere.
Întreruperea este generată prin setarea bitului RBIF (INTCON,0). Aceasta întrerupere
poate scoate microcontrolerul din “SLEEP”. Tot pe portul B poate fii activată
întreruperea externă pe pinul RB0 prin setarea bitului INTE (INTCON,4) şi setat frontul
pe care să fie generată întreruperea prin bitul INTEDG (OPTION_REG,6).
67
Facultatea de Elctrotehnica si Electroenergetica
Portul C (PORTC)
Este tot un port de 8 biţi bi-direcţional. Funcţiile de intrare/ieşire a pinilor se
face prin configurarea registrul TRISC. Setaţi ca intrare pinii portului C au buffer
Schmitt Trigger. Pe portul C este multiplexat modulul serial I2C care utilizează pinii
RC4 şi RC3. În stabilirea
68
Facultatea de Elctrotehnica si Electroenergetica
Portul D (PORTD)
Este tot un port de 8 biţi bi-direcţional. Funcţiile de intrare/ieşire a pinilor se
face prin configurarea registrul TRISD. Setaţi ca intrare pinii portului D au buffer
Schmitt Trigger.
Pinii pot fi programati individual ca intrare/iesire digitala
Portul E (PORTE)
70
Facultatea de Elctrotehnica si Electroenergetica
Ceasul (Clock-ul)
Memoria
Microcontrolerul are un memorie de tip stivă pe 8 nivele. Stiva nu face parte
nici din memoria de program nici din memoria RAM. Ea nu poate fii citită sau scrisă.
71
Facultatea de Elctrotehnica si Electroenergetica
Registrul de adrese este încărcat în stivă când este apelată instrucţiunea “CALL” sau
când apare o întrerupere. Registrul de adrese este restaurat la executarea uneia dintre
instrucţiunile “RETURN”, “RETLW” sau “RETFIE”. În momentul în care stiva este
plină, următoarea încărcare in stivă a registrului de adrese rescrie la primul nivel, ceea
ce ar duce la o funcţionare eronată a programului, revenirea la adresa care era înscrisă
pe primul nivel al stivei fiind imposibilă. Deoarece nu există biţi de control ai stivei
trebuie avută mare grijă la apelul funcţiilor şi posibilitatea de apariţie a întreruperilor.
72
Facultatea de Elctrotehnica si Electroenergetica
corespunzătoare . La revenirea din funcţie sau întrerupere toţi cei 13 biţi ai adresei sunt
descărcaţi din stivă fără a mai fii nevoie de setarea manuală a acestora.
Memoria RAM
Sau memoria de date este separată de memoria de program, fiecare având
magistrală proprie. Memoria RAM este partiţionată în 4 bancuri. Selecţia bancului dorit
se face prin configurarea biţilor 6 (RP1) şi 5 (RP0) din STATUS, bancul corespun zând
combinaţiei binare dintre cei doi biţi. Fiecare banc are 128 de octeţi. Primele locaţii din
cele 4 bancuri sunt rezervate regiştrilor speciali şi astfel adresele disponibile pentru
fiecare banc sunt: 20h-7Fh pentru bancul 0, A0h-FFh pentru bancul 1, 110h-17Fh
pentru bancul 2 şi 190h-1FFh pentru bancul 3. Toate cele 4 bancuri conţin regiştrii
speciali, iar regiştrii cei mai uzuali sunt mapaţi în memorie în toate bancurile pentru a fii
accesaţi mai uşor. Locaţiile de memorie de la adresa 70h până la 7Fh din bancul zero
73
Facultatea de Elctrotehnica si Electroenergetica
sunt adresabile din toate bancurile fără a mai fii nevoie de selecţia acestora. Aceste
adrese sunt folosite la regiştrii temporali utilizaţi la salvarea datelor din regiştrii când
apare o întrerupere.
Memoria EEPROM
Are o dimensiune de 256 octeţi adresabila între 00h şi FFh. Pentru a utiliza
memoria EEPROM se folosesc regiştrii de configurare EECON1 şi EECON2 pentru
controlul operaţiilor desfăşurate şi EEADR şi EEDATA pentru adresare şi respectiv
date.
Adresarea memoriei
Adresarea memoriei se face în două moduri: directă şi indirectă. Adresarea
directa se face foarte simplu prin selectarea bancului de memorie din biţii RP1 şi RP0
din STATUS şi adresa la care se face operaţia care reiese din codul instrucţiunii şi are
dimensiunea de 7 biţi. Toate instrucţiunile realizează adresarea directă.
Adresarea indirectă se realizează prin utilizarea registrului INDF. Prin
adresarea acestui registru are ca efect adresarea indirectă. Orice instrucţiune care
adreseaza registrul INDF, adresează de fapt registrul care se află la valoarea încărcată în
“FSR”, care este de fapt un pointer spre adresa . Registrul INDF este declarat la adresa
00h în toate bancurile de memorie, dar, de fapt, nu există fizic. Prin citirea registrului
INDF (când FSR=0) se va obţine valoarea 0, iar scrierea directă în acest registru nu va
avea nici un efect, cu posibilitatea de a fii afectaţii biţii de stare. Adresa se obţine prin
concatenarea bitului t (IRP) din STATUS cu cei 8 biţi din registrul FSR.
74
Facultatea de Elctrotehnica si Electroenergetica
Modulul USART
75
Facultatea de Elctrotehnica si Electroenergetica
registrul TSR este încărcat cu noile date din TXREG (dacă acestea există). În momentul
în care datele au fost transferate în TSR (într-un singur ciclu de instrucţiune), registrul
TXREG este şters şi bitul TXIF (PIE1<4>) este setat. În timp ce bitul TXIF indică
starea registrului TXREG, bitul TRMT (TXSTA<1>) indică starea registrului TSR.
Bitul TRMT este un bit ce poate fi doar citit (aidoma TXIF) şi este setat în momentul în
care registrul TSR este gol.
Transmisia este activată în momentul în care bitul TXEN (TXSTA<5>) este setat. În
realitate transmisia nu va fi pornită până în momentul în care TXREG nu a fost încărcat
cu date.
Diagrama bloc a modulului de recepţie este prezentată în figura ce urmează:
Datele sunt recepţionate pe pinul RC7/RX. Blocul de citire a datelor este format
dintr-un registru de deplasare de mare viteză, capabil să opereze la o viteză de 16 ori
mai mare decât rata de transfer. După ce modul asincron a fost selectat, recepţia este
activată prin setare bitului CREN (RCSTA<4>).
Inima blocului de recepţie este reprezentată de registrul de deplasare RSR. În momentul
în care un bit de STOP a fost recepţionat datele vor fi încărcate în buffer-ul RCREG.
Dacă transferul este complet este setat bitul RCIF (PIR1 <5>). Acest bit poate fi doar
citit şi este şters în hardware. Bitul RCIF va fi şters în momentul în care registrul
RCREG a fost citit şi este gol. Registrul RCREG este de fapt un buffer de tip FIFO.
Este posibil ca doi octeţi să fi fost recepţionaţi şi un al treilea octet să aştepte să fie
transferat în RCREG. La detecţia bitului de STOP al celui de al treilea cuvânt dacă
registrul RCREG este în continuare plin bitul de eroare OERR va fi setat.
Cuvântul din registrul RSR va fi pierdut. Bitul de eroare OERR trebuie şters în
software. Această operaţie se poate realiza prin ştergerea şi apoi setarea bitului CREN.
76
Facultatea de Elctrotehnica si Electroenergetica
77