Sunteți pe pagina 1din 20

1

MICROCONTROLERE AVR ATMEL PE 8 BITI





1. Caracteristici



Microcontrolerele AVR pe 8 biti (Atmel) au la baza un nucleu RISC cu arhitectura
Harvard. Aceste microcontrolere sunt destinate aplicatiilor simple: controlul motoarelor,
controlul fluxului de informatie pe portul USB, aplicatii din domeniul automotive, controlul
accesului de la distanta (Remote Access Control), s.a.. Pe baza acestui nucleu firma Atmel a
dezvoltat mai multe familii de microcontrolere, cu diferite structuri de memorie si de interfete
I/O, destinate diferitelor clase de aplicatii.

Familia de procesoare AVR pe 8 biti are urmatoarele caracteristici:
Arhitectura RISC
32 de registre de lucru de 8 biti
Multiplicator hardware
Arhitectura Harvard a spatiului (memorie interna: 16 kocteti program flash, 1
koctet data SRAM, 512 octeti data EEPROM)
Frecventa de lucru poate fi controlata prin software de la 0 la 16 MHz
Procesoarele sunt prevazute cu o gama larga de dispozitive I/O si de periferice
incorporate
Timer programabil cu circuit de prescalare
Surse de intrerupere interne si externe
Timer de urmarire (watchdog) cu oscilator independent
Interfata JTAG (standardul IEEE 1149.1 Compliant)
6 moduri de operare SLEEP si POWER DOWN pentru economisirea energiei
Oscilator integrat RC
Densitate mare a codului si compatibilitate integrala a codului intre membrii
familiei
Procesoarele sunt disponibile in capsule variate, de la circuite cu 8 pini la
procesoare cu 68 de pini
Familia AVR beneficiaza de existenta unui set unitar de instrumente software
pentru dezvoltarea aplicatiilor

Microcontrolerele din familia AVR folosesc o arhitectura RISC care permite
executia celor mai multe instructiuni intr-un singur ciclu de tact, ceea ce duce la
imbunatatirea performantei de 10 ori fata de procesoarele conventionale (de exemplu, Intel
8051) care opereaza la aceasi frecventa.
2

Specific arhitecturii Harvard, procesoarele folosesc spatii de memorie si magistrale
de acces separate pentru coduri si pentru date. Toate procesoarele au memorie de program de
tip flash integrata. Memoria de program poate fi programata in site (fara scoaterea din
sistem) ceea ce permite efectuarea rapida de upgrade-uri in programe. Programarea se poate
face in doua moduri: serial si paralel. Procesoarele au memorie de date integrata de tip RAM
pentru variabile si memorie de tip EEPROM pentru stocarea constantelor.
Numarul mare de registre interne (32 de registre de 8 biti), specific procesoarelor
RISC, permite stocarea variabilelor in interiorul procesorului, reducind astfel timpul de acces.
In acest fel creste viteza de executie a programelor.
Prezenta unor blocuri interne ca: porturi, timere, unitati de comunicatie USART,
TWI si SPI, module PWM (Pulse Width Modulation), convertoare A/D, comparator analogic,
rezistoare pull-up, oscilator intern, etc., permite utilizarea acestor microcontrolere intr-o gama
larga de aplicatii.
Instructiunile acestei familii de microcontrolere au fost proiectate pentru a reduce
dimensiunea unui program scris in limbaj C sau in limbaj de asamblare. Posibilitatea
programarii memoriei FLASH si a memoriei EEPROM, face ca aceste microcontrolere sa
aiba o larga utilizare datorata costului mic de dezvoltare a unei aplicatii prin reducerea
timpului de proiectare.
O alta calitate remarcabila a acestor microcontrolere este consumul redus de
energie. Domeniul tensiunilor de alimentare este cuprins intre 1.8 si 5V. Procesoarele
folosesc 6 moduri diferite de functionare cu consum redus ceea ce asigura reducerea
consumului cind microcontrolerul nu este activ. La frecventa de tact de 1 MHz si la o
tensiune de alimentare de 3 V procesorul activ consuma 1,1 mA, iar in regim Power-down
consumul se reduce la <1A.
Posibilitatea de control software al frecventei tactului garanteaza o viteza maxima
de executie atunci cand este nevoie, iar in restul timpului microcontrolerul poate trece in
stand-by unde consumul de energie este minim.
Utilizarea acestor microcontrolere poate reduce semnificativ timpul de dezvoltare a
unei aplicatii datorita prezentei unui bloc de depanare in timp real, circuitul aflandu-se chiar
pe placa ce reprezinta aplicatia.

Pe baza nucleului AVR de 8 biti firma Atmel a dezvoltat citeva familii de
microcontrolere de uz general precum si microcontrolere cu functii specializate:
Familia Tiny AVR care cuprinde microcontrolere destinate unor aplicatii
simple, cu 18 kocteti memorie de program;
Familia Mega AVR cu un set dezvoltat de instructiuni si cu 4256 kocteti
memorie de program;
Familia Xmega AVR destinata unor aplicatii complexe. Procesoarele poseda
unitati DMA, module pentru criptare, etc., si folosesc un spatiu de memorie de program de
16384 kocteti;
Microcontrolere AVR destinate unor aplicatii spectifice. Microcontrolerele cu
functii specializate se impart in mai multe catagorii:
- Ligthing AVR - contin un procesor de semnal si este special conceput pentru
comanda motoarelor de curent continuu.
- LCD AVR - contin un controler pentru adresarea dispozitivelor de afisaj LCD
- CAN AVR - contin implementata hardware o interfata pentru magistrala CAN.
Printre cele mai utilizate microcontrollere de uz general putem exemplifica: ATmega 8,
ATmega 16, ATmega 128, ATmega 162, etc.


