Sunteți pe pagina 1din 28

1. Ce este un µC?

(definitie, ce face, ce probleme rezolva, domenii, aplicatii).

Un MC poate fi definit ca un sistem de calcul complet pe un singur chip. Acesta include o


unitate centrală, memorie, oscilator pentru tact şi dispozitive I/O. Un MC poate fi privit ca un
microprocesor care pe acelaşi chip mai conţine memorie şi o serie de interfeţe. Natura şi
complexitatea aplicaţiei în care este folosit MC determină performanţele unităţii centrale,
capacitatea de memorie şi tipul interfeţelor ce compun structura internă a MC.

Un microcontroller este un circuit realizat pe un singur chip care conţine


tipic:
- unitatea centrală CPU;
- generatorul de tact (la care trebuie adăugat din exterior un cristal de cuarţ sau în
- aplicaţii mai puţin pretenţioase, un circuit RC);
- memoria RAM;
- memoria ROM/PROM/EPROM/EEPROM;
- dispozitive I/O seriale şi paralele;
- controller de întreruperi, controller DMA, numărătoare/temporizatoare (timers),
- covertoare A/D şi D/A, etc.;
- periferice.
Motivul pentru care se folosesc microcontrolere este pentru ca :
- au revolutionat modul de rezolvare al problemelor de control a proceselor;
- inlocuiesc dulapuri intregi de echipament (mecanic,electric,electronic , electromecanic)
- pentru ca sunt mult mai fiabile in exploatare;
- pentru ca sunt mult mai ieftine;
- pentru ca schimbarea fluxului tehnologic nu implica schimbarea intregului echipament, ci
doar a programului;
Toate aplicaţiile în care se utilizează microcontrolere fac parte din categoria aşa ziselor
sisteme încapsulate-integrate (“embedded systems”), la care existenţa unui sistem de calcul
incorporat este (aproape) transparentă pentru utilizator.
Domeniu de utilizare: control industrial, control cuptoare, control iluminare, control acces;
automotive: control motor (ECU), control sasiu (climatizare, geamuri, frane); electrocasnice;
comunciatii; semaforizare;
2. Structura generala a unui µC.
(unitate centrala, periferice, functii speciale, arhitectura, etc.).

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.

3. Unitatea centrala a unui microcontroller.


(ce face, ce este ALU, modul de lucru a unui ALU, ce operatii poate sa faca ALU).

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

5. Contorul de program PC.


(cum e realizat, cum se scrie in contorul de program, scrierea in PCL si in PCH,
comportarea contorului de program la salturi si instructiuni).

- 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 2 arata cum pc este incarcat in timpul unei instructiuni goto

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.

- adresarea directa poate necesita utilizarea bitilor RP1:RP0

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 ).

Întreruperile într-un microcontroler sunt văzute ca nişte evenimente speciale generate de


elementele periferice. Aceste evenimente pot fi reprezentate de apăsarea unui buton, atingerea unei valor
a numărătorului, terminarea de citit a unei valori a convertorului analog digital, etc..Toate acestea sunt
gestionate de un sistem intern numit sistem de întreruperi, sistem care are rolul de a oferi procesorului
informaţii referitoare la natura întreruperii şi de a opri funcţionarea ciclică tratând întreruperea într-o
rutină specială.
- permit abandonarea momentană de către microprocesor a execuţiei unui program şi începerea
execuţiei unui alt program situat oriunde în spaţiul de memorie;
- se folosesc la comunicarea UC – periferie si in sisteme multiprocesor;
- 2 tipuri: externe şi interne.
Întreruperile externe sunt provocate de evenimente externe microprocesorului care cer atenţie
imediată din partea acestuia. Cel care cere întreruperea trebuie să tină cererea activată până când
microprocesorul răspunde si sa se identifice atunci când microprocesorul o cere.

11. Latenta intreruperii.


(schema logica a intreruperilor, definire latenta intreruperii, graficul/diagrama de timp care
prezinta latenta intreruperii, ce se intampla la intrerupere interne, externa (sincrona/asincrone))

- 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.

Exemplu pasi de urmat pentru realizarea unui program PUSH / POP:


