Sunteți pe pagina 1din 26

MICROCONTROLLER

Un microcontroler este un sistem cu microprocesor, care conţine memorie de date şi de program,


interfete seriale şi paralele, timere, sistem de intreruperi externe şi interne - toate integrate într-un
singur chip.

Unitatea centrala (CPU)


Contine dispozitivele de baza care sunt cerute pentru
functionarea unui microcontroller. Aceasta include:
- Unitatea logica si aritmetica (ALU)
- Memoria
- Oscilatorul
- Sistemul de reset
- Sistemul de intreruperi
- Set de instructiuni

Periferice
Sunt dispozitive adaugate pe chip, care fac diferenta fata de
un microprocesor
- Porturi I/O de uz general
- Timere
- Captura, comparare si modulatia impulsurilor in durata (CCPWM)
- Interfete seriale standard
- Interfete paralele standard
- Referinte de tensiune
- Comparatoare
- Convertoare analog digitale
- Afisaj lcd

Functii speciale
Ajuta la cresterea flexibilitatii in proiectare, a realizarii unui
sistem de incredere, cu un cost mult redus
- Configurare
- Power on reset (POR)
- Brown out reset (BOR)
- Watchdog timer
- Sleep
- Oscilatorul intern
- Programarea in circuit (ICSP)

ARHITECTURA INFLUENTEAZA
- Performantele globale
- Viteza operationala
- Structura memoriei disponibile

VON NEUMANN
•Instructiunile si datele sunt aduse pe
acelasi bus
•Banda limitata
•Numar mare de cicli procesor / ciclu fetch
•Versatilitate

HARVARD
•Spatiu de memorie separat pentru
instructiuni si date
•Sunt posibile largimi diferite pentru busurile de date si instructiuni
•Numar minim de cicli procesor / ciclu fetch
•Cresterea reala a Throughput-ului

CPU este responsabila cu:


- aducerea instructiunii corecte pentru executie,
- decodarea acestei instructiuni
- executia acestei instructiuni.
CPU lucreaza in conjunctie cu ALU pentru a completa executia instructiunii (in operatii aritmetice
si logice)
CPU controleaza:
- Busul adreselor de memorie program
- Busul adreselor de memorie de date
- Accesul la stiva
ALU este o unitate aritmetica si logica de uz general
ALU efectueaza functii aritmetice si logice intre date din registrul de
lucru si oricare alt registru
Marimea ALU este in stransa legatura cu marimea registrului de
lucru (acumulator sau W) si cu tipul microcontrollerului.
Microcontrolerele PIC de 8 biti de la firma Microchip, contin o unitate
ALU de 8 biti si un registru de lucru (W) de 8 biti.
ALU poate efectua urmatoarele operatii:
- Insumare
- Scadere
- Deplasare (shift)
- Operatii logice
Daca nu se mentioneaza altfel, operatiile aritmetice se fac in
complement fata de doi

In insructiuni cu doi operanzi, uzual unul din operanzi este registrul


de lucru (W)
Celalalt operand este un registru de uz general sau o constanta
In instructiunile cu un singur operand, operandul este registrul de
lucru (W) sau un registru de uz general
Registrul W este un registru de lucru de 8 biti, neadresabil
In functie de instructiunile executate, alu poate afecta valorile bitilor
carry (C), digit carry (DC) si zero (Z) din registrul STATUS

FORMATUL GENERAL AL
INSTRUCTIUNILOR
Instructiunile microcontrollerelor din gama mid-range pot fi impartite in
patru formate generale:
- Operatii cu registrii orientate pe byte
- Operatii cu registrii orientate pe bit
- Operatii literale si de control
- Instructiuni de salt (CALL si GOTO)
Codul de operand (opcode) al instructiunilor poate varia de la 3 la 6 biti
Sunt implementate 35 instructiuni

EXECUTIA INSTRUCTIUNILOR
Clock (ceas) de instructiune
Fiecare ciclu de instructiune (TCY) este alcatuit din 4 cicli Q (Q1-Q4)
Durata unui ciclu Q este aceiasi ca perioada oscilatorului (TOSC)
Cicli Q corespund proceselor de decodare, citire, procesare, scriere, etc.
Cei 4 cicli care formeaza un ciclu instructiune (TCY) pot fi generalizati ca:
- Q1: Ciclul de decodare a instructiunii sau NOP fortat
- Q2: Ciclu de citire a datelor sau NOP
- Q3: Procesarea datelor
- Q4: Ciclu de scriere a datelor sau NOP

REGISTRUL STATUS
Registrul STATUS contine:
- starea aritmetica a ALU,
- starea bitului RESET
- biti de selectie a bancului de memorie de date
Registrul STATUS poate fi destinatia oricarei instructiuni
Daca registrul STATUS este destinatia unei instructiuni care afecteaza biti Z, DC sau C, scrierea
acestor biti va fi blocata
Acesti biti sunt setati sau stersi in concordanta cu logica
microcontrollerului
Biti C si DC opereaza ca bit de borrow (imprumut) si digit borrow in
Scaderi

