Documente Academic
Documente Profesional
Documente Cultură
Subiecte Examen 1-30 PDF
Subiecte Examen 1-30 PDF
Blocurile interne ale MC sunt legate între ele printr-o magistrală (bus) de date şi una de adrese.
Mărimea acestor magistrale constituie una dintre caracteristicile cele mai importante ale unui MC. Prin
magistrala de adrese unitatea centrală (UC) selectează o locaţie de memorie sau un dispozitiv I/O, iar pe
magistrala de date se face schimbul de informaţie între UC şi memorie sau dispozitivele I/O. Între UC şi
memorie sunt transferate atât date cât şi instrucţiuni. Acestea se pot transfera pe o singură magistrală de
date sau pe magistrale de date diferite.
Unitate centrala contine dispozitive de baza care sunt cerute pentru functionarea unui
microcontroler. Aceasta contine: ALU, memoria, oscilatorul, reset, intreruperi, set de instructiuni.
Perifericele sunt dispozitive care adaugate , fac diferenta fata de un procesor: porturi I\O de uz
general, timere, CCPWM, interfete seriale standard, referinte de tensiune, comparatoare, afisaj LCD.
Functiile speciale ajuta la cresterea flexibilitatii in proiectare, a realizarii unui sistem de incredere,
cu un cost mult mai redus: configurare, Power On Reset (POR), Watchdog timer, Sleep, oscilator intern,
programare in circuit.
Arhitectura influenteaza performantele globale precum viteza operationala si structura memoriei
disponibile; Se utilizeaza doua tipuri de arhitecturi : Von Neumann si Harvard:
- Arhitectura von Neumann prevede existenţa unui bus unic folosit pentru circulaţia datelor şi a
instrucţiunilor. Când un controller cu o astfel de arhitectură adresează memoria, busul de date este
folosit pentru a exprima întîi codul instrucţiunii, apoi pentru date, accesul fiind realizat în 2 paşi,
deci destul de lent.
- Arhitectura Harvard prevede un bus separat pentru date şi instrucţiuni. Când codul instrucţiunii se
află pe busul de instrucţiuni, pe busul de date se află datele instrucţiunii anterioare. Structura MC
este mai complexă, dar performanţele de viteză sunt mai bune.
Unitatea centrala de prelucrare este compusa din unitatea aritmetica si logica (UAL) si din
unitatea de control.
Unitatea Aritmetico Logică (ALU de la Aritmetic/ Logic Unit) este sectiunea responsabila cu
efectuarea operatiilor aritmetice si logice asupra operanzilor ce ii sunt furnizati. Modul de implementare a
operatiilor este transparent pentru utilizator; important pentru utilizatorul de MC este repertoriul
operatiilor implementate pentru a aprecia posibilitatea implementarii optime a aplicatiei particulare de
control. De asemenea este important timpul de executie al fiecarei operatii pentru a aprecia daca timpul
necesar procesarii complete satisface cerintele de timp ale aplicatiei. ALU realizează diferite operaţii
aritmetice şi logice. Modul de realizare al ALU dă fiecărui procesor unicitatea lui.
Unitatea de control este responsabila cu decodificarea codului operatiei continut de codul unei
instructiuni. Pe baza decodificarii unitatea de control elaboreaza semnale pentru comanda celorlalte
blocuri functionale pentru a finaliza executarea unei instructiuni. Modul de implementare al acestui bloc
este de asemenea transparent utilizatorului.
Unitatea centrala de prelucrare contine un set de registre interne, similare unor locatii de
memorie, folosite pentru memorarea unor date des apelate sau pentru programarea unor anumite functii.
Diferitele familii de MC folosesc seturi diferite de registre. Exista insa cateva registre comune: registrul
acumulator (folosit deseori pentru a stoca un operand si rezultatul operatiei aritmetice sau logice), registru
numarator de program (registrul care stocheaza adresa urmatoarei instructiuni de executat), registrul
indicator de stiva (continutul acestui registru indica adresa curenta a stivei).
2
4. Memoria de program a unui µC.
(organizare memorie, schema de organizare a memoriei, moduri de adresare)
MC folosesc diferite tipuri de informaţii, care sunt stocate în diferite tipuri de memorii.
Instrucţiunile care controlează funcţionarea MC trebuie stocate într-o memorie nevolatilă, unde
informaţiile se păstrează şi după oprirea şi repornirea sursei de alimentare. Rezultatele
intermediare şi variabilele pot fi înscrise într-o memorie volatilă, la acestea este important să se
poată face scrierea /citirea rapid şi simplu în timpul funcţionării.
Memoria este compusa din doua blocuri: MEMORIA DE PROGRAM si MEMORIA DE
DATE. Fiecare bloc are propriul BUS. Accesul la blocurile de memorie poate sa apara in acelasi
ciclu sistem.
- MCU din familia microchip midrange au un contor de program de 13 biti => 213 =
8k spatiu de adresare;
- instructiunile sunt organizate pe 14 biti si sunt ‘single word’;
- rezulta un spatiu de adresare de 8k * 14 biti;
- spatiul de memorie de program este divizata in patru pagini de cate 2k fiecare:
0h - 7ffh
800h - fffh
1000h - 17ffh
1800h - 1fffh
- pentru a sari intre paginile de memorie de program, trebuie modificati cei mai
semnificativi biti din contorul de program (pc) ,aceasta se face prin modificarea
valorii unui registru special sfr numit program counter latch high (pclatch);
- daca se executa instructiuni consecutive, contorul de program va trece de granitele
paginii fara interventia utilizatorului ;
- pentru dispozitive care au implementat mai putin de 8k de memorie de program,
accesarea unei locatii peste cea fizica va cauza accesarea adresei din pagina fizica,
ignorand bitul sau bitii din PCLATCH;
- vectorul de reset:
un reset va forta contorul de program la valoarea 0h
vom numi aceasta adresa “adresa vectorului de reset”
orice reset va sterge continutul registrului PCLATCH
- contorul de program (pc) specifica adresa instructiunii care trebuie adusa pentru executie;
- are dimensiunea de 13 biti;
- este compus din doi byte, unul mai semnificativ (PCH), altul mai putin semnificativ
(PCL);
- byte – ul cel mai putin semnificativ este denumit REGISTRUL PCL,este un registru care
poate fi atat citit cat si scris ;
- byte-ul cel mai semnificativ este denumit registrul PCH ,contine bitii din PC si nu poate
fi direct citit si scris, ci numai prin intermediul registrului PCLATCH.
3
Situatia1-arata cum pc este incarcat prin scrierea PCL
Situatia 3 arata cum pc este inarcat in timpul unei instructiuni call cu pc incarcat (pushed) in varful stivei
Situatia 4 arata cum este incarcat pc in timpul unei unei instructiuni in care pc este incarcat (poped) din
varful stivei
4
6. Stiva.
(ce este stiva, proprietati, instructiuni care lucreaza cu stiva cu exemple).
Stiva reprezinta o zona de memorie accesibila rapid in care se depun temporar informatii
importante in desfasurarea programului. Stiva este definita de obicei in RAM. Implementarea
accesului presupune existenta unui registru de adresare (SP) si a mecanismului de memorare
declansat de instructiuni specifice (instructiunile PUSH/POP).
- stiva este o memorie de tip LIFO (last in first out);
- stiva permite aparitia a unor combinatii de pana la 8 apeluri de subrutine sau intreruperi;
- stiva contine adresa de reintoarcere din ramura de program activa in executia
programului;
- spatiul stivei nu se poate citit sau scris;
- spatiul stivei nu face parte din spatiul de memorie program sau memorie de date;
- contorul de program este ‘impins’ (pushed) in stiva la executia unei instructiuni call sau
cand o intrerupere provoaca o ramificare a programului;
- stiva este golita (poped) in cazul aparitiei uneia din instructiunile return, retlw sau retfie
- PCLATCH nu este modificat cand se executa operatii cu stiva;
- nu exista indicatoare de depasire a numarului maxim de push-uri in stiva.
7. Memoria de date.
(organizare memorie de date, registrii cu functii speciale din memoria de date).
- Memoria de date este formata din zona registrilor cu functii speciale (SFR) si din zona
registrilor pentru operatii generale (GPR):
SFR controleaza operarea dispozitivului
GPR – zona pentru memorare date generale
- Memoria de date este impartita in bancuri de memorie atat pentru zona GPR cat si pentru
zona SFR:
Zona GPR este impartita in bancuri pentru a putea permite
adresarea a mai mult de 96 biti de memorie RAM
registrii pentru functii speciale (SFRS) utilizati pentru controlul
modulelor periferice si a functiunilor centrale.
- Pentru a muta continutul unui registru in altul, valoarea trebuie sa treaca prin registrul W:
Rezulta doua cicluri masina pentru mutari registru-registru
Intreaga memorie poate fi accesata direct sau indirect
5
8. Adresare directa.
(ce este, cum se realizeaza, exemplu grafic, exemplu de program cu instructiuni care
utilizeaza adresarea directa).
Adresare directă - instrucţiunile pot avea acces la primele 256 de locaţii de memorie.
Instrucţiunile sunt pe doi octeţi, primul este codul iar al doilea este octetul cel mai puţin
semnificativ al adresei operandului; octetul cel mai semnificativ este considerat implicit 00h.
6
9. Adresarea indirecta.
(ce este, mod de lucru, exemplu grafic, exemplu de program cu instructiuni care
utilizeaza adresarea indirecta).
- adresarea indirecta este un mod de adresare a memoriei de date, in care adresa memoriei
de date din instructiune nu este fixata
- este utilizat un registru SFR ca pointer la locatia din memoria de date care trebuie citita
sau scrisa
- deoarece acest pionter este in RAM, continutul sau poate fi modificat de catre program
- adresarea indirecta necesita utilizarea registrului de selectare a bancurilor (FSR)
Exemplu: utilizarea adresarii indirecte simple pentru a sterge RAM (locatiile 20h – 2fh) intr-un
numar minim de instructiuni:
7
10. Intreruperi.
(tipuri de intreruperi, module care genereaza intreruperi, registrul de intreruperi in cazul
microcontrolerelor MICROCHIP medium range ).
- latenta intreruperii este definita ca fiind timpul scurs din momentul aparitiei evenimentului care
genereaza intreruperea, pana in momentul in care instructiunea de la adresa 0004h este executata;
- pentru intreruperi sincrone (tipic interne) latenta este de 3tcy;
- pentru intreruperi asincrone (tipic externe);
- intreruperea externa pe pinul int este activata pe front;
- daca bitul INTEDG (option) este setat, trigerarea se face pe frontul crescator;
- daca bitul INTEDG (option) este sters, trigerarea se face pe frontul descrescator;
- poate fi validata sau invalidata prin setarea sau stergerea bitului INTE ENABLE (INTCON);
- bitul INTF trebuie sters prin program in cadrul rutinei de tratare a intreruperii, inaintea revalidarii
acestei intreruperi;
intreruperea INT poate trezi procesorul din starea sleep, daca anterior intrarii in starea SLEEP
bitul fost setat.
8
12. Salvarea contextului in intreruperi.
(de ce este necesara, ce registrii se salveaza automat, care trebuie salvati prin program,
exemple de program pt. salvarea contextului in intreruperi).
In intreruperi, este automat salvata in stiva numai valoarea contorului de program PC.
Pentru salvarea si a valorilor din alti registrii, cum ar fi registrul w sau satatus, trebuie scris un
program. Actiunea de salvare a informatiilor este cunoscuta sub denumirea generica de PUSH-
ING iar actiunea de restaurare a informatiilor inainte de reintoarcerea din rutina de intreruperi
este cunoscuta sub denumirea numirea de POP-ING. Salvarea contextului in intreruperi actiunile
PUSH SI POP nu au mnemonici speciale, ele sunt numai actiuni conceptuale. Actiunile PUSH SI
POP pot fi implementate ca o secventa de program. Uzual se folosesc macro-uri.
9
13. Porturi I/O digitale. Registrul de port. Scriere
(schema pt un pin, explicarea functionarii schemei)
14. Porturi I/O digitale. Registrul de port. Citire
(schema pt un pin, explicarea functionarii schemei)
10
15. Porturi I/O digitale. Registru de directie. Scriere
(schema pt un pin, explicarea functionarii schemei)
Directia IN sau OUT a unui pin este controlata de registrul de directiea datelor notat
TRIS. TRIS<x> controleaza directia portului x.
SETAM ‘1’ LOGIC- INPUT - pin intrare ;
SETAM ‘0’ LOGIC- OUTPUT- pin iesire;
- bitii din registrul TRIS sunt suprascrisi in cazul anumitor periferice, cand acestea sunt
validate.
trebuie evitate instructiuni de tip citeste – modifica - scrie (BSF, BCF, XORWF) care au ca
destinatie registrul TRIS, pentru ca suprascriu registrul tris la activarea anumitor periferice, cand
acestea au fost validate;
- o scriere intr-un port implica faptul ca acel port este citit, se modifica valoarea si este
scrisa in latchul de date;
- daca pe un pin este multiplexata o functie periferica cu un pin general deI/O,
functionalitatea respectivului pin se schimba astfel incat sa se potriveasca cerintelor
modulului periferic;
- in anumite cazuri, biti din registrul TRIS sunt suprascrisi cand este validat perifericul;
- scrierea corecta a registrului TRIS se va face conform setarilor pentru perifericele
utilizate o scriere intr-un port implica faptul ca acel port este citit, se modifica valoarea si
este scrisa in latchul de date;
- daca pe un pin este multiplexata o functie periferica cu un pin general de I/O,
functionalitatea respectivului pin se schimba astfel incat sa se potriveasca cerintelor
modulului periferic;
- in anumite cazuri, biti din registrul TRIS sunt suprascrisi cand este validat perifericul
scrierea corecta a registrului TRIS se va face conform setarilor pentru perifericele
utilizate.
11
16. Porturi I/O digitale. Registrul de directie. Citire
Cand sunt selectati ca intrari analogice, acesti pini sunt cititi ca ‘0’. Registrul TRIS
controleaza directia pinilor portului chiar si cand sunt utilizati ca intrari analogice. Utilizatorul
trebuie sa se asigure ca biti din rgistrul TRIS raman setati cand utilizam acesti pini ca pini de
intrare analogica.
- daca pini sunt multiplexati cu intrari analogice, la un power-on reset, acestia sunt
configurati ca intrari analogice, ca si cum ar fi controlati de registrul ADCON1;
- citirea pinilor unui port configurat ca intrare analogica intoarce valoarea ‘0’ daca pini
sunt multiplexati cu intrari de comparator, la un power-on reset, acestia sunt configurati
ca intrari analogice, ca si cum ar fi controlati de registrul CMCON;
- citirea pinilor unui port configurat ca intrare analogica intoarce valoarea ‘0’ daca pini
sunt multiplexati cu iesiri pentru afisaj LCD, la un power-on reset, acestia sunt
configurati ca iesiri pentru afisaj LCD, ca si cum ar fi controlati de registrul LCDSE;
- pentru a configura acesti pini ca port digital, biti corespondenti din registrul lcdse trebuie
stersi orice bit setat in registrul lcdse suprascrie bitii setati in registrul corespondent
TRIS;
- pinii pot fi multiplexati cu portul paralel (PSP);
- pentru ca PSP sa functioneze, pinii I/O trebuie configurati ca intrari digitale iar bitul
PSPMODE trebuie setat.
12
17. Initializarea porturilor digitale
(ex de program pt initializare, operatiuni succesive pt un port I/O)
13
19. Timer 0
(ce este un timer, structura T0, schema, proprietati, intreruperi, registrul de control)
Ce este un timer:
- Sistemul timer (circuit de timp) este folosit pentru a măsura timpul şi pentru a genera semnale cu
perioade şi frecvenţe dorite;
- Timerele sunt circuite de temporizare si/sau numarare, independente de functionarea CPU;
- valoarea registrilor poate fi citita si scrisa;
- la depasirea valorii maxime seteaza un bit de depasire si pot genera intreruperi;
- sursa semnalului de clock poate fi interna sau externa microcontrollerului;
- frontul pe care se face incrementarea contorului poate fi ales;
- pot exista mai multe timere intr-un μc;
- marimea registrului timer este in functie de tipul μc si de tipul timerului ales.
Timer0 are urmatoarele proprietati:
- timer / counter de 8 biti;
- poate fi citit si scris;
- prescaler (predivizor) de 8 biti programabil software;
- sursa pentru semnalul clock poate fi externa sau interna;
- poate genera intreruperi la depasirea valorii maxime a registrului timer de la ffh la 00h;
- se poate selecta frontul semnalului de clock pentru sursa externa.
Schema timer0
14
20. Timer 1
(ce este un timer, structura T1, schema, proprietati, intreruperi, registrul de control)
Ce este un timer:
- Sistemul timer (circuit de timp) este folosit pentru a măsura timpul şi pentru a genera
semnale cu perioade şi frecvenţe dorite;
- Timerele sunt circuite de temporizare si/sau numarare, independente de functionarea
CPU;
- valoarea registrilor poate fi citita si scrisa;
- la depasirea valorii maxime seteaza un bit de depasire si pot genera intreruperi;
- sursa semnalului de clock poate fi interna sau externa microcontrollerului;
- frontul pe care se face incrementarea contorului poate fi ales;
- pot exista mai multe timere intr-un μc;
- marimea registrului timer este in functie de tipul μc si de tipul timerului ales.
Timer1 are urmatoarele proprietati:
- timer / counter de 16 biti (tmr1h, tmr1l) poate fi citit si scris;
- prescaler (predivizor) de 4 biti programabil software;
- sursa pentru semnalul clock poate fi externa sau interna;
- poate genera intreruperi la depasirea valorii maxime a registrului timer de la ffffh la
000h;
- timer1 poate opera in trei moduri: timer sincron, numarator sincron, numarator asincron.
Schema timer1:
bit 7:6
Unimplemented: Read as '0'
bit 5:4 T1CKPS1:T1CKPS0: Timer1 Input Clock Prescale Select bits
11 = 1:8 Prescale value
10 = 1:4 Prescale value
01 = 1:2 Prescale value
00 = 1:1 Prescale value
bit 3 T1OSCEN: Timer1 Oscillator Enable bit
1 = Oscillator is enabled
0 = Oscillator is shut off.
15
bit 2 T1SYNC: Timer1 External Clock Input Synchronization Select bit When TMR1CS = 1:
1 = Do not synchronize external clock input
0 = Synchronize external clock input
When TMR1CS = 0: This bit is ignored. Timer1 uses the internal clock when TMR1CS = 0.
bit 1 TMR1CS: Timer1 Clock Source Select bit
1 = External clock from pin T1OSO/T1CKI (on the rising edge)
0 = Internal clock (FOSC/4)
bit 0 TMR1ON: Timer1 On bit
1 = Enables Timer1
0 = Stops Timer1
16
21. Timer 2.
(ce este un timer, structura T2, schema, proprietati, intreruperi, registrul de control)
Ce este un timer:
- Sistemul timer (circuit de timp) este folosit pentru a măsura timpul şi pentru a genera semnale cu
perioade şi frecvenţe dorite;
- Timerele sunt circuite de temporizare si/sau numarare, independente de functionarea CPU;
- valoarea registrilor poate fi citita si scrisa;
- la depasirea valorii maxime seteaza un bit de depasire si pot genera intreruperi;
- sursa semnalului de clock poate fi interna sau externa microcontrollerului;
- frontul pe care se face incrementarea contorului poate fi ales;
- pot exista mai multe timere intr-un μc;
- marimea registrului timer este in functie de tipul μc si de tipul timerului ales.
Timer2 are urmatoarele proprietati:
- timer de 8 biti poate fi citit si scris;
- prescaler si postscaler programabile software;
- registru de perioada utilizat de modulul ccp pentru generarea pwm utilizat de modulul uart pentru
generarea baud rate.
Schema timer2:
17
22. Modul de captura.
(ce este un modul CCP, registrul de control CCP, initializarea in modul captura, functionare)
Ce este un modul CCP:
Fiecare modul CCP (Captura/Comparare/PWM) contine un registru de 16 biti, care poate
opera ca:
- registru de 16 biti de comparare;
- registru de 16 biti de captura;
- registru de 10 biti master/slave de factor de umplere pentru generare pwm;
- modulele ccp sunt identice ca operare, cu exceptia operarii trigerului de evenimente speciale;
- fiecare modul ccp are 3 registrii pot fi mai multe module ccp intr-un μc.
Modul Captura:
- in mod captura, la un eveniment, se captureaza valoarea TMR1 in CCPRxH:CCPRxL;
- un eveniment este selectat prin bitii de control CCPxM3:CCPxM0 (CCPxCON<3:0>);
- cand se realizeaza o captura, se seteaza bitul de erere de intrerupere CCPxIF;
- bitul CPxIF trebuie sters prin software;
- daca apare o noua captura inainte ca sa se citeasca registrii CCPRx, valoarea anterioara este
pierduta;
- timer1 trebuie sa functioneze in mod de numarator sincronizat;
- captura nu reseteaza timer1;
- timer1 va genera intreruperi la depasirea valorii maxime (FFFF).
18
23. Modul de comparare.
(ce este un modul CCP, registrul de control CCP, initializarea in modul comparare, functionare)
Ce este un modul CCP:
Fiecare modul CCP (Captura/Comparare/PWM) contine un registru de 16 biti, care poate
opera ca:
- registru de 16 biti de comparare;
- registru de 16 biti de captura;
- registru de 10 biti master/slave de factor de umplere pentru generare pwm;
- modulele ccp sunt identice ca operare, cu exceptia operarii trigerului de evenimente speciale;
- fiecare modul ccp are 3 registrii pot fi mai multe module ccp intr-un μc.
19
- este generata o intrerupere;
- timer1 trebuie sa functioneze in mod de numarator sincronizat;
- o captura nu reseteaza timer1;
- timer1 va genera intreruperi la depasirea valorii maxime (FFFF).
20
Modul PWM:
- in mod pwm, la pinul de iesire CCPx, se va genera un semnal pwm cu rezolutia de 10 bit;
- pentru a fi disponibil ca pin de iesire, acesta trebuie sa aiba bitul corespondent din registrul TRIS
setat pe ‘0’;
- stergerea registrului CCPxCON va forta latch-ul pwm de iesire la starea initiala ‘0’, acesta nu este
latch-ul de port;
- timer-ul de 8 biti este concatenat cu 2 biti ai clock intern sau cu 2 biti ai prescalerului;
- pentru a crea o baza de timp de 10 biti o iesire pwm are o baza de timp (perioada T) si un timp in
care este pe ‘1’, (T1).
21
24. Modul PWM. Setarea perioadei.
(ce este un modul CCP, registrul de control CCP, initializarea in modul PWM, ce este un semnal
PWM, functionare, setarea perioadei).
PWM (Pulse Width Modulation) este o tehnică folosită pentru a varia în mod controlat tensiunea dată
unui dispozitiv electronic. Această metodă schimbă foarte rapid tensiunea oferită dispozitivului respectiv
din ON în OFF și invers. Perioada de timp corespunzătoare valorii ON dintr-un ciclu ON-OFF se numește
factor de umplere (duty cycle) și reprezintă, in medie, ce tensiune va primi dispozitivul electronic. Astfel,
se pot controla circuitele analogice din domeniul digital.
Perioada PWM
- perioada pwm este specificata prin scrierea registrului PR2;
- perioada PWM = [(PR2)+1]*4*Tosc*(valoarea prescaler TMR2) [timp];
- frecventa PWM (Fpwm) = 1/[Perioada PWM];
- cand TMR2 = PR2, vor aparea trei evenimente la urmatorul ciclu de incrementare: TMR2 este
sters, pinul CCPx este pus pe ‘1’(exceptie daca factorul de umplere PWM este 0%, pinul CCPx
nu va fi setat), factorul de umplere PWM este transferat din CCPRxL in CCPRxH;
- postscaler-ul TMR2 nu este utilizat in determinarea frecventei PWM poate fi utilizat pentru a
avea o rata de reimprospatare a servo, alta decat iesirea PWM.
22
25. Modul PWM. Setarea factorului de umplere.
(ce este un modul CCP, registrul de control CCP, initializarea in modul PWM, ce este un semnal
PWM, functionare, setarea factorului de umplere).
PWM (Pulse Width Modulation) este o tehnică folosită pentru a varia în mod controlat tensiunea dată
unui dispozitiv electronic. Această metodă schimbă foarte rapid tensiunea oferită dispozitivului respectiv
din ON în OFF și invers. Perioada de timp corespunzătoare valorii ON dintr-un ciclu ON-OFF se numește
factor de umplere (duty cycle) și reprezintă, in medie, ce tensiune va primi dispozitivul electronic. Astfel,
se pot controla circuitele analogice din domeniul digital.
Setarea factorului de umplere:
- factorul de umplere al PWM este specificat prin crierea in registrul CCPRxL si in bitii
DCxB1:DCxB0 (CCPxCON<5:4>);
- rezolutia maxima este de 10 biti;
- CCPRxL contine 8 biti MSB;
- DCxB1:DCxB0 (CCPxCON<5:4>) LSB;
- pentru calculul factorului de umplere PWM: PWM dc = DCxB9:DCxB0)*TOSC*valoarea
prescaler TMR2 [s];
- biti DCxB9:DCxB0 pot fi scrisi la orice moment de timp, dar valoarea nu este trecuta in CCPRxH
decat dupa ce apare egalitatea intre PR2 si TMR2, adica la sfarsitul perioadei curente;
- in mod pwm registrul CCPRxH este unul de tip Read Only.
23
- dubla bufferare este esentiala pentru ca modulul PWM sa functioneze fara glitch-uri;
- cand valoarea registrului CCPRxH plus cei doi biti este egala cu valoarea TMR2 concatenata cu
valoarea celor 2 biti interni Q-CLOCK sau TMR2 prescaler, pinul CCPx este pus pe ‘0’;
- acesta este sfarsitul ciclului;
- valoarea maxima a rezolutiei PWM pentru o frecventa data este: REZ = log2 (FOSC / FPWM)
[BITI];
- daca valoarea factorului de umplere PWM este mai mare decat perioada PWM, pinul CCPx nu
ajunge la ‘0’.
- acest lucru permite un factor de umplere de 100%.
24
- intreruperile generate de comparator trebuie dezactivate in timpul configurarii dinamice a
modulului comparator. In caz contrar poate aparea o intrerupere falsa;
- timpul de raspuns al unui comparator este timpul minim trecut de la momentul selectarii unei noi
tensiuni de referinta sau sursa de intrare pana la momentul la care iesirea comparatorului are o
stare stabila;
- iesirea comparatorului se citeste prin intermediul registrului CMCON;
- in funtie de configuratie, iesirea comparatorului poate fi conectata direct la pin
- in acest mod, iesirea la pin este asincrona cu clock-ul sistem;
- registrul TRIS va functiona uzual, validand sau invalidand pini I/O in acest mod;
- la citirea registrului PORTx toti pini configurati ca intrare analogica vor fi cititi cu valoarea ‘0’;
- daca acesti pini sunt configurati ca intrare digitala si se aplica o tensiune analogica, valoarea citita
este in concordanta cu specificatiile Trigerului Schmitt;
- nivele analogice aplicate oricarui pin definit ca intrare digitala poate cauza ca bufferul de intrare
sa consume mai mult curent decat este in specificatii.
Intreruperi:
- flag-ul de intrerupere al comparatorului este setat oricand valoarea de iesire a acestuia se schimba;
- pentru a determina daca s-a schimbat starea actuala a comparatorului trebuie ca sa se
- memoreze starea bitilor de iesire;
- flag-ul de intrerupere a comparatorului este bitul CMIF;
- acest flag este setat la aparitia unei intreruperi si trebuie resetat software;
- pentru validarea intreruperii trebuie setati atat bitii CMIE cat si PEIE;
- utilizatorul, in rutina de tratare a intreruperii, poate sterge bitul de intrerupere in urmatoarele moduri:
orice citire sau scriere in registrul cmxcon. aceasta va incarca in
registrul CMCOM noua valoare a bitilor CMxCON;
stergerea bitului cmif.
- conditie de intrerupere va continua sa seteze bitul CMIF. citirea cmcon va termina conditia de
intrerupere si permite bitului CMIF sa fie sters;
- daca apare o schimbare a registrului CMCON (COUT) cand se incepe o operatie de citire, (inceputul
ciclului Q2) atunci flag-ul de intrerupere poate sa nu fie setat.
25
27. Referinta de tensiune
(utilitate, functionare, registru de control).
- in functie de configuratia setata, la intrarea comparatorului se poate aplica o tensiune de referinta
interna;
- valoarea tensiunii de referinta poate fi setata prin scrierea in registrul tensiunii de referinta VRCON;
- ecuatiile care determina valoarea tensiunii de iesire sunt:
VRR = 1 (low range): CVREF = (VR3:VR0 / 24) x VDD
VRR = 0 (high range): CVREF = (VDD / 4) + (VR3:VR0 x VDD / 32)
- calculul VR3:VR0 in functie de tensiunea de referinta:
26
ADC – Generalitati
Pentru a putea fi utilizate intr-un sistem de calcul digital, semnale analogice trebuiesc convertite
in valori numerice discrete. Un convertor analog - digital (ADC) este un circuit care converte?te o
tensiune analogica de la intrare intr-o valoare digitala. Aceasta poate fi reprezentata in mai multe feluri in
functie de codificarea datelor: in binar, cod Gray etc
Conversia semnalelor analogice in semnale digitale poate fi realizata prin:
Metode hardware:
- convertoare tensiune - frecventa sau tensiune – timp;
- convertoare cu panta simpla dubla sau multipla;
- convertoare cu esantionare (sample & hold);
- convertoare sigma-delta (convertoare pe 1bit).
Metode software:
- aproximatii succesive;
- masurarea timpului de incarcare al unui condensator.
O caracteristica importanta a unui ADC o constituie rezolutia acestuia. Rezolutia indica numarul
de valori discrete pe care convertorul poate sa le furnizeze la iesirea sa in itervalul de masura. Deoarece
rezultatele conversiei sunt de obicei stocate intern sub forma binara, rezolu?ia unui convertor analog-
digital este exprimata in biti.
O alta caracteristica importanta a unui convertor analog-digital o constituie rata de esantionare.
Aceasta depinde de timpul dintre doua conversii succesive si afecteaza modul in care forma de unda
originala va fi redata dupa procesarea digitala, care este rata minima de esantionare pentru a reproduce
fara pierderi un semnal de o frecventa data. Teorema lui Nyquist spune ca o rata de esantionare de minim
doua ori mai mare decat frecventa semnalului masurat este necesara pentru acest lucru, teorema
aplicandu-se si pentru un semnal compus dintr-un intreg spectru de frecvente, cum ar fi vocea umana.
Pentru a citi semnalele de pe convertorul analog digital se utilizeaza instructiunea: Adc_Read (x),
unde: x reprezinta numarul canalului ADC (0....8).
Pentru generarea semnalului analogic se va utiliza potentiometrul semireglabil de pe placa de
dezvoltare. Pe primul rand al LCD-ului va fi afisata valoarea citita de pa canalul 0 al convertorului
analog-digital iar pe al doilea rand va fi afisat un text. (ex: FLEXFORM).
Pentru afisarea valorii ADC-ului care este un numar pe 10 biti folosim instructiunea: Lcd_word
(x,y,k), unde: word reprezinta formatul numarului care va fi afisat,x reprezinta randul, y reprezinta
coloana, k este valoarea numarul care este afisat, in acest caz va fi valoarea citita pe ADC.
Pentru afisarea textului vom folosi instructiunea : Lcd_text (x,y, 'TEXT').
Modulul A/D foloseşte un registru de control prin care se selectează canalul de conversie şi
modul de lucru pentru circuitul de eşantionare/memorare. Declanşarea şi terminarea conversiei sunt
semnalizate cu câte un bit tot în registrul de control. Rezultatul conversiei este stocat în registrul de date.
Registrul de date va conţine întotdeauna rezultatul ultimei conversii, de aceea acest registru trebuie citit
înainte de terminarea următoarei conversii, în caz contrar se pierde informaţia.
Rata de eșantionare este frecvența la care ADC convertește forma de undă de intrare analogică in
date digitale . Rata de eșantionare trebuie să fie de cel puțin două ori mai mare frecvenței de interes a
semnalului (Teorema lui Nyquist), dar cele mai multe ori ar trebui să fie în jur de cinci ori mai mare.
27
29. 30. Modul ADC. Lucrul in intreruperi. Modul Free Running
(utilitate, functionare, registru de control)
Modulul A/D foloseşte un registru de control prin care se selectează canalul de conversie şi
modul de lucru pentru circuitul de eşantionare/memorare. Declanşarea şi terminarea conversiei sunt
semnalizate cu câte un bit tot în registrul de control. Rezultatul conversiei este stocat în registrul de date.
Registrul de date va conţine întotdeauna rezultatul ultimei conversii, de aceea acest registru trebuie citit
înainte de terminarea următoarei conversii, în caz contrar se pierde informaţia.
Caracteristica" de întrerupere ADC de conversie completa" înseamnă că, atunci când DC termină
de conversie și a pus răspunsul într -un loc standard acesta întrerupe programul principal pentru a anunta
realizarea conversiei. O funcție specială de tratare a întreruperii sau de rutină de întrerupere de servicii
(ISR), ridica rezultatul si face il utilizeaza ( începe măsurarea pe următorul canal) și în momentul în care
se termină, programul principal continua unde a ramas. În acest fel, nu trebuie să așteptam în programul
nostru principal , în timp ce conversia ADC are loc .
ADC are două moduri de operare de bază: de conversie unică și Running Free. În modul de
conversie unică, trebuie initializata fiecare conversie. În modul Free runing, ADC esantioneaza si ia
actualizeaza registrii. Acest mod este selectat de bitul ADFR in Registrii de Contro si Status ai ADC.
28