Atmel AVR

Allikas: Vikipeedia
Atmel AVR ATmega8 DIP pakendis

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[muuda | muuda lähteteksti]

AVR arhitektuurile panid aluse kaks Norra Tehnoloogiaülikooli tudengit: Alf-Efil Bogen ja Vegard Wollan.[1]

Algne AVR mikrokontroller arendati 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. [2] 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.[1]

Esimeste AVR perekonna 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[muuda | muuda lähteteksti]

AVR-id jaotatakse üldjuhul viide gruppi:

  • tinyAVR – ATtiny seeria
    • 0,5–8 kB programmimälu
    • 6–32 väljaviiguga pakend
    • Piiratud perifeeriaseadmed
  • megaAVR – ATmega seeria
    • 4–256 kB programmimälu
    • 28–100 väljaviiguga pakend
    • Laiendatud käsustik (näiteks käsud suuremate mäluhulkade käsitlemiseks)
    • Lai perifeeriaseadmete valik
  • XMEGA – ATxmega seeria
    • 16–384 kB programmimälu
    • 44–64–100 väljaviiguga pakend
    • Lisafunktsionaalsus (välise mälu kontroller, krüptograafia tugi jne)
    • Lai perifeeriaseadmete valik koos D/A-muunduriga
  • Rakendusespetsiifiline AVR
    • megaAVR-id, millel on lisafunktsioone, näiteks LCD-kontroller, USB-kontroller jne.
  • FPSLIC™ (AVR koos FPGAga)
    • FPGA 5K kuni 40K loogilise väravaga
    • SRAM AVR-i programmikoodi jaoks
    • AVR-i tuum on võimeline töötama kuni 50 MHz taktsagedusega [3]

Arhitektuur[muuda | muuda lähteteksti]

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[muuda | muuda lähteteksti]

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 toetamaks 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[muuda | muuda lähteteksti]

Aadressiruum koosneb protsessori registritest, sisend-väljund registritest ja SRAMist.

Sisemised registrid[muuda | muuda lähteteksti]

AVR-idel on 32 ühebaidist protsessori registrit ja neid klassifitseeritakse 8-bitisteks RISC seadmeteks.

Enamikul juhtudest on protsessori kasutuses olevad registrid esimesel 32-l 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 olla, mis juhul võtavad nad osa SRAMi 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 SRAMi. 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[muuda | muuda lähteteksti]

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.

Enamikes 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 [4] 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[muuda | muuda lähteteksti]

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).[5] Taimereid on nii 8-, 16- kui ka 32-bitiseid. Taimeritega kaasnevad funktsioonid:

  • Aja lugemine
  • Pulsi pikkuse moduleerimine
  • Väliste sündmust vaheliste aegade mõõtmine
  • Analoog-digitaalmuunduri käivitamine
  • Koodi õigeaegne käivitamine läbi katkestuste


Programmi täitmine[muuda | muuda lähteteksti]

AVR-idel on kaheetapiline, ühetasemeline pipeline disain. See tähendab, et iga järgmine käsklus võetakse ette samal ajal kui praegust täidetakse. Enamik käsklusi võtavad ainult ühe või kaks kellatsüklit, mis teeb AVR-id võrdlemisi kiireteks 8-bitiste mikrokontrollerite hulgas.

AVR perekonna protsessorid on disainitud eesmärgiga täita kompileeritud C koodi võimalikult efektiivselt.

Käsustik[muuda | muuda lähteteksti]

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[muuda | muuda lähteteksti]

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[muuda | muuda lähteteksti]

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[muuda | muuda lähteteksti]

Praegused AVR-id pakuvad järgmisi funktsioone:

  • Multifunktsionaalsed, mitmesuunalised sisend-väljund väljaviigud koos sisseehitatud pull-up takistitega
  • Mitu sisemist ostsillaatorit
  • Sisemine, iseprogrammeeritav välkmälu kuni 256 kB (XMegadel kuni 384 kB)
    • Süsteemisisene programmeerimine läbi paralleel- või jadaühenduse või läbi JTAGi
    • Valikuline alglaadur koos kaitsevõimalustega
  • Sisseehitatud koodisilumine (OCD) läbi JTAGI või Atmeli debugWIRE´i
  • Sisemine EEPROM kuni 4 kB
  • Sisemine SRAM kuni 16 kB (XMegal kuni 32 kB)
  • 8 ja 16-bitised taimerid
    • PWM signaali genereerimine
    • Sisendi mõõtmine
  • Analoog komparaator
  • 10 või 12-bitised A/D konverterid, multipleksitud kuni 16 kanalile
  • 12-bitine D/A konverter
  • Erinevad jadaühendused
    • I²C ühilduv TWIga
    • Sünkroonsed/asünkroonsed jadaühendused (UART/USART)
    • Serial Peripheral Interface (SPI)
    • Universal Serial Interface (USI)
  • Madala pinge määramine (Brownout detection)
  • Watchdog timer (WDT)
  • Mitu energiasäästu- ja unerežiimi
  • Controller Area Network tugi
  • USB tugi
    • Riistvaraline täiskiirus ja jaoturi kontroller
    • Võimalik ka tarkvaraliselt emuleerida
  • Etherneti tugi
  • LCD- kontroller
  • Madala pingega töötavad kiibid (kuni 1,8 V ja mõned isegi kuni 0,7 V, kuid koos sisseehitatud pingetõstjaga)
  • Madala voolutarbega picoPower kiibid
  • Direct memory access (DMA) kontroller ja sündmustepõhine suhtlus perifeerseadmetega
  • Krüptograafia tugi Advanced Encryption Standard (AES) and Data Encryption Standard (DES) jaoks

32-bitine AVR32[muuda | muuda lähteteksti]

2006. aastal andis Atmel välja esimesed 32-bitised AVR32 arhitektuuril põhinevad mikrokontrollerid. AVR32 käsustik sisaldab uusi käsklusi SIMD ja digitaalse signaalitöötluse jaoks, lisaks uutele audio-video töötlemisvahenditele. Üldiselt on AVR32 käsustik sarnane 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[muuda | muuda lähteteksti]

Atmeli pakutud arendusvahendite hulka kuuluvad erinevad programmaatorid, silurid ja ka baaskomplektid.

STK600 baaskomplekt[muuda | muuda lähteteksti]

STK600 baaskomplekt nind 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[muuda | muuda lähteteksti]

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[muuda | muuda lähteteksti]

AVR Butterfly

Ülipopulaarne AVR Butterfly näidisplaat on Atmel AVR ATmega169V mikrokontrolleril põhinev patareitoitega arvuti. Selle eesmärk on demonstreerida AVR perekonda üleüldiselt, kuid eraldi veel sisseehitatud LCD-kontrollerit. Plaadil on veel lisaks juhtkang, pieso kõlar, kell, välkmälu, temperatuuri ja pinge sensorid. Enne 2006. aastat toodetud Buttreflydel oli ka veel fototakisti, mis sealt hiljem eemaldati RoHS nõuetega vastavuses olemiseks.[6]. 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[muuda | muuda lähteteksti]

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 tooteperekond vooluhalduse jaoks[7]. 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[muuda | muuda lähteteksti]

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 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[muuda | muuda lähteteksti]

FPGA kiire leviku tõttu harrastajate hulgas on hakatud arendama avatud lähtekoodiga, AVR-iga ühilduva ja AVR käsustikuga sobivaid protsessorituumasid. OpenCores nimetab suurimateks AVR kloonimisprojektideks:

  • pAVR, kirjutatud VHDLis, eesmärgiks on seatud kiireima võimaliku AVR protsessori loomine, kasutades selleks tehnikaid, mida päris AVR-id ei kasuta.
  • avr_core on samuti VHDLis kirjutatud AVR kloon, mille eesmärgiks on olla võimalikult sarnane ATmega103-ga.
  • Navré kirjutatud Verilogis, võimaldab kasutada tervet AVR käsustikku. Eesmärgiks on suur kiirus ja väike ressursikasutus, kuid see ei toeta katkestusi.

Vaata ka[muuda | muuda lähteteksti]

Viited[muuda | muuda lähteteksti]