Microcontrolerul AVR are la baz un procesor RISC cu o arhitectur Harvard (adic unitatea central de procesare are memorie de program i memorie de date separate). Pe baza acestui nucleu RISC firma Atmel a dezvoltat mai multe familii de microcontrolere, cu diferite structuri de memorie i de interfee I/O, destinate diferitelor clase de aplicaii. Aceste microcontrolere sunt destinate aplicaiilor simple cum ar fi: controlul motoarelor, controlul fluxului de informaie pe portul USB, controlul accesului de la distan (Remote Access Control), .a..
Familia de microcontrolere AVR pe 8 bii prezint urmtoarele caracteristici:
1. Are memorie Flash programabil integrat, folosit ca memorie de program. Toate procesoarele AVR au memorie de program integrat. Asta nseamn c nu ai nevoie de memorii EPROM sau ROM externe pentru a stoca codul programelor. Programarea se poate face n dou moduri: serial i paralel. 2. Are 32 de registre de lucru de 8 bii fiecare (acest lucru este specific procesoarelor RISC). Numrul mare de registre de lucru permite stocarea variabilelor n interiorul procesorului, n loc s fie stocate n memorie, lucru care necesit un timp mai lung pentru accesare. n acest fel crete viteza de execuie a programului (deci va rula mai repede). 3. Are memorie de date integrat de tip EEPROM (Electrically Erasable Programmable Read-Only Memory) i memorie RAM integrat. Unitatea central de prelucrare are arhitectur Harvard, iar memoriile de tip RAM i EEPROM ale microcontrolerului sunt memorii de date, fiind folosite pentru a stoca variabile, respectiv constante. 4. Are frecvena de lucru care poate fi controlat prin software de la 0 la 16 MHz. Cele mai multe instruciuni sunt executate ntr-un singur ciclu de tact, ceea ce duce la mbuntirea performanei de 10 ori fa de procesoarele convenionale care opereaz la aceeai frecven (de exemplu: Intel 8051). 5. Realizeaz funcia de RESET fr decuplarea circuitului. 6. Are un timer programabil ncorporat cu circuit de prescalare separat, care este folosit pentru sincronizarea aplicaiilor. 7. Surse interne i externe de ntrerupere. 8. Are un timer watchdog cu oscilator independent, care este folosit pentru recuperarea informaiilor n caz de apariia unei erori software, dar mai poate fi folosit i n alte aplicaii. 9. Are 6 moduri de operare pentru economisirea energiei. Poate lucra n modurile de operare SLEEP i POWER DOWN, moduri ce economisesc energie, atunci cnd procesorul nu lucreaz. 10. Multe cipuri au oscilator integrat RC, care micoreaz i mai mult numrul componentelor n cazul microcontrolerelor care-l conin. 11. Sunt prevzute cu o gam larg de dispozitive de I/O i de periferice ncorporate. 12. Beneficiaz de existena unui set unitar de instrumente software pentru dezvoltarea aplicaiilor. 13. Are o compatibilitate mare, pornind de la procesoare mici cu 8 pini i ajungnd la procesoare cu 68 de pini.
Microcontrolerele din familia AVR prezint o organizare de tip RISC din punctul de vedere al execuiei unei instruciuni pe ciclu main. Prezena unor blocuri interne precum: oscilator intern, timere, unitate UART (Universal asynchronous receiver/transmitter), interfa SPI, rezistoare pull-up, PWM (pulse width modulation), convertoare analog-digitale, comparatoare analogice determin utilizarea acestor microcontrolere ntr-o gam foarte larg de aplicaii. 2
Specific arhitecturii Harvard, microcontrolerele AVR folosesc spaii de memorie i magistrale de acces separate pentru coduri i pentru date. Memoria de program care este de tip FLASH integrat, poate fi programat fr scoaterea din sistem, ceea ce permie efectuarea rapid de upgrade-uri n programe. Instruciunile acestei familii de microcontrolere au fost proiectate pentru a reduce dimensiunea unui program scris n limbaj C sau n limbaj de asamblare. Posibilitatea programrii memoriei FLASH i a memoriei EEPROM, determin ca aceste microcontrolere s aib o larg utilizare datorat costului mic de dezvoltare a unei aplicaii (au timpul de proiectare scurt). Aceste microcontrolere au consum redus de energie. Domeniul tensiunilor de alimentare este cuprins ntre 1,8V i 5V. Prezint 6 moduri diferite de operare cu consum redus de energie, ceea ce ne asigur c aceste microcontrolere nu vor consuma energie dect atunci cnd este nevoie. Controlul software al frecvenei de tact garanteaz o vitez maxim de execuie atunci cnd este nevoie, iar n restul timpului microcontrolerul poate trece n modul STANDBY, unde consumul de energie este minim. Utilizarea acestor microcontrolere poate reduce semnificativ timpul de dezvoltare a unei aplicaii datorit prezenei unui bloc de depanare n timp real, circuitul aflndu-se chiar pe plac. Printre cele mai utilizate microcontrolere de uz general putem aminti: ATMEGA 8, ATMEGA 16, ATMEGA 128, ATMEGA 162, etc.. Microcontrolerele din familia AVR pot fi att microcontrolere de uz general, ct i microcontrolere cu funcii specializate, mprindu-se n urmtoarele categorii: 1. Familia TINY AVR cuprinde microcontrolere destinate unor aplicaii simple, cu 18 KB memorie de program. 2. Familia MEGA AVR cu un set dezvoltat de instryciuni i cu 4256 KB memorie de program. 3. Familia XMEGA AVR destinat unor aplicaii complexe. Acestea au uniti DMA (Direct Access Memory), module pentru criptare, .a. i folosesc un spaiu de memorie de program de 16 384 KB. 4. Microcontrolere AVR destinate unor aplicaii specifice, care se mpart n mai multe categorii: 4.1. LI GTHI NG AVR: microcontrolere ce conin un procesor de semnal, fiind special conceput pentru controlul motoarelor de curent continuu. 4.2. LCD AVR: microcontrolere ce conin un controler pentru adresarea dispozitivelor LCD 4.3. CAN AVR: microcontrolere ce conin o interfa CAN implementat hardware.
Microcontrolerele din familia AVR de 8 bii au un set de 131 instruciuni i 32 de registre de uz general. Cele 32 de registre sunt direct adresabile de unitatea aritmetic i logic (UAL), permind accesarea a dou registre independente ntr-o singur instruciune. Astfel se obine o eficien sporit n execuie, fiind de pn la zece ori mai rapide dect microcontrolerele convenionale de tip CISC.
Microcontrolerul ATMEGA 16
Arhitectura AVR (firma ATMEL) ATMEGA 16 este un microcontroler realizat de firma Atmel, avnd o tehnologie CMOS de 8 bii, de mic putere i o arhitectur RISC AVR mbuntit. Caracteristicile principale ale acestui microcontroler sunt: - 16 KB de memorie FLASH reinscriptibil pentru stocarea programelor; - 1 KB de memorie RAM; - 512 B de memorie EEPROM; - dou numrtoare/temporizatoare de 8 bii; - un numrtor/temporizator de 16 bii; - un convertor analog digital de 10 bii, cu 8 intrri (intrri multiple); - un comparator analogic; - 4 canale PWM; - conine 3 interfee pentru comunicaie: un modul USART pentru comunicaie serial (port serial), interfa serial TWI i interfa serial SPI; 3
- un cronometru cu oscilator intern; - ofer 32 de linii I/O organizate n patru porturi (PA, PB, PC, PD) cu 8 bii fiecare; - are o magistral general de date la care sunt conectate mai multe module i anume: unitatea aritmetic i logic (UAL), registrele generale, memoria RAM i memoria EEPROM, liniile de intrare (adic porturile) i celelalte blocuri de intrare/ieire. Aceste ultime module sunt controlate de un set special de registre, fiecare modul avnd asociat un numr de registre specifice. - memoria FLASH de program mpreun cu ntreg blocul de extragere a instruciunilor, de decodare i de execuie comunic printr-o magistral proprie, separat de magistrala de date menionat mai sus. Acest tip de organizare este conform principiilor unei arhitecturi Harvard i permite microcontrolerului s execute instruciunile foarte rapid. n modul POWER DOWN se salveaz coninutul registrelor, dar se blocheaz oscilatorul, dezactivndu-se toate celelalte funcii ale chip-ului pn la urmtoarea ntrerupere extern sau la urmtorul RESET hardware. n modul POWER SAVE, timer-ul asincron continu s mearg n timp ce restul dispozitivelor sunt oprite. n modul STANDBY, oscilatorul funcioneaz, n timp ce restul despozitivului este oprit. Acest lucru permite un start foarte rapid combinat cu un consum redus de energie, iar n modul STANDBY EXTINS (Extended Standby Mode), att oscilatorul principal ct i timer-ul asincron continu s funcioneze. ATMEGA 16 AVR este susinut de o serie complet de instrumente de program i de dezvoltare a sistemului, care include: compilatoare C, macroasambloare, programe de debug/simulare, .a..
4
Descrierea pinilor la ATMEGA 16
Vcc Sursa de curent GND Masa
Port A (PA7 .. PA0) Portul A servete drept port de intrri analogice pentru convertorul A/D. Mai poate fi folosit, de asemenea, i ca un port bidirecional I/O de 8 bii, n cazul n care convertorul A/D nu este folosit. Pinii de port pot fi conectai opional la sursa de curent Vcc prin rezistori interni (selectai pentru fiecare bit). Buffer-ele de ieire ale portului A au i caracteristici de amplificare .
Port B (PB7.. PB0) Portul B este un port I/O de 8 bii bidirecional cu rezistori interni (opionali), dar poate ndeplini i functii speciale ale microcontrolerului ATMEGA 16. Buffer-ele de ieire ale portului B au i ele caracteristici de amplificare.
Port C (PC7PC0) Portul C este un port I/O de 8 bii bidirecional cu rezistori interni (opionali), poate ndeplini i functii ale interfeei JTAG (de depanare), ct i alte funcii speciale ale microcontrolerului ATMEGA 16. Buffer-ele de ieire ale portului C au caracteristici de amplificare. Dac interfaa JTAG (de depanare) este activat, rezistorii pinilor PC5(TDI), PC3(TMS) i PC2(TCK) vor fi activai, chiar dac are loc o resetare.
Port D (PD7PD0) Portul D este un port I/O de 8 bii bidirecional cu rezistori interni conectai opional la sursa de curent Vcc (selectai pentru fiecare bit), dar poate ndeplini i functii speciale ale microcontrolerului ATMEGA 16. Buffer-ele de ieire ale portului D au caracteristici de amplificare.
RESET - Un nivel sczut la acest pin mai mare ca durat dect o valoare prestabilit, va genera o iniializare. XTAL 1 - reprezint intrare pentru amplificatorul inversor al oscilatorului. XTAL 2 - reprezint ieire pentru amplificatorul inversor al oscilatorului.
AVCC - este pinul de alimentare pentru portul A i convertorul A/D. Trebuie conectat extern la Vcc, chiar dac convertorul analog-digital nu este folosit. Dac convertorul analog-digital este folosit, ar trebui conectat la sursa de curent Vcc printr-un filtru trece-jos.
AREF - este pinul de referin analogic pentru convertorul A/D. 5
Unitatea central de prelucrare pentru AVR
Funcia principal a nucleului unitii centrale de prelucrare (UCP) este aceea de a asigura execuia corect a programului. Din acest motiv, nucleul UCP este capabil s acceseze memoriile, s execute calcule, s controleze perifericele i ntreruperile.
Figura 1 Schema bloc a nucleului UCP la microcontrolere AVR
Pentru a maximiza performana, AVR folosete o arhitectur Harvard cu memorii i magistrale separate pentru program i date. Instruciunile din memoria programului sunt executate ntr-un singur nivel n timp ce o instruciune este executat i urmtoarea este adus de la memoria de program. Acest concept permite executarea instruciunilor la fiecare ciclu de ceas. Memoria de program este o memorie de tip FLASH reprogramabil. Registrele la AVR sunt n numr de 328 bii fiecare, scopul acestor microcontrolere fiind acela de a accesa registrele ntr-un singur ciclu de ceas. Acest singur timp de acces se datoreaz unitii aritmetice i logice (UAL=Unitatea Aritmetic i Logic). ntr-o unitate aritmetic i logic operaia are loc astfel: operanzii sunt scoi din registru, se efectueaz operaia i rezultatul este introdus n regitri, toate acestea fiind executate ntr-un singur ciclu de ceas. ase din cele 32 de registre pot fi folosite ca trei registre de 16 bii cu acces indirect la informaii, permind astfel calcularea eficient a adresei. Una dintre aceste adrese poate fi folosit pentru a cuta tabele n memoria de program. Unitatea aritmetic i logic efectueaz (suport) operaii aritmetice i logice ntre registre sau ntre o constant i un registru. Dup efectuarea unei operaii aritmetice registrul afieaz rezultatul operaiei. Programul furnizeaz salturi condiionate, necondiionate i apelri de instruciuni capabile s acceseze tot spaiul de adres. Majoritatea instruciunilor AVR sunt formate dintr-un cuvnt de16 bii. Spaiul memoriei de program (FLASH) este mprit n dou seciuni, seciunea BOOT i seciunea de aplicare a programelor. Seciunea BOOT are bii speciali pentru protecia la scriere i citire/scriere. De exempl u i nstruciunea SPM cu ajutorul creia se scrie n memoria FLASH aplicaii trebuie s fie n seciunea BOOT. n timpul ntreruperilor sau a apelrii subrutinelor, adresa de ntoarcere este coninut n stiv. Stiva este efectiv alocat n informaiile generale SRAM i n consecin mrimea ei este limitat doar de mrimea total a SRAM i de uzura ei. Toi utilizatorii de program trebuie s iniializeze 6
indicatorul de stiv SP (Stack Pointer) nainte ca subrutina sau ntreruperea s fie executat. SP se poate citi/scrie n spaiul de I/O. Informaiile din SRAM pot fi accesate cu uurin prin cele cinci moduri diferite de adresare suportate de arhitectura AVR. Spaiile de memorie n arhitectura AVR sunt liniare i normale. Modulele ntreruperilor au registrele de control n spaiul I/O i n Registrul STATUS se afl bitul de ntreupere global. Toate ntreruperile au prioritate n funcie de locul ocupat n tabelul de vectori de ntrerupere. Cu ct este mai jos situat n tabel vectorul de ntrerupere cu att acea ntrerupere are prioritate mai mare. Prioritatea mai mare o are ntreruperea cu vectorul cel mai slab plasat n tabel. Spaiul de memorie I/O conine 64 de adrese pentru funciuni periferice ale UCP precum: controlul registrelor, indicatorul SPI sau alte funcii de I/O. Memoria I/O poate fi accesat direct sau indirect.
Execuia n timp a instruciunilor Aceast parte descrie n general timpul necesar executrii instructiunilor. UCP a MC AVR este controlat de ceasul UCP generat direct de la surs. Nu se folosete nici un ceas interior. Figura 6 ne prezint pipeline-ul de execuie al unei instruciuni permis n arhitectura Harvard i accesul rapid la fiierul de registre. Acesta este conceptul de baz pentru a obine mai mult de 1 MIPS/MHz i cele mai bune rezultate din punct de vedere funciuni/cost, funciuni/timp i funciuni/unitate.
Figura 6 - Instruciuni paralele de execuie
Figura 7 ne arat timpul de lucru cu registrele. ntr-un singur ciclu de ceas o operaie a UAL folosete 2 registre pentru a executa calculul respectiv, iar rezultatul este stocat napoi n registrul de destinaie.
Figura 7 - Operaii UAL ntr-un singur ciclu de ceas
7
ntreruperile
MC AVR furnizeaz mai multe tipuri de ntreruperi. Aceste ntreruperi i vectorul de resetare au cte un vector de program fiecare aflat n spaiul memoriei de program. Tuturor ntreruperilor le sunt alocate individual bii care trebuie scrii logic o dat cu bitul GIE (Global Interrupt Enable) n registrul de stare cu scopul de a permite ntreruperea. n funcie de starea n care se afl PC (Program Counter), ntreruperile pot fi invalidate, atunci cnd Boot Loader-ul este programat. Aceast tehnic mbunattete securitatea. Cele mai joase adrese din memoria de program sunt definite ca vectori de resetare i ntrerupere. n funcie de list se determin i nivelurile de prioritate ale diferitelor ntreruperi. Cu ct ntreruperea are nivelul mai jos, cu att prioritatea este mai mare. RESET are cea mai mare prioritate, iar dup aceasta este INT0 - cererea de ntrerupere extern 0. Vectorii de ntrerupere pot fi mutai la nceputul seciunii Boot Flash prin setarea bitului IV SEL din registrul global de control al ntreruperilor (GICR). Vectorul de RESET poate fi, de asemenea, mutat la nceputul aceleiai seciuni prin programarea seciunii BOOTRST. Cnd apare o ntrerupere, bitul GIE (bitul I de ntrerupere) este ters i toate ntreruperile sunt invalidate. Utilizatorul de software poate scrie 1 logic n bitul I pentru a permite executarea ntreruperilor. Toate ntreruperile permise pot, la rndul lor, ntrerupe ntreruperile de rutin. Bitul I este automat corectat cnd instruciunea RETI este executat. Practic sunt dou tipuri de ntreruperi: 1. Primul tip este declanat de evenimentele care seteaz indicatorul de ntrerupere. Pentru aceste ntreruperi PC este trimis la vectorii de ntrerupere n scopul executrii ntreruperilor de rutin i hardware-ul terge indicatorul de ntrerupere corespunztor. Indicatorul de ntrerupere poate fi ters i prin scrierea cu 1 logic. Dac se ntmpl o ntrerupere n timpul n care bitul care permite ntreruperea este ters, atunci indicatorul de ntrerupere va fi setat s rein ntreruperea pn cnd aceasta va putea fi permis sau indicatorul este ters de software. n caz similar se procedeaz atunci cnd este vorba de tergerea indicatorului GIE. 2. Cel de-al doilea tip de ntreruperi este dat atta timp ct condiia de ntrerupere este prezent. Aceste ntreruperi nu au neaprat indicator de ntrerupere. Dac condiia de ntrerupere dispare nainte ca ntreruperea s fie permis, ntreruperea nu va mai fi executat. Cnd AVR iese dintr- o ntrerupere se ntoarce la programul principal i mai execut o dat instruciunile nainte de a interveni alt ntrerupere. Starea registrului nu este automat stocat cnd apare o ntrerupere de rutin, nici cnd revine din ntreruperea de rutin. Acesta trebuie susinut de software.
De exemplu: 1. Cnd se folosete instruciunea CLI (Clear Interrupt) pentru invalidarea ntreruperilor, ntreruperea va fi invalidat imediat. Nici o ntrerupere nu va mai fi executat dup acionarea instruciunii CLI, chiar dac se ntmpl simultan cu instruciunea CLI. 2. Cnd se folosete instructiunea SEI (Set Interrupt) pentru a permite ntreruperi, instruciunea SEI este rulat naintea oricrei instruciuni aflate n ateptare.