Atmel AVR

AVR on modified Harvard architecture 8-bitine RISC-mikrokontroller, mille töötas välja Atmel 1996. aastal. AVR oli üks esimesi selliste mikrokontrollerite tooteperesid, mis kasutasid välkmälu tavalise PROMi (inglise keeles "Programmable Read-Only Memory"), EPROMi ("Electrically Programmable Read-Only Memory") ja EEPROMi ("Electrically Ereasable Programmable Read-Only Memory") asemel, mida kasutasid teised tollased mikrokontrollerid.
Lühiajalugu.
AVR-arhitektuurile panid aluse kaks Norra Tehnoloogiaülikooli üliõpilast: Alf-Efil Bogen ja Vegard Wollan.
Algne AVR-mikrokontroller töötati välja kohalikus mikrokiipide arenduskohas Trondheimis, kus kaks Atmel Norway loojat õpilastena töötasid. Kui Atmel arhitektuuri ostis, tegelesid Alf ja Vegard selle arendusega edasi Atmel Norway juures. Nad tegid tihedat koostööd kompilaatoreid loova firma IAR Systemsiga, et parandada käsustiku efektiivsust kõrgema taseme keelte kasutamisel ja kompileerimisel. 
Atmeli sõnul pole AVR millegi akronüüm ega tähista midagi konkreetset. Samuti ei anna arhitektuuri loojad ühest vastust küsimusele, mida AVR tähendab.
Esimeste AVR-i pere liikmete hulgas oli AT90S8515, mis oma 40 väljaviiguga DIP pakendis oli sama jalgade funktsionaalsusega mis Intel 8051, kaasaarvatud välised multipleksitud aadressi- ja andmesiinid. Ainus erinevus oli RESET polaarsus, mis 8051 puhul on vaikimisi kõrge, kuid AVR-il madal.
Põhiliigitus.
AVR-id jaotatakse üldjuhul viide gruppi:
Arhitektuur.
Välkmälu, EEPROM ja SRAM on integreeritud ühele kiibile, mis kõrvaldab üldjuhul vajaduse välise mälu jaoks. Mõnedel kiipidel on paralleelühenduse võimalus, mille läbi on võimalik külge ühendada lisamälu. Peaaegu kõigil (välja arvatud kõige väiksematel TinyAVR seeria mikrokontrolleritel) on jadaühenduse võimalus, mille abil saab ühendada suurema EEPROMi või välkmälu.
Programmimälu.
Programmi käsustik paikneb muutumatus välkmälus. Kuigi tegemist on 8-bitiste mikrokontrolleritega, on iga käsk üks või kaks 16-bitist andmesõna.
Programmimälu maht on üldjuhul ära märgitud ka nimetuses (näiteks ATmega64x seerial on 64 kB välkmälu, ATmega32x seerial 32 kB).
AVR-i kiipidel pole tuge, mis toetaks programmi paiknemist välisel mälul, ehk kogu töötav kood peab paiknema sisemisel välkmälul. Ainsaks erandiks on AT94 FPSLIC AVR/FPGA kiibid.
Sisemine andmemälu.
Aadressiruum koosneb protsessori registritest, sisend-väljund registritest ja SRAM-ist.
Sisemised registrid.
AVR-idel on 32 ühebaidist protsessori registrit ja neid klassifitseeritakse 8-bitisteks RISC seadmeteks.
Enamasti on protsessori kasutuses olevad registrid esimesel 32 mäluaadressil (000016-001F16), millele järgnevad 64 sisend-väljund registrit (002016-005F16).
SRAM algab pärast ülalmainitud registreid (aadress 006016). Sisend-väljund registrid võivad mõnel juhul olla suuremad, sel juhul võtavad nad osa SRAM-i aadressiruumist.
Kuigi on olemas eraldi aadresserimissüsteemid protsessori ja sisend-väljund registritele ligipääsuks, saab kõiki käsitleda sarnaselt SRAM-iga.
XMEGA seeria kiipidel ei ole protsessori registrid adresseeritud ja seega pole neid võimalik kasutada kui SRAM-i. Selle asemel on sisend-väljund registrid paigutatud kohe mäluaadresside algusse. Lisaks on suurendatud neile mõeldud mälu 4096 baidini (000016-0FFF16). Sarnaselt eelmiste generatsioonidega võimaldatakse kiiret ligipääsu endiselt 64-le sisend-väljund registri asukohale. Pärast neid on XMEGAdes 4096-baidine aadressiala, kuhu saab vajadusel adresseerida EEPROMi. SRAM algab pärast eelnevaid piirkondi kohal 200016.
EEPROM.
Peaaegu kõigil AVR-mikrokontrolleritel on sisemine EEPROM andmete püsivamaks salvestamiseks. Sarnaselt välkmäluga suudab EEPROM andmed säilitada ka siis, kui vool välja lülitada.
Enamikus AVR-arhitektuuri versioonides pole EEPROM otseselt adresseeritav ja seega pääseb sellele ligi sarnaselt väliste seadmetega. Kuna kasutada tuleb spetsiaalseid registreid ning lugemis- ja kirjutamiskäske, on suhtlus EEPROM-iga tunduvalt aeglasem kui näiteks SRAM-iga.
Samas võimaldab SecureAVR-i (AT90SC) pere kasutada erilist EEPROM-i adresseerimist nii andmemälu kui programmimälu jaoks. Nagu mainitud, toetavad XMEGA kontrollerid vajadusel EEPROMI otsest adresseerimist.
Kuna kirjutamisoperatsioonide arv EEPROM-il on piiratud (Atmeli andmelehtede järgi umbes 100 000 kirjutamiskorda), peab hästi disainitud EEPROM-i kirjutamisprotseduur võrdlema konkreetsel hetkel EEPROM-is olevaid andmeid sinna kirjutatavaga ja ainult erinevuste korral sinna päriselt andmeid kirjutama, vähendades seeläbi kirjutamiste arvu.
Taimerid.
Enamikul AVR-mikrokontrolleritel on sisemine taimer, millega on võimalik lugeda kas välist või sisemist taktsignaali. Seda sagedust saab sageduse jagajaga väiksemaks muuta, kui on vaja lugeda pikki intervalle. Mõned taimerid on võimelised töötama siis, kui mikrokontroller ise magab (suurem osa seadmeid on välja lülitatud, et energiat säästa). Taimereid on nii 8-, 16- kui ka 32-bitiseid. Taimeritega kaasnevad funktsioonid:
Programmi täitmine.
AVR-idel on kaheetapiline, ühetasemeline "pipeline" disain. See tähendab, et iga järgmine käsk võetakse ette samal ajal, kui praegust täidetakse. Enamiku käskude jaoks kulub ainult üks või kaks kellatsüklit, mis teeb AVR-id võrdlemisi kiireteks 8-bitiste mikrokontrollerite hulgas.
AVR-pere protsessorid on disainitud eesmärgiga täita kompileeritud C-koodi võimalikult efektiivselt.
Käsustik.
Suuremas osas muudab tavaline käsustik AVR-ide programmeerimise C keeles suhteliselt lihtsaks. GNU on AVR-i toetust sisaldanud juba mõnda aega ja leidnud ka laia kasutust. Atmel ise on käsustiku arendamisse kaasanud suuremaid mikrokontrollerite kompilaatorite arendajaid, et panna paika, mis omadused kõrgema taseme keelte kasutamisel kasuks tulevad.
Mikrokontrolleri kiirus.
AVR-id toetavad üldjuhul taktsagedusi kuni 20 MHz, kuid mõned suudavad töötada ka kuni 32 MHz. Üldjuhul on madalamal pingel töötavad kontrollerid ka madalama taktsagedusega. Kõigil hiljutistel (ATtiny, ATmega, ATXmega, aga mitte 90S) AVR-idel on olemas sisseehitatud ostsillaator, mistõttu pole vaja välist kella. Mõnedel AVR-idel on sisseehitatud sageduse jagaja, mis võimaldab töö käigus vastavalt vajadusele taktsagedust reguleerida, mis omakorda võimaldab suuremat optimeeritust.
Kuna kõik operatsioonid registritel R0-R31 on ühetaktilised, suudab AVR saavutada kiirusi kuni 1 MIPS/MHz. Näiteks 8 MHz peal töötav mikrokontroller suudab saavutada kuni 8 MIPS. Mälust laadimine ja kirjutamine võtavad 2 takti, hargnevused (inglise "branching") võtavad 3 takti.
Arendus.
AVR-id on väga levinud tänu tasuta või odavatele arendusvahenditele, mille hulgas on odavad arendusplaadid ja tasuta arendustarkvara. AVR-id sisaldavad üldjuhul sama tuuma, kuid varieeruvad erinevate suhtlusvahendite ja mälu konfiguratsioonide poolest. Ühilduvus kiipide vahel on hea, kuigi sisend-väljund omadused võivad erineda.
Funktsioonid.
Praegused AVR-id pakuvad järgmisi funktsioone:
32-bitine AVR32.
2006. aastal andis Atmel välja esimesed 32-bitised AVR32 arhitektuuril põhinevad mikrokontrollerid. AVR32 käsustik sisaldab uusi käske SIMD ja digitaalse signaalitöötluse jaoks, lisaks uutele audio-video töötlemisvahenditele. Üldiselt sarnaneb AVR32 käsustik teiste RISC-põhiste tuumade omaga, kuid pole üheselt tagasiühilduv algse AVR-i ega ka konkureeriva ARM-i põhiste kontrolleritega. See 32-bitine pere on põhiliselt suunatud konkureerima just ARM arhitektuuril põhinevate protsessoritega.
Arendusvahendid.
Atmeli pakutud arendusvahendite hulka kuuluvad erinevad programmaatorid, silurid ja ka baaskomplektid.
STK600 baaskomplekt.
STK600 baaskomplekt ja arendusplatvorm on STK500 järeltulija. STK600 puhul tuleb mikrokontroller kinnitada eraldi plaadiga põhiplaadile, mis annab talle voolu, kella, võimaldab programmeerimist ja suhtlust. Samuti saab põhiplaadi külge ühendada muid komponente, et skeemi testida. See arendusplatvorm toetab kõiki Atmel AVR-mikrokontrollereid, kuid erinevate väljaviikude arvu ja paigutusega kontrollerite kasutamiseks tuleb vahetada plaate, millele mikrokontroller kinnitub. Arvuti külge ühendub STK600 USB abil, jättes sellega arendustööks muud suhtlusvahendid vabaks.
AVR ISP ja AVR ISP mkII.
AVR ISP ja AVR ISP mkII on odavad tööriistad AVR-mikrokontrollerite programmeerimiseks läbi SPI liidese, mis ei eelda nende skeemist eemaldamist.
AVR ISP ühendub arvutiga üle jadaliidese ja võtab voolu programmeeritavast skeemist, samal ajal kui AVR ISP mkII ühendatakse USB-ga ja saab kogu vajaliku toite sealt. AVR ISP mkII on AVR ISP järeltulija, mille tõttu on ka viimase tootmine lõpetatud.
Butterfly näidisplaat.
Ülipopulaarne AVR Butterfly näidisplaat on Atmel AVR ATmega169V mikrokontrolleril põhinev patareitoitega arvuti. Selle eesmärk on demonstreerida AVR-peret üleüldiselt, kuid eraldi veel sisseehitatud LCD-kontrollerit. Plaadil on veel lisaks juhtkang, piesokõlar, kell, välkmälu, temperatuuri- ja pingeandurid. Enne 2006. aastat toodetud Buttreflydel oli ka veel fototakisti, mis sealt hiljem eemaldati RoHS nõuetega vastavuses olemiseks.. Lisaks on teisel poolel haaknõel, mis võimaldab Butterflyd kanda kui nimesilti.
AVR Butterflyl on vaikimisi laaditud tarkvara, mille abil saab ekraanil teksti kerida, kuvada sensorite lugemeid ja näidata aega. Samuti saab kõlari kaudu muusikat esitada. Butterfly peal olev ekraan on 14-segmendiline tekstiekraan, mille juhtimiseks läheb vaja suuremat osa mikrokontrolleri väljaviikudest.
Kuigi ATmega169 protsessori maksimaalseks kiiruseks on 16 MHz, on tehaseseadetega kiiruseks määratud vaid 2 MHz, et säästa kaasasoleva patarei eluiga. Lisaks võimaldab installeeritud alglaadur Butterflyd vastavalt soovile üle standardse RS-232 jadaühenduse ümber programmeerida, kasutades selleks tasuta Atmeli arendusvahendeid.
Atmel AVR-i kasutusalad.
AVRe kasutatakse laialdaselt autonduses: turvalisuses, ohutuses, meelelahutuses jne. Atmel avaldas hiljuti "Atmel Automotive Compilation", et aidata arendajatel luua paremaid lahendusi. Mõned praegustest kasutajatest on BMW, Daimler-Chrysler ja TRW. Lisaks on olemas eraldiseisev tootepere toitehalduse jaoks. Samuti sisaldavad 32-bitised AVR-mikrokontrollerid puutetundliku ekraani kontrollereid. USB tuge omavaid AVRe kasutatakse Microsoft Xboxi pultides.
Näiteks System Semiconductor, Inc. toodab mootorite juhtimiseks mõeldud kontrollerit M3000, mis sisaldab AVR-tuuma ja muud, tehes sellest kiibist mitmekülgsete rakendusvõimalustega mikrokontrolleri.
Arduino.
Arduino on hobielektroonikute seas laialt levinud AVR-il põhinev arendusplatvorm. See põhineb ATmega328 mikrokontrolleril (ATmega168 või ATmega8 vanematel versioonidel kui Diecimila). Samuti kasutatakse ATmega1280 Arduino Mega platvormil. Arduinot saab kasutada nii tema enda keelega ja oma graafilises keskkonnas kui ka tavalisemate arendusvahendite ja keeltega (C, assembler jne).
Mitmed firmad on loonud AVR-i baasil mikrokontrollerite plaate, mis on mõeldud harrastajatele, robootikutele ja lihtsamate süsteemide arenduseks. Mõned neist firmadest on Cubloc, BasicX, Oak Micros, ZX Microcontrollers ja myAVR. Lisaks on Arduinol palju kloone, mis on samuti laialt levinud.
Avatud lähtekoodiga kloonid.
FPGA kiire leviku tõttu harrastajate hulgas on hakatud arendama avatud lähtekoodiga, AVR-iga ühilduva ja AVR-i käsustikuga sobivaid protsessorituumasid. OpenCores nimetab suurimateks AVR-i kloonimisprojektideks: