Documente Academic
Documente Profesional
Documente Cultură
Atmel PDF
Atmel PDF
1. Caracteristici
1
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 <1μA.
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.
2
2. Arhitectura AVR
3
de p o r n i r e r e z i d e n t ( o n - 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.
Combinând 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.
Portul A (PA7÷PA0)
Portul A este un port bidirectional de 8 biti programabil. Liniile portului A sunt
folosite si ca intrări 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 ieşire ale portului A au caracteristici de amplificare.
Portul B (PB7÷PB0)
Portul B este un port I/O de 8 biti bidirectional prevazut cu rezistente de agatare
interne (optional). Buffer-ele de ieşire ale portului B au caracteristici de amplificare. Portul B
indeplineşte de asemenea functii speciale ale microcontrolerului ATmega 16.
Portul C (PC7÷PC0)
Portul C este un port I/O de 8 biti bidirectional cu prevazut cu rezistente de agatare
interne (optional). Buffer-ele de ieşire 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 indeplineşte de asemenea
functii ale interfetei JTAG şi alte functii speciale ale ATmega 16.
Port D (PD7…PD0)
4
Portul D este un port I/O de 8 biti bidirectional prevazut cu rezistente de agatare
interne (optional). Buffer-ele de i e s i r e ale p ortului D au caracteristici de amplificare.
Portul D indeplineşte de asemenea functii speciale ale ATmega 16.
Reset
Un nivel scăzut la acest pin mai mare ca durată decat o valoare prestabilită, va
p r o v o c a initializarea procesorului.
5
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 implementări ale
arhitecturii AVR pot efectua şi multiplicări de operanzi cu sau fară semn.
Fig.5 Registrele X, Y, Z
6
Majoritatea instrutiunilor AVR sunt formate dintr-un cuvant d e 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 căreia se scrie în
memoria flash de aplicatii trebuie sa fie în sectiunea BOOT.
Informatiile din SRAM pot fi accesate cu uşurinta 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 atât 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 .
7
Bitul 4 (S - Sign Bit)
Acest bit este rezultatul operatiei logice SAU Exclusiv intre indicatorul negativ N si
bitul de depasite V.
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 cu 1 când se introduc date în stivă c u
instructiunea PUSH, şi decrementat cu 2 când 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 când datele sunt c i t i t e din stivă cu
instructiunea POP, şi incrementat c u 2 când sunt c i 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). Numărul de biti folositi depinde de
structura implementării. Spatiul de adrese, la unele implamentări ale arhitecturii AVR,
este mic incât este folosit doar registrul SPL (SP Low). În acest caz registrul SPH
(SP High) nu mai este utilizat.
8
Fig.5 Indicatorul de stivă
3. Executia instructiunilor
9
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.
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:
10
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
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.
11
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.
12
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.
13
Fig. 10 Extensia memoriei SRAM
14
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.
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.
6. Sistemul I/O
15
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 fără 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 câte 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 fiecărui
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 corespunzător să fie considerat iesire; altfel
pinul va fi intrare. Registrii PORTx sunt utilizati pentru a scrie o valoare în portul
corespunzător, 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
următor.
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 :
16
Fig. 11 Structura unei linii pentru un bit al portului I/O
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.
17
Fig. 13 Folosirea porturilor I/O
18
Fig. 14 Structura unui modul timer/numerator de 8 biti
19
Fig. 15 Interfata TWI
20