Atmel AVR

Allikas: Vikipeedia
Atmel AVR ATmega8 DIP pakendis

AVR on modified Harvard architecture 8-bitine RISC mikrokontroller, mis arendati välja Atmeli poolt 1996. AVR oli üks esimesi mikrokontrollerite perekondi, mis kasutasid välkmälu tavalise PROMi (ingl. k. Programmable Read-Only Memory), EPROMi (ingl. k. Electrically Programmable Read-Only Memory) ja EEPROMi (ingl. k. Electrically Ereasable Programmable Read-Only Memory) asemel, mida kasutasid teised tollased mikrokontrollerid.

Lühiajalugu[muuda | redigeeri 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õhiline jaotus[muuda | redigeeri 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 | redigeeri 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 | redigeeri 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 | redigeeri lähteteksti]

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

Sisemised registrid[muuda | redigeeri 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 aadresseeritud ja seega pole neid võimalik kasutada kui SRAMi. Selle asemel on sisend-väljund registrid paigutatud kohe mäluaadresside algusesse. 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 aadresseerida EEPROMi. SRAM algab pärast eelnevaid piirkondi kohal 200016.

EEPROM[muuda | redigeeri 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 aadresseeritav 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 aadresseerimist nii andmemälu kui programmimälu jaoks. Nagu mainitud, toetavad XMEGA kontrollerid vajadusel EEPROMI otsest aadresseerimist.

Kuna kirjutamisoperatsioonide arv EEPROM-il on piiratud (Atmeli andmelehtede järgi umbes 100 000 kirjutamiskorda), peab hästi disainitud EEPROM-i kirjutamisprotseduur võrdlema hetkel EEPROM-is olevaid andmeid sinna kirjutatavaga ja ainult erinevuste korral sinna päriselt andmeid kirjutama, vähendades seeläbi kirjutamiste arvu.

Taimerid[muuda | redigeeri 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-digitaal muundi käivitamine
  • Koodi õigeaegne käivitamine läbi katkestuste


Programmi täitmine[muuda | redigeeri 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 | redigeeri 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 | redigeeri 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 ostsillator, 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 (ingl. k. branching) võtavad 3 takti.

Arendus[muuda | redigeeri 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.

Funktsionaalsus[muuda | redigeeri lähteteksti]

Praegused AVR-id pakuvad järgnevat funktsionaalsust:

  • 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
  • Ethernet 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 | redigeeri 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 teistele RISC põhinevatele tuumadele, 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 | redigeeri lähteteksti]

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

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

Viited[muuda | redigeeri lähteteksti]