3



2. Arhitectura AVR

Vom considera ca exemplu microcontrolerul de 8 biti ATmega 16, r eal i zat i n
t ehnol ogi e CMOS, bazat pe arhitectura RISC AVR imbunatatita.
Procesorul dispune de un set de 131 instructiuni i 32 de registre de uz general, Cele
32 de registre sunt direct adresabile de unitatea aritmetica si logica (ALU). O instructiune
poate accesa doua registre independente.
Caracteristicile principale ale procesorului ATmega 16 sunt:

16 Kb de memorie Flash reinscriptibil pentru stocarea programelor
1 Kb de memorie RAM pentru date
512 bytes de memorie EEPROM pentru constante
dispozitive periferice si porturi I/O:
- dou numrtoare/temporizatoare de 8 biti
- un numrtor/temporizator de 16 biti
- un convertor analog/digital de 10 biti, cu 8 intrri
- 4 canale PWM
- un comparator analogic
- timer de urmarire (watchdog) cu oscilator propriu
- contine 3 interfete pentru comunicatie: USART pentru comunicatie serial
(port serial), interfata seriala TWI, interfata seriala SPI
- ceas de timp real cu oscilator separat
- 32 de linii I/O organizate n patru porturi (PA, PB, PC, PD).

Structura intern general a mi crocontrolerului este prezentat n Fi g. 2 Se
poate observa c exist o magistral general de date la care sunt conectate mai multe
module:
- unitatea aritmetic i logic (ALU)
- registrele generale
- memoria RAM i memoria EEPROM
- porturile I/O de uz general i celelalte blocuri de intrare/ieire. Aceste module sunt
controlate de un set special de registre din spatiul I/O, fiecare modul avnd asociat un numr
de registre specifice.
Memoria flash de program mpreun cu ntreg blocul de extragere a instructiunilor,
decodare i executie comunic printr-o magistral proprie, separat de magistrala de date.
Acest tip de organizare este specifica arhitecturii Harvard i permite controlerului s
execute instructiunile foarte rapid.
In modul power-down procesorul salveaza continutul registrelor, dar blocheaza
oscilatorul, dezactivnd toate celelalte functii al chip-ului pan la urmatoarea intrerupere
externa sau la activarea intrarii de initializare hardware (Reset). In modul power-save,
timer-ul asincron continua sa functioneze, permitind utilizatorului sa mentina o baza de
timp in timp ce restul dispozitivului este oprit.
In modul standby, oscilatorul functioneaz n timp ce restul despozitivului este
oprit. Acest lucru permite un start foarte rapid combinat cu un consum redus de energie. In
modul standby extins (Extended Stanby Mode), atat oscilatorul principal cat i timer-ul
asincron continu s functioneze.
Memoria flash i nt er na poat e f i reprogaramat printr-o interfat serial SPI,
de catre un programator de memorie nonvolatil conventional, sau de ctre un program
4

de por ni r e r ezi dent ( on- chip) ce ruleaza pe n u c l e u l AVR. Acest program poate
folosi orice interfata pentru a incarca programul de aplicatie in memoria flash.
Combinnd un nucleu CPU-RISC de 8 biti cu o memorie flash intr-un singur chip,
ATmega 16 este un microcontroler puternic ce ofera o solutie extrem de flexibil i cu un
cost redus. In plus ATmega 16 AVR este sustinut de o serie completa de instrumente
de programare i de dezvoltare a sistemului, care include: compilatoare C,
macroasambloare, programe de depanare si simulare, etc.

2.1 Descrierea pinilor



VCC Sursa de alimentare
GND Masa

Portul A (PA7PA0)
Portul A este un port bidirectional de 8 biti programabil. Liniile portului A sunt
folosite si ca intrri analogice pentru convertorul A/D. Liniile portului pot fi conectate
optional la VCC prin rezistente de agatare (pull-up resistor), selectate pentru fiecare linie.
Buffer-ele de ieire ale portului A au caracteristici de amplificare.

Portul B (PB7PB0)
Portul B este un port I/O de 8 biti bidirectional prevazut cu rezistente de agatare
interne (optional). Buffer-ele de ieire ale portului B au caracteristici de amplificare. Portul B
indeplinete de asemenea functii speciale ale microcontrolerului ATmega 16.

Portul C (PC7PC0)
Portul C este un port I/O de 8 biti bidirectional cu prevazut cu rezistente de agatare
interne (optional). Buffer-ele de ieire ale portului C au caracteristici de amplificare. Daca
interfata JTAG (de depanare) este activat, rezistentele pinilor PC5(TDI), PC3(TMS) si
PC2(TCK) vor fi activate, chiar daca are loc o resetare. Port-ul C indeplinete de asemenea
functii ale interfetei JTAG i alte functii speciale ale ATmega 16.

Port D (PD7PD0)
5

Portul D este un port I/O de 8 biti bidirectional prevazut cu rezistente de agatare
interne (optional). Buffer-ele de i es i r e ale portului D au caracteristici de amplificare.
Portul D indeplinete de asemenea functii speciale ale ATmega 16.


Reset
Un nivel sczut la acest pin mai mare ca durat decat o valoare prestabilit, va
pr ovoc a initializarea procesorului.

XTAL 1 si XTAL 2. Intrarea si respectiv ieirea amplificatorului inversor al
oscilatorului generatorului de tact.

AVCC este pinul de alimentare pentru p ortul A si p e n t r u c onvertorul A/D.
Trebuie conectat extern la Vcc chiar dac ADC nu este folosit. Daca ADC este folosit,
trebuie conectat la Vcc printr-un filtru trece-jos.

AREF este pinul de intrare pentru referinta analogica a convertorului A/D


2.2 Unitatea centrala de procesare
Arhitectura nucleului AVR este prezentata in Fig. 2. Functia principal a nucleului
CPU-AVR este aceea de a asigura executia corect a programului. Pentru aceasta, nucleul
este capabil s acceseze memoriile, sa execute calcule, sa controleze perifericele i sa
prelucreze ntreruperile.



Fig. 2 Schema bloc a nucleului CPU-AVR

6


2.3 Unitatea Aritmetica si Logica (ALU)
Unitatea aritmetica si logica executa operatiile de prelucrarea a datelor. ALU-
AVR lucreaz direct cu cele 32 de registre. Operatiile pe care le executa unitatea ALU
sunt mpartite n trei categorii: aritmetice, logice i operatii pe bit. Unele implementri ale
arhitecturii AVR pot efectua i multiplicri de operanzi cu sau far semn.

2.4 Registrele de uz general
Fisierul de registre este optimizat pentru setul de instructiuni al arhitecturii AVR
RISC. Procesoarele AVR folosesc un set de 32 de registre de uz general de 8 biti (notate
R0R31) care pot fi accesate intr-un singur ciclu de tact. Structura setului de registre este
prezentata in Fig. 4. Fiecare registru are si o adresa in spatiul memoriei de date permitind o
adresare uniforma. Doar registrele R16R31 pot stoca operanzi imediati.



Fig. 4 Registrii CPU-AVR

Majoritate instructiunilor care folosesc fisierul de registre au acces direct la
toate registrele i marea lor majoritate sunt instructiuni executabile intr-un singur ciclu de
tact. ase din cele 32 de registre (R26R31) pot fi folosite ca trei registre de 16 biti pentru
stocarea unor pointeri folositi la adresarea indirecta a datelor. Unul dintre acesti pointeri
poate fi folosit pentru a accesarea unor tabele din memoria flash. Cele trei registre folosite
pentru adresarea indirect, notate X, Y, Z, sunt prezentati in Fig. 5.


Fig.5 Registrele X, Y, Z
7




Majoritatea instrutiunilor AVR sunt formate dintr-un cuvant de 16 biti.
Spatiul memoriei flash de program este mpartit n dou sectiuni, sectiunea
BOOT i sectiune de aplicare a programelor. Sectiunea BOOT are biti speciali pentru
protectia la scriere i citire/scriere. Instructiunea SPM cu ajutorul creia se scrie n
memoria flash de aplicatii trebuie sa fie n sectiunea BOOT.
Informatiile din SRAM pot fi accesate cu uurinta prin cele cinci moduri diferite
de adresare suportate de arhitectura AVR.
Modulele ntreruperilor au registrele de control n spatiul I/O i n Status
Register se afla bitul de ntreupere global. Toate ntreruperile au prioritate n functie de
locul n tabelul de vectori de ntrerupere ai ntreruperilor lor. Cu cat este mai jos situat n
tabel vectorul ntreruperi cu att acea ntrerupere are prioritate mai mare. Prioritatea mai
mare o are ntreruperea cu vectorul cel mai slab plasat in tabel.
Spatiul de memorie I/O contine 64 de adrese pentru functiuni periferice ale
CPU ca: controlul registrelor, indicatorul SPI, sau alte functii de I/O. Memoria I/O poate
fi accesat direct sau indirect .


2.4 Registrul de stare (SREG)
Registrul de stare contine informatii despre ultima operatie aritmetica efectuat de
ALU. Star ea registrului este actualizat dup fiecare executie a unei operatii aritmetice,
aa cum se specific n Setul de Instructiuni. Continutul registrului de stare poate fi
salvat/restaurat prin program, de exemplu, la accesarea unei subrutine.
Structura registrului de stare al nucleului AVR si semnificatia indicatorilor
folositi este urmatoarea:





Bitul 7 (I - Global Interrupt Enable)
Este bitul de validare globala a intreruperilor. Controlul individual al ntreruperilor
se face cu un registru separat. Bitul I este dezactivat dupa acceptarea unei ntreruperi
i este activat de executia instructiunii RETI (RETurn from Interrupt) pentru a permite
acceptarea unei noi cereri. Bitul I poate fi setat/resetat cu ajutorul instructiunilor SEI i
CLI.

Bitul 6 (T - Bit Copy Storage)
Instructiunile la nivel de bit pentru copiere BLD (Bit LoaD- incrcare bit) i
memorare BST (Bit STore stocare bit) folosesc bitul T ca surs sau destinatie pentru bitul
actionat. Un bit dintr-un registru poate fi copiat n T cu ajutorul instructiunii BST, i un bit
din T poate fi copiat n registru cu ajutorul instructiunii BLD.

Bitul 5 (H - Half Carry Flag)
Acesta indic transportul la jumatate n cazul unor operatii aritmetice. Valoarea
acestui bit este folosita n aritmetica BCD pentru corectia zecimala a rezultatului.
8


Bitul 4 (S - Sign Bit)
Acest bit este rezultatul operatiei logice SAU Exclusiv intre indicatorul negativ N si
bitul de depasite V.

Bitul 3 (V - Twos Complement Overflow Flag)
Bitul indicator de depasire a scalei.

Bitul 2 (N - Negative Flag)
Indicatorul negativ semnalizeaza un rezultat negativ n urma unei operatii aritmetice
sau logice
Bitul 1 (Z - Zero Flag)
Indicatorul de zero este setat atunci cand rezultatul unei operatii logice sau
aritmetice este nul.
Bitul 0 (C - Carry Flag)
Indicatorul de transport semnalizeaza existenta unui transport n urma unei operatii
operatiilor logice sau aritmetice.



2.5 Stiva
Microcontrolerele AVR folosesc o stiva software organizata in memoria SRAM de
date. Stiva este folosit n principal pentru stocarea temporar a datelor, pentru stocarea
variabilelor locale, si pentru stocarea adreselor de revenire din intreruperi sau la apelul
subrutinelor. Accesarea stivei se efectueaza cu ajutorul registrului contor de stiva SP (Stack
Pointer) care este actualizat de procesor la fiecare accesare a stivei. Stiva opereaza pe
principiul LI-FO (Last Input First Output) si evolueaza prin decrementarea adreselor. La
incarcarea unei date in stiva SP este decrementat, iar la citire este incrementat, astfel ca SP
indica intotdeauna prima locatie libera din virful stivei. Dimensiunea stivei este limitata de
dimensiunea memoriei SRAM instalate. Deoarece procesorul nu seteaza automat la pornire
adresa de inceput a stivei (care este adresa cea mai mare a zonei de memorie alocata stivei)
acest lucru trebuie efectuat de utilizator prin program. Pentru transferul de date in stiva
procesorul foloseste instructiunea PUSH, iar pentru transferul din stiva instructiunea POP.
Indicatorul de stiv (SP) este decrementat cu1 cnd se introduc date n stiv c u
instructiunea PUSH, i decrementat cu 2 cnd sunt salvate in stiva adresele de revenire
la apelarea subrutinelor cu instructiunile CALL sau GOTO sau la acceptarea unei
intreruperi. Indicatorul de stiv este incrementat cu 1 cnd datele sunt ci t i t e din stiv cu
instructiunea POP, i incrementat cu 2 cnd sunt ci t i t e din stiv adrese la executia unei
instructiuni de revenire dintr-o subrutina (RET) sau dintr-o intrerupere (RETI).
Indicatorul de stiv este implementat cu dou registre de 8 biti adresate in spatiul de
adrese al dispozitivelor I/O (registrele SPH si SPL). Numrul de biti folositi depinde de
structura implementrii. Spatiul de adrese, la unele implamentri ale arhitecturii AVR,
este mic i nct este folosit doar registrul SPL (SP Low). n acest caz registrul SPH
(SP High) nu mai este utilizat.



9



Fig.5 Indicatorul de stiv


3. Executia instructiunilor

Pentru obtinerea unei performate bune CPU-AVR combina avantajul arhitecturii
Harvard a spatiului de memorie si accesul rapid la registre cu executia pipeline. Procesorul
foloseste un pipeline cu doua etaje, unul pentru extragerea instructiunilor si altul pentru
executie. In timp ce o instructiune este executata o noua instructiune este extrasa din
memorie. In felul acesta procesorul furnizeaza un rezultat la fiecare tact, chiar daca o
instructiune dureaza mai mult de un tact. Aceasta secventiere este prezentata in Fig. 6.




Fig.6 Functionarea pipeline

In acest mod performanta nucleului se apropie de 1 MIPS/MHz i ofera cele mai
bune rezultate din punct de vedere a raport ul ui functiuni/cost, functiuni/timp i
functiuni/unitate.
In Fig. 7 e s t e p r e z e n t a t mo d u l d e f o l o s i r e a r e g i s t r e l o r . ntr-
un singur ciclu de tact ALU folosete 2 registre pentru a executa o operatie, iar rezultatul
este stocat napoi n registrul de destinatie .


10

Fig.7 Operatii cu registre executate de ALU ntr-un singur ciclu de tact


Instructiunile care acceseaza memoria necesita doi cicli de tact pentru o operatie
dupa cum se vede din Fig. 7.



Fig. 7 Executia instructiunilor care acceseaza memoria SRAM


4. Tratarea ntreruperilor i initializarea

