AVR. Vadba. Arhitektura. AVR programiranje. Programiranje mikrokontrolerjev AVR za začetnike Parametri mikrokrmilnikov družine avr

Mikrokontrolerji z enim čipom se pogosto uporabljajo na najrazličnejših področjih: od merilnih instrumentov, fotoaparatov in video kamer, tiskalnikov, skenerjev in kopirnih strojev do elektronskih zabavnih izdelkov in vseh vrst gospodinjskih aparatov.

Od uvedbe prvih mikroprocesorjev v sedemdesetih letih prejšnjega stoletja se je njihova kompleksnost nenehno povečevala z uvedbo novih rešitev strojne opreme in dodajanjem novih ukazov, namenjenih reševanju novih problemov. Tako se je postopoma razvila arhitektura, ki je kasneje dobila ime CISC (Complete Instruction Set Computers – računalniki s kompleksnim naborom navodil). Kasneje se je pojavila in aktivno razvijala druga smer: arhitektura RISC (Reduced Instruction Set Computers - računalniki z zmanjšanim naborom navodil). Prav ta arhitektura vključuje mikrokontrolerje AVR podjetja Atmel in PIC podjetja Microchip, ki jima je posvečena ta knjiga.

Glavna prednost procesorjev RISC je, da so enostavni, izvajajo omejen nabor ukazov in posledično zelo hitri. To zmanjša stroške in kompleksnost njihovega programiranja.

Slaba stran arhitekture RISC je bila potreba po izdelavi dodatnih navodil v zbirnem jeziku, ki so implementirana v strojno opremo za naprave CISC. Na primer, namesto da preprosto pokliče navodilo za deljenje, kar je značilno za naprave CISC, mora načrtovalec, ki se ukvarja s procesorjem RISC, uporabiti več zaporednih navodil za odštevanje. Vendar pa je ta pomanjkljivost več kot kompenzirana s ceno in hitrostjo naprav RISC. Poleg tega, če ustvarite programe v C, potem takšne težave za razvijalca sploh nimajo več pomena, saj jih rešuje prevajalnik, ki samodejno ustvari vso manjkajočo zbirno kodo.

Ob zori mikroprocesorjev, razvoj programsko opremo potekalo izključno v enem ali drugem zbirnem jeziku, osredotočenem na določeno napravo. V bistvu so bili takšni jeziki simbolične mnemonike ustreznih strojnih kod, prevod mnemonike v strojno kodo pa je izvedel prevajalec. Vendar pa je glavna pomanjkljivost zbirnih jezikov ta, da je vsak od njih vezan na določeno vrsto naprave in logiko njenega delovanja. Poleg tega se je asembler težko naučiti, kar zahteva kar nekaj truda za učenje, ki se poleg tega izkaže za zaman, če boste kasneje morali preiti na uporabo mikrokontrolerjev drugih proizvajalcev.

Jezik C, ki je jezik na visoki ravni, je brez teh pomanjkljivosti in se lahko uporablja za programiranje katerega koli mikroprocesorja, za katerega obstaja prevajalnik C. V jeziku C so vse operacije na nizki ravni, ki jih izvajajo računalniki, predstavljene v obliki abstraktnih konstruktov, kar razvijalcem omogoča, da se osredotočijo na programiranje samo ene logike, ne da bi skrbeli za strojno kodo. Ko se enkrat naučite C, lahko zlahka prehajate iz ene družine mikrokontrolerjev v drugo, pri čemer porabite veliko manj časa za razvoj.


Arhitektura mikrokontrolerjev AVR in PIC

Na splošno so vsi mikrokontrolerji zgrajeni po isti shemi. Krmilni sistem, sestavljen iz programskega števca in dekodirnega vezja, izvaja navodila za branje in dekodiranje iz programskega pomnilnika, operacijska enota pa je odgovorna za izvajanje aritmetike in logične operacije; I/O vmesnik omogoča izmenjavo podatkov s perifernimi napravami; in končno, imeti morate pomnilniško napravo za shranjevanje programov in podatkov (slika 1.1).

riž. 1.1. Posplošena struktura mikrokrmilnika

Mikrokrmilnike bomo obravnavali na splošno, ne da bi bili vezani na katero koli specifično vrsto mikrokrmilnikov AVR, zato bomo spodaj obravnavali samo značilnosti pomnilniške arhitekture, ki so skupne večini mikrokrmilnikov, vprašanja vhoda/izhoda, obravnavanje prekinitev, ponastavitev itd.

Pomnilnik mikrokrmilnika AVR

V mikrokontrolerjih AVR je pomnilnik implementiran po Harvardski arhitekturi, ki pomeni ločitev ukaznega in podatkovnega pomnilnika. To pomeni, da se do ukazov dostopa neodvisno od dostopa do podatkov. Prednost te organizacije je povečanje hitrosti dostopa do pomnilnika.

Pomnilnik podatkov

Podatkovni pomnilnik je zasnovan za pisanje/branje podatkov, ki jih uporabljajo programi. Je hlapljiv, kar pomeni, da če izklopite napajanje mikrokrmilnika, bodo vsi podatki, shranjeni v njem, izgubljeni. Pri mikrokrmilnikih AVR ima podatkovni pomnilnik bolj razvito strukturo v primerjavi z mikrokrmilniki PIC, kot je prikazano na sl. 2.1.


riž. 2.1. Struktura podatkovnega pomnilnika v mikrokontrolerjih AVR in PIC

Območje SRAM (statični pomnilnik z naključnim dostopom) je prikazano na sl. 2.1 je označen s pikami, ker ga ne uporabljajo vsi mikrokontrolerji AVR (to velja tako za notranji kot zunanji SRAM). Njegov začetni naslov je 0x060, njegov zgornji naslov pa se razlikuje od naprave do naprave.

V nekaterih mikrokontrolerjih AVR lahko povečate pomnilniški prostor SRAM s priključitvijo zunanjih pomnilniških blokov do 64 KB, vendar to zahteva žrtvovanje vrat A in C, ki se v tem primeru uporabljajo za prenos podatkov in naslovov.

Splošni registri

Območje registracije glavni namen(delovni registri) je namenjen začasnemu shranjevanju spremenljivk in kazalcev, ki jih procesor uporablja za izvajanje programov. Pri mikrokrmilnikih AVR je sestavljen iz 32 osembitnih registrov (razpon naslovov 0x000 - 0x01F). V mikrokontrolerjih PIC so tudi registri splošnega namena osembitni, vendar sta njihovo število in obseg naslovov odvisna od specifične vrste naprave.

V programih, napisanih v C, neposredni dostop do registrov splošnega namena običajno ni potreben, razen če se uporablja koda zbirnega jezika.

Posebni funkcijski registri mikrokrmilnika PIC

Posebni funkcijski registri se uporabljajo v mikrokontrolerjih PIC za nadzor različnih operacij. Kot pri registrih splošnega namena se njihovo število in naslavljanje razlikujeta od naprave do naprave. V programih, napisanih v C, neposredni dostop do posebnih funkcijskih registrov običajno ni potreben, razen če se uporabljajo fragmenti zbirnega jezika.

V/I področje mikrokontrolerjev AVR

V/I območje mikrokontrolerjev AVR vsebuje 64 registrov, ki se uporabljajo za nadzor ali shranjevanje podatkov iz perifernih naprav. Do vsakega od teh registrov je mogoče dostopati z V/I naslovom (ki se začne pri 0x000) ali z naslovom SRAM (v tem primeru je treba V/I naslovu dodati 0x020). Programi C običajno uporabljajo običajna imena V/I registrov, naslovi pa so pomembni samo za programe v zbirnem jeziku.

Imena, V/I in naslovi SRAM ter Kratek opis registri iz vhodno/izhodnega področja mikrokontrolerjev AVR so predstavljeni v tabeli. 2.1. Opozoriti je treba, da v razni modeli mikrokontrolerjev, nekateri od navedenih registrov niso uporabljeni, naslovi pa niso navedeni v tabeli. 2.1 rezervira Atmel za prihodnjo uporabo.

Tabela 2.1. Opis registrov iz I/O področja

Registrirajte ime V/I naslov Naslov SRAM Opis
ACSR 0x08 0x28 Nadzor analognega primerjalnika in statusni register
UBRR 0x09 0x29 Register hitrosti prenosa UART
UCR 0x0A 0x2A Nadzorni register oddajnika UART
USR 0x0V 0x2V Register statusa oddajnika UART
UDR 0х0С 0x2С Podatkovni register oddajnika UART
SPCR 0x0D 0x2D Nadzorni register vmesnika SPI
SPSR 0x0E 0x2E Register stanja vmesnika SPI
SPDR 0x0F 0x2F V/I register podatkov SPI
PIND 0x10 0x30 Zatiči vrat D
DDRD 0x11 0x31 Vrata D Data Direction Register
PORTD 0x12 0x32 Podatkovni register vrat D
PINC 0x13 0x33 Zatiči vrat C
DDRC 0x14 0x34 Port C Data Direction Register
PORTC 0x15 0x35 Podatkovni register vrat C
PINB 0x16 0x36 Zatiči vrat B
DDRB 0x17 0x37 Port B Data Direction Register
PORTB 0x18 0x38 Podatkovni register vrat B
PINA 0x19 0x39 Port A zatiči
DDRA 0x1A 0x3A Port A Data Direction Register
PORTA 0x1V 0x3V Podatkovni register vrat A
EECR 0x1С 0x3С Nadzorni register pomnilnika EEPROM
EEDR 0x1D 0x3D register podatkov EEPROM
EEARL 0x1E 0x3E Naslovni register pomnilnika EEPROM (nizki bajt)
EEARH 0x1F 0x3F Naslovni register pomnilnika EEPROM (visoki bajt)
WDTCR 0x21 0x41 Watchdog Timer Control Register
ICR1L 0x24 0x44
ICR1H 0x25 0x45 Register za zajemanje časovnika/števca T/C1 (nizki bajt)
OCR1BL 0x28 0x48 Primerjalni register B časovnika T/C1 (nizki bajt)
OCR1BH 0x29 0x49 Primerjalni register B časovnika T/C1 (visoki bajt)
OCR1AL 0x2A 0x4A Primerjalni register A časovnika T/C1 (nizki bajt)
OCR1AH 0x2V 0x4V Primerjalni register A časovnika T/C1 (visoki bajt)
TCNT1L 0x2С 0х4С Štetje registra časovnika/števca T/C1 (nizki bajt)
TCNT1H 0x2D 0x4D Štetje registra časovnika/števca T/C1 (visoki bajt)
TCCR1B 0x2E 0x4E Nadzorni register B časovnika/števca T/C1
TCCR1A 0x2F 0x4F Nadzorni register A časovnika/števca T/C1
TCNT0 0x32 0x52 Števni register časovnika/števca T/C0
TCCR0 0x33 0x53 Nadzorni register časovnika/števca T/C0
MCUCR 0x35 0x55 Krmilni register mikrokrmilnika
TIFR 0x38 0x58 Register zastavice prekinitve časovnika/števca
TIMSK 0x39 0x59 Register maskiranja prekinitve časovnika
GIFR 0x3A 0x5A Splošni register prekinitvenih zastavic
GIMSK 0x3V 0x5V Splošni register maskiranja prekinitev
SPL 0x3D 0x5D Kazalec sklada (nizki bajt)
SPH 0x3E 0x5E Kazalec sklada (visoki bajt)
SREG 0x3F 0x5F Register stanja

SREG statusni register mikrokontrolerjev AVR

Statusni register vsebuje zastavice stanja mikrokontrolerjev AVR in se nahaja v območju V/I na naslovu $3F (naslov SRAM je $5F). Ko je dan signal ponastavitve, se inicializira na ničle.

Mikrokrmilniki (v nadaljnjem besedilu MK) so trdno vstopili v naše življenje, na internetu lahko najdete veliko zanimivih vezij, ki se izvajajo na MK. Česa ne morete sestaviti na MK: razni indikatorji, voltmetri, gospodinjski aparati (zaščitne naprave, stikalne naprave, termometri ...), detektorji kovin, razne igrače, roboti itd. Seznam lahko traja zelo dolgo. Prvo vezje na mikrokontrolerju sem videl pred 5-6 leti v radijski reviji in skoraj takoj obrnil stran, pri sebi pa sem si rekel "še vedno ga ne bom mogel sestaviti." Dejansko so bili takrat MK-ji zame zelo zapletena in napačno razumljena naprava; nisem imel pojma, kako delujejo, kako jih utripati in kaj storiti z njimi v primeru nepravilne vdelane programske opreme. Toda pred približno enim letom sem prvič sestavil svoje prvo vezje na MK, bilo je vezje digitalni voltmeter na 7 segmentnih indikatorjih in mikrokontrolerju ATmega8. Tako se je zgodilo, da sem slučajno kupil mikrokrmilnik, ko sem stal na oddelku z radijskimi komponentami, je tip pred mano kupoval MK in tudi jaz sem se odločil, da ga kupim in poskusim nekaj sestaviti. V svojih člankih vam bom povedal o AVR mikrokontrolerji, naučil vas bom delati z njimi, pogledali bomo programe za vdelano programsko opremo, naredili bomo preprost in zanesljiv programator, pogledali bomo postopek vdelane programske opreme in, kar je najpomembnejše, težave, ki se lahko pojavijo ne samo za začetnike.

Osnovni parametri nekaterih mikrokontrolerjev družine AVR:

Mikrokrmilnik

Flash pomnilnik

RAM pomnilnik

EEPROM pomnilnik

V/I vrata

U moč

Dodatni parametri AVR mega MK:

Delovna temperatura: -55…+125*С
Temperatura skladiščenja: -65…+150*С
Napetost na zatiču RESET glede na GND: max 13V
Največja napajalna napetost: 6,0 V
Največji V/I linijski tok: 40 mA
Največji napajalni tok VCC in GND: 200 mA

Pinouts modela ATmega 8X

Pinouts za modele ATmega48x, 88x, 168x

Postavitev pinov za modele ATmega8515x

Postavitev pinov za modele ATmega8535x

Postavitev pinov za modele ATmega16, 32x

Postavitev nožic za modele ATtiny2313

Na koncu članka je priložen arhiv podatkovnih listov za nekatere mikrokontrolerje.

MK AVR namestitev FUSE bitov

Ne pozabite, da je programirana varovalka 0, neprogramirana pa 1. Pri nastavljanju varovalk bodite previdni, nepravilno programirana varovalka lahko blokira mikrokontroler. Če niste prepričani, katero varovalko morate programirati, je bolje, da MK prvič utripate brez varovalk.

Najbolj priljubljeni mikrokrmilniki med radioamaterji so ATmega8, sledijo ATmega48, 16, 32, ATtiny2313 in drugi. Mikrokontrolerji se prodajajo v paketih TQFP in DIP, za začetnike priporočam nakup v DIP. Če kupite TQFP, jih bo bolj problematično flashati, ploščo boste morali kupiti ali spajkati, ker njihove noge se nahajajo zelo blizu druga drugi. Svetujem vam, da mikrokontrolerje namestite v pakete DIP na posebne vtičnice, je priročno in praktično, ni vam treba odpajkati MK, če ga želite znova zagnati ali uporabiti za drugo zasnovo.

Skoraj vsi sodobni MK imajo možnost programiranja ISP v vezju, tj. Če je vaš mikrokrmilnik prispajkan na ploščo, nam ga za spremembo vdelane programske opreme ne bo treba odspajkati s plošče.

Za programiranje se uporablja 6 pinov:
PONASTAVITI- Prijava MK
VCC- Plus napajanje, 3-5V, odvisno od MK
GND- Skupna žica, minus moč.
MOSI- MK vhod (informacijski signal v MK)
MISO- MK izhod (informacijski signal iz MK)
SCK- MK vhod (signal ure v MK)

Včasih uporabljajo tudi zatiče XTAL 1 in XTAL2; na te zatiče je pritrjen kvarc, če MK napaja zunanji oscilator; v ATmega 64 in 128 se zatiči MOSI in MISO ne uporabljajo za programiranje ISP; namesto tega so zatiči MOSI priključen na pin PE0, MISO pa na pin PE1. Pri priklopu mikrokontrolerja na programator naj bodo priključne žice čim krajše, prav tako naj ne bo predolg kabel, ki teče od programatorja do LPT priključka.

Oznaka mikrokontrolerja lahko vsebuje čudne črke s številkami, na primer Atmega 8L 16PU, 8 16AU, 8A PU itd. Črka L pomeni, da MK deluje pri nižji napetosti kot MK brez črke L, običajno 2,7V. Številke za vezajem ali presledkom 16PU ali 8AU označujejo notranjo frekvenco generatorja, ki je v MK. Če so varovalke nastavljene tako, da delujejo iz zunanjega kvarca, mora biti kvarc nastavljen na frekvenco, ki ne presega največje vrednosti v skladu s podatkovnim listom, to je 20 MHz za ATmega48/88/168 in 16 MHz za druge atmega.

AVR mikrokontrolerji. Osnove programiranja

Zgradba in glavne značilnosti mikrokontrolerjev AVR

V tem članku bomo poskušali na splošno opisati, glavne značilnosti, kaj je »notri«, kaj je potrebno za začetek dela z AVR mikrokontrolerji itd.

Kaj je Tiny, Mega?

Podjetje Atmel proizvaja obsežno linijo osembitnih mikrokrmilnikov, ki temeljijo na jedru AVR, razdeljenih v več poddružin, ki se razlikujejo po Tehnične specifikacije, področja uporabe, cena:

  • ATtiny– družina AVR mikrokontrolerji optimiziran za aplikacije, ki zahtevajo razmeroma visoko zmogljivost (do 1,0 MIPS in zmožnost delovanja pri frekvencah do 20,0 MHz), energijsko učinkovitost (ATtiny je edina družina, ki lahko deluje pri napajalni napetosti 0,7 V!) in kompaktnost (obstajajo mikrokrmilniki v paketu SOT23-6 - samo 6 pinov, vsak pin pa ima več funkcij, na primer: I/O vrata, ADC vhod, PWM izhod itd.). Tu se pojavi njihov obseg uporabe: naprave, ki so kritične glede cene, porabe energije, velikosti itd.
  • ATmega– Družina mikrokrmilnikov AVR, zasnovana za uporabo na najrazličnejših področjih, zahvaljujoč zelo velik komplet periferne naprave, velika količina programskega pomnilnika, vhodno/izhodna vrata, itd. Skratka, prostora za širitev je.
  • ATxmega– nova družina mikrokontrolerjev AVR z več velik komplet periferne naprave kot ATmega (dodana naprava za neposredni dostop do pomnilnika, DAC, CRC modul, poln USB vmesnik, hitrejši ADC itd.), z delovnimi frekvencami do 32,0 MHz.

Omeniti velja glavna značilnost vse zgoraj navedene naprave: vse imajo eno samo arhitekturo, kar olajša prenos kode iz enega mikrokontrolerja v drugega.
Mikrokontrolerji so na voljo v ohišjih DIP in SMD (vsak ima svoje prednosti in slabosti).

Najbolj priljubljeni zaboji za pakiranje so:

  • DIP (Dual Inline Package) - ohišje z dvema vrstama kontaktov
  • QFP (Quad Flat Package) - ploščati paket s štirimi vrstami kontaktov
  • SOIC (Small-Outline Integrated Circuit) – majhna (majhna) integrirana vezja

Kar zadeva radioamatersko prakso, so seveda najbolj zanimivi mikrokrmilniki DIP paket, saj je z njimi najlažje delati - imajo precej velik korak med nožicami, poleg tega pa lahko zanje uporabite vtičnice (to je poseben konektor, kamor lahko namestite mikrovezja brez spajkanja).
Na splošno je vtičnica izjemno priročen izum - nožice so vedno nedotaknjene in mikrovezje lahko večkrat odstranite in vstavite, poleg tega je veliko lažje narediti prototipe prihodnjih naprav.

Napajanje in taktiranje mikrokontrolerjev AVR

AVR mikrokontrolerji izdelan po tehnologiji CMOS, ki zagotavlja zelo nizko porabo energije. V praksi je poraba energije linearna in premo sorazmerna z delovno frekvenco (višja kot je frekvenca, večja je poraba energije).



Napajalna napetost za mikrokontrolerje AVR se giblje od 2,7 do 5,5 V(6.0V je maksimum, čeprav je moj AVR nekako delal pri 7V - in nič, še danes je živ). To pomeni, da lahko AVR neposredno nadzoruje, izmenjuje podatke itd. z razne naprave(odporen na 3,3 V in 5 V) brez potrebe po uporabi pretvornikov logičnih nivojev. Za natančnejšo obdelavo analognih signalov ima AVR ločene pine za napajanje analognega dela mikrokontrolerja, ki vključuje naprave, kot so ADC, DAC in analogni primerjalnik. Poleg tega imajo mikrokrmilniki AVR več "načinov mirovanja", da zagotovijo najboljše možno varčevanje z energijo.

Prav tako lahko napaja vsak pin mikrokontrolerja (odvisno od frekvence delovanja in napajalne napetosti). zunanje naprave trenutno do 40,0 mA(maksimalno!), iz mikrokontrolerja pa se da vse “naložiti/naložiti”. do 200,0 mA(največ!).

Frekvenčni razpon taktnih signalov se razlikuje glede na »družinski staž« (ATtiny je najmlajša družina mikrokrmilnikov AVR, ATxMega pa najstarejša). Pri nekaterih predstavnikih, predvsem pri družini ATtiny, lahko delovna frekvenca doseže 20,0 MHz, pri ATmega pa ne presega 16,0 MHz, medtem ko ATxMega ne presega 32,0 MHz Prav tako ima vsak mikrokrmilnik AVR notranji RC oscilator do 8,0 MHz, kar vam omogoča, da brez zunanji virčasovni signal.

Atmel proizvaja mikrokontrolerje z najvišjimi delovnimi frekvencami, ki so za polovico nižje od standardnih (za povečanje prihrankov energije), zato bodite pri nakupu pozorni na kodiranje mikrokontrolerjev. Podrobne informacije o tem, kateri mikrokrmilnik deluje pri kakšnih frekvencah in napajalnih napetostih, kakšne vrste kodiranja in pakiranja so na voljo za ta mikrokrmilnik itd. najdete v razdelku »Podatki za naročanje« vsakega podatkovnega lista.

Spodaj je primer tabele iz podatkovnega lista za mikrokrmilnik ATtiny13. V stolpcu "Koda za naročanje" si lahko ogledate razlike med kodiranji in ni težko uganiti, s čim so povezane.



Kaj je v mikrokrmilniku AVR?

Kot že rečeno v predgovoru, AVR mikrokontrolerji imajo harvardsko arhitekturo ( glavna značilnost Ta arhitektura je, da so programski pomnilnik in RAM ter njuna vodila za dostop ločeni, da se poveča hitrost izvajanja ukazov: medtem ko se eno navodilo izvaja, se naslednje pridobi iz programskega pomnilnika) s procesorjem RISC, s hitrostjo 1,0 MIPS. Vsi mikrokontrolerji, ne glede na model in postavitev, imajo enako centralno procesno enoto (procesor/jedro). Eno jedro naredi program, napisan v katerem koli jeziku, bolj univerzalen in ga je po želji mogoče zamenjati v katerem koli projektu, recimo dražji krmilnik z drugim cenejšim, z minimalnimi spremembami kode.

RISC(Reduced Instruction Set Computer) – procesor z naborom enostavnih ukazov za sestavljanje (seštevanje, odštevanje, premik levo/desno, »logični IN« itd.), vsi ukazi imajo fiksno dolžino, procesor vsebuje veliko število splošnih namenski registri itd. Da bi na primer izračunal nekakšno povprečno matematično enačbo, bo moral procesor izvesti več enostavnih navodil za sestavljanje, za razliko od procesorja CISC, ki ima navodila "za vse priložnosti." Toda AVR ni povsem RISC -procesor, saj vsa navodila za sestavljanje nimajo fiksnega formata. Večina ima 16-bitni format, ostali so 32-bitni. To pomeni, da vsak ukaz zavzame 16 ali 32 bitov v programskem pomnilniku. Mimogrede, nefiksni dolžina navodil za sestavljanje je tisto, zaradi česar je procesor: Napredni virtualni procesor RISC (AVR).

MIPS(Milijon ukazov na sekundo) - mikrokontrolerji AVR so sposobni izvesti (približno) milijon ukazov pri 1,0 MHz ali preprosto povedano, večina navodil za sestavljanje se izvede v enem taktu.



Možgani mikrokrmilnika AVR so njegova centralna procesna enota (CPE/jedro).

Nekatere komponente procesorja:

Aritmetična logična enota

Programski števec

Kazalec sklada

  • Register stanja
  • Flash programski pomnilnik
  • Pomnilnik podatkov

Splošni registri

Periferni registri (I/O registri)

RAM pomnilnik

Urni sistem. Ta sistem lahko primerjamo s srčno-žilnim sistemom

Prekinitvena enota

Periferne naprave, naštel bom nekaj izmed njih:

V/I vrata

EEPROM pomnilnik

Vmesniki USB (samo xMega), USART, I2C, SPI, JTAG

Watchdog, Timer/Counter (z oscilatorjem PWM, zajemom/primerjavo itd.)

ADC, DAC (samo xMega), analogni primerjalnik

Zunanji prekinitveni moduli

Nabor perifernih naprav v različnih družinah (Tiny, Mega in xMega) in različnih mikrokontrolerjev teh družin je različen. Obstajajo mikrokrmilniki, opremljeni z različnimi perifernimi napravami, a tudi za stroškovno kritičen razvoj obstajajo mikrokrmilniki z majhnim (potrebnim) naborom perifernih naprav.

Ena od prednosti mikrokontrolerjev AVR je možnost uporabe perifernih naprav v različnih skupnih načinih delovanja, kar zelo pogosto poenostavi nalogo razvijalca. AVR ima vgrajen tudi sistem za ponastavitev in spremljanje nivoja napajalne napetosti (System Control and Reset), ki zagotavlja normalen zagon mikrokontrolerja in po potrebi zanesljiv izklop.

Periferni krmilni/statusni registri se nahajajo v območju pomnilnika podatkov, med registri splošnega namena in Oven, ki zagotavlja visoko zmogljivost pri delu s perifernimi napravami. Razvijalec ima seveda popoln dostop do teh registrov (I/O registri).

Kaj je potrebno za delovanje mikrokontrolerja?

  • napiši program (program). Za pisanje programa/algoritma, za katerega bo deloval mikrokrmilnik, boste potrebovali integrirano razvojno okolje za mikrokrmilnike AVR, ki vključuje urejevalnik kode/besedila, prevajalnik, povezovalnik in druge pripomočke.
  • oblikovanje vezja. Program sam po sebi ni dovolj za delovanje mikrokontrolerja, zahteva tudi minimalen body kit (komplet zunanjih elektronske naprave), da zagotovi mikrokrmilniku napajalno napetost in taktni signal, tako da bo delovalo vsaj jedro mikrokrmilnika.
Naslednja slika prikazuje “klasični” komplet mikrokrmilnika, potreben za normalno delovanje.


Slika prikazuje minimalne zahteve za vezje za mikrokrmilnik ATmega16. S to preklopno shemo začne jedro mikrokontrolerja AVR delovati, lahko uporabite vsa vhodno/izhodna vrata itd. periferne naprave. Skratka, mikrokontroler je v polni bojni pripravljenosti. Če želite na primer začeti uporabljati ADC ali analogni primerjalnik, morate najprej programsko konfigurirati periferno napravo z uporabo njenih kontrolnih/nadzornih registrov, da nastavite način delovanja, ki ga potrebujete, itd., nato pa uporabite proučevane signale na vhodih ustrezno periferno napravo.

- Kvarc in kondenzatorji C1, C2 (vsak po 22 pF) zagotavljata mikrokontrolerju in vsem njegovim perifernim napravam visokokakovosten taktni signal (največja frekvenca - 16,0 MHz).

Upor R1(10K), zagotavlja visoko raven na vhodu RESET, potrebno za stabilno delovanje mikrokrmilnika. Če med delovanjem mikrokontrolerja napetost na tem pinu pade pod določeno raven, se mikrokrmilnik ponastavi in ​​delovanje predvidenega algoritma je lahko moteno.

- priključek ISP uporablja se za programiranje v vezju, kar pomeni, da je treba program, ki ste ga zapisali, zapisati v pomnilnik mikrokontrolerja neposredno na ploščo (brez odstranitve mikrokrmilnika iz naprave).

- dušilka L1 in kondenzatorji C3, C4 zagotavljajo napajalno napetost za analogne periferne naprave, kot tudi nekatere registre V/I vrat. Če mikrokrmilnik nima analognega dela, potem ni analognih napajalnih pinov, posledično te komponente niso potrebne. Poenostavljeno ožičenje mikrokrmilnika je naslednje: prvič, ker je bil mikrokrmilnik prikrajšan za zunanje taktiranje, mora biti označeno, da bo taktiranje prihajalo iz notranjega RC oscilatorja z nastavitvijo ustreznih bitov varovalke (nekakšne omejitve delovnih parametrov mikrokrmilnika ).
Največja frekvenca notranjega oscilatorja je 8,0 MHz, kar pomeni, da mikrokrmilnik ne bo mogel delovati na največji frekvenci (zmogljivosti).
Drugič, analogni del mikrokontrolerja (kot tudi nekateri registri vhodno/izhodnih vrat) nimajo vira napajanja, kar onemogoča njihovo uporabo.
Tretjič, ni priključka za programiranje v vezju, zato ga boste morali, da bi vdelano programsko opremo zapisali v pomnilnik mikrokontrolerja, odstraniti iz naprave, jo nekam zapisati in nato vrniti na svoje mesto. Kot sami razumete, to ni zelo priročno (odstranite/vstavite, spajkajte/odspajkajte) in lahko povzroči poškodbe samega mikrokrmilnika (lahko se zlomijo noge, se pregrejejo zaradi spajkanja itd.) in bližnjih naprav - priključek, steze na krovu itd.

Mikrokrmilnik to je, lahko bi rekli, majhen računalnik. ki ima svojo procesor (registri, krmilna enota in aritmetično logična enota), spomin, pa tudi razne periferija, všeč V/I vrata, časovniki, krmilniki prekinitev, različni generatorji impulzov in celo analogni pretvorniki. Vsega se ne da našteti. Nemogoče je našteti vse uporabe mikrokontrolerjev.

Ampak, če vse močno poenostavimo, potem je glavna funkcija mikrokontrolerja "skakanje nog". Tisti. ima več pinov (od 6 do več deset, odvisno od modela) in na teh pinih lahko nastavi bodisi 1 (nivo visoke napetosti, na primer +5 voltov) ali 0 (nivo napetosti, približno 0,1 volta), odvisno od programske opreme. algoritem, vgrajen v njegov pomnilnik. Mikrokrmilnik lahko določi tudi stanje signala na njegovih krakih (za to morajo biti konfigurirani kot vhod) - ali je tam visoka ali nizka napetost (nič ali ena). Sodobni mikrokrmilniki imajo skoraj povsod na krovu tudi analogno-digitalni pretvornik - to je stvar, podobna voltmetru, omogoča ne samo sledenje 0 ali 1 na vhodu, temveč tudi popolno merjenje napetosti od 0 do referenčne (običajno je referenca enaka napajalni napetosti) in jo predstavite kot številko od 0 do 1024 (ali 255, odvisno od bitne velikosti ADC)

Iz njega lahko naredite pametna hiša, in možgani za domačega robota, inteligentni sistem za nadzor akvarija ali samo čudovit LED zaslon z tekočim besedilom. Med elektronskimi komponentami MK je to ena najbolj vsestranskih naprav. Na primer, ko razvijam naslednjo napravo, se raje ne obremenjujem z raznimi perverzijami zasnove vezja, ampak povežem vse vhode in izhode z mikrokontrolerjem in vso operacijsko logiko naredim programsko. Dramatično prihrani čas in denar, kar pomeni denar na kvadrat.

Mikrokontrolerjev je zelo, zelo veliko. Skoraj vsako samospoštljivo podjetje, ki proizvaja radijske komponente, proizvaja svoj krmilnik. Vendar je v tej raznolikosti red. MK so razdeljeni v družine, ne bom jih našteval vseh, ampak bom opisal le najosnovnejše osembitne družine.

MSC-51
Najbolj obsežen in razvit je MSC-51, najstarejši od vseh, ki prihaja iz intel 8051 in zdaj ga proizvaja veliko podjetij. Včasih imenovan na kratko C51. To je 8-bitna arhitektura, ki se od večine drugih 8-bitnih arhitektur razlikuje po tem, da CISC arhitektura. Tisti. En ukaz lahko včasih izvede precej zapleteno dejanje, vendar se ukazi izvajajo v velikem številu taktov (običajno 12 ali 24 taktov, odvisno od vrste ukaza), so različno dolgi in jih je veliko, za vse priložnosti. . Med krmilniki arhitekture MSC-51 srečati kot dinozavri AT89C51, z najmanj perifernimi napravami, majhnim pomnilnikom in nepomembno zmogljivostjo ter pošasti podobnimi izdelki Silicijevi laboratoriji ki ima na krovu zelo mesnat nabor perifernih naprav različnih velikosti, ogromne zaboje RAM-a in trajnega pomnilnika, zmogljive vmesnike od preprostih UART'prej USB in LAHKO, in tudi brutalno hitro jedro, ki omogoča do 100 milijonov operacij na sekundo. Kar se mene osebno tiče, obožujem arhitekturo C51 zaradi njenega prekleto lepega asemblerja, o katerem je prav veselo pisati. Za to arhitekturo je bilo napisanih že gigabajtov kode, ustvarjeni so bili vsi možni in nepredstavljivi algoritmi.

Atmel AVR
Moja druga najljubša družina je AVR od družbe Atmel. Nasploh Atmel proizvaja in MSC-51 krmilniki, vendar se še vedno osredotočajo na AVR. Ti krmilniki že imajo 8-bitni RISC arhitekturo in izvede en ukaz v enem taktu, vendar za razliko od klasične RISC jedra imajo zelo obsežen ukazni sistem, čeprav ni tako priročen kot pri C51, zato jih ne maram. Ampak AVR vedno opremljen kot za vojno in preprosto nabit z raznimi periferijami, predvsem krmilniki poddružine ATMega. Prav tako jih je zelo enostavno bliskati; to ne zahteva specializiranih programerjev ali druge zapletene opreme. Vse kar potrebujete je pet žic in računalnik z LPT pristanišče. Enostavnost učenja je omogočila, da je ta krmilnik trdno padel v srca mnogih, mnogih radioamaterjev po vsem svetu.

Microchip PIC.
Še en 8-bitni RISC Mikrokrmilnik odlikuje zelo sprevržen ukazni sistem, sestavljen iz le nekaj ducatov ukazov. Vsak ukaz se izvede v štirih taktih. obstajajo številne prednosti, predvsem nizka poraba energije in hiter začetek. Povprečje PIC krmilnik nima toliko periferije kot v AVR, ampak same modifikacije PIC Krmilnikov je toliko, da lahko vedno izberete kristal s perifernimi napravami, ki natančno ustrezajo nalogi, nič več, nič manj. Vklopljeno PIC'ax tradicionalno vgrajeni vgrajeni računalniki za avtomobile, pa tudi številni gospodinjski alarmi.

Katero družino izbrati? Oh, to je težko vprašanje. Na številnih forumih in konferencah še vedno potekajo hudi boji na temo, katera družina je boljša, navijači AVR prepir s sledilci MSC-51, na poti, ne pozabite brcati ledvice PIC'ovce, na kar odgovarjajo enako.

Tukaj je situacija kot v Starcraftu :) Kdo je bolj kul? Ljudje? Zerg? Protoss? Vse je odvisno od aplikacije, obsega nalog in množice drugih parametrov. Vsaka družina ima svoje prednosti in slabosti. Osebno pa bi izbral AVR iz teh razlogov:

  • 1. Razpoložljivost v Rusiji. Ti krmilniki so zasluženo priljubljeni in jih imajo ljudje radi, kar pomeni, da so jih naši trgovci pripravljeni nositi. Vendar, tako kot PIC. Pri MSC-51 je situacija slabša. Ni problem dobiti zastarele AT89C51, ampak kdo jih potrebuje? Toda sodobni silabi so že ekskluzivni.
  • 2. Nizka cena. Nasploh PIC v svetu slovi po nizki ceni, a ironija je, da se brezplačniki začnejo šele, ko ga kupiš na veliko. Dejansko bo na realnem števcu AVR 30-40 odstotkov cenejši od PIC z nekoliko večjo funkcionalnostjo. Pri MSC-51 je situacija glede prve točke jasna. Ekskluzivnost ni le redka, ampak tudi draga.
  • 3. Veliko perifernih naprav hkrati. Za serijsko napravo je to precej slabost. Veliko bolje je imeti le tisto, kar je potrebno za tekoče opravilo, ostalo pa naj vas ne ovira in trati energije. Po tem s svojim širjenjem slovi PIC modelna paleta, kjer lahko najdete krmilnik, ki bo imel tisto, kar potrebujete in ne tisto, česar ne potrebujete. Ampak mi bomo študirali in naredili to zase! Zato je bolje, da imamo vse naenkrat in na rezervi. In tukaj je AVR na glavo nad PIC-om, ki vedno znova uvaja vedno bolj napolnjene krmilnike. Kupil sem si AtMega16A in to je to, lahko študiraš celo družino.
  • 4. Eno jedro. Dejstvo je, da imajo vsi sodobni AVR-ji enako jedro enoten sistem ukazi Na periferni ravni je le nekaj razlik (pa še te so majhne). Tisti. kodo iz nekega majhnega ATTiny13 je mogoče preprosto kopirati in prilepiti v ATMega64 in deluje skoraj brez sprememb. In obratno skoraj brez omejitev. Res je, starejši modeli AVR (vse sorte AT90S1200) imajo omejeno združljivost od zgoraj navzdol - imajo nekoliko manjši ukazni sistem. Ampak to je gor z bangom. Microchip ima cel kup družin. PIC12/16/18 z različnimi sistemi ukazov. 12. družina je običajno majhna stvar (kot je Tiny v AVR), 18 pa je že bolj resen krmilnik (analogno Mega AVR). In če lahko kodo iz 12 povlečete na 18, potem nazaj sl.
  • 5. Obsežen sistem ukazov za krmilnike AVR. AVR ima približno 130 ukazov, medtem ko jih ima Microchip PIC samo 35. Zdi se, da je PIC zmagovalec - manj ukazov, lažje se jih je naučiti. No, ja, točno tako zveni slogan mikročipov, nekaj takega kot "Samo 35 ekip!" Samo to je pravzaprav bedarija. Konec koncev, kaj je ukaz procesorja? To je orodje! Samo predstavljajte si dva kalkulatorja - navadnega, računovodskega in inženirskega. Računovodstva se je veliko lažje naučiti kot inženiringa. Toda poskusite izračunati sinus na njem? Ali logaritem? Ne, lahko, ne trdim, ampak koliko pritiskov na gumbe in vmesnih izračunov bo trajalo? Ista stvar! Veliko bolj priročno je delati, če imate pri roki kup različnih dejanj. Zato je večji komandni sistem boljši.
  • 6. Razpoložljivost brezplačnih prevajalnikov C za več platform. Seveda lahko vedno najdeš razpoko. Kje kje, a pri nas to nikoli ni bil problem. Toda zakaj bi nekaj kradli, če imate nekaj zastonj? ;)
  • 7. No, zadnji argument je običajno najmočnejši. Prisotnost nekoga, ki bi učil in svetoval. Pomagal z nasveti in me usmeril na pravo pot. Zase sem izbral AVR in na tej strani (avtor vsaj zaenkrat) se bo ta družina dobro razumela, kar pomeni, da nimaš veliko izbire :))))))

Oh, ampak teh istih AVR-jev je cel kup. Katero naj vzamem???
Obresti Vprašaj. Na splošno je za nalogo bolje izbrati MK. Toda, da bi ga preučili, je bolje vzeti nekaj polnjenega.

Najprej si oglejmo oznake, da boste iz cenika takoj razumeli, kakšna žival je pred vami. Tukaj je primer za vas

ATmega16A - 16PI

  • AT- narejeno v Atmelu
  • Mega- vrsta družine. Tu sta še Tiny in Xmega (nova je huda zadeva, popoln helikopter). Na splošno je veljalo, da je Tiny nizkoproračunski z majhno količino mletega mesa in na splošno pomanjkljiv, Mega pa je bila, nasprotno, vse naenkrat. V resnici je razlika med družinama Tini in Mega glede mletega mesa zdaj minimalna, vendar ima Tini manj pomnilnika in ohišij ima število zatičev od 6 do 20.
  • 16 — količina bliskovnega pomnilnika v kilobajtih. Pravzaprav ni vse tako preprosto. Pomnilniško število je potenca dvojke. Torej Mega162 ni krmilnik s 162KB flasha, ampak nekakšna modifikacija Mega162 s 16KB pomnilnika. Ali pa Mega88 ni 88kb, ampak 8kb flasha, druga 8 pa je nekakšen namig, da je to nadaljnji razvoj Mega8. Enako Mega48 ali Mega168. Enako velja za Tinijevo družino. Na primer, Tini2313 - 2 kilobajta bliskavice. Kaj je 313? Kdo hudiča ve, kaj so mislili :) Ali pa Tiny12 - 1kb Flash. Na splošno je čip očiščen.
  • A— predpona porabe energije (običajno). Ta črka morda ne obstaja, vendar je v novi seriji prisotna skoraj povsod. Na primer, seriji V in L sta nizkonapetostni in lahko delujeta od 2,7 voltov. Res je, da morate za nizko napetost plačati manj frekvence. Ampak overclocking je mogoč tudi pri nas, nič človeškega nam ni tuje :) A in P imata novo serijo AVR s tehnologijo PicoPower t.j. ultra-ekonomičen. Pri njihovih neindeksnih modelih ni razlike v polnilu in notranji strukturi, razlika je le v delovanju vseh načinov mirovanja in porabi energije. Tisti. Mega16A je mogoče preprosto spremeniti v Mega16 brez A. In ničesar drugega ni treba spremeniti.
  • 16 — Omejitev urna frekvenca v megahercih. V resnici ga lahko overclockate na 20 ;)
  • p- vrsta lupine. Pomembna lastnost. Dejstvo je, da ni mogoče vsakega primera spajkati doma brez hemoroidov. Zaenkrat priporočam pozornost na ohišje P-DIP. To je zajetna pošast, vendar jo je enostavno spajkati, in kar je najpomembneje, zlahka se zatakne v posebno vtičnico in jo znova vzame iz nje. Ohišja SOIC (indeks S) ali TQFP (indeks A) je bolje zaenkrat dati na stran. Brez dobrih izkušenj s spajkanjem in zmožnosti visokokakovostnega jedkanja tiskano vezje Bolje je, da se ne mešate z njimi.
  • jaz— Vrsta kositranja svinca. I - svinčena spajka. U - brez svinca. Za vas ni prav nobene razlike. Vzemi tistega, ki je cenejši.

Priporočam naslednje modele:

  • ATMega16A-16PU - poceni (približno 100-150 rubljev), veliko zatičev, veliko perifernih naprav. Na voljo v različnih ohišjih. Preprosto je, moj tečaj usposabljanja in vsi nadaljnji primeri so prilagojeni temu.
  • ATTiny2313-20SU je idealna možnost za izdelavo vseh vrst ur/budilk in druge male avtomatizacije doma. Poceni (40 rubljev), kompakten. Slaba stran je, da ni ADC.
  • ATmega48/88/168 katerega koli od teh krmilnikov. Kompakten (v primeru tqfp je najtanjši in najmanjši od AVR), poceni (100-150 rubljev), polnjen do roba.
  • ATmega128 za izkušene. Velik, močan, veliko pomnilnika. drago (približno 400r)

Recimo, da ste dobili nalogo - narediti LED utripati.
Pogovorimo se o tem, kako rešiti to težavo:

Varianta 1 je najenostavnejša, vzemite preklopno stikalo/gumb, poleg njega postavite podrejenega, ki bo s preklopnim stikalom vklopil/izklopil LED. Običajno se v Rusiji večina težav reši na ta način. In kaj utripa?)))
Možnost 2 - sestavite multivibrator. Že bolj zanimivo. Za utripanje je ena LED povsem dovolj dobra odločitev. Poleg tega je preprost, poceni in zanesljiv.
Možnost 3 - sestavite na mikrokrmilnik. Dražje kot sestavljanje multivibratorja, a po mojem mnenju lažje. Napisal sem program, ga zagnal in dobil rezultat. Brez nastavitve. Seveda je to idealen primer.

Zdaj pa zapletimo nalogo. Na primer 5 LED diod in 5 možnosti za njihovo utripanje (hitrost in vrstni red njihovega utripanja se spreminjata). Prva možnost takoj izgine, metodo 2 je mogoče izvesti, vendar se bo velikost naprave močno povečala. Možnost 3 bo ostala približno enake velikosti, samo dodajte nekaj vrstic kode. Zato obstajajo različni primeri, kjer brez mikrokontrolerja ne gre in kje je odveč. Zato vedno ocenite stroške dela, časa in finančnih stroškov.

Mikrokrmilnik nam torej omogoča fleksibilno upravljanje sistemov, procesov itd., je majhnih dimenzij, po funkcionalnosti pa je miniračunalnik. Mikrokontrolerje proizvajajo različna podjetja. Ena od vrst mikrokontrolerjev AVR podjetja Atmel. Zakaj njih? V trgovini jih je precej enostavno najti, primere je enostavno najti pripravljena koda, vgrajena funkcionalnost vam omogoča reševanje celo zapletenih problemov.

Da bi mikrokrmilnik razumel, kaj želimo od njega, moramo vanj naložiti strojno programsko opremo – zaporedje dejanj, ki jih mora izvesti. Firmware je zaporedje enic in ničel. Da bi bilo bolj priročno, so izumili programske jezike. Na primer, napišemo vklopi, prevajalnik pa to sam pretvori v zaporedje enic in ničel, ki je razumljivo mikrokrmilniku. Slika prikazuje vdelano programsko opremo HEX, če jo odprete z beležnico.

Mikrokontrolerji so običajno programirani v C ali zbirnem jeziku. Na splošno ni razlike v čem pisati. Zaradi velikega števila že pripravljenih primerov sem se odločil za C. Poleg tega obstaja več programov, ki omogočajo pisanje v C. Na primer brezplačno, lastniško AVR Studio, CodeVision, WinAVR itd. Čeprav pišem v CodeVisionu, zelo aktivno uporabljam AVR Studio kot razhroščevalnik.

Upam, da vam je vsaj nekaj od tega postalo jasno. Po mojem mnenju je najtežje narediti prvi korak. Kdor to stori, premaga svoj strah in svojo lenobo, bo zagotovo dosegel rezultate. Vso srečo pri učenju mikrokontrolerjev.