1 Memoreaza continutul registrului w in bancul de memorie curent.
2. Memoreaza registrul status in BANK0.
3. Executa codul rutinei de intrerupere (ISR).
4. Reface starea registrului status si a bitilor de selectie a bancului de memorie.
5. Reface starea registrului W.

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)

• Port Register (PORT):


- este utilizat pentru a controla nivelul de tensiune la pinii de ieşire;
- pentru un pin configurat ca ieşire, set (1) va produce nivel High, iar reset (0) va produce
nivel Jos;
- scrierea la un pin de ieşire se face fie prin instrucţiuni speciale de set clear bit, fie prin
operaţii de tip citeşte-modifică-scrie;
- la citirea registrului PORT, pinii configuraţi ca ieşiri returnează ultima valoare scrisă;
- pentru pinii configuraţi ca intrări funcţionalitatea depinde de tipul microcontrolerului.
• Unele MC permit citirea stării pinului de intrare.
• Alte MC, ca de ex. Atmega 16, utilizează biţii setaţi ca intrări ai portului pentru alte scopuri,
astfel că dacă se face citire se va returna valoarea pe care aţi scris-o în registru.
• Port Input Register (PIN)
- Registrul PIN este în general un registru doar cu citire;
- PIN conţine starea curentă (sus sau jos) a tuturor pinilor indiferent dacă sunt configuraţi
ca intrări sau ca ieşiri;
- este utilizat pentru a citi starea pinilor de intrare;
- o scriere la acest registru, în general, nu are efect.
• MC conţin instrucţiuni speciale pentru scriere pe bit la porturi (fără modificarea celorlalţi biţi ai
portului).
• Altă variantă este să se utilizeze accesul de tip readmodify-write, care permite modificarea doar
pentru anumiţi biţi ai portului.
• Secvenţă de operaţii (cel puţin 3 instrucţiuni în program):
– citeşte un octet de la port;
– schimbă doar biţii ce se doresc a fi modificaţi;
– scrie rezultatul la port.
• Acest mod de acces la scrierea unor biţi nu se recomandă la MC care utilizează registre cu
funcţie dublă, cum ar fi un registru I/O ce funcţionează la citire ca registru de stare, iar la scriere
ca registru de control. În acest caz scrierea poate avea efecte nedorite.

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

(schema pt un pic, explicarea functionarii schemei)


Cand portul este citit, dispozitivul citeste valorile care se regasesc la pini (si nu latch-ul).
Aceasta insemna ca trebuie atentie cu comenzile de tip citeste - modifica - inscrie asupra
porturilor si schimbarea directiei unui pin din intreare si iesire. Cititrea implica citirea starii
pinilor, iar scrierea lui implica scrierea latch-ului asociat.

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)

Exemplu de initializare a portului B:


CLRF STATUS ; Bank0
CLRF PORTB ; Initialize PORTB by clearing output data latches
BSF STATUS, RP0 ; Select Bank1
MOVLW 0xCF ; Value used to initialize data direction
MOVWF TRISB ; PORTB<3:0> = inputs,
;PORTB<5:4> = outputs
; PORTB<7:6> = inputs
Pentru a initializa pinii portului ca intrare sau iesire, aceasta valoare trebuie incarcata in
registrul de directie TRIS, conform programului de mai sus. Atat la scriere cat si la citire, la
sfarsitul ciclului de intructiuni a unui port I/O, datele trebuie sa fie valide la inceputul ciclului.
Trebuie avuta grija la intructiuni de scriere urmate de operatiuni de citire pe acelasi port.
Secventa de program trebuie sa permita stabilizarea valorii tensiunii la pin, inainte ca urmatoarea
intructiune care cauzeaza citirea de la port sa fie executata, astfel s-ar putea citi vechea stare a
portului in loc de cea curenta.
PORTUL B
- este un port bidirectional de 8 biti, cu registrul de date PORTB;
- registrul de directie a datelor este TRISB;
- fiecare pin are un pull-up slab controlat de un singur bit, numit rbpu si situat in registrul
(OPTION<7>)
 este dezactivat cand portul este configurat ca iesire;
 este dezactivat la power-on reset.