Nucleul AVR foloseste mai multe tipuri de ntreruperi. Intreruperile sunt vectorizate;
vectorii de intrerupere si cel corespunzator initializarii procesorului reprezinta adrese ale unor
locatii din memoria de program. Intreruperile pot fi activate/dezactivate global (cu ajutorul
bitului I din registrul de stare) sau individual. Sursele de intrerupere si vectorii corespunzatori
sunt prezentati in tabelul urmator:


No. vector Program
address
Source Interrupt definition
1 $000 Reset External pin, Power-on Reset, Brown-out
Reset, Watchdog Reset, JTAG AVR Reset
2 $002 EXT_INT0 External IRQ0
3 $004 EXT_INT1 External IRQ1
4 $006 TIM2_COMP Timer2 compare match
5 $008 TIM2_OVF Timer2 overflow
6 $00A TIM1_CAPT Timer1 capture event
7 $00C TIM1_COMPA Timer1 compare match A
8 $00E TIM1_COMPB Timer1 compare match B
9 $010 TIM1_OVF Timer 1 overflow
10 $012 TIM0_OVF Timer 0 overflow
11 $014 SPI_STC SPI transfer complete
12 $016 UART_RXC UART RX complete
13 $018 UART_DRE UART UDR empty
14 $01A UART_TXC UART TX complete
15 $01C ADC ADC conversion complete
16 $01E EE_RDY EEPROM ready
11

17 $020 ANA_COMP Analog comparator
18 $022 TWI Two-wire serial interface
19 $024 INT2 External IRQ2
20 $026 TIM0_COMP Timer0 compare match
21 $028 SPM_RDY Store program memory ready


Pentru vectorii de intrerupere sunt rezervate adresele inferioare din memoria de
program. Prioritatea diferitelor surse este data de pozitia vectorului in harta de memorie.
Cu ct sursa de intrerupere are vectorul mai mic cu att prioritatea ei este mai mare. RESET-
ul are cea mai mare prioritate. Vectorii de ntrerupere pot fi mutati la nceputul sectiunii Boot
Flash prin setarea bitului IVSEL din registrul global de control al ntreruperilor (GICR).
Vectorul de RESET poate fi deasemenea mutat la nceputul aceleiai sectiuni prin
programarea sectiunii BOOTRST.
Cnd apare o ntrerupere bitul I din registrul de stare este resetat i toate
ntreruperile sunt invalidate. In cadrul subrutinei de tratare utilizatorul poate r e a c t i v a
s i s t e mu l d e i n t r e r u p e r i . Daca sistemul de intreruperi este activat subrutina de
tratare poate fi la rindul ei intrerupta de o sursa de intrerupere cu prioritate mai mare. Bitul I
este automat setat cnd este executata instructiunea RETI.
Intreruperile externe pot fi controlate individual cu ajutorul registrului GIMSK
(adresa 3B in spatiul I/O). Fiecare bit din acest registru corespunde unei intreruperi. Bitul 7
controleaza INT1, iar bitul 6 controleaza INT0. Setarea bitului corespunzator activeaza
intreruperea. Registrul GIMSK poate fi citit/scris cu instructiunile IN/OUT. Starea
intreruperilor este indicata de registrul GIFR (adresa 3A in spatiul I/O). Daca o intrerupere
externa a fost activata este setat bitul corespunzator din GIFR.
AVR are o structura complexa a sistemului de intreruperi. Aproape toate
dispozitivele periferice au fost dotate cu capacitati de intrerupere motiv pentru care
programul principal nu trebuie sa verifice periodic starea acestor dispozitive.
Secventa de actiuni care se deruleaza cand apare o intrerupere este urmatoarea:

1. Dispozitivul periferic emite o cerere de intrerupere care intrerupe procesorul
2. Executia instructiunii curente este finalizata
3. Adresa urmatoarei instructiuni din programul curent este memorata in stiva
4. Este incarcata in PC adresa subrutinei de tratare asociata
5. Procesorul executa subrutina de tratare
6. Subrutina se incheie cu instructiunea RETI (RETurn from Interrupt)
7. Procesorul reia executia programului intrerupt de la adresa memorata in stiva.

Un factor important de luat in seama cand sunt folosite intreruperile este cat de repede
poate raspunde un procesor la o intrerupere. Aceasta depinde de arhitectura procesorului.
Pentru controlerele AVR, raspunsul la intreruperi se face in minim 4 cicli de tact. In timpul
celor 4 cicli, este salvat in stiva PC ( 2 bytes), iar SP este decrementat cu 2.
Transferul executiei la rutina de intrerupere necesita doi cicli. Daca o intrerupere
apare in timpul unei instructiuni multiciclu, aceasta instructiune este finalizata inainte de a fi
servita intreruperea. Revenirea dintr-o subrutina de tratare dureaza alti 4 cicli. In timpul
acestor 4 cicli, este restaurata starea PC salvata in stiva (2 bytes), iar SP este incrementat cu
2. In acelasi timp este setat bitul I din SREG.



12

5. Organizarea memoriei

ATmega 16 AVR are doua spatii de memorie principala, spatiul pentru memoria de
date si pentru memoria de program. In plus, ATmega16 are si o memorie nevolatila
EEPROM pentru memorarea datelor. Toate cele trei tipuri de memorie sunt adresate liniar.
Organizarea spatiului de memorie este aratata in Fig. 8.

