AVR. Výcvikový kurz. Architektúra. Programovanie AVR. Programovanie mikrokontrolérov AVR pre začiatočníkov Parametre mikrokontrolérov rodiny avr

Jednočipové mikrokontroléry sú široko používané v širokej škále oblastí: od meracích prístrojov, kamier a videokamier, tlačiarní, skenerov a kopírok až po produkty elektronickej zábavy a všetky druhy domácich spotrebičov.

Od uvedenia prvých mikroprocesorov v 70. rokoch 20. storočia sa ich zložitosť neustále zvyšovala zavádzaním nových hardvérových riešení a pridávaním nových inštrukcií určených na riešenie nových problémov. Takto sa postupne vyvíjala architektúra, ktorá neskôr dostala názov CISC (Complete Instruction Set Computers – počítače s komplexným súborom inštrukcií). Následne sa objavil ďalší smer a našiel aktívny vývoj: architektúra RISC (Reduced Instruction Set Computers - počítače s redukovanou sadou inštrukcií). Práve táto architektúra zahŕňa mikrokontroléry AVR od Atmel a PIC od Microchip, ktorým je venovaná táto kniha.

Hlavnou výhodou RISC procesorov je, že sú jednoduché, vykonávajú obmedzenú množinu inštrukcií a v dôsledku toho sú veľmi rýchle. To znižuje náklady a zložitosť ich programovania.

Negatívom architektúry RISC bola potreba vytvárať dodatočné inštrukcie v assembleri, ktoré sú implementované v hardvéri pre CISC zariadenia. Napríklad namiesto jednoduchého volania inštrukcie delenia, ktorá je typická pre zariadenia CISC, musí dizajnér zaoberajúci sa procesorom RISC použiť niekoľko sekvenčných inštrukcií na odčítanie. Táto nevýhoda je však viac než kompenzovaná cenou a rýchlosťou RISC zariadení. Okrem toho, ak vytvárate programy v C, potom takéto problémy prestávajú mať pre vývojára žiadny význam, pretože ich rieši kompilátor, ktorý automaticky generuje všetok chýbajúci montážny kód.

Na úsvite mikroprocesorov, vývoj softvér prebiehal výlučne v jednom alebo inom jazyku symbolických inštancií zameraných na konkrétne zariadenie. Takéto jazyky boli v podstate symbolické mnemotechnické pomôcky zodpovedajúcich strojových kódov a preklad mnemotechnických pomôcok do strojového kódu vykonal prekladateľ. Hlavnou nevýhodou montážnych jazykov je však to, že každý z nich je viazaný na konkrétny typ zariadenia a logiku jeho fungovania. Okrem toho sa assembler ťažko učí, čo si vyžaduje pomerne veľa úsilia, čo sa navyše ukáže ako zbytočné, ak neskôr potrebujete prejsť na používanie mikrokontrolérov od iných výrobcov.

Jazyk C, keďže ide o vysokoúrovňový jazyk, nemá takéto nedostatky a možno ho použiť na programovanie akéhokoľvek mikroprocesora, pre ktorý existuje kompilátor C. V jazyku C sú všetky operácie na nízkej úrovni vykonávané počítačmi prezentované vo forme abstraktných konštrukcií, čo umožňuje vývojárom sústrediť sa na programovanie iba jednej logiky bez obáv zo strojového kódu. Keď sa naučíte C, môžete ľahko prejsť z jednej rodiny mikrokontrolérov do druhej a tráviť oveľa menej času vývojom.


Architektúra mikrokontrolérov AVR a PIC

Vo všeobecnosti sú všetky mikrokontroléry zostavené podľa rovnakej schémy. Riadiaci systém pozostávajúci z programového čítača a dekódovacieho obvodu vykonáva čítanie a dekódovanie inštrukcií z pamäte programu a operačná jednotka je zodpovedná za vykonávanie aritmetických a logické operácie; I/O rozhranie umožňuje výmenu údajov s periférnymi zariadeniami; a nakoniec musíte mať pamäťové zariadenie na ukladanie programov a údajov (obr. 1.1).

Ryža. 1.1. Zovšeobecnená štruktúra mikrokontroléra

Budeme brať do úvahy mikrokontroléry vo všeobecnosti, bez toho, aby sme boli viazaní na akýkoľvek konkrétny typ mikrokontrolérov AVR, takže nižšie budeme brať do úvahy iba vlastnosti architektúry pamäte spoločné pre väčšinu mikrokontrolérov, problémy so vstupom/výstupom, manipulácia s prerušením, reset atď.

Pamäť mikrokontroléra AVR

V mikrokontroléroch AVR je pamäť implementovaná podľa Harvardskej architektúry, čo znamená oddelenie inštrukčnej a dátovej pamäte. To znamená, že k príkazom sa pristupuje nezávisle od prístupu k údajom. Výhodou tejto organizácie je zvýšenie rýchlosti prístupu do pamäte.

Dátová pamäť

Dátová pamäť je určená na zápis/čítanie údajov používaných programami. Je prchavý, to znamená, že ak sa vypne napájanie mikrokontroléra, všetky údaje v ňom uložené sa stratia. V mikrokontroléroch AVR má dátová pamäť v porovnaní s mikrokontrolérmi PIC rozvinutejšiu štruktúru, ako je znázornené na obr. 2.1.


Ryža. 2.1. Štruktúra dátovej pamäte v mikrokontroléroch AVR a PIC

Oblasť SRAM (Static Random Access Memory) je znázornená na obr. 2.1 je bodkovaný, pretože ho nepoužívajú všetky mikrokontroléry AVR (to platí pre interné aj externé SRAM). Jeho počiatočná adresa je 0x060 a jeho horná adresa sa líši od zariadenia k zariadeniu.

V niektorých mikrokontroléroch AVR môžete zväčšiť pamäťový priestor SRAM pripojením externých pamäťových blokov až na 64 KB, čo si však vyžaduje obetovanie portov A a C, ktoré sa v tomto prípade používajú na prenos údajov a adries.

Univerzálne registre