PORTURI I/O
- este recomandat ca la initializarea unui port I/O sa se respecte urmatoarea succesiune:
 initializarea registrului PORTx;
 initializarea registrului TRISx.
- respectarea succesiunii, elimina posibilitatea aparitiei glitch-ului la nivelul pinului, in
timp ce valorile din latch-ul de date al portului sunt intr-o stare aleatoare.

18.Porturi I/O analogice


(descriere,unde se utilizeaza, initializare)

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

Registrul de control OPTION_REG:

bit 7 RBPU (1): Weak Pull-up Enable bit


1 = Weak pull-ups are disabled
0 = Weak pull-ups are enabled by individual port latch values
bit 6 INTEDG: Interrupt Edge Select bit
1 = Interrupt on rising edge of INT pin
0 = Interrupt on falling edge of INT pin
bit 5 T0CS: TMR0 Clock Source Select bit
1 = Transition on T0CKI pin
0 = Internal instruction cycle clock (CLKOUT)
bit 4 T0SE: TMR0 Source Edge Select bit
1 = Increment on high-to-low transition on T0CKI pin
0 = Increment on low-to-high transition on T0CKI pin
bit 3 PSA: Prescaler Assignment bit
1 = Prescaler is assigned to the WDT
0 = Prescaler is assigned to the Timer0 module
bit 2:0 PS2:PS0: Prescaler Rate Select bits

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:

Registrul de control este T1CON:

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

1. Timer1 operare in mod timer:


- modul timer este selectat prin stergerea tmr1cs (t1con<1>);
- intrarea de clock a timer1 este fosc/4;
- bitul de control al sincronizarii t1sync (t1con<2>) nu are efect deoarece semnalul de
lock intern este intotdeauna sincronizat.
2. Timer1 operare in mod numarator sincronizat:
- modul numarator este selectat prin setarea tmr1cs (t1con<1>), in acest mod timerul este
incrementat la fiecare front crescator ;
- daca bitul t1sync este sters, semnalul clock extern este sincronizat cu semnalul de clock
ntern, sincronizarea este realizata dupa prescaler (numarator asincron);
- in aceasta configuratie, in modul sleep, timer1 nu va fi incrementat.
3. Timer 1 operare in mod numarator asincron:
- modul numarator este selectat prin setarea tmr1cs (t1con<1>), in acest mod timerul este
incrementat la fiecare front crescator daca bitul t1sync este setat, semnalul clock extern
nu este sincronizat cu semnalul de clock intern;
- in aceasta configuratie, in modul sleep, timer1 va fi incrementat ;
- timer1 poate fi implementat ca un ceas de timp realtimer1 nu poate fi utilizat pentru
operatii de captura sau comparare.

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:

Registrul de control este T2CON:

bit 7 Unimplemented: Read as '0'


bit 6:3 TOUTPS3:TOUTPS0: Timer2 Output Postscale Select bits
0000 = 1:1 Postscale
0001 = 1:2 Postscale

1111 = 1:16 Postscale
bit 2 TMR2ON: Timer2 On bit
1 = Timer2 is on
0 = Timer2 is off
bit 1:0 T2CKPS1:T2CKPS0: Timer2 Clock Prescale Select bits
00 = Prescaler is 1
01 = Prescaler is 4
1x = Prescaler is 16

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.

CCP Mode Timer Resource


Capture Timer1
Compare Timer1
PWM Timer2

Registrul de control CCPxCON:

•Bit 7:6 neimplementat, se citesc ‘0’


•Bit 5:4 factor de umplere PWM bit0 si bit1, MSB in registrul CCPRxL
in mod captura sau comparare nu se utilizeaza
•Bit 3:0 biti de selectie a modului CCPx
•0000 = CCP oprit (reseteaza modulul CCP)
•0100 = mod captura, la fiecare front descrescator
•0101 = mod captura, la fiecare front crescator
•0110 = mod captura, la fiecare al 4 front crescator
•0111 = mod captura, la fiecare al 16 front crescator
•1000 = mod comparare, initial pin CCP ‘0’, la egalitate ‘1’, bit CCPIF
•1001 = mod comparare, initial pin CCP ‘1’, la egalitate ‘0’, bit CCPIF
•1010 = mod comparare, se genereaza INT soft, pin CCP neafectat, bit CCPIF ‘1’
•1011 = mod comparare, trigger la eveniment special, bit CCPIF ‘1’
•11xx = mod PWM

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.

CCP Mode Timer Resource


Capture Timer1
Compare Timer1
PWM Timer2

Registrul de control CCPxCON:

•Bit 7:6 neimplementat, se citesc ‘0’


•Bit 5:4 factor de umplere PWM bit0 si bit1, MSB in registrul CCPRxL
in mod captura sau comparare nu se utilizeaza
•Bit 3:0 biti de selectie a modului CCPx
•0000 = CCP oprit (reseteaza modulul CCP)
•0100 = mod captura, la fiecare front descrescator
•0101 = mod captura, la fiecare front crescator
•0110 = mod captura, la fiecare al 4 front crescator
•0111 = mod captura, la fiecare al 16 front crescator
•1000 = mod comparare, initial pin CCP ‘0’, la egalitate ‘1’, bit CCPIF
•1001 = mod comparare, initial pin CCP ‘1’, la egalitate ‘0’, bit CCPIF
•1010 = mod comparare, se genereaza INT soft, pin CCP neafectat, bit CCPIF ‘1’
•1011 = mod comparare, trigger la eveniment special, bit CCPIF ‘1’
•11xx = mod PWM
Modul Comparare:
- in mod comparare, valoarea din CCPRxH:CCPRxL este comparata constant cu valoarea din
TMR1;
- la aparitia unei egalitati, pinul CCPx este: pus pe ‘1’, pus pe ‘0’ sau ramane neschimbat;
- actiunea asupra pinului este determinata de valoarea bitilor de control CCPxM3:CCPxM0
(CCPxCON<3:0>);

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).

24. Modul PWM.


(ce este un modul CCP, registrul de control CCP, initializarea in modul PWM, 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.

CCP Mode Timer Resource


Capture Timer1
Compare Timer1
PWM Timer2
Registrul de control CCPxCON:

•Bit 7:6 neimplementat, se citesc ‘0’


•Bit 5:4 factor de umplere PWM bit0 si bit1, MSB in registrul CCPRxL
in mod captura sau comparare nu se utilizeaza
•Bit 3:0 biti de selectie a modului CCPx
•0000 = CCP oprit (reseteaza modulul CCP)
•0100 = mod captura, la fiecare front descrescator
•0101 = mod captura, la fiecare front crescator
•0110 = mod captura, la fiecare al 4 front crescator
•0111 = mod captura, la fiecare al 16 front crescator
•1000 = mod comparare, initial pin CCP ‘0’, la egalitate ‘1’, bit CCPIF
•1001 = mod comparare, initial pin CCP ‘1’, la egalitate ‘0’, bit CCPIF
•1010 = mod comparare, se genereaza INT soft, pin CCP neafectat, bit CCPIF ‘1’
•1011 = mod comparare, trigger la eveniment special, bit CCPIF ‘1’
•11xx = mod PWM

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).

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.
CCP Mode Timer Resource
Capture Timer1
Compare Timer1
PWM Timer2
Registrul de control CCPxCON:

•Bit 7:6 neimplementat, se citesc ‘0’


•Bit 5:4 factor de umplere PWM bit0 si bit1, MSB in registrul CCPRxL
in mod captura sau comparare nu se utilizeaza
•Bit 3:0 biti de selectie a modului CCPx
•0000 = CCP oprit (reseteaza modulul CCP)
•0100 = mod captura, la fiecare front descrescator
•0101 = mod captura, la fiecare front crescator
•0110 = mod captura, la fiecare al 4 front crescator
•0111 = mod captura, la fiecare al 16 front crescator
•1000 = mod comparare, initial pin CCP ‘0’, la egalitate ‘1’, bit CCPIF
•1001 = mod comparare, initial pin CCP ‘1’, la egalitate ‘0’, bit CCPIF
•1010 = mod comparare, se genereaza INT soft, pin CCP neafectat, bit CCPIF ‘1’
•1011 = mod comparare, trigger la eveniment special, bit CCPIF ‘1’
•11xx = mod PWM

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).

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.
CCP Mode Timer Resource
Capture Timer1
Compare Timer1
PWM Timer2
Registrul de control CCPxCON:

•Bit 7:6 neimplementat, se citesc ‘0’


•Bit 5:4 factor de umplere PWM bit0 si bit1, MSB in registrul CCPRxL
in mod captura sau comparare nu se utilizeaza
•Bit 3:0 biti de selectie a modului CCPx
•0000 = CCP oprit (reseteaza modulul CCP)
•0100 = mod captura, la fiecare front descrescator
•0101 = mod captura, la fiecare front crescator
•0110 = mod captura, la fiecare al 4 front crescator
•0111 = mod captura, la fiecare al 16 front crescator
•1000 = mod comparare, initial pin CCP ‘0’, la egalitate ‘1’, bit CCPIF
•1001 = mod comparare, initial pin CCP ‘1’, la egalitate ‘0’, bit CCPIF
•1010 = mod comparare, se genereaza INT soft, pin CCP neafectat, bit CCPIF ‘1’
•1011 = mod comparare, trigger la eveniment special, bit CCPIF ‘1’
•11xx = mod PWM

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%.

26. Comparatoare analogice.


(functionare, registrul de control, moduri de lucru, intreruperi).

- modulul comparator contine unul sau mai multe comparatoare analogice;


- intrarea si iesirea comparatoarelor sunt multiplexate cu pini de intrare/iesire ca intrare a
comparatoarelor, pe langa pini de intrare/iesire, poate fi si iesirea sursei de referinta interne;
- controlul functionarii comparatorului se face cu registrul CMCON.

bit 7 C2OUT: Comparator2 Output Indicator bit


1 = C2 VIN+ > C2 VIN–
0 = C2 VIN+ < C2 VIN–
bit 6 C1OUT: Comparator1 Output Indicator bit
1 = C1 VIN+ > C1 VIN–
0 = C1 VIN+ < C1 VIN–
bit 5:4 Neimplementati: Read as '0'
bit 3 CIS: Comparator Input Switch bit
- CM2:CM0: = 001:
1 = C1 VIN– connects to AN3
0 = C1 VIN– connects to AN0
bit 2:0 CM2:CM0:Biti Selectie Mod Comparator
- CM2:CM0 = 010:
1 = C1 VIN– connects to AN3
C2 VIN– connects to AN2
0 = C1 VIN– connects to AN0
C2 VIN– connects to AN1
bit 2:0 CM2:CM0:Biti Selectie Mod Comparator
Functionarea comparatorului:

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:

Schema referintei de tensiune:

Registrul de control al referintei de tensiune:

bit 7 VREN: VREF Enable


1 = VREF circuit powered on
0 = VREF circuit powered down
bit 6 VROE: VREF Output Enable
1 = VREF is internally connected to Comparator module’s VREF. This voltage level is
also output on the VREF pin
0 = VREF is not connected to the comparator module. This voltage is disconnected
from the VREF pin
bit 5 VRR: VREF Range selection
1 = 0V to 0.75 VDD, with VDD/24 step size
0 = 0.25 VDD to 0.75 VDD, with VDD/32 step size
bit 4 Unimplemented: Read as '0'
bit 3:0 VR3:VR0: VREF value selection 0 £ VR3:VR0 £ 15.

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').

28. Modul ADC. Setarea frecventei de lucru


(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.
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.

bit 7 - ADEN: ADC Enable, pus pe ‘1’ logic va permite conversia;


bit 6 - ADSC: ADC Start Conversion, pus pe ‘1’ va incepe conversia;
bit 5 - ADFR: ADC Free Running Select, pus pe ‘1’ logic va permite modul Free Running;
bit 4 - ADIF: ADC Interrupt Flag, acest bit este setat ‘1’ cand conversia ADC este completa si registrii
de date sunt actualizati;
bit 3 - ADIE: ADC Interrupt Enable, setat pe ‘1’ va permite intreruperea ADC, permisa doar daca si I-
bit in SREG este setat;
bits 2..0 - ADPS2..0: ADC Prescaler Selection Bits, acestia determina factorul de divizare intre
frecventa XTAL si clock-ul de input.

28

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