5.1 Memoria pentru programe
ATmega 16 contine o memorie flash pentru programe, reprogramabila (In-system
On-chip) de 16 Ko. Deoarece toate instructiunile nucleului AVR sunt de 16 sau 32 biti,
memoria flash este organizatape cuvinte (16 biti) in formatul 8Kx16. Pentru securitatea
software-ului , spatiul pentru memoria de programe flash este impartit in doua sectiuni:
sectiunea de program boot si sectiunea pentru programe de aplicatie.
Memoria flash suporta cel putin 10000 de cicluri de scriere/stergere. Contorul de
program (PC) al microcontrolerului ATmega 16 are o lungime de 13 biti, ceea ce permite
adresarea unui spaiu de memorie de 2
13
= 8 klocatii.




Fig. 8 Organizarea memoriei

5.2 Memoria pentru date
Memoria de date SDRAM este organizata pe octeti. Primele 96 de adrese din spatiul
memoriei SDRAM sunt rezervate fisierului de registre, iar urmatoarele 1024 de locatii sunt
dedicate datelor interne SDRAM. Din fisierul de register fac parte cele 32 de registre de uz
general, iar restul de 64 de adrese sunt rezervate registrelor associate dispozitivelor I/O.
Modul de organizare a fisierului de register este aratat in Fig. 9.
Memoria SRAM are o capacitate intre 128 bytes si 4 kbytes in functie de tipul
particular al microcontrolerului. SRAM-ul este accesat cu instructiuni de acces atat direct cat
si indirect, folosind registrul pointer. SRAM-ul este folosit de asemnea si pentru constituirea
13

stivei. Accesul la memoria SRAM se faca in doua perioade de tact, asa cum este aratat in Fig.
7.
La microcontrolerele AVR avansate este posibila conectarea unui SRAM extern.
Aceasta este ilustrata in figura 3.32. Pentru a permite accesul SRAM extern la PORTA si
PORTC, bitul 7 SRE din registrul MCUCR este setat la 1. Timpul standar de acces la
memoria SRAM externa este de obicei trei cicli, dar poate fi crescut la 4 cicli prin activarea
bitul 6 SRW din registrul MCUCR. Figura 3.33 ilustreaza accesul normal in 3 cicli, iar figura
3.34 ilustreaza accesul prelungit prin introducerea aditionala a unei stari de asteptare.


Fig. 9 Fisierul de registre

La microcontrolerele AVR avansate este posibil covectarea unui SRAM extern.
Aceasta este ilustrata in Fig. 10. Pentru a permite accesul SRAM extern la PORTA si
PORTC, bitul 7 SRE din registrul MCUCR este setat la 1. Timpul standard de acces la
memoria SRAM externa este de obicei trei cicli, dar poate fi crescut la 4 cicli prin activarea
bitul 6 (SRW External Acces Wait State Bit) din registrul de control MCUCR (MCU
general control register).

14



Fig. 10 Extensia memoriei SRAM

Toate microcontrolerele AVR poseda o arie de memorie EEPROM (Electrically
Erasable Programmable Read-Only Memory) interna folosita pentru stocarea constantelor.
ATmega 16 contine 512 octeti de memorie de date EEPROM. Aceasta este organizata ca un
spatiu separat de date, in care pot fi cititi si scrisi biti individuali. EEPROM-ul are o durata de
viata de cel putin 10.000 de cicluri scriere/stergere. Scrierea/citirea in EEPROM se face cu
ajutorul registrilor de acces la EEPROM: EEAR - EEPROM Address Register, EEDR -
EEPROM Data Register si EECR - EEPROM Control Register.
Scrierea in EEPROM decurge diferit fata de o memorie SRAM. Timpul de acces
pentru o operatie de scriere este de 2,54 ms in functie de valoarea tensiunii de alimentare.
Bitul de control EEWE din EECR arata utilizatorului cind s-a incheiat operatia anterioara de
scriere, si poate fi facuta o noua scriere. Cand se citeste o data din EEPROM, CPU este oprit
timp de patru perioade de ceas inainte ca urmatoarea comanda sa fie executata. Cand se scrie
EEPROM, CPU este oprit timp de doua perioade de ceas inainte ca urmatoarea comanda sa
fie executata.

Registrele de adresa EEPROM EEARH si EEARL:



Bitii 9 15 sunt biti rezervati in Atmega 16 si vor lua intotdeauna valoarea 0.
Bitii 0 - 8 sunt biti de adresare (total 9 biti, deci se adreseaza 0.5 KB)
Registrele de adresa, EEARH si EEARL, specifica adresa datelor din EEPROM
pentru cele 512 locatii ale spatiului EEPROM. Locatiile de memorie se adreseaza liniar de la
0 la 511. Pentru operatia de scriere in EEPROM, registrul EEDR contine date care trebuie
15

scrise la adresa data de registrul EEAR. Pentru operatia de citire a EEPROM, EEDR contine
datele citite din EEPROM de la adresa data de EEAR.

Registrul de date EEPROM EEDR:




Registrul de control EEPROM EECR:



Bitii 7..4 - acesti biti sunt biti rezervati la ATmega 16 si au valoarea zero.
Bit 3 - EERIE: Activarea EEPROM Ready Interrupt
Bit 2 EEMWE : EEPROM Master Write Enable (activarea functiei principale de
scriere EEPROM)
Bitul 1 EEWE : EEPROM Write Enable (activarea scrierii EEPROM). EEPROM
nu poate fi programat in timp ce CPU scrie memoria flash. Software-ul trebuie sa verifice
daca programarea memoriei flash este completa inainte de a initia o noua scriere a EEPROM.
Bit 0 EERE : Activarea citirii EEPROM

Cand se seteaza adresa corecta a registrului EEAR, bitul EERE trebuie sa fie scris
pe unu logic ca sa declanseze citirea EEPROM. Accesul la citirea EEPROM se face cu o
comanda si datele cerute sunt disponibile imediat. Cand EEPROM este citit, CPU este oprit
timp de patru cicluri inainte ca urmatoarea comanda sa fie executata.

5.3 Spatiul de adrese I/O
Toate dispozitivele I/O de la ATmega 16 si perifericele au adrese plasate in spatiul
registrilor I/O. Locatiile I/O sunt accesate cu instructiunile IN si OUT, transferand date intre
cei 32 de registrii de lucru si spatiul I/O. Registrele I/O au adresele $00 - $1F si sunt direct
accesabile folosind comenzile SBI si CBI. La aceste registre valoarea bitilor individuali
poate fi verificata utilizand instructiunile SBIS si SBIC.
Cand se utilizeaza instructiunile specifice IN si OUT trebuie folosite adresele I/O
din zona $00 - $3F. Cand se adreseaza/acceseaza registrele I/O ca spatiu de date cu
instructiunile LD si ST, trebuie adaugat la aceste adrese constanta $20, care indica un salt
peste zona registrelor de uz general.


6. Sistemul I/O

Microcontrolerele AVR poseda un sistem diversificat de dispositive I/O adecvate
aplicatiilor de comanda, control, reglare, achizitii de date, comunicatie, s.a.

16

6.1 Porturile de intrare/iesire
ATmega16 dispune de 32 de linii de I/O grupate n patru porturi de 8 biti. Porturile
sunt denumite cu literele A, B, C si D. Fiecare pin al unui port poate fi setat individual ca
intrare sau iesire fr s afecteze ceilalti pini. In plus, anumiti pini se pot utiliza pentru functii
speciale ale microcontrolerului. In Fig. 11 este prezentat structura general a unui pin. Toti
cei 32 de pini au fiecare cte o rezistent de agatare (pull-up) care poate fi activat sau
dezactivat.
Operatiile cu porturile se fac prin intermediul unui set de 3 registre alocate fiecrui
port: PORTx, PINx si DDRx; unde x poate fi A, B, C sau D. Aceste registre fac parte din
categoria registrelor de intrare/iesire si pot fi accesate cu instructiunile CBI, SBI, IN si OUT.
Registrele DDRx stabilesc dac un pin este intrare sau iesire. Astfel, un bit cu
valoarea 1 n registrul DDRx face ca pinul corespunztor s fie considerat iesire; altfel
pinul va fi intrare. Registrii PORTx sunt utilizati pentru a scrie o valoare n portul
corespunztor, iar registrii PINx se folosesc pentru a citi valoarea prezent pe liniile unui
port. Activarea sau dezactivarea rezistentelor pull-up este comandata de bitul PUD din
registrul SFIOR si de valorile registrilor PORTx si DDRx asa cum se poate observa n tabelul
urmtor.

Toate porturile AVR au functia Citeste Modifica Scrie atunci cand sunt folosite
ca porturi I/O digitale generale. Asta inseamna ca directia unui pin poate fi schimbata fara a
schimba in mod intentionat directia oricarui alt pin cu comenzile SBI si CBI. Aceeasi regula
se aplica cand se schimba valoarea drive-ului (daca este configurat ca iesire) sau a
activarii/dezactivarii rezistorilor (daca sunt configurati ca intrari). Fiecare buffer de intrare
are caracteristici similare de comanda, in ceea ce priveste capacitatea sursei cat si
sincronizarea. Etajul de comanda al pinului este suficient de puternic pentru a comanda direct
un display LED. Atunci cind un pin este setat ca iesire rezistenta pull-up este dezactivata,
iar cind este folosit ca intrare rezistenta este activata.
Toti pinii I/O au rezistori pull-up care pot fi selectati individual. Toti pinii I/O au
diode de protectie atat la Vcc cat si la impamantare asa cum este indicat in figura de mai jos :



17


Fig. 11 Structura unei linii pentru un bit al portului I/O





Fig. 12 Schema echivalenta a unui pin

In limbaj de asamblare toti registrii si referintele de bit sunt scrise in forma generala.
Un x mic reprezinta litera care denumeste portul si un n mic reprezinta numarul bitului.
De exemplu, PORTB3 indica bitul numarul 3 al portului B, prezentat general ca PORTxn.
Majoritatea pinilor au functii alternative legate de functionarea dispozitivelor
periferice. De remarcat faptul ca activarea functiilor alternative ale unor pini nu afecteaza
utilizarea altor pini ca port I/O general digital. Un exemplu de folosire a porturilor I/O este
dat in Fig. 13.


18



Fig. 13 Folosirea porturilor I/O

6.2 Unitatile timer/numarator
ATmega 16 poseda doua unitati timer/numerator de 8 biti si o unitate
timer/numerator de 16 biti. Principalele caracteristici ale acestor module sunt:

- Posibilitatea de alegere a frecventei de tact de la intrarea temporizatoarelor (circuit
de prescalare)
- Posibilitatea de citire/scriere a starii numaratoarelor
- Generarea de forme de unda prin folosirea unui registru de comparare
- Generare de unde PWM cu posibilitatea de reglare a frecventei
- Generarea de cereri de intrerupere la interval regulate
- Declansare la un eveniment extern (captura a intrarii)
Unitatile timer/numarator fac posibila cronometrarea precisa a executiei
programului (managementul evenimentelor), generarea de forme de unda, masurarea
intervalelor de timp.
Structura unui temporizator de 8 biti este data in Fig. 14. Functionarea circuitului
este controlata cu ajutorul registrului TCCRn care permite alegerea frecventei de tact,
controlul modului de generare a undelor, selectia modului de folosire a rezultatului unitatii de
comparare. Formele de unda generate sunt disponibile la pinii porturilor I/O.
19



Fig. 14 Structura unui modul timer/numerator de 8 biti

6.3 Modulul USART
Modulul UART (Universal Asinchronous Receiver Transmiter) efectueaza
receptia/transmisia datelor de la/catre un dispozitiv periferic cu acces serie. Principalele
caracteristici sunt:
- Functionare full-duplex completa atit in modul sincron cit si in mod asincron
- Poseda generator de rata de baud propriu de rezolutie mare
- Formate de date seriale diverse
- Detecteaza automat erorile de transmisie
- Executa comunicatii de tip multiprocesor
Modulul executa conversia serie/paralel a datelor la receptie, respective conversia
paralel/serie la transmisie. Transmiterea datelor este initializata prin scrierea datelor care
trebuie transmise in registrul UDR (UART Data Register). Datele sunt transferate de la UDR
la registrul Transmit Shift cand:
1. Un nou character este scris in UDR si caracterul precedent a fost dj
transferat. Registrul de deplasare este incarcat imediat.
2. Un nou character este scris in UDR inainte ca un character precedent sa fi fost
transferat complet. Registul de deplasare este incarcat dupa ce prima operatie a fost finalizata.

6.4 Interfata SPI
Interfata de comunicatie SPI (Serial Periferal Interface) asigura trasferul rapid sincron
de date intre microcontroler si dispozitive periferice sau cu alte microcontrolere AVR.

6.5 Interfata TWI
Interfata TWI (Two Wire Interface) implementeaza un protocol de comunicatie pe
doua fire permitind interconectarea a pina la 128 de dispozitive diferite. Interfata foloseste
doua linii bidirectionale, una pentru tact (SCL) si una pentru date (SDA) ca in Fig. 15. Toate
dispozitivele conectate la acest bus au propria adresa.
20



Fig. 15 Interfata TWI

6.6 Convertorul A/D
Atmega 16 contine un convertor A/D cu aproximatii succesive, cu 8 canale si cu
rezolutia de 10 biti. Convertorul este prevazut la intrare cu circuit de esantionare si
memorare. Viteza de conversie este cuprinsa intre 13 si 260 de s.
6.7 Comparatorul analogic
Compara doua marimi analogice si genereaza o cerere de intrerupere cind acestae sunt
egale.
6.8 Timerul de urmarire
Timerul de urmarire (Watchdog) este un timer controlat care este folosit pentru a
activa un dispozitiv in caz ca software-ul este blocat intr-o bucla infinita sau in caz ca
executia programului este defectuoasa. Timer-ul Watchdog are o iesire care poate reseta
controlerul.
Watchdog-ul este alimentat de la un oscilator RC on-chip separat.

7. Modurile de operare cu consum redus

Mictrocontrolerul AVR poseda 6 moduri de functionare cu consum redus care pot fi
comandate prin intermediul registrului MCUCR (MCU Control Register). Pentru aceasta
seteaza bitul SE (Sleep Enable) si bitii SM2, SM1 si SM0 (Sleep Mode) dupa care se executa
instructiunea SLEEP. Regimurile de consum redus disponibile sunt:
Idle Mode CPU este oprit dar interfetele USART, SPI, TWI, CAD,
comparatorul analogic, timerele si sistemul de intreruperi continua sa functioneze. O cerere
de intrerupere readuce procesorul in stare de functionare.
ADC Noise Reduction Mode CPU este oprit insa continua sa functioneze
CAD, intreruperile externe, interfata TWI, timerul 2 si timerul de urmarire continua sa
functioneze. Acest regim permite CAD sa functioneze cu o rezolutie mai mare. O cerere de
intrerupere readuce procesorul in stare de functionare.
Power-down Mode - Oscilatorul extern este blocat insa ramin active
intreruperile externe, interfata TWI si timerul de urmarire.
Power-save Mode - este similar cu modul Power-down cu diferenta ca si
timerul 2 continua sa functioneze.
Standby Mode Este identic cu modul Power-down cu deosebirea ca
oscilatorul continua sa functioneze.
Extended Standby Mode Este disponibil atunci cind este folosit un oscilator cu
cuart, iar in rest este identic cu modul Power-down.

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