MEMORIA
Este compusa din doua blocuri
- Memoria de program
- Memoria de date
Memoria RAM de uz general
Registrii cu functiuni speciale (Fiecare bloc are propriul bus)
Accesul la blocurile de memorie poate sa apara in acelasi ciclu sistem
MCU din familia Microchip mid range au un contor de program de:
- 13 biti => 2 13 = 8k spatiu de adresare
- 16 biti => 2 16 = 64k spatiu de adresare (56k
Instructiunile sunt organizate pe 14 biti si sunt ‘single word’
Rezulta un spatiu de adresare de:
- 8k * 14 biti
- 56k * 14 biti
Spatiul de memorie de program este divizata in pagini de
cate 2k fiecare

ORGANIZAREA MEMORIEI DE
PROGRAM
Pentru a comuta 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 bitii din PCLATCH

Vectorul de reset
- Un reset va forta contorul de program la valoarea 00h
- Vom numi aceasta adresa adresa vectorului de reset”
- Orice reset va sterge continutul registrului PCLATCH
Vectorul de intrerupere
- Cand o intrerupere este recunoscuta , pc este fortat la adresa 04h.
- Vom denumi aceasta adresa : adresa vectorului de intrerupere
- Nu se modifica registrul PCLATCH
Trebuie avut grija daca adresa de salt din intrerupere este in alt bank
de memorie
Inainte de a fi modificat de ISR, continutul PCLATCH trebuie salvat ,
astfel incat dupa revenirea din rutina de intrerupere , continutul sau sa
poata fi restaurat

CONTORUL DE PROGRAM (PC)


Contorul de Program (PC) specifica adresa instructiunii
care trebuie adusa pentru executie
Are dimensiunea de 13 biti sau 16 biti pentru modelele
enhanced
Este compus din doi byte, unul mai semnificativ (PCH),
altul mai putin semnificativ (
PCL Este un registru care poate fi atat citit cat si scris
PCH contine bitii <12:8> sau <15:8> din PC si nu poate
fi direct citit si scris , ci numai prin intermediul registrului
PCLATCH

STIVA
Stiva este o memorie de tip LIFO (Last In First Out)
Stiva permite aparitia a unor combinatii de pana la 8 sau
16 (enhanced) apeluri de subrutine sau intreruperi
Stiva contine adresa de reintoarcere din ramura de
program activa, in executia programului
Microcontrollerele din gama mid-range au o stiva cu 8
nivele x 13 biti, iar cele din gama enhanced o stiva de 16
nivele de 15 sau 16 biti
spatiul stivei nu se poate citi sau scrie
spatiul stivei nu face parte din spatiul de memorie
program sau memorie de date

Continutul contorului 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
Pentru gama mid-range nu exista indicatoare de
depasire a numarului maxim de push-uri in stiva
Pentru gama enhanced exista doua indicatoare, unul de
depasire a valorii maxime (overflow) si unul de depasire
a valorii minime (underflow)

STIVA PENTRU uC ENHANCED


Stiva poate opera ca un buffer circular, daca bitul
STVREN este 0. (configuration word 2)
- Daca in stiva au fost PUSH 16 valori, cea de-a 17 va fi
memorata in locul primei introdusa
NU sunt instructiuni de tip POP sau PUSH, dar sunt
generate de instructiunile return, retlw sau retfie
PCLATCH nu este modificat cand se executa operatii cu
stiva
Pentru gama mid-range nu exista indicatoare de
depasire a numarului maxim de push-uri in stiva
Pentru gama enhanced exista doua indicatoare, unul de
depasire a valorii maxime (overflow) si unul de depasire
a valorii minime (underflow)

ORGANIZAREA MEMORIEI 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 putea face selectia bancurilor de memorie avem
nevoie de biti de control
Acestia sunt localizati in registrul STATUS (STATUS<7:5>)
Organizarea bancurilor difera de la dispozitiv la dispozitiv
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
Adresarea directa poate necesita utilizarea bitilor RP1:RP0
Adresarea indirecta necesita utilizarea registrului de
selectare a bancurilor (FSR) si a bitului registrului pointer
indirect (IRP) din registrul STATUS pentru accesarea
zonelor bank0/1 sau bank2/3 ale memoriei de date

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

RESET
Logica de reset este utilizata pentru a aduce
microcontrollerul intr-o stare stabila, cunoscuta.
Sursa care a determinat aparitia semnalului de reset
poate fi determinata verificand bitii de stare a
dispozitivului.
Logica de reset este proiectata astfel incat sa creasca
performanta si sa scada costul sistemului

Microcontrollerul poate fi resetat in mai multe moduri:


- Power On Reset (POR) – reset la conectarea tensiunii de
alimentare
- Brown Out Reset (BOR) – reset la scaderea tensiunii de
alimentare
- MCLR Reset – Master clear reset
In timpul functionarii normale
In timpul modului SLEEP
- WDT Reset – Watch Dog Timer Reset
- Parity Error Reset (PER) – reset la detectarea unei erori de
paritate in memorie
- Instructiune de RESET (enhanced type)
- Depasirea stivei (enhanced type)
- Iesirea din modul de programare (enhanced type)

Power On Reset (POR)


- Circuitul de POR mentine dispozitivul in starea de reset, pana cand Vdd atinge
un nivel acceptabil pentru operare
- Nivelul acceptabil poate sa difere in functie de preformantele cerute uC (viteze
mari de operare, modurile de lucru analogice)
- Pentru a extinde perioada de start se pot utiliza funciile PWRT, BOR sau MCLR.
Impulsul POR este generat intern cand este detectata o crestere a
tensiunii Vdd
Tipuri practice de POR
- Conectarea directa a pinului MCLR la Vdd
- Conectarea printr-un rezistor a pinului MCLR la Vdd
- Conectarea printr-un rezistor paralel cu o dioda a pinului MCLR la Vdd,
condensator la masa

Power-up Timer (PWRT)


- Genereaza o intarziere de 72 ms (64ms enhanced) la aparitia POR si /sau BOR
- uC este tinut in starea de reset atat timp cat PWRT este activ
- Poate fi dezactivat prin configurarea corespunzatoare a bitului PWRTE
- PWRT trebuie activat intotdeauna cand este validat BOR
Oscillator Start-up Timer (OST)
- Genereaza o intarziere de 1024 perioade de oscilator dupa cea data de PWRT
- Este necesara pentru ca frecventa oscilatorului sa se stabilizeze de la aplicarea
tensiunii de alimentare

Secventa de power on:


- Se detecteaza POR intern
- Daca este validat, se executa un time-out dat de PWRT
- Dupa acest timp OST este activat
Timpul total variaza cu configuratia oscilatorului, frecventei acestuia
si starea bitului PWRTE.
Exemplu:
- In modul RC cu PWTRE=1 (invalidat) t=0

Brown-out Reset (BOR)


Circuitul pentru BOR va pune dispozitivul in reset cand tensiunea de
alimentare a circuitului cade sub o anumita tensiune.
Acest lucru ne asigura ca uC nu va continua executia programului in
afara domeniului sigur de functionare.
BOR este utilizat tipic in aplicatii orientate spre reteaua de
alimentare cu AC sau in aplicatii in care sursa de tensiune (baterii)
alimenteaza circuite de actionare sau in care se comuta sarcini mari
(automotive), cauzand scaderea tensiunii de alimentare a uC sub valoarea nominala minima.
Circuitul de BOR este controlat de bitul BODEN (0-dezactivat, 1-
activat)

PORTURI I/O
PINUL I/O DE UZ GENERAL POATE FI
CONSIDERAT CA CEL MAI SIMPLU
PERIFERIC
PINI I/O PERMIT MICROCONTROLLERULUI
SA MONITORIZEZE SI SA CONTROLEZE
ALTE DISPOZITIVE
PENTRU FLEXIBILITATE SI
FUNCTIONALITATE, PINI I/O POT AVEA MAI
MULTE FUNCTIUNI ALTERNATIVE
TIPUL FUNCTIUNII ESTE DAT DE TIPUL
DISPOZITIVULUI SI DE NECESITATILE I/O

DIRECTIA IN SAU OUT A UNUI PIN ESTE CONTROLATA DE REGISTRUL DE DIRECTIE A


DATELOR NOTAT TRIS
TRIS<x> CONTROLEAZA DIRECTIA
PORTULUI x.
UN ‘1’ PE BITUL CORESPUNZATOR UNUI
PIN, IL DESEMNEAZA CA PIN DE INTRARE
UN ‘0’ PE BITUL CORESPUNZATOR UNUI
PIN, IL DESEMNEAZA CA PIN DE IESIRE
MEMORARE: ‘1’ INPUT ; ‘0’ OUTPUT

REGISTRUL PORT ESTE UN LATCH


PENTRU DATELE DE IESIRE
CAND REGISTRUL PORT ESTE CITIT,
SE CITESTE STAREA PREZENTA A
PINILOR I/O SI NU LATCH-UL!
INSTRUCTIUNILE CARE SE REFERA LA
PORTURI SUNT DE TIP CITESTEMODIFICA-
SCRIE

CAND MAI MULTE FUNCTIUNI PERIFERICE SUNT MULTIPLEXATE IN ACELASI PORT,


FUNCTIONALITATEA PINULUI I/O RESPECTIV
TREBUIE SCHIMBATA ASTFEL INCAT SA FIE IN
CONCORDANTA CU CERINTELE FUNCTIUNII RESPECTIVE
UN EXEMPLU ESTE CONVERTORUL ANALOG DIGITAL (A/D) SAU MODULUL DRIVER LCD
LA RESET, ACESTI PINI SUNT FORTATI CA PINI DE I/O DE UZ GENERAL SI TREBUIE
PROGRAMATI CA
PINI DE INTRARE ANALOGICA, CONTROLATI DE
REGISTRUL ADCON1
CITIREA PINILOR CONFIGURATI CA INTRARI
ANALOGICE VA DUCE LA REZULTATUL ‘0’
BITII DIN REGISTRUL TRIS SUNT SUPRASCRISI IN CAZUL ANUMITOR PERIFERICE, CAND
ACESTEA SUNT VALIDATE
TREBUIE EVITATE INSTRUCTIUNI DE TIP CITESTEMODIFICA-
SCRIE (BSF, BCF, XORWF) CARE AU CA
DESTINATIE REGISTRUL TRIS
REGISTRUL TRIS CONTROLEAZA DIRECTIA PINILOR
PORTULUI, CHIAR CAND ACESTIA SUNT UTILIZATI
CA INTRARI ANALOGICE
UTILIZATORUL TERBUIE SA SE ASIGURE CA BITII
TRIS SE MENTIN SETATI TOT TIMPUL CAND SE UTILIZEAZA ACESTI PINI CA INTRARI
ANALOGICE

PORTURI I/O. NOTE


1. DACA PINI SUNT MULTIPLEXATI CU INTRARI
ANALOGICE, LA UN POR, ACESTI PINI SUNT CONFIGURATI CA INTRARI ANALOGICE, CA SI
CUM AR
FI CONTROLATI DE REGISTRUL ADCON1. CITIREA PINILOR CONFIGURATI CA INTRARI
ANALOGICE DA CA
REZULTAT ‘0’
2. DACA PINI SUNT MULTIPLEXATI CU INTRARI DE COMPARATOR, LA UN POR, ACESTI
PINI SUNT CONFIGURATI CA INTRARI ANALOGICE, CA SI CUM AR
FI CONTROLATI DE REGISTRUL CMCON. CITIREA
PINILOR CONFIGURATI CA INTRARI ANALOGICE DA CA
REZULTAT ‘0’
3. DACA PINI SUNT MULTIPLEXATI CU DRIVERE LCD, LA
UN POR, ACESTI PINI SUNT CONFIGURATI CA
DRIVERE 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 ORICE BIT
CORESPONDENT SETAT IN REGISTRUL TRIS

4. PINI POT FI MULTIPLEXATI CU PORTUL PARALEL


(PSP). PENTRU FUNCTIONAREA PORTULUI PSP,
PINI I/O TREBUIE CONFIGURATI CA INTRARI
DIGITALE SI TREBUIE SETAT BITUL PSPMODE
5. PORTUL PARALEL PSP ESTE MULTIPLEXAT
NUMAI LA PORTURILA PORTD SI PORTE. PORTUL
ESTE VALIDFAT NUMAI LA SETAREA BITULUI
PSPMODE. IN ACEST MOD, USERUL TREBIUE SA SE ASIGURE CA BITI TRISE SUNT
SETATI (PINI
CONFIGURATI CA INTRARI DIGITALE) SI CA PORTE ESTE CONFIGURAT CA I/O DIGITAL.
PORTD VA SUPRASCRIE VALORILE IN REGISTRUL TRISD. IN ACEST MOD BUFFERELE
INTRARILOR
CORESPUNZATOARE PORTD SI PORTE SUNT
TTL. BITI DE CONTROL PENTRU OPERATII PSP SUNT SITUATI IN REGISTRUL TRISE

CONSIDERATII DE PROGRAMARE
PENTRU PORTURI I/O BIDIRECTIONALE
ORICE INSTRUCTIUNE CARE EFECTUEAZA O OPERATIE DE
SCRIERE, EFECTUEAZA DE FAPT O OPERATIE DE CITIRE URMATA
DE O OPERATIE DE SCRIERE. INSTRUCTIUNILE BCF SI BSF, DE
EXEMPLU, CITESC REGISTRUL IN CPU, EXECUTA OPERATIILE PE BIT
SI SCRIU REZULTATUL INAPOI IN REGISTRU
TREBUIE AVUT GRIJA CAND SE LUCREAZA CU ACESTE INSTRUCTIUNI DACA PORTUL
ESTE SETAT PE UNII PINI CA INTRARE,
IAR PE ALTII CA IESIRE
EXEMPLU: O OPERATIE TIP BSF A BITULUI5 APARTINAND PORTULUI
B, VA CAUZA CITIREA TUTUROR CELOR 8 BITI PORTB IN CPU. APOI, INSTRUCTIUNEA BSF
VA MODIFICA VALOAREA BITULUI 5 SI
VALOAREA PORTB ESTE SCRISA IN LATCH-UL DE PORT. DACA UN
ALT BIT AL PORTB ESTE UTILIZAT CA PIN BIDIRECTIONAL I/O SI ESTE DEFINIT CA
INTRARE IN ACEST TIMP, SEMNALUL DE INTRARE
PREZENT LA PIN VA FI CITIT DE CPU SI RESCRIS IN LATCH-UL DE
DATE A ACESTUI PIN. ATAT TIMP CAT PINUL STA IN STAREA DE
INTRARE, NU APARE NICI O PROBLEMA. DAR DACA BITUL ESTE COMUTATA CA IESIRE,
CONTINUTUL LATCH-ULUI DE DATE POATE FI NECUNOSCUT.

CONSIDERATII DE PROGRAMARE
OPERATII SUCCESIVE LA UN PORT I/O
SCRIEREA ACTUALA LA UN PORT I/O LA SFARSITUL
CICLULUI DE INSTRUCTIUNE, LA FEL CA IN CAZUL
CITIRII, DATELE TREBUIE SA FIE VALIDE LA INCEPUTUL CICLULUI DE INSTRUCTIUNE
TREBUIE AVUT GRIJA CAND APAR INSTRUCTIUNI
DE SCRIERE URMATE DE OPERATIUNI DE CITIRE,
PE ACELASI PORT
SECVENTA DE PROGRAM TREBUIE SA PERMITA STABILIZAREA VALORII TENSIUNII LA
PIN, INAINTE CA URMATOAREA INSTRUCTIUNE CARE CAUZEAZA
CITIREA DE LA PORT SA FIE EXECUTATA, ALTFEL
S-AR PUTEA CITI VECHEA STARE A PORTULUI IN
LOC DE CEA CURENTA

TIMERE
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
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
TIMER1
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 0000h
- TIMER1 POATE OPERA IN TREI MODURI:
TIMER SINCRON
NUMARATOR SINCRON
NUMARATOR ASINCRON

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 CLOCK INTERN
ESTE INTOTDEAUNA SINCRONIZAT

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 INTERN. SINCRONIZAREA
ESTE REALIZATA DUPA PRESCALER
(NUMARATOR ASINCRON)
- IN ACEASTA CONFIGURATIE, IN MODUL SLEEP,
TIMER1 NU VA FI INCREMENTAT

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 REAL
- TIMER1 NU POATE FI UTILIZAT PENTRU OPERATII
DE CAPTURA SAU COMPARARE

TIMER2
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

SURSA SEMNALULUI SE CLOCK PENTRU TIMER2 :


- O SINGURA SURSA FOSC/4
- PRESCALER 1:1, 1:4 SAU 1:16
REGISTRII TIMER2 SI PERIOADA
- TMR2
POATE FI CITIT SAU SCRIS
TMR2 SE INCREMENTEAZA DE LA 00h PANA CAND ESTE EGAL CU PR2 SI APOI SE
RESETEAZA LA 00h LA URMATORUL SEMNAL DE INCREMENTARE
ESTE STERS LA SEMNALE DE RESET WDT, POR, MCLR,
BOR SI LA SETAREA PR2
- PR2
POATE FI CITIT SAU SCRIS

IESIRE COMPARATOR TMR2


- TIMER2 POSTSCALER
- INTRAREA DE CLOCK A SSP
STERGEREA TIMER2 PRESCALER SI POSTSCALER
- LA SCRIEREA IN REGISTRUL TMR2
- LA SCRIEREA IN REGISTRUL T2CON
- LA ORICE RESET A MICROCONTROLLERULUI
- PR2
OPERAREA IN MODUL SLEEP
- TMR2 NU SE INCREMENTEAZA
- PRESCALERUL RETINE ULTIMA VALOARE, FIIND GATA DE
OPERARE DUPA CE MICROCONTROLLERUL REVINE DIN
STAREA SLEEP

COMPARARE/CAPTURA/PWM
FIECARE MODUL CCP (COMPARARE/CAPTURA/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 PWMMODULELE CCP SUNT IDENTICE CA OPERARE, CU EXCEPTIA OPERARII
TRIGERULUI DE EVENIMENTE SPECIALE FIECARE MODUL CCP ARE 3 REGISTRII

MODUL CAPTURA
IN MOD CAPTURA, LA UN EVENIMENT, SE CAPTUREAZA VALOAREA TMR1 IN
CCPRxH:CCPRxLUN EVENIMENT ESTE SELECTAT PRIN BITII DE CONTROL
CCPxM3:CCPxM0 (CCPxCON<3:0>)CAND SE REALIZEAZA O CAPTURA, SE SETEAZA BITUL
DE CERERE DE INTRERUPERE CCPxIFBITUL CCPxIF TREBUIE STERS PRIN SOFTWARE
contorul de program la valoarea 00h
- TIMER1TIMER1 VA GENERA INTRERUPERI LA DEPASIREA VALORII MAXIME (FFFF)

MODUL COMPARARE
IN MOD COMPARARE, VALOAREA DIN CCPRxH:CCPRxL RSTE COMPARATA CONSTANT
CU VALOAREA DIN TMR1.LA APARITIA UNEI EGALITATI, PINUL CCPx ESTE:cu PCL ca
destinatie. Se arata cum PC este incarcat INTRERUPERETIMER1 TREBUIE SA FUNCTIONEZE
IN MOD DE NUMARATOR SINCRONIZATO CAPTURA NU RESETEAZA TIMER1ALU si

COMPARARE/CAPTURA/PWM
FIECARE MODUL CCP (COMPARARE/CAPTURA/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 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)

MODUL PWM. PERIOADA


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

MODUL PWM. FACTOR DE UMPLERE


FACTORUL DE UMPLERE AL PWM ESTE SPECIFICAT PRIN
SCRIEREA 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 READONLY

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%

COMPARATOARE
MODULUL COMPARATOR CONTINE UNUL SAU MAO
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

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

COMPARATOARE. INTRERUPERI.
FLAG-UL DE INTRERUPERE AL COMPARATORULUI ESTE SETAT
ORICAND VALOAREA DE IESIRE A ACESTUIA SE SCHIMBA
PENTRUA 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
O CONDITIE DE INTRERUPERE VA CONTINUA SA SETEZE BITUL
CMIF. CITIREA CMCON VA TERMINA CONDITIA DE INTRERUPERE
SI PERMITE BITULUI CMIF SA FIE SERS
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
Subiecte examen:

A.
1. Memoria de program a microcontrollerelor. Organizarea memoriei. Contorul de program. Stiva.
Prezentati un caz de setare a unei limite a memoriei de program.

Memoria de program face parte din structura unui uC, alaturi de memoria de date.
Fiecare bloc de moemorie are propiul BUS.
Accesul la blocurile de memorie poate sa apara in acelasi ciclu sistem.
Dimensionarea memoriei de program se face in functie de contorul de program si anume, pe cati
biti este acesta.
Organizarea instructiunilor se face pe 14 biti fiind scrise intr-un singur cuvant.
astfel rezultand un spatiu de adresare: 2x biti = y K => y K * 14 biti
Spatiul memorii de program este divizat in pagini a 2k fiecare.
Pentru a comuta printre paginile memoriei de program este necesara modificarea celor mai
seminificativi biti ai contorului de program. Aceasta se face prin modificarea unui registru special,
numit program counter latch high.
Cand se executa instructiunii consecutive, contorul de program o sa treca de sfarsitul pagginii fara
interventia utilizatorului.
In functionare se folosesc vectorii reset si intrerupere.
Vectorul reset determina fortarea contorului de program la valoarea 00h, aceasta fiind numita
adresa vectorului de reset. Cand are loc evenimentulo reset se sterge continutul registrului
PLATCH.
Vectorul de intrerupere: atunci cand se recunoaste o intrerupere contorul de program este fortat la
adresa 04h, aceasta fiind denumita adresa vectorului de intrerupere. Aceasta modificare nu se
face in registrul PLACH, deoarece continutul din acesta trebuie salvat astfel incat atunci cand se
revine din rutina de treatare a intreruperii continutul sa poata fi restaurat.
Contorul de profram (Programm Counter - PC) specifica adresa unei instructiunii, care trebuie
adusa pentru executie.
Are o dimensiune de 13 sau 16 biti, avand o structura compusa din 2 byte, PCH – mai semnificativ
si PCL – mai putin semnificativ.
Registrul PCL poate fi scris cat si citit, iar PCH nu poate fi scris sau citit., doar prin intermediul
registrului PCLATCH.
Contorul de program este descris de 4 situatii: PCL este o destinatie a unei instructiuni, incarcarea
PC cand este executata o instructiune de tip goto, incarcarea PC cand se executa o instructiune
de tip CALL sau de asemenea incarcarea PC-ului in timpul unei instructiuni de tip return (push
stiva).
Stiva este o memorie de tipul last in first out (LIFO), iar aceasta contine adresa de reintoarcere din
ramula de program in curs de rulare, in executia propriu-zisa a programului. Aceasta este
organizata pe nivele, 8 nivele x 13 biti sau in cazul uC mai performante 16 nivele x 16 biti.
Stiva permite aparitia de pana la 8 – 16 combinatii de apeluri in diferite sub-rutine sau intreruperi.
Spatiul stivei nu se poate citi sau scrie si nu face parte din memoria de program sau de date.
Se face PUSH in stiva atunci cand se executa o instructiune de tip call sau de exemplu cand
apare o ramnificare a programului.
Se face POP din stiva atunci cand apare o instructiune de tip return.
Pentru uC mai avensate exista indicatoare care atentioneaza depasirea valorii maxime sau
minime.
Daca in stiva avem de exemplu 16 valori memorate si aceasta este plina cea de-a 17 o sa fie
memorata in locul primei valori introduse.
Limita unei memorii de program, a unui spatiu de adresare se poate face in felul urmator:
MCU de 16 biti => 216=64 k spatiu de adresare
Organizarea instructiunilor se face pe 14 biti => 64k * 14 biti
Ficare pagina are cate 2k => 32 de pagini.

2. Porturi de I/O. Descrieti functionarea scrierii pe un pin de I/O.


Portul I/O de uz general este considerat cel mai simplu si esențial periferic al unui uC. Pinii alocati
portului permit monitorizarea, controlul si comunicatia cu alte dispozitive.
Pinii I/O pot avea alocate mai multe functii adiacente.
Pentru a scrie pe un pin este necasar ca acesa sa fie mai intai setat pe ca pin ce iesire. Acest
lucru se specifica prin setarea registrului de directie TRIS, care controleaza directia pinului 5 spre
exemplu.
PORTUL A: TRISA = 0b11110111; in locurile in care bitul este 1 pinul asignat bitului respectiv o
sa fie de intrare, iar unde bu=itul este 0, respectivul in o sa fie de iesire.
Toate instructiunile care au ca punct final portul fac referire intr-un final la operatii de timp scriere
sau citire.
Pasul urmator este cel al declararii pinilor ca analogici sau digitali, cu ahutorul functiei ANSEL:
ANSELA = 0b00000000; decalarare intreg portul digital.
Scrierea se face prin intermediul registrului LAT bits: LATA5 = 1; steraza pinul 5 din portul A pe ‚1’
logic

3. Timerul. Ce este. Care sunt principalele caracteristici. Descrieti functionarea unui timer simplu
cu dimensiunea de 8 bit.
Timer-ul este un circuit de numarare si/sau de temporizare independent de functionarea CPU.
Registrul acestuia poate fi scris, dar si citit. Poate genera intreruperi la depasirea valorii maxime a
acestuia.
Sursa semnalului se clock poate sa fie interna sau externa uC. Se poate alege frontul pe care sa
se faca incrementarea acestuia. Intr-un uC pot exista mai multe timere. Marimea registrului TIMER
poate varia in functie de tipul de timer ales sau de tipul uC. Ex. TIMER0 = 8biti si TIMER1 = 16
biti.
Timerul initial se constituie pornind de la setarea sursei de clk interne sau externe si a nivelului de
prescale (ex. 1:2).
Urmeaza initializarea acestuia cu zero sau alte valori in functie de folosirea in program. (TMR0 =
0;)
Timerul de poate incrementa sau decrementa la aparitia unei conditii sau unui eveniment, de ex
daca a fost apasat un buton timerul sa inceapa sa incrementeze de la 0 la o valoare setata sau
pana la valoarea maxima. Daca se stie valoarea maxima se poate face un contor care se fie
incrementat sau decrementat odata cu overflow-ul timer-ului 0. Dupa incheierea ciclului de
folosire acesta se poate reseta (T0IF = 0;) revenind la valoarea initiala daca se intampla un
eveniment sau este indeplinita o conditie.

1. Memoria de date a microcontrollerelor. Organizarea memoriei. Registrii cu functii speciale.


Tipuri de adresari. Prezentati un caz de adresare indirecta a memoriei de date.
Memoria de date face parte din structura unui uC, alaturi de memoria de program. Din
componenta memoriei de date fac parte si memoria RAM de uz general si registrii cu functiuni
speciale (SFR).
Fiecare bloc de moemorie are propiul BUS.
Accesul la blocurile de memorie poate sa apara in acelasi ciclu sistem.
Astfel se poate spune ca 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 – reprezinta zona pentru memorarea datelor generale
Memoria de date este divizata in bancuri de memorie pentru ambele zone ale sale. (GPR si SFR)
Zona GPR este la randul ei impartita in bancuri pentru a permite adresarea a mai mult de
96 biti de memorie in RAM
Registrii cu functii speciale (SFRS) sunt utilizati pentru controlul modulelor periferice si a
functiunilor centrale.
Pentru a se putea face selectia bancurilor de memorie este neceasra selectia acestora prin
intermediul unor biti de control. Bitii de control sunt localizati in registrul status. Organizarea
bancurilor de memorie difera pentru fiecare dispozitiv.
Pentru a muta continutul unui registru in altul este necesar ca acesta sa treaca si prin registrul W.
Accesul la memorie poate fi facut diresc sau indirect, cea din urma implicand si utilizarea altor
registrii aditionali.
Adresarea directa se foloseste de bitii RP1:RP0, iar cea indirecta necesita utilizarea registrului de
selectare a bancurilor (FSR) si a bitului registrului pointer indirect (IRP) din registrul STATUS
pentru accesarea zonelor din memoria de date.
Adresarea indirecta este ca un mod de adresare a memoriei de date, in care adresa memoriei de
date din instructiune nu este fixata. In acest proces este implicat si registrul SFR ca pointer la
locatia din memoria de date, care trebuie sa fie citita sau scrisa, astfel acest pointer fiind in RAM,
conținutul este predispus la modificarea de catre program.
Pentru a folosi adresarea indirecta, pentru scurtarea lungimii programelor, este necesara
initializarea unui pointer catre RAM si executarea operatiei in acea locatie, fara a mai fi nevoie de
transportul datelor.

2. Porturi de I/O. Descrieti functionarea citirii de la un pin de I/O.


Portul I/O de uz general este considerat cel mai simplu si esențial periferic al unui uC. Pinii alocati
portului permit monitorizarea, controlul si comunicatia cu alte dispozitive.
Pinii I/O pot avea alocate mai multe functii adiacente.
Pentru a citi pe un pin este necasar ca acesa sa fie mai intai setat pe ca pin de intrare. Acest lucru
se specifica prin setarea registrului de directie TRIS, care controleaza directia pinului 5 spre
exemplu.
PORTUL A: TRISA = 0b00001000; in locurile in care bitul este 1 pinul asignat bitului respectiv o
sa fie de intrare, iar unde bitul este 0, respectivul in o sa fie de iesire.
Toate instructiunile care au ca punct final portul fac referire intr-un final la operatii de timp scriere
sau citire.
Pasul urmator este cel al declararii pinilor ca analogici sau digitali, cu ajutorul functiei ANSEL:
ANSELA = 0b00000000; decalarare intreg portul digital.
Citirea se face este interogata starea prezenta a pinilor si nu a LATCH-ului.
Astfel citirea se face prin intermediul registrului port: PORTbits.RB5, iar valoarea acestuia se
poate pune intr-o variabila, sau poate fi interogata si comparata PORTBbits.RB5 == 1 in cadrul
unei functii if, exemplu aplicabil in cazul comutatoarelor.

3. Convertorul analog-digital. Ce este. Care sunt principalele caracteristici. Descrieti


functionarea unui modul ADC cu circuit de esantionare/memorare si convertor cu
aproximatii succesive de 10 bit.
ADC-ul sau convertorul analog-digital este un periferic din cadrul uC, foarte folosit. Acest modul
periferic din interiorul uC este unul care nu este de performanta, având o rezoluție inferioara in
comparație un un ADC ca modul sau periferic separat. Performanta scăzută se mai datorează si
diafoniei, deoarece trecerea sau pătrunderea semnalului din zona digitala in zona analogica, astfel
un convertor de 16biti fiind o limita al aplicabilitatii ADC-ului in zona uC.
ADC-ul este caracterizat de rezoluție.
Convertorul mai precis conversia se face prin esantionare respectand teoremele adiacente. Daca
avem un esantion, il evaluam din punct de vedere al amplitudinii cu ajutorul ADC-ului. Conversia
se face comparand valoarea esantionului cu o valoare numerica a unui esantion, Compararea se
face pana cand valoarea esantionului de comparat scade sub valoarea esantionului comparat.
Compararea are loc pana cand diferenta dintre esantioane ajunge sub un anumit prag de
conversie sau cuanta de conversie. Astfel esantionului analogic ii se asociaza o valoare numerica.
In urma esantionarii unui semnal se obtine un sir de numere. Fiecare numar apare la frecventa de
esantionare, iar lungimea fiecarui numar este de lungimea data in acel convertor de 10 biti. Astfel
se obtine un sir de numere, repetabil, valoarea in fiecare moment fiind reprezentata pe 10 biti.
Conversia succesiva, cu o rapiditate crescuta => convertorul cu aproximații succesive. Acesta
funcționează pe principiul evaluarii a unui esantion, care compara valoarea es analogic cu
jumatatea din valoarea maxima in prima faza, dupa comparatie se compara cu jumatatea din
valoarea ramasa, iar urmatorul pas cu jumatete din valoarea care a ramas de comparat. Acest
algoritm duce la ajungerea la o valoare mica, mai mica dacat acea cuanta foarte rapid. Daca
convetrorul este pe 10 biti sunt necesari 10 pasi de conversie + unul din motive tehnice. uC
necesita un pin de intrere analogica care este asignat unui circuit de esantionare- memorare,
pentru a memora es in intervalul a 2 esantionari. Dupa esantionare fiecare esantion necesita
conversia, aceasta facandu-se in 10+1 pasi. Esantionarea trebuie facuta astfrl incat frecventa sa
fie x2 fata de cea a f din spectrul semanaului es.
Modul de conversie: ADC = (VIN*1024) / VREF

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