Oblasť registrácie všeobecný účel(pracovné registre) je určený na dočasné ukladanie premenných a ukazovateľov používaných procesorom na vykonávanie programov. V mikrokontroléroch AVR sa skladá z 32 osembitových registrov (rozsah adries 0x000 - 0x01F). V mikrokontroléroch PIC sú všeobecné registre tiež osembitové, ale ich počet a rozsah adries závisí od konkrétneho typu zariadenia.

V programoch napísaných v C nie je zvyčajne potrebný priamy prístup k všeobecným registrom, pokiaľ sa nepoužíva kód jazyka symbolických inštancií.

Registre špeciálnych funkcií mikrokontroléra PIC

Špeciálne funkčné registre sa používajú v mikrokontroléroch PIC na riadenie rôznych operácií. Rovnako ako v prípade registrov na všeobecné použitie sa ich počet a adresovanie líši od zariadenia k zariadeniu. V programoch napísaných v C sa priamy prístup k registrom špeciálnych funkcií zvyčajne nevyžaduje, pokiaľ sa nepoužívajú fragmenty jazyka symbolických inštancií.

I/O oblasť mikrokontrolérov AVR

I/O oblasť mikrokontrolérov AVR obsahuje 64 registrov používaných na ovládanie alebo ukladanie údajov z periférnych zariadení. Ku každému z týchto registrov je možné pristupovať pomocou I/O adresy (začínajúcej na 0x000) alebo pomocou adresy SRAM (v takom prípade by sa k I/O adrese malo pridať 0x020). Programy C zvyčajne používajú konvenčné názvy I/O registrov a adresy majú význam iba pre programy v jazyku symbolických inštancií.

Mená, I/O a SRAM adresy a Stručný opis registre zo vstupnej/výstupnej oblasti mikrokontrolérov AVR sú uvedené v tabuľke. 2.1. Treba poznamenať, že v rôzne modely mikrokontrolérov, niektoré z uvedených registrov sa nepoužívajú a adresy nie sú uvedené v tabuľke. 2.1 sú vyhradené spoločnosťou Atmel pre budúce použitie.

Tabuľka 2.1. Popis registrov z I/O oblasti

Registrovať meno I/O adresa Adresa SRAM Popis
ACSR 0x08 0x28 Riadenie analógového komparátora a stavový register
UBRR 0x09 0x29 Register prenosovej rýchlosti UART
UCR 0x0A 0x2A UART riadiaci register transceivera
USR 0x0V 0x2V Register stavu vysielača UART
UDR 0х0С 0x2С Register údajov transceivera UART
SPCR 0x0D 0x2D Register riadenia rozhrania SPI
SPSR 0x0E 0x2E Register stavu rozhrania SPI
SPDR 0x0F 0x2F SPI Data I/O Register
PIND 0x10 0x30 Kolíky portu D
DDRD 0x11 0x31 Register smeru údajov portu D
PORTD 0x12 0x32 Port D Data Register
PINC 0x13 0x33 Piny portu C
DDRC 0x14 0x34 Port C Data Direct Register
PORTC 0x15 0x35 Port C dátový register
PINB 0x16 0x36 Piny portu B
DDRB 0x17 0x37 Port B Data Direct Register
PORTB 0x18 0x38 Port B Data Register
PINA 0x19 0x39 Piny portu A
DDRA 0x1A 0x3A Register smeru údajov portu A
PORTA 0x1V 0x3V Port A Data Register
EECR 0x1С 0x3С Riadiaci register pamäte EEPROM
EEDR 0x1D 0x3D EEPROM dátový register
EEARL 0x1E 0x3E Register adries pamäte EEPROM (nízky bajt)
EEARH 0x1F 0x3F Register adries pamäte EEPROM (vysoký bajt)
WDTCR 0x21 0x41 Watchdog Timer Control Register
ICR1L 0x24 0x44
ICR1H 0x25 0x45 Register zachytávania časovača/počítadla T/C1 (nízky bajt)
OCR1BL 0x28 0x48 Porovnávací register B časovača T/C1 (dolný bajt)
OCR1BH 0x29 0x49 Porovnávací register B časovača T/C1 (vysoký bajt)
OCR1AL 0x2A 0x4A Porovnávací register A časovača T/C1 (dolný bajt)
OCR1AH 0x2V 0x4V Porovnávací register A časovača T/C1 (vysoký bajt)
TCNT1L 0x2С 0х4С Počítací register časovača/počítadla T/C1 (nízky bajt)
TCNT1H 0x2D 0x4D Počítací register časovača/počítadla T/C1 (vysoký bajt)
TCCR1B 0x2E 0x4E Riadiaci register B časovača/počítadla T/C1
TCCR1A 0x2F 0x4F Riadiaci register A časovača/počítadla T/C1
TCNT0 0x32 0x52 Počítací register časovača/počítadla T/C0
TCCR0 0x33 0x53 Riadiaci register časovača/počítadla T/C0
MCUCR 0x35 0x55 Riadiaci register mikrokontroléra
TIFR 0x38 0x58 Register príznaku prerušenia časovača/počítadla
TIMSK 0x39 0x59 Register maskovania prerušení časovača
GIFR 0x3A 0x5A Všeobecný register príznakov prerušenia
GIMSK 0x3V 0x5V Všeobecný register maskovania prerušení
SPL 0x3D 0x5D Ukazovateľ zásobníka (nízky bajt)
SPH 0x3E 0x5E Ukazovateľ zásobníka (vysoký bajt)
SREG 0x3F 0x5F Stavový register

Stavový register SREG mikrokontrolérov AVR

Stavový register obsahuje stavové príznaky mikrokontrolérov AVR a nachádza sa v I/O oblasti na adrese $3F (adresa SRAM je $5F). Po zadaní signálu reset sa inicializuje na nuly.

Mikrokontroléry (ďalej len MK) pevne vstúpili do nášho života, na internete nájdete množstvo zaujímavých obvodov, ktoré sú na MK realizované. Čo sa na MK nedá namontovať: rôzne indikátory, voltmetre, domáce spotrebiče (ochranky, spínacie zariadenia, teplomery...), detektory kovov, rôzne hračky, roboty atď. Zoznam môže trvať veľmi dlho. Prvý obvod na mikrokontroléri som videl pred 5-6 rokmi v rozhlasovom časopise a takmer okamžite som otočil stránku a pomyslel som si: „Stále to nebudem môcť zostaviť. Skutočne, v tom čase boli MK pre mňa veľmi zložitým a nepochopeným zariadením, netušil som, ako fungujú, ako ich flashovať a čo s nimi robiť v prípade nesprávneho firmvéru. Ale asi pred rokom som prvý krát zostavil svoj prvý okruh na MK, bol to okruh digitálny voltmeter na 7 segmentových indikátoroch a mikrokontroléri ATmega8. Stalo sa, že som náhodou kúpil mikrokontrolér, keď som stál v oddelení rádiových komponentov, chlapík predo mnou kupoval MK a tiež som sa rozhodol, že si ho kúpim a pokúsim sa niečo zložiť. V mojich článkoch vám poviem o mikrokontroléry AVR, naučím ťa s nimi pracovať, pozrieme sa na programy pre firmvér, vyrobíme si jednoduchého a spoľahlivého programátora, pozrieme sa na proces firmvéru a hlavne na problémy, ktoré môžu nastať nie len pre začiatočníkov.

Základné parametre niektorých mikrokontrolérov rodiny AVR:

Mikrokontrolér

Flash pamäť

RAM pamäť

Pamäť EEPROM

I/O porty

U moc

Ďalšie parametre AVR mega MK:

Prevádzková teplota: -55…+125*С
Skladovacia teplota: -65…+150*С
Napätie na kolíku RESET vzhľadom na GND: max 13V
Maximálne napájacie napätie: 6,0V
Maximálny prúd I/O linky: 40 mA
Maximálny napájací prúd VCC a GND: 200mA

Model Pinouts ATmega 8X

Pinouty pre modely ATmega48x, 88x, 168x

Rozloženie pinov pre modely ATmega8515x

Rozloženie pinov pre modely ATmega8535x

Rozloženie pinov pre modely ATmega16, 32x

Rozloženie kolíkov pre modely ATtiny2313

Archív s datasheetmi pre niektoré mikrokontroléry je priložený na konci článku.

Inštalačné FUSE bity MK AVR

Pamätajte, že naprogramovaná poistka je 0, nenaprogramovaná je 1. Pri nastavovaní poistiek buďte opatrní, nesprávne naprogramovaná poistka môže zablokovať mikrokontrolér. Ak si nie ste istí, ktorú poistku potrebujete naprogramovať, je lepšie MK prvýkrát zablikať bez poistiek.

Najpopulárnejšie mikrokontroléry medzi rádioamatérmi sú ATmega8, nasledujú ATmega48, 16, 32, ATtiny2313 a ďalšie. Mikrokontroléry sa predávajú v baleniach TQFP a DIP, pre začiatočníkov odporúčam nákup v DIP. Ak si kúpite TQFP, bude problematickejšie ich flashovať, dosku si budete musieť kúpiť alebo prispájkovať, pretože ich nohy sú umiestnené veľmi blízko seba. Odporúčam vám nainštalovať mikrokontroléry v DIP baleniach na špeciálne zásuvky, je to pohodlné a praktické, nemusíte MK odpájať, ak ho chcete preflashovať alebo použiť na iný dizajn.

Takmer všetky moderné MK majú schopnosť in-circuit ISP programovanie, t.j. Ak je váš mikrokontrolér prispájkovaný k doske, potom za účelom zmeny firmvéru ho nebudeme musieť z dosky odpájať.

Na programovanie sa používa 6 pinov:
RESETOVAŤ- Prihláste sa MK
VCC- Plus napájanie, 3-5V, závisí od MK
GND- Spoločný vodič, mínus napájanie.
MOSI- vstup MK (informačný signál v MK)
MISO- MK výstup (informačný signál z MK)
SCK- MK vstup (hodinový signál v MK)

Niekedy používajú aj piny XTAL 1 a XTAL2; na tieto piny je pripevnený kremeň, ak je MK napájaný externým oscilátorom; v ATmega 64 a 128 sa piny MOSI a MISO nepoužívajú na programovanie ISP; namiesto toho sú piny MOSI pripojený na kolík PE0 a MISO na kolík PE1. Pri pripájaní mikrokontroléra k programátoru by mali byť prepojovacie vodiče čo najkratšie a kábel vedúci z programátora do LPT portu by tiež nemal byť príliš dlhý.

Označenie mikrokontroléra môže obsahovať zvláštne písmená s číslami, napríklad Atmega 8L 16PU, 8 16AU, 8A PU a pod.. Písmeno L znamená, že MK pracuje pri nižšom napätí ako MK bez písmena L, zvyčajne 2,7V. Čísla za pomlčkou alebo medzerou 16PU alebo 8AU označujú vnútornú frekvenciu generátora, ktorý je v MK. Ak sú poistky nastavené na prevádzku z externého kremeňa, kremeň by mal byť nastavený na frekvenciu nepresahujúcu maximum podľa údajového listu, čo je 20 MHz pre ATmega48/88/168 a 16 MHz pre ostatné atmegy.

mikrokontroléry AVR. Základy programovania

Štruktúra a hlavné charakteristiky mikrokontrolérov AVR

V tomto článku sa pokúsime načrtnúť všeobecne, hlavné charakteristiky, čo je „v jeho vnútri“, čo je potrebné na začatie práce s mikrokontrolérmi AVR atď.

Čo je Tiny, Mega?

Spoločnosť Atmel vyrába rozsiahly rad osembitových mikrokontrolérov založených na jadre AVR, rozdelených do niekoľkých podrodín, ktoré sa líšia Technické špecifikácie, oblasti použitia, cena:

  • ATtiny– rodina mikrokontroléry AVR optimalizované pre aplikácie, ktoré vyžadujú relatívne vysoký výkon (až 1,0 MIPS a sú schopné pracovať pri frekvenciách až 20,0 MHz), energetickú účinnosť (ATtiny je jediná rodina schopná pracovať od napájacieho napätia 0,7 V!) a kompaktnosť (existujú mikrokontroléry v balení SOT23-6 - iba 6 pinov a každý pin má viacero funkcií, napr.: I/O port, ADC vstup, PWM výstup a pod.). Tu sa objavuje ich rozsah použitia: zariadenia, ktoré sú rozhodujúce z hľadiska ceny, spotreby energie, veľkosti atď.
  • ATmega– Rodina mikrokontrolérov AVR určená na použitie v najrôznejších oblastiach vďaka veľmi veľká sada periférne zariadenia, veľké množstvo programovej pamäte, vstupno/výstupné porty atď. Jedným slovom, je tu priestor na rozšírenie.
  • ATxmega– nová rodina mikrokontrolérov AVR s viac veľká sada periférne zariadenia ako ATmega (pridané zariadenie s priamym prístupom do pamäte, DAC, CRC modul, plný USB rozhranie, rýchlejší ADC atď.), s prevádzkovými frekvenciami do 32,0 MHz.

Nestojí to za nič Hlavná prednosť všetky vyššie uvedené zariadenia: všetky majú jedinú architektúru, čo uľahčuje prenos kódu z jedného mikrokontroléra na druhý.
Mikrokontroléry sú dostupné v DIP aj SMD puzdrách (každý má svoje klady a zápory).

Najpopulárnejšie obaly sú:

  • DIP (Dual Inline Package) - puzdro s dvoma radmi kontaktov
  • QFP (Quad Flat Package) - ploché balenie so štyrmi radmi kontaktov
  • SOIC (Small-Outline Integrated Circuit) – malé (malá plocha) integrované obvody

Čo sa týka rádioamatérskej praxe, o mikrokontroléry je, samozrejme, najväčší záujem DIP balík, keďže sa s nimi pracuje najjednoduchšie - majú pomerne veľkú rozteč medzi kolíkmi a navyše na ne môžete použiť zásuvky (ide o špeciálny konektor, do ktorého môžete inštalovať mikroobvody bez spájkovania).
Vo všeobecnosti je zásuvka mimoriadne pohodlný vynález - kolíky sú vždy neporušené a môžete opakovane vyberať a vkladať mikroobvod a je oveľa jednoduchšie vyrábať prototypy budúcich zariadení.

Napájanie a taktovanie mikrokontrolérov AVR

mikrokontroléry AVR postavený pomocou technológie CMOS, ktorá zaisťuje veľmi nízku spotrebu energie. V praxi spotreba energie lineárne a priamo úmerná pracovnej frekvencii (čím vyššia frekvencia, tým vyššia spotreba).



Napájacie napätie pre mikrokontroléry AVR sa pohybuje od 2,7 až 5,5 V(6,0V je maximum, aj keď moje AVR nejako fungovalo na 7V - a nič, žije dodnes). To znamená, že AVR môže priamo ovládať, vymieňať si dáta atď. s rôzne zariadenia(tolerancia 3,3V aj tolerancia 5V) bez nutnosti použitia akýchkoľvek prevodníkov logickej úrovne. Pre presnejšie spracovanie analógových signálov poskytuje AVR samostatné kolíky na napájanie analógovej časti mikrokontroléra, ktorá zahŕňa zariadenia ako ADC, DAC a analógový komparátor. Okrem toho majú mikrokontroléry AVR niekoľko „režimov spánku“, ktoré poskytujú najlepšiu možnú úsporu energie.

Tiež každý pin mikrokontroléra (v závislosti od pracovnej frekvencie a napájacieho napätia) môže napájať externých zariadení prúd až 40,0 mA(maximálne!), ale všetko sa dá „stiahnuť/stiahnuť“ z mikrokontroléra až 200,0 mA(maximálne!).

Frekvenčný rozsah hodinových signálov sa líši v závislosti od „rodinnej seniority“ (ATtiny je najmladšia rodina mikrokontrolérov AVR a ATxMega najstaršia). Pre niektorých predstaviteľov, najmä rodinu ATtiny, môže prevádzková frekvencia dosiahnuť 20,0 MHz, pre ATmega je to nepresahuje 16,0 MHz, zatiaľ čo ATxMega nepresiahne 32,0 MHz. Každý mikrokontrolér AVR má tiež interný RC oscilátor až do 8,0 MHz, čo vám umožní zaobísť sa bez externý zdrojčasový signál.

Atmel vyrába mikrokontroléry s maximálnymi prevádzkovými frekvenciami, ktoré sú polovičné oproti štandardu (pre zvýšenie úspory energie), preto by ste pri ich kúpe mali venovať pozornosť kódovaniu mikrokontrolérov. Detailné informácie o tom, ktorý mikrokontrolér pracuje na akých frekvenciách a napájacích napätiach, aké typy kódovania a balenia sú pre tento mikrokontrolér k dispozícii atď. nájdete v časti „Informácie o objednávke“ každého údajového listu.

Nižšie je uvedená vzorová tabuľka z údajového listu pre mikrokontrolér ATtiny13. V stĺpci "Objednací kód" vidíte rozdiely medzi kódovaniami a nie je ťažké uhádnuť, s čím súvisia.



Čo je vnútri mikrokontroléra AVR?

Ako už bolo uvedené v predslove, mikrokontroléry AVR majú architektúru Harvardu ( hlavná charakteristika Táto architektúra spočíva v tom, že programová pamäť a RAM, ako aj ich prístupové zbernice sú oddelené, aby sa zvýšila rýchlosť vykonávania inštrukcie: zatiaľ čo sa vykonáva jedna inštrukcia, ďalšia sa získava z programovej pamäte) s RISC procesorom s rýchlosťou 1,0 MIPS. Všetky mikrokontroléry, bez ohľadu na ich model a usporiadanie, majú rovnakú centrálnu procesorovú jednotku (procesor/jadro). Jedno jadro robí program napísaný v akomkoľvek jazyku univerzálnejším a ak je to potrebné, môže byť nahradený v akomkoľvek projekte, povedzme, drahší ovládač za iný lacnejší, s minimálnymi zmenami v kóde.

RISC(Reduced Instruction Set Computer) – procesor so sadou jednoduchých montážnych inštrukcií (sčítanie, odčítanie, posun vľavo/vpravo, „logický AND“ atď.), všetky inštrukcie majú pevnú dĺžku, procesor obsahuje veľké množstvo všeobecných účelové registre atď. Aby bolo možné napríklad vypočítať nejaký druh priemernej matematickej rovnice, procesor bude musieť vykonať niekoľko jednoduchých inštrukcií zostavy, na rozdiel od procesora CISC, ktorý má inštrukcie „pre všetky príležitosti“. Ale AVR nie je celkom RISC -procesor, keďže nie všetky montážne inštrukcie majú pevný formát. Väčšina má 16-bitový formát, zvyšok je 32-bitový. To znamená, že každá inštrukcia zaberá 16 alebo 32 bitov v pamäti programu. Mimochodom, nepevné Dĺžka montážnych pokynov je to, čo z neho robí procesor: Advanced Virtual RISC procesor (AVR).

MIPS(Milión inštrukcií za sekundu) – Mikrokontroléry AVR sú schopné vykonať (približne) milión inštrukcií na frekvencii 1,0 MHz, alebo jednoducho povedané, väčšina inštrukcií zostavy sa vykoná v jednom hodinovom cykle.



Mozgom mikrokontroléra AVR je jeho centrálna procesorová jednotka (CPU/jadro).

Niektoré komponenty procesora:

Aritmetická logická jednotka

Počítadlo programov

Ukazovateľ zásobníka

  • Stavový register
  • Flash programová pamäť
  • Dátová pamäť

Všeobecné registre

Periférne registre (I/O registre)

RAM pamäť

Systém hodín. Tento systém možno prirovnať ku kardiovaskulárnemu systému

Jednotka prerušenia

Periférne zariadenia, uvediem niektoré z nich:

I/O porty

Pamäť EEPROM

Rozhrania USB (iba xMega), USART, I2C, SPI, JTAG

Watchdog, časovač/počítadlo (s oscilátorom PWM, zachytávaním/porovnávaním atď.)

ADC, DAC (len xMega), analógový komparátor

Moduly externých prerušení

Sada periférnych zariadení v rôznych rodinách (Tiny, Mega a xMega) a rôznych mikrokontrolérov týchto rodín je odlišná. Existujú mikrokontroléry nabité rôznymi periférnymi zariadeniami, ale pre nákladovo kritický vývoj existujú aj mikrokontroléry s malou (nevyhnutnou) sadou periférnych zariadení.

Jednou z výhod mikrokontrolérov AVR je schopnosť používať periférne zariadenia v rôznych spoločných prevádzkových režimoch, čo veľmi často zjednodušuje úlohu vývojára. AVR má tiež zabudovaný systém pre resetovanie a sledovanie úrovne napájacieho napätia (System Control and Reset), ktorý zaisťuje normálny štart mikrokontroléra a v prípade potreby aj spoľahlivé vypnutie.

Periférne riadiace/stavové registre sú umiestnené v oblasti dátovej pamäte, medzi všeobecnými registrami a RAM, ktorý zabezpečuje vysoký výkon pri práci s perifériami. Vývojár má samozrejme plný prístup k týmto registrom (I/O Registers).

Čo je potrebné, aby mikrokontrolér fungoval?

  • napísať program (program). Aby ste mohli napísať program/algoritmus, pre ktorý bude mikrokontrolér fungovať, budete potrebovať integrované vývojové prostredie pre mikrokontroléry AVR, ktoré zahŕňa kódový/textový editor, kompilátor, linker a ďalšie nástroje.
  • návrh obvodu. Samotný program nestačí na to, aby mikrokontrolér fungoval, ale vyžaduje aj minimálnu súpravu tela (súpravu externého elektronické zariadenia), poskytnúť mikrokontroléru napájacie napätie a hodinový signál tak, aby fungovalo aspoň jadro mikrokontroléra.
Nasledujúci obrázok znázorňuje „klasickú“ súpravu mikrokontroléra potrebnú pre normálnu prevádzku.


Obrázok ukazuje minimálne požiadavky na obvod pre mikrokontrolér ATmega16. S touto schémou prepínania začne pracovať jadro mikrokontroléra AVR, môžete využiť všetky vstupno/výstupné porty atď. periférií. Mikrokontrolér je skrátka v plnej bojovej pohotovosti. Ak chcete napríklad začať používať ADC alebo analógový komparátor, mali by ste najprv programovo nakonfigurovať periférne zariadenie pomocou jeho riadiacich/monitorovacích registrov, aby ste nastavili prevádzkový režim, ktorý potrebujete atď., a potom aplikovať skúmané signály na vstupy zodpovedajúce periférne zariadenie.

- Kremeň a kondenzátory C1, C2 (každý 22 pF) poskytujú mikrokontroléru a všetkým jeho periférnym zariadeniam vysokokvalitný hodinový signál (maximálna frekvencia - 16,0 MHz).

Rezistor R1(10K), poskytuje vysokú úroveň na vstupe RESET, potrebnú pre stabilnú prevádzku mikrokontroléra. Ak počas prevádzky mikrokontroléra klesne napätie na tomto kolíku pod určitú úroveň, mikrokontrolér sa resetuje a činnosť zamýšľaného algoritmu môže byť narušená.

- ISP konektor používa sa na in-circuit programovanie, to znamená, že program, ktorý ste zapísali, je potrebné zapísať do pamäte mikrokontroléra priamo na doske (bez odstránenia mikrokontroléra zo zariadenia).

- Plyn L1 a kondenzátory C3, C4 poskytujú napájacie napätie pre analógové periférne zariadenia, ako aj niektoré registre I/O portov. Ak mikrokontrolér nemá analógovú časť, potom neexistujú žiadne analógové napájacie kolíky, v dôsledku toho tieto komponenty nie sú potrebné. Zjednodušené zapojenie mikrokontroléra je nasledovné: po prvé, keďže mikrokontrolér bol zbavený externého taktovania, malo by to naznačovať, že taktovanie bude pochádzať z interného RC oscilátora nastavením príslušných poistkových bitov (druh obmedzujúcich prevádzkových parametrov mikrokontroléra ).
Maximálna frekvencia interného oscilátora je 8,0 MHz, čo znamená, že mikrokontrolér nebude schopný pracovať na svojej maximálnej frekvencii (výkonu).
Po druhé, analógová časť mikrokontroléra (ako aj niektoré registre vstupných/výstupných portov) nemajú zdroj energie, čo vylučuje ich použitie.
Po tretie, neexistuje konektor na programovanie v obvode, takže ak chcete zapísať firmvér do pamäte mikrokontroléra, budete ho musieť odstrániť zo zariadenia, niekam ho zapísať a potom ho vrátiť na svoje miesto. Ako sami chápete, nie je to príliš pohodlné (odstránenie / vloženie, spájkovanie / odspájkovanie) a môže to viesť k poškodeniu samotného mikrokontroléra (nohy sa môžu zlomiť, prehriať sa spájkovaním atď.) A blízkych zariadení - konektor, stopy na palube atď.

Mikrokontrolér toto je, dalo by sa povedať, malý počítač. ktorý má svoj vlastný CPU (registre, riadiaca jednotka a aritmetická logická jednotka), Pamäť, ako aj rôzne periférie, Páči sa mi to I/O porty, časovače, ovládače prerušení, rôzne generátory impulzov a dokonca aj analógové prevodníky. Nemôžete vymenovať všetko. Nie je možné vymenovať všetky aplikácie mikrokontrolérov.

Ak však všetko výrazne zjednodušíme, hlavnou funkciou mikrokontroléra je „skákanie nohami“. Tie. má niekoľko pinov (od 6 do niekoľkých desiatok v závislosti od modelu) a na týchto pinoch možno nastaviť buď 1 (vysoká úroveň napätia, napríklad +5 voltov) alebo 0 (úroveň nízkeho napätia, asi 0,1 voltu) v závislosti od softvéru algoritmus pevne zavedený do jeho pamäte. Mikrokontrolér môže tiež určiť stav signálu na svojich nohách (na to musia byť nakonfigurované ako vstup) - či je tam napätie vysoké alebo nízke (nula alebo jedna). Moderné mikrokontroléry majú tiež takmer univerzálne na doske analógovo-digitálny prevodník - je to niečo podobné voltmetru, umožňuje vám nielen sledovať 0 alebo 1 na vstupe, ale plne merať napätie od 0 po referenciu (zvyčajne sa referencia rovná napájaciemu napätiu) a uveďte ju ako číslo od 0 do 1024 (alebo 255, v závislosti od veľkosti bitu ADC)

Z toho si môžete vyrobiť inteligentný dom, a mozgy pre domáceho robota, inteligentný systém ovládania akvária alebo len krásny LED displej s bežiacim textom. Spomedzi elektronických komponentov MK ide o jedno z najuniverzálnejších zariadení. Napríklad pri vývoji ďalšieho zariadenia sa radšej netrápim s rôznymi druhmi zvrátenosti návrhu obvodov, ale prepojím všetky vstupy a výstupy s mikrokontrolérom a celú logiku práce vykonám softvérovo. Dramaticky šetrí čas aj peniaze, čo znamená peniaze na druhú.

Existuje veľmi, veľmi veľa mikrokontrolérov. Takmer každá sebaúcta spoločnosť vyrábajúca rádiové komponenty vyrába svoj vlastný ovládač. V tejto rozmanitosti je však poriadok. MK sú rozdelené do rodín, nebudem ich uvádzať všetky, ale popíšem len tie najzákladnejšie osembitové rodiny.

MSC-51
Najrozsiahlejšia a najrozvinutejšia je MSC-51, najstarší zo všetkých, pochádzajúci z Intel 8051 a teraz ich vyrába veľa spoločností. Niekedy sa volá krátko C51. Toto je 8-bitová architektúra, ktorá sa líši od väčšiny ostatných osembitových architektúr v tom CISC architektúra. Tie. Jeden príkaz môže niekedy vykonať pomerne zložitú akciu, ale príkazy sa vykonávajú vo veľkom počte hodinových cyklov (zvyčajne 12 alebo 24 hodinových cyklov, v závislosti od typu príkazu), majú rôzne dĺžky a je ich veľa, pre všetky príležitosti . Medzi radičmi architektúry MSC-51 stretnúť sa ako dinosaury AT89C51, ktorý má minimum periférií, malú pamäť a nedôležitý výkon a produkty podobné monštrám Silicon Laboratories mať na palube veľmi masovú porciu periférií rôznej veľkosti, obrovské zásobníky RAM a permanentnej pamäte, výkonné rozhrania od jednoduchých UART„a predtým USB A MÔCŤ a tiež brutálne rýchle jadro, poskytujúce až 100 miliónov operácií za sekundu. Pokiaľ ide o mňa osobne, zbožňujem architektúru C51 pre jej sakramentsky pekný assembler, o ktorom sa jednoducho píše. Pre túto architektúru už boli napísané gigabajty kódu, boli vytvorené všetky mysliteľné a nepredstaviteľné algoritmy.

Atmel AVR
Moja druhá obľúbená rodina je AVR od spoločnosti Atmel. Vôbec Atmel vyrába a MSC-51 ovládače, ale stále sa na ne zameriavajú AVR. Tieto radiče už majú 8-bit RISC architektúru a vykonať jeden príkaz v jednom hodinovom cykle, ale na rozdiel od klasickej RISC jadrá majú veľmi rozsiahly systém príkazov, aj keď nie taký pohodlný ako systém C51, a preto ich nemám rád. ale AVR vždy vybavené ako na vojnu a jednoducho napchaté rôznymi perifériami, najmä ovládačmi podrodiny ATMega. Sú tiež veľmi ľahko flashovateľné; to nevyžaduje špecializovaných programátorov alebo iné zložité vybavenie. Všetko, čo potrebujete, je päť káblov a počítač LPT prístav. Jednoduché učenie umožnilo tomuto ovládaču pevne padnúť do sŕdc mnohých, mnohých rádioamatérov po celom svete.

Mikročipový PIC.
Ďalší 8-bit RISC Mikrokontrolér sa vyznačuje veľmi zvráteným príkazovým systémom, ktorý pozostáva len z niekoľkých desiatok príkazov. Každý príkaz sa vykonáva v štyroch hodinových cykloch. existuje množstvo výhod, predovšetkým nízka spotreba energie a rýchly štart. Priemerná PIC ovládač nemá toľko periférií ako v AVR, ale samotné úpravy PIC Existuje toľko ovládačov, že si vždy môžete vybrať kryštál s perifériami, ktoré vyhovujú presne danej úlohe, nič viac, nič menej. Zapnuté PIC'ax tradične vyrábané palubné počítače pre automobily, ako aj početné domáce alarmy.

Akú rodinu si vybrať? Oh, to je ťažká otázka. Na mnohých fórach a konferenciách sa stále vedú divoké bitky na tému, ktorá rodina je lepšia, fanúšikovia AVR hádať sa s nasledovníkmi MSC-51, po ceste nezabudnúť nakopnúť obličky PIC„ovce, na ktoré odpovedajú rovnako.

Situácia je tu ako v Starcrafte :) Kto je cool? ľudia? Zergovia? Protossovia? Je to všetko o aplikácii, rozsahu úloh a množstve ďalších parametrov. Každá rodina má svoje výhody a nevýhody. Osobne by som si však vybral AVR a to z týchto dôvodov:

  • 1. Dostupnosť v Rusku. Tieto ovládače sú zaslúžene obľúbené a milované ľuďmi, čo znamená, že naši obchodníci sú ochotní ich nosiť. Avšak, ako PIC. S MSC-51 je situácia horšia. Nie je problém zohnať zastarané AT89C51, ale kto ich potrebuje? Ale moderné silaby sú už exkluzívne.
  • 2. Nízka cena. Vo všeobecnosti je PIC vo svete známy svojou nízkou cenou, ale iróniou je, že zadarmo sa začína len vtedy, ak si ho kúpite po vagóne. V skutočnosti na skutočnom pulte bude AVR o 30-40 percent lacnejší ako PIC s o niečo väčšou funkčnosťou. S MSC-51 je situácia jasná v prvom bode. Exkluzivita je nielen vzácna, ale aj drahá.
  • 3. Veľa periférií naraz. Pre sériové zariadenie je to skôr nevýhoda. Je oveľa lepšie mať len to, čo je potrebné pre aktuálnu úlohu, a nechať zvyšok, aby vám neprekážal a neplytval energiou. To je to, čím je PIC známy svojim rozšírením modelový rad, kde nájdete ovládač, ktorý bude mať to, čo potrebujete, a nie to, čo nepotrebujete. Ale ideme študovať a robiť to pre seba! Preto je pre nás lepšie mať všetko naraz a v zálohe. A tu je AVR hlavou a ramenami nad PIC a stále znova a znova prináša viac a viac preplnených ovládačov. Kúpil som si nejaký AtMega16A a je to, môžete študovať celá rodina.
  • 4. Jedno jadro. Faktom je, že všetky moderné AVR majú rovnaké jadro jednotný systém príkazy Existujú len určité rozdiely na periférnej úrovni (a tie sú menšie). Tie. kód z nejakého maličkého ATTiny13 sa dá ľahko skopírovať a vložiť do ATMega64 a funguje takmer bez úprav. A naopak takmer bez obmedzení. Pravda, staršie modely AVR (všetky druhy AT90S1200) majú obmedzenú kompatibilitu zhora nadol – majú o niečo menší systém príkazov. Ale je to hotové. Microchip má celý rad rodín. PIC12/16/18 s rôznymi riadiacimi systémami. 12. rodina je zvyčajne malá vec (ako Tiny v AVR) a 18 je už vážnejší ovládač (analogicky k Mega AVR) A ak kód z 12 môže byť presunutý na 18, potom späť obr.
  • 5. Rozsiahly systém príkazov pre ovládače AVR. AVR má asi 130 príkazov, zatiaľ čo Microchip PIC má iba 35. Zdá sa, že PIC je víťaz - menej príkazov, ľahšie sa učí. Áno, presne tak znie slogan mikročipu, niečo ako „Len 35 tímov!“ Len toto je vlastne blbosť. Koniec koncov, čo je príkaz procesora? Je to nástroj! Len si predstavte dve kalkulačky – bežnú, účtovnú a strojársku. Účtovníctvo sa učí oveľa ľahšie ako inžinierstvo. Ale skúste na ňom vypočítať sínus? Alebo logaritmus? Nie, môžete, nehádam sa, ale koľko stlačení tlačidla a medzivýpočtov to bude trvať? Rovnaká vec! Je oveľa pohodlnejšie pracovať, keď máte po ruke veľa rôznych akcií. Preto čím väčší je systém príkazov, tým lepšie.
  • 6. Dostupnosť bezplatných multiplatformových C kompilátorov. Samozrejme, vždy sa dá nájsť trhlina. Kde kde, ale u nás s tým nikdy nebol problém. Ale prečo niečo kradnúť, keď máte niečo zadarmo? ;)
  • 7. No, posledný argument je zvyčajne najsilnejší. Prítomnosť niekoho, kto by poučil a poradil. Pomohol radou a nasmeroval ma na správnu cestu. Vybral som si AVR pre seba a na tejto stránke (podľa najmenej zatiaľ) táto konkrétna rodina bude úplne pochopená, čo znamená, že nemáte veľmi na výber :))))))

Oh, ale existuje veľa rovnakých AVR. Ktorý si mám vziať???
Záujem Opýtajte sa. Vo všeobecnosti je pre úlohu lepšie zvoliť MK. Ale aby ste to študovali, je lepšie chytiť niečo plnené.

Najprv sa pozrime na označenia, aby ste z cenníka okamžite pochopili, aké zviera je pred vami. Tu je príklad pre vás

ATmega16A - 16PI

  • AT- vyrobené v Atmeli
  • Mega- typ rodiny. Je tam aj Tiny a Xmega (ten nový je hrozná vec, komplet helikoptéra). Vo všeobecnosti sa myslelo, že Drobček bol ako nízkorozpočtový s malým množstvom mletého mäsa a celkovo chybný, a naopak Mega bol všetko naraz. V skutočnosti je teraz rozdiel medzi rodinami Tini a Mega, pokiaľ ide o mleté ​​mäso, minimálny, ale Tini má menšiu pamäť a puzdrá sa dodáva s počtom kolíkov od 6 do 20.
  • 16 — množstvo flash pamäte v kilobajtoch. V skutočnosti to nie je také jednoduché. Číslo pamäte je mocninou dvoch. Mega162 teda nie je radič so 162KB flashu, ale akási modifikácia Mega162 so 16KB pamäte. Alebo Mega88 nie je 88kb, ale 8kb flash a druhá 8 je akýmsi náznakom, že ide o ďalší vývoj Mega8. Podobne Mega48 alebo Mega168. To isté platí aj pre Tininu rodinu. Napríklad Tini2313 - 2 kilobajty flash. čo je 313? Kto čert vie, čo tým mysleli :) Alebo Tiny12 - 1kb Flash. Vo všeobecnosti sa čip vyčistil.
  • A— predpona spotreby energie (zvyčajne). Tento list možno neexistuje, no v novej sérii je prítomný takmer všade. Napríklad série V a L sú nízkonapäťové a môžu pracovať od 2,7 voltov. Je pravda, že za nízke napätie musíte zaplatiť menšiu frekvenciu. Ale pretaktovanie je možné aj tu, nič ľudské nám nie je cudzie :) A a P majú nový rad AVR s technológiou PicoPower t.j. ultra-ekonomický. Nie je žiadny rozdiel vo výplni a vnútornej štruktúre s ich neindexovými modelmi, rozdiel je len v prevádzke všetkých režimov spánku a spotrebe energie. Tie. Mega16A sa dá jednoducho zmeniť na Mega16 bez A. A nič iné netreba meniť.
  • 16 — Limit frekvencia hodín v megahertzoch. V skutočnosti to môžete pretaktovať na 20 ;)
  • P- druh škrupiny. Dôležitá vlastnosť. Faktom je, že nie každý prípad môže byť spájkovaný doma bez hemoroidov. Zatiaľ odporúčam venovať pozornosť puzdru P-DIP. Je to objemné monštrum, ale ľahko sa spájkuje a čo je najdôležitejšie, ľahko sa zasunie do špeciálnej zásuvky a znova sa z nej vyberie. Kryty SOIC (index S) alebo TQFP (index A) je lepšie zatiaľ odložiť. Bez dobrých skúseností s spájkovaním a schopnosti vysokokvalitného leptania vytlačená obvodová doska Je lepšie sa do nich nemiešať.
  • ja— Typ cínovania olova. I - olovená spájka. U - bezolovnatý. Pre teba v tom nie je absolútne žiadny rozdiel. Vezmite ten, ktorý je lacnejší.

Odporúčam nasledujúce modely:

  • ATMega16A-16PU - lacné (asi 100 - 150 rubľov), veľa pinov, veľa periférií. Dostupné v rôznych krytoch. Je to jednoduché, môj tréningový kurz a všetky ďalšie príklady sú tomu prispôsobené.
  • ATTiny2313-20SU je ideálnou voľbou pre výrobu všetkých druhov hodín/budíkov a inej malej domácej automatizácie. Lacné (40 rubľov), kompaktné. Nevýhodou je, že neexistuje ADC.
  • ATmega48/88/168 ktorýkoľvek z týchto ovládačov. Kompaktný (v prípade tqfp je to najtenší a najmenší z AVR), lacný (100 - 150 rubľov), naplnený až po okraj.
  • ATmega128 pre skúsených. Veľký, výkonný, veľa pamäte. Drahé (asi 400 rubľov)

Predpokladajme, že máte zadanú úlohu - nechať blikať LED.
Poďme diskutovať o tom, ako vyriešiť tento problém:

Možnosť 1 je najjednoduchšia, vezmite prepínač/tlačidlo, umiestnite vedľa neho otroka, ktorý pomocou prepínača zapne/vypne LED. V Rusku sa väčšina problémov zvyčajne rieši týmto spôsobom. A čo to bliká?)))
Možnosť 2 - zostavte multivibrátor. Už zaujímavejšie. Na blikanie stačí jedna LED dióda dobré rozhodnutie. Navyše je jednoduchý, lacný a spoľahlivý.
Možnosť 3 - zostaviť na mikrokontroléri. Drahšie ako montáž multivibrátora, ale podľa mňa jednoduchšie. Napísal som program, spustil ho a dostal som výsledok. Žiadne nastavenie. Samozrejme, toto je ideálny prípad.

Teraz poďme skomplikovať úlohu. Napríklad 5 LED diód a 5 možností ich blikania (rýchlosť a poradie ich blikania sa mení). Prvá možnosť okamžite zmizne, je možné vykonať metódu 2, ale veľkosť zariadenia sa prudko zväčší. Možnosť 3 zostane približne rovnaká, stačí pridať pár riadkov kódu. Preto existujú rôzne prípady, kedy to bez mikrokontroléra nie je možné a kedy je to zbytočné. Preto vždy odhadnite mzdové náklady, časové a finančné náklady.

Mikrokontrolér nám teda umožňuje flexibilne riadiť systémy, procesy a pod., má malé rozmery a z hľadiska funkčnosti ide o minipočítač. Mikrokontroléry vyrábajú rôzne spoločnosti. Jedna z odrôd mikrokontrolérov AVR od spoločnosti Atmel. Prečo práve oni? V obchode sa dajú ľahko nájsť, príklady sa dajú ľahko nájsť pripravený kód, vstavaná funkcionalita umožňuje riešiť aj zložité problémy.

Aby mikrokontrolér pochopil, čo od neho chceme, musíme doň nahrať firmvér – postupnosť akcií, ktoré potrebuje vykonať. Firmvér je postupnosť jednotiek a núl. Aby to bolo pohodlnejšie, boli vynájdené programovacie jazyky. Napríklad napíšeme zapnúť a kompilátor to sám prevedie na postupnosť jednotiek a núl, ktorá je zrozumiteľná pre mikrokontrolér. Obrázok zobrazuje HEX firmvér, ak ho otvoríte pomocou poznámkového bloku.

Mikrokontroléry sú zvyčajne naprogramované v jazyku C alebo v assembleri. Celkovo nie je rozdiel v tom, na čo písať. Vzhľadom na veľké množstvo hotových príkladov som sa rozhodol v prospech C. Okrem toho existuje niekoľko programov, ktoré vám umožňujú písať v C. Napríklad zadarmo, proprietárne Štúdio AVR, CodeVision, WinAVR atď. Aj keď píšem v CodeVision, veľmi aktívne používam AVR Studio ako debugger.

Dúfam, že vám bolo aspoň niečo z toho jasné. Podľa mňa je najťažšie urobiť prvý krok. Ten, kto to urobí, prekoná svoj strach a svoju lenivosť, určite dosiahne výsledky. Veľa šťastia pri učení mikrokontrolérov.