AVR. Výcvikový kurz. Architektura. Programování AVR. Programování mikrokontrolérů AVR pro začátečníky Parametry mikrokontrolérů rodiny avr

Jednočipové mikrokontroléry jsou široce používány v celé řadě oblastí: od měřicích přístrojů, fotoaparátů a videokamer, tiskáren, skenerů a kopírek až po produkty elektronické zábavy a všechny druhy domácích spotřebičů.

Od uvedení prvních mikroprocesorů v 70. letech 20. století se jejich složitost neustále zvyšovala zaváděním nových hardwarových řešení a přidáváním nových instrukcí určených k řešení nových problémů. Tak se postupně vyvíjela architektura, která později dostala název CISC (Complete Instruction Set Computers - počítače se složitou sadou instrukcí). Následně se objevil další směr a našel aktivní vývoj: architektura RISC (Reduced Instruction Set Computers - počítače s redukovanou sadou instrukcí). Právě tato architektura zahrnuje mikrokontroléry AVR od Atmel a PIC od Microchip, kterým je věnována tato kniha.

Hlavní výhodou RISC procesorů je, že jsou jednoduché, provádějí omezenou sadu instrukcí a v důsledku toho jsou velmi rychlé. To snižuje náklady a složitost jejich programování.

Nevýhodou architektury RISC byla potřeba vytvářet další instrukce v assembleru, které jsou implementovány v hardwaru pro CISC zařízení. Například místo prostého volání instrukce dělení, která je typická pro zařízení CISC, musí konstruktér zabývající se procesorem RISC použít několik instrukcí sekvenčního odečítání. Tato nevýhoda je však více než kompenzována cenou a rychlostí RISC zařízení. Kromě toho, pokud vytváříte programy v C, pak takové problémy přestávají mít pro vývojáře vůbec žádný význam, protože je řeší kompilátor, který automaticky generuje veškerý chybějící kód sestavení.

Na úsvitu mikroprocesorů, voj software probíhala výhradně v tom či onom assembleru zaměřeném na konkrétní zařízení. Tyto jazyky byly v podstatě symbolickými mnemotechnickými pomůckami odpovídajících strojových kódů a překlad mnemotechnických pomůcek do strojového kódu prováděl překladatel. Hlavní nevýhodou assembleru je však to, že každý z nich je vázán na konkrétní typ zařízení a logiku jeho fungování. Navíc se assembler obtížně učí, což vyžaduje poměrně velké úsilí na naučení, což se navíc ukazuje jako zbytečné, pokud později potřebujete přejít na používání mikrokontrolérů jiných výrobců.

Jazyk C jako jazyk na vysoké úrovni takové nedostatky postrádá a lze jej použít k programování libovolného mikroprocesoru, pro který existuje kompilátor C. V jazyce C jsou všechny nízkoúrovňové operace prováděné počítači prezentovány ve tvaru abstraktních konstrukcí, což umožňuje vývojářům soustředit se na programování pouze jedné logiky bez obav o strojový kód. Jakmile se naučíte C, můžete snadno přejít z jedné rodiny mikrokontrolérů do druhé a trávit mnohem méně času vývojem.


Architektura mikrokontrolérů AVR a PIC

Obecně jsou všechny mikrokontroléry sestaveny podle stejného schématu. Řídicí systém, který se skládá z programového čítače a dekódovacího obvodu, provádí čtení a dekódování instrukcí z paměti programu a operační jednotka je zodpovědná za provádění aritmetických a logické operace; I/O rozhraní umožňuje výměnu dat s periferními zařízeními; a konečně musíte mít paměťové zařízení pro ukládání programů a dat (obr. 1.1).

Rýže. 1.1. Zobecněná struktura mikrokontroléru

Budeme uvažovat o mikrokontrolérech obecně, aniž bychom byli vázáni na jakýkoli konkrétní typ mikrokontrolérů AVR, takže níže budeme zvažovat pouze vlastnosti architektury paměti společné pro většinu mikrokontrolérů, problémy vstupu/výstupu, zpracování přerušení, reset atd.

Paměť mikrokontroléru AVR

V mikrokontrolérech AVR je paměť implementována podle Harvardské architektury, což znamená oddělení instrukční a datové paměti. To znamená, že příkazy jsou přístupné nezávisle na přístupu k datům. Výhodou této organizace je zvýšení rychlosti přístupu do paměti.

Datová paměť

Datová paměť je určena pro zápis/čtení dat používaných programy. Je volatilní, to znamená, že pokud se vypne napájení mikrokontroléru, všechna data v něm uložená budou ztracena. V mikrokontrolérech AVR má datová paměť ve srovnání s mikrokontroléry PIC rozvinutější strukturu, jak je znázorněno na Obr. 2.1.


Rýže. 2.1. Struktura datové paměti v mikrokontrolérech AVR a PIC

Oblast SRAM (Static Random Access Memory) je naznačena na Obr. 2.1 je tečkovaný, protože jej nepoužívají všechny mikrokontroléry AVR (to platí pro interní i externí SRAM). Jeho počáteční adresa je 0x060 a jeho horní adresa se liší zařízení od zařízení.

V některých mikrokontrolérech AVR můžete zvětšit paměťový prostor SRAM připojením externích paměťových bloků až na 64 KB, ale to vyžaduje obětování portů A a C, které v tomto případě slouží k přenosu dat a adres.

Univerzální registry

Oblast registrace obecný účel(pracovní registry) je určen k dočasnému uložení proměnných a ukazatelů používaných procesorem k provádění programů. V mikrokontrolérech AVR se skládá z 32 osmibitových registrů (rozsah adres 0x000 - 0x01F). V mikrokontrolérech PIC jsou univerzální registry také osmibitové, ale jejich počet a rozsah adres závisí na konkrétním typu zařízení.

V programech napsaných v C není přímý přístup k obecným registrům obvykle nutný, pokud není použit kód assembleru.

Registry speciálních funkcí mikrokontroléru PIC

V mikrokontrolérech PIC se pro řízení různých operací používají speciální funkční registry. Stejně jako u obecných registrů se jejich počet a adresování liší zařízení od zařízení. V programech napsaných v C není obvykle vyžadován přímý přístup k registrům speciálních funkcí, pokud nejsou použity fragmenty jazyka symbolických instrukcí.

I/O oblast mikrokontrolérů AVR

I/O oblast mikrokontrolérů AVR obsahuje 64 registrů sloužících k ovládání nebo ukládání dat z periferních zařízení. Ke každému z těchto registrů lze přistupovat pomocí I/O adresy (začínající na 0x000) nebo pomocí adresy SRAM (v takovém případě by mělo být k I/O adrese přidáno 0x020). Programy C obvykle používají konvenční názvy I/O registrů a adresy mají význam pouze pro programy v jazyce symbolických instrukcí.

Jména, I/O a SRAM adresy a Stručný popis registry ze vstupní/výstupní oblasti mikrokontrolérů AVR jsou uvedeny v tabulce. 2.1. Je třeba poznamenat, že v různé modely mikrokontroléry, některé z uvedených registrů nejsou použity a adresy nejsou uvedeny v tabulce. 2.1 jsou vyhrazeny společností Atmel pro budoucí použití.

Tabulka 2.1. Popis registrů z oblasti I/O

Registrovat jméno I/O adresa Adresa SRAM Popis
ACSR 0x08 0x28 Ovládání analogového komparátoru a stavový registr
UBRR 0x09 0x29 Registr přenosové rychlosti UART
UCR 0x0A 0x2A Registr ovládání transceiveru UART
USR 0x0V 0x2V Registr stavu transceiveru UART
UDR 0х0С 0x2С Registr dat transceiveru UART
SPCR 0x0D 0x2D Registr ovládání rozhraní SPI
SPSR 0x0E 0x2E Registr stavu rozhraní SPI
SPDR 0x0F 0x2F Registr I/O dat SPI
PIND 0x10 0x30 Piny portu D
DDRD 0x11 0x31 Port D Data Direct Register
PORTD 0x12 0x32 Registr dat portu D
PINC 0x13 0x33 Piny portu C
DDRC 0x14 0x34 Port C Data Direct Register
PORTC 0x15 0x35 Registr dat portu C
PINB 0x16 0x36 Piny portu B
DDRB 0x17 0x37 Port B Data Direct Register
PORTB 0x18 0x38 Registr dat portu B
PINA 0x19 0x39 Piny portu A
DDRA 0x1A 0x3A Port A registr směru dat
PORTA 0x1V 0x3V Registr dat portu A
EECR 0x1С 0x3С Řídicí registr paměti EEPROM
EEDR 0x1D 0x3D EEPROM datový registr
EEARL 0x1E 0x3E Registr adres paměti EEPROM (nízký bajt)
EEARH 0x1F 0x3F Registr adres paměti EEPROM (vysoký bajt)
WDTCR 0x21 0x41 Watchdog Timer Control Register
ICR1L 0x24 0x44
ICR1H 0x25 0x45 Registr záznamu časovače/počítadla T/C1 (nízký bajt)
OCR1BL 0x28 0x48 Srovnávací registr B časovače T/C1 (nízký bajt)
OCR1BH 0x29 0x49 Srovnávací registr B časovače T/C1 (vysoký bajt)
OCR1AL 0x2A 0x4A Srovnávací registr A časovače T/C1 (nízký bajt)
OCR1AH 0x2V 0x4V Srovnávací registr A časovače T/C1 (vysoký bajt)
TCNT1L 0x2С 0х4С Počítací registr časovače/čítače T/C1 (nízký byte)
TCNT1H 0x2D 0x4D Počítací registr časovače/počítadla T/C1 (vysoký bajt)
TCCR1B 0x2E 0x4E Řídicí registr B časovače/počítadla T/C1
TCCR1A 0x2F 0x4F Řídicí registr A časovače/počítadla T/C1
TCNT0 0x32 0x52 Počítací registr časovače/počítadla T/C0
TCCR0 0x33 0x53 Řídicí registr časovače/počítadla T/C0
MCUCR 0x35 0x55 Řídicí registr mikrokontroléru
TIFR 0x38 0x58 Registr příznaků přerušení časovače/počítadla
TIMSK 0x39 0x59 Registr maskování přerušení časovače
GIFR 0x3A 0x5A Obecný registr příznaků přerušení
GIMSK 0x3V 0x5V Obecný registr maskování přerušení
SPL 0x3D 0x5D Ukazatel zásobníku (nízký bajt)
SPH 0x3E 0x5E Ukazatel zásobníku (vysoký bajt)
SREG 0x3F 0x5F Stavový registr

Stavový registr SREG mikrokontrolérů AVR

Stavový registr obsahuje stavové příznaky mikrokontrolérů AVR a je umístěn v I/O oblasti na adrese $3F (adresa SRAM je $5F). Po obdržení signálu reset se inicializuje na nuly.

Mikrokontroléry (dále jen MK) pevně vstoupily do našich životů, na internetu lze najít spoustu zajímavých obvodů, které jsou na MK prováděny. Co na MK nenamontujete: různé indikátory, voltmetry, domácí spotřebiče (ochranky, spínací přístroje, teploměry...), detektory kovů, různé hračky, roboty atd. Seznam může trvat velmi dlouho. Viděl jsem první obvod na mikrokontroléru před 5-6 lety v rozhlasovém časopise a téměř okamžitě jsem otočil stránku a pomyslel si: „Stále to nebudu schopen sestavit. Skutečně byly v té době pro mě MK velmi složité a nepochopené zařízení, neměl jsem ponětí, jak fungují, jak je flashovat a co s nimi dělat v případě nesprávného firmwaru. Ale asi před rokem jsem poprvé sestavil svůj první obvod na MK, byl to obvod digitální voltmetr na 7 segmentových indikátorech a mikrokontroléru ATmega8. Stalo se, že jsem si náhodou koupil mikrokontrolér, když jsem stál v oddělení rádiových součástek, týpek přede mnou kupoval MK a taky jsem se rozhodl, že si ho koupím a zkusím něco sestavit. Ve svých článcích vám budu vyprávět Mikrokontroléry AVR, naučím vás s nimi pracovat, podíváme se na programy pro firmware, vyrobíme si jednoduchý a spolehlivý programátor, podíváme se na proces firmwaru a hlavně na problémy, které mohou nastat ne pouze pro začátečníky.

Základní parametry některých mikrokontrolérů rodiny AVR:

Mikrokontrolér

Flash paměť

paměti RAM

Paměť EEPROM

I/O porty

U moc

Další parametry AVR mega MK:

Provozní teplota: -55…+125*С
Skladovací teplota: -65…+150*С
Napětí na pinu RESET vzhledem k GND: max 13V
Maximální napájecí napětí: 6,0V
Maximální proud I/O linky: 40 mA
Maximální napájecí proud VCC a GND: 200mA

Model Pinouts ATmega 8X

Pinouty pro modely ATmega48x, 88x, 168x

Rozložení kolíků pro modely ATmega8515x

Rozložení kolíků pro modely ATmega8535x

Rozložení kolíků pro modely ATmega16, 32x

Rozložení kolíků pro modely ATtiny2313

Archiv s datasheety pro některé mikrokontroléry je přiložen na konci článku.

Instalační bity FUSE MK AVR

Pamatujte, že naprogramovaná pojistka je 0, nenaprogramovaná je 1. Při nastavování pojistek buďte opatrní, nesprávně naprogramovaná pojistka může zablokovat mikrokontrolér. Pokud si nejste jisti, kterou pojistku potřebujete naprogramovat, je lepší napoprvé zablikat MK bez pojistek.

Mezi radioamatéry jsou nejoblíbenější mikrokontroléry ATmega8, následované ATmega48, 16, 32, ATtiny2313 a dalšími. Mikrokontroléry se prodávají v baleních TQFP a DIP, pro začátečníky doporučuji nákup v DIP. Pokud si koupíte TQFP, bude problematičtější je flashnout, desku si budete muset koupit nebo připájet, protože jejich nohy jsou umístěny velmi blízko u sebe. Doporučuji vám nainstalovat mikrokontroléry v DIP balíčcích na speciální zásuvky, je to pohodlné a praktické, nemusíte MK odpájet, pokud jej chcete přeflashovat nebo použít pro jiný design.

Téměř všechny moderní MK mají schopnost in-circuit ISP programování, tzn. Pokud je váš mikrokontrolér připájen k desce, pak za účelem změny firmwaru jej nebudeme muset z desky odpájet.

K programování se používá 6 pinů:
RESETOVAT- Přihlásit se MK
VCC- Plus napájení, 3-5V, závisí na MK
GND- Společný vodič, mínus napájení.
MOSI- MK vstup (informační signál v MK)
MISO- MK výstup (informační signál z MK)
SCK- MK vstup (hodinový signál v MK)

Někdy také používají piny XTAL 1 a XTAL2; na tyto piny je připojen quartz, pokud je MK napájen externím oscilátorem; v ATmega 64 a 128 se piny MOSI a MISO nepoužívají pro programování ISP; místo toho jsou piny MOSI připojeno ke kolíku PE0 a MISO ke kolíku PE1. Při připojování mikrokontroléru k programátoru by propojovací vodiče měly být co nejkratší a kabel vedoucí z programátoru do LPT portu by také neměl být příliš dlouhý.

Označení mikrokontroléru může obsahovat podivná písmena s čísly, například Atmega 8L 16PU, 8 16AU, 8A PU atd. Písmeno L znamená, že MK pracuje na nižším napětí než MK bez písmene L, obvykle 2,7V. Čísla za pomlčkou nebo mezerou 16PU nebo 8AU označují vnitřní frekvenci generátoru, který je v MK. Pokud jsou pojistky nastaveny na provoz z externího quartz, měl by být quartz nastaven na frekvenci nepřesahující maximum podle datasheetu, to je 20 MHz pro ATmega48/88/168 a 16 MHz pro ostatní atmegas.

Mikrokontroléry AVR. Základy programování

Struktura a hlavní charakteristiky mikrokontrolérů AVR

V tomto článku se pokusíme nastínit obecně, hlavní charakteristiky, co je „uvnitř“, co je potřeba pro zahájení práce s mikrokontroléry AVR atp.

Co je Tiny, Mega?

Společnost Atmel vyrábí rozsáhlou řadu osmibitových mikrokontrolérů založených na jádře AVR, rozdělených do několika podrodin, které se liší Technické specifikace, oblasti použití, cena:

  • ATtiny- rodina Mikrokontroléry AVR optimalizované pro aplikace, které vyžadují relativně vysoký výkon (až 1,0 MIPS a jsou schopny pracovat na frekvencích až 20,0 MHz), energetickou účinnost (ATtiny je jediná rodina schopná pracovat od napájecího napětí 0,7 V!) a kompaktnost (existují mikrokontroléry v pouzdru SOT23-6 - pouze 6 pinů a každý pin má několik funkcí, např.: I/O port, ADC vstup, PWM výstup atd.). Zde se objevuje jejich rozsah použití: zařízení, která jsou kritická z hlediska ceny, spotřeby energie, velikosti atd.
  • ATmega– Rodina mikrokontrolérů AVR navržená pro použití v nejrůznějších oblastech díky velmi velká sada periferní zařízení, velké množství programové paměti, vstupní/výstupní porty atd. Jedním slovem, prostor pro rozšíření je zde.
  • ATxmega– nová rodina mikrokontrolérů AVR s více velká sada periferní zařízení než ATmega (přidáno zařízení s přímým přístupem do paměti, DAC, CRC modul, plný USB rozhraní, rychlejší ADC atd.), s pracovními frekvencemi až 32,0 MHz.

Stojí za povšimnutí hlavní rys všechna výše uvedená zařízení: všechna mají jedinou architekturu, což usnadňuje přenos kódu z jednoho mikrokontroléru na druhý.
Mikrokontroléry jsou k dispozici v pouzdrech DIP i SMD (každý má své výhody a nevýhody).

Nejoblíbenější obaly jsou:

  • DIP (Dual Inline Package) - pouzdro se dvěma řadami kontaktů
  • QFP (Quad Flat Package) - ploché pouzdro se čtyřmi řadami kontaktů
  • SOIC (Small-Outline Integrated Circuit) – malé (malé oblasti) integrované obvody

Co se týče radioamatérské praxe, o mikrokontroléry je samozřejmě největší zájem DIP balíček, jelikož se s nimi nejsnáze pracuje - mají poměrně velkou rozteč mezi piny a navíc pro ně můžete použít zásuvky (jedná se o speciální konektor, kam můžete instalovat mikroobvody bez pájení).
Obecně je zásuvka extrémně pohodlný vynález - kolíky jsou vždy neporušené a můžete opakovaně vyjímat a vkládat mikroobvod a je mnohem snazší vyrábět prototypy budoucích zařízení.

Napájení a taktování mikrokontrolérů AVR

Mikrokontroléry AVR postavený pomocí technologie CMOS, která zajišťuje velmi nízkou spotřebu energie. V praxi spotřeba energie lineárně a přímo úměrná pracovní frekvenci (čím vyšší frekvence, tím vyšší spotřeba).



Napájecí napětí pro mikrokontroléry AVR se pohybuje od 2,7 až 5,5 V(6,0V je maximum, i když moje AVR tak nějak fungovalo na 7V - a nic, žije dodnes). To znamená, že AVR může přímo ovládat, vyměňovat si data atd. S různá zařízení(jak 3,3V-tolerantní, tak 5V-tolerantní) bez nutnosti použití jakýchkoli převodníků logické úrovně. Pro přesnější zpracování analogových signálů poskytuje AVR samostatné piny pro napájení analogové části mikrokontroléru, která zahrnuje zařízení jako ADC, DAC a analogový komparátor. Kromě toho mají mikrokontroléry AVR několik „režimů spánku“, které poskytují nejlepší možnou úsporu energie.

Také každý pin mikrokontroléru (v závislosti na pracovní frekvenci a napájecím napětí) může napájet externí zařízení proudu až 40,0 mA(maximum!), ale vše lze „stáhnout/stáhnout“ z mikrokontroléru až 200,0 mA(maximum!).

Frekvenční rozsah hodinových signálů se liší v závislosti na „rodinné senioritě“ (ATtiny je nejmladší rodina mikrokontrolérů AVR a ATxMega nejstarší). U některých zástupců, zejména rodiny ATtiny, může provozní frekvence dosáhnout 20,0 MHz, u ATmega je to nepřesahuje 16,0 MHz, zatímco ATxMega nepřekročí 32,0 MHz. Každý mikrokontrolér AVR má také interní RC oscilátor až do 8,0 MHz, který vám umožní obejít se bez vnější zdrojčasovací signál.

Atmel vyrábí mikrokontroléry s maximálními pracovními frekvencemi, které jsou poloviční oproti standardu (pro zvýšení úspory energie), proto byste při nákupu měli věnovat pozornost kódování mikrokontrolérů. Detailní informace o tom, který mikrokontrolér pracuje na jakých frekvencích a napájecích napětích, jaké typy kódování a balení jsou pro tento mikrokontrolér k dispozici atd. naleznete v části „Informace pro objednání“ každého datového listu.

Níže je uveden příklad tabulky z datového listu pro mikrokontrolér ATtiny13. Ve sloupci "Objednací kód" vidíte rozdíly mezi kódováními a není těžké uhodnout, s čím jsou spojeny.



Co je uvnitř mikrokontroléru AVR?

Jak již bylo řečeno v předmluvě, Mikrokontroléry AVR mají architekturu Harvardu ( hlavní charakteristika Tato architektura spočívá v tom, že programová paměť a RAM, stejně jako jejich přístupové sběrnice, jsou odděleny, aby se zvýšila rychlost provádění instrukce: zatímco je vykonávána jedna instrukce, další je načítána z programové paměti) s RISC procesorem s rychlostí 1,0 MIPS. Všechny mikrokontroléry, bez ohledu na jejich model a uspořádání, mají stejnou centrální procesorovou jednotku (procesor/jádro). Díky jedinému jádru je program napsaný v jakémkoli jazyce univerzálnější a v případě potřeby může být nahrazen v jakémkoli projektu, řekněme dražším řadičem, jiným levnějším, s minimálními změnami v kódu.

RISC(Reduced Instruction Set Computer) – procesor se sadou jednoduchých montážních instrukcí (sčítání, odečítání, posun doleva/doprava, „logický AND“ atd.), všechny instrukce mají pevnou délku, procesor obsahuje velké množství obecných účelové registry atd. Aby například mohl vypočítat nějaký druh průměrné matematické rovnice, bude muset procesor provést několik jednoduchých instrukcí sestavení, na rozdíl od procesoru CISC, který má instrukce „pro všechny příležitosti“. Ale AVR není tak docela RISC -procesor, protože ne všechny instrukce sestavení mají pevný formát. Většina má 16bitový formát, zbytek je 32bitový. To znamená, že každá instrukce zabírá 16 nebo 32 bitů v paměti programu. Mimochodem, nepevné Délka montážních instrukcí je to, co z něj dělá procesor: Advanced Virtual RISC procesor (AVR).

MIPS(Milion instrukcí za sekundu) - Mikrokontroléry AVR jsou schopny provést (přibližně) milion instrukcí na 1,0 MHz, nebo jednoduše řečeno, většina instrukcí pro sestavení je provedena v jediném hodinovém cyklu.



Mozkem mikrokontroléru AVR je jeho centrální procesorová jednotka (CPU/jádro).

Některé součásti procesoru:

Aritmetická logická jednotka

Počítadlo programů

Ukazatel zásobníku

  • Stavový registr
  • Paměť programu Flash
  • Datová paměť

Registry pro všeobecné použití

Periferní registry (I/O registry)

paměti RAM

Systém hodin. Tento systém lze přirovnat ke kardiovaskulárnímu systému

Jednotka přerušení

Periferní zařízení, uvedu některá z nich:

I/O porty

Paměť EEPROM

Rozhraní USB (pouze xMega), USART, I2C, SPI, JTAG

Watchdog, Timer/Counter (s PWM oscilátorem, zachycením/porovnáním atd.)

ADC, DAC (pouze xMega), analogový komparátor

Externí moduly přerušení

Sada periferních zařízení v různých rodinách (Tiny, Mega a xMega) a různých mikrokontrolérů těchto rodin je různá. Existují mikrokontroléry plné různých periferních zařízení, ale pro kritický vývoj existují také mikrokontroléry s malou (nezbytnou) sadou periferií.

Jednou z výhod mikrokontrolérů AVR je schopnost používat periferní zařízení v různých společných provozních režimech, což velmi často zjednodušuje úkol vývojáře. AVR má také zabudovaný systém pro resetování a sledování úrovně napájecího napětí (System Control and Reset), který zajišťuje normální start mikrokontroléru a v případě potřeby spolehlivé vypnutí.

Periferní řídicí/stavové registry jsou umístěny v oblasti datové paměti, mezi obecnými registry a RAM, který zajišťuje vysoký výkon při práci s periferiemi. Vývojář má samozřejmě k těmto registrům (I/O Registers) plný přístup.

Co je potřeba, aby mikrokontrolér fungoval?

  • napsat program (program). Abyste mohli napsat program/algoritmus, pro který bude mikrokontrolér fungovat, budete potřebovat integrované vývojové prostředí pro mikrokontroléry AVR, které zahrnuje editor kódu/textu, kompilátor, linker a další nástroje.
  • návrh obvodu. Samotný program nestačí k tomu, aby mikrokontrolér fungoval, ale vyžaduje také minimální body kit (sada externích elektronická zařízení), poskytnout mikrokontroléru napájecí napětí a hodinový signál tak, aby fungovalo alespoň jádro mikrokontroléru.
Následující obrázek ukazuje „klasickou“ sadu mikrokontroléru potřebnou pro normální provoz.


Obrázek ukazuje minimální požadavky na obvod pro mikrokontrolér ATmega16. S tímto schématem přepínání začne fungovat jádro mikrokontroléru AVR, můžete využít všechny vstupní/výstupní porty atp. periferie. Mikrokontrolér je zkrátka v plné bojové pohotovosti. Chcete-li například začít používat ADC nebo analogový komparátor, měli byste nejprve programově nakonfigurovat periferní zařízení pomocí jeho řídicích/monitorovacích registrů pro nastavení provozního režimu, který potřebujete atd., a poté aplikovat zkoumané signály na vstupy odpovídající periferní zařízení.

- Quartz a kondenzátory C1, C2 (každý 22 pF) poskytují mikrokontroléru a všem jeho periferním zařízením vysoce kvalitní hodinový signál (maximální frekvence - 16,0 MHz).

Rezistor R1(10K), poskytuje vysokou úroveň na vstupu RESET, nezbytnou pro stabilní provoz mikrokontroléru. Pokud během provozu mikrokontroléru klesne napětí na tomto pinu pod určitou úroveň, mikrokontrolér se resetuje a může být narušena činnost zamýšleného algoritmu.

- ISP konektor používá se pro in-circuit programování, to znamená, že je nutné zapsat vámi zapsaný program do paměti mikrokontroléru přímo na desce (bez vyjmutí mikrokontroléru ze zařízení).

- Plyn L1 a kondenzátory C3, C4 poskytují napájecí napětí pro analogová periferní zařízení a také některé registry I/O portů. Pokud mikrokontrolér nemá analogovou část, pak neexistují žádné analogové napájecí kolíky, v důsledku toho tyto komponenty nejsou potřeba. Zjednodušené zapojení mikrokontroléru je následující: za prvé, jelikož byl mikrokontrolér zbaven externího taktování, mělo by to indikovat, že taktování bude pocházet z interního RC oscilátoru nastavením příslušných pojistkových bitů (jakýsi omezující provozní parametry mikrokontroléru ).
Maximální frekvence interního oscilátoru je 8,0 MHz, což znamená, že mikrokontrolér nebude schopen pracovat na své maximální frekvenci (výkonu).
Za druhé, analogová část mikrokontroléru (stejně jako některé registry vstupních/výstupních portů) nemají zdroj napájení, což vylučuje jejich použití.
Za třetí, neexistuje žádný konektor pro programování v obvodu, takže abyste mohli zapsat firmware do paměti mikrokontroléru, budete jej muset ze zařízení odstranit, někam zapsat a poté vrátit na své místo. Jak sami chápete, není to příliš pohodlné (vyjmutí/vložení, pájení/odpájení) a může to vést k poškození jak samotného mikrokontroléru (nohy se mohou zlomit, přehřátí při pájení atd.), tak blízkých zařízení - konektor, stopy na palubě atd.

Mikrokontrolér to je, dalo by se říci, malý počítač. která má své vlastní procesor (registry, řídicí jednotka a aritmetická logická jednotka), Paměť, stejně jako různé obvod, jako I/O porty, časovače, regulátory přerušení, různé pulzní generátory a dokonce i analogové převodníky. Nemůžete vyjmenovat všechno. Není možné vyjmenovat všechny aplikace mikrokontrolérů.

Ale pokud vše výrazně zjednodušíme, pak hlavní funkcí mikrokontroléru je „skákání nohama“. Tito. má několik kolíků (od 6 do několika desítek v závislosti na modelu) a na těchto kolících lze nastavit buď 1 (úroveň vysokého napětí, například +5 voltů) nebo 0 (úroveň nízkého napětí, asi 0,1 voltu) v závislosti na softwaru algoritmus pevně zavedený do jeho paměti. Mikrokontrolér může také určit stav signálu na svých nohách (k tomu musí být nakonfigurovány jako vstup) - zda je tam napětí vysoké nebo nízké (nula nebo jedna). Moderní mikrokontroléry mají také téměř univerzálně na desce analogově-digitální převodník - jedná se o věc podobnou voltmetru, umožňuje nejen sledovat 0 nebo 1 na vstupu, ale plně měřit napětí od 0 do referenční (obvykle se reference rovná napájecímu napětí) a uveďte ji jako číslo od 0 do 1024 (nebo 255, v závislosti na velikosti bitu ADC)

Z toho si můžete vyrobit chytrý dům, a mozek pro domácího robota, inteligentní systém ovládání akvária nebo jen krásný LED displej s běžícím textem. Mezi elektronickými součástkami MK se jedná o jedno z nejuniverzálnějších zařízení. Například při vývoji dalšího zařízení se raději neobtěžuji s různými druhy zvrhlostí návrhu obvodů, ale propojím všechny vstupy a výstupy s mikrokontrolérem a veškerou provozní logiku udělám softwarově. Dramaticky šetří čas i peníze, což znamená peníze na druhou.

Existuje velmi, velmi mnoho mikrokontrolérů. Téměř každá sebevědomá společnost vyrábějící rádiové komponenty vyrábí svůj vlastní ovladač. V této rozmanitosti je však řád. MK jsou rozděleny do rodin, nebudu je vyjmenovávat všechny, ale popíšu pouze ty nejzákladnější osmibitové rodiny.

MSC-51
Nejrozsáhlejší a nejrozvinutější je MSC-51, nejstarší ze všech, pocházející z Intel 8051 a nyní vyrábí mnoho společností. Někdy se volá krátce C51. Jedná se o 8bitovou architekturu, která se od většiny ostatních osmibitových architektur liší tím, že je CISC architektura. Tito. Jeden příkaz může někdy provést poměrně složitou akci, ale příkazy se provádějí ve velkém počtu hodinových cyklů (obvykle 12 nebo 24 hodinových cyklů, v závislosti na typu příkazu), mají různé délky a je jich mnoho, pro všechny příležitosti . Mezi řadiče architektury MSC-51 setkat se jako dinosauři AT89C51 s minimem periferií, malou pamětí a nedůležitým výkonem a produkty jako monstra Silikonové laboratoře mít na palubě velmi masité periferie různých velikostí, obrovské zásobníky RAM a permanentní paměť, výkonná rozhraní od jednoduchých UART„předtím USB A UMĚT a také brutálně rychlé jádro, poskytující až 100 milionů operací za sekundu. Pokud jde o mě osobně, zbožňuji architekturu C51 pro její zatraceně pěkný assembler, o kterém je prostě radost psát. Pro tuto architekturu již byly napsány gigabajty kódu, byly vytvořeny všechny myslitelné i nemyslitelné algoritmy.

Atmel AVR
Moje druhá oblíbená rodina je AVR od společnosti Atmel. Vůbec Atmel vyrábí a MSC-51 ovladače, ale přesto se na ně zaměřují AVR. Tyto řadiče již mají 8bitové RISC architekturu a provést jeden příkaz v jednom hodinovém cyklu, ale na rozdíl od klasického RISC jádra mají velmi rozsáhlý příkazový systém, i když ne tak pohodlný jako u C51, a proto je nemám rád. Ale AVR vždy vybavený jako na válku a jednoduše nacpaný různými periferiemi, zejména ovladači podrodiny ATMega. Velmi snadno se také flashují, což nevyžaduje specializované programátory ani jiné složité vybavení. Vše, co potřebujete, je pět drátů a počítač LPT přístav. Snadné učení umožnilo tomuto ovladači pevně padnout do srdcí mnoha a mnoha radioamatérů po celém světě.

Mikročip PIC.
Další 8-bit RISC Mikrokontrolér se vyznačuje velmi zvráceným příkazovým systémem, který se skládá pouze z několika desítek příkazů. Každý příkaz se provádí ve čtyřech hodinových cyklech. má řadu výhod, především nízkou spotřebu energie a rychlý start. Průměrný PIC ovladač nemá tolik periferií jako v AVR, ale samotné úpravy PIC Existuje tolik ovladačů, že si vždy můžete vybrat krystal s periferiemi, které přesně vyhovují danému úkolu, nic víc, nic míň. Na PIC'ax tradičně stavěl palubní počítače pro automobily, stejně jako četné domácí alarmy.

Jakou rodinu si vybrat? Oh, to je těžká otázka. Na mnoha fórech a konferencích se stále vedou urputné boje na téma, která rodina je lepší, fanoušci AVR hádat se s následovníky MSC-51, cestou nezapomenout nakopnout ledviny PIC„ovce, na které reagují stejně.

Tady je situace jako ve Starcraftu :) Kdo je cool? Lidé? Zergové? Protossové? Je to všechno o aplikaci, rozsahu úkolů a řadě dalších parametrů. Každá rodina má své výhody a nevýhody. Ale osobně bych si vybral AVR a to z těchto důvodů:

  • 1. Dostupnost v Rusku. Tyto ovladače jsou zaslouženě oblíbené a milované lidmi, což znamená, že naši obchodníci jsou ochotni je nosit. Nicméně, jako PIC. S MSC-51 je situace horší. Není problém sehnat zastaralé AT89C51, ale kdo je potřebuje? Ale moderní silaby jsou již exkluzivní.
  • 2. Nízká cena. Obecně platí, že PIC je ve světě proslulý svou nízkou cenou, ale ironií je, že zdarma začínají pouze tehdy, když si ho koupíte po vagonu. Ve skutečnosti na skutečném pultu bude AVR o 30-40 procent levnější než PIC s o něco více funkcí. U MSC-51 je situace jasná v prvním bodě. Exkluzivita je nejen vzácná, ale také drahá.
  • 3. Mnoho periferií najednou. U sériového zařízení je to spíše nevýhoda. Je mnohem lepší mít jen to, co je potřeba pro aktuální úkol, a zbytek nenechat překážet a neplýtvat energií. Tím je PIC známý svým šířením modelová řada, kde najdete ovladač, který bude mít to, co potřebujete, a ne to, co nepotřebujete. Ale jdeme studovat a dělat to pro sebe! Takže je pro nás lepší mít vše najednou a v záloze. A tady je AVR hlava a ramena nad PIC a stále znovu a znovu vydává stále více a více nadupaných ovladačů. Koupil jsem si nějaký AtMega16A a je to, můžete studovat celá rodina.
  • 4. Jedno jádro. Faktem je, že všechny moderní AVR mají stejné jádro jednotný systém příkazy Existují pouze některé rozdíly na periferní úrovni (a ty jsou drobné). Tito. kód z nějakého maličkého ATTiny13 lze snadno zkopírovat a vložit do ATMega64 a funguje téměř bez úprav. A naopak téměř bez omezení. Pravda, starší modely AVR (všechny druhy AT90S1200) mají omezenou kompatibilitu shora dolů – mají o něco menší příkazový systém. Ale je to hotové. Microchip má celou řadu rodin. PIC12/16/18 s různými řídicími systémy. 12. rodina je obvykle malá věc (jako Tiny v AVR) a 18 jsou již vážnější ovladače (analogické k Mega AVR) A pokud lze kód z 12 přetáhnout na 18, pak zpět obr.
  • 5. Rozsáhlý příkazový systém pro regulátory AVR. AVR má asi 130 příkazů, zatímco Microchip PIC má pouze 35. Zdálo by se, že PIC je vítěz - méně příkazů, snazší se naučit. No, ano, přesně tak zní slogan mikročipu, něco jako "Pouze 35 týmů!" Jenomže tohle je vlastně blbost. Koneckonců, co je příkaz procesoru? Je to nástroj! Jen si představte dvě kalkulačky – běžnou, účetní a strojírenskou. Účetnictví je mnohem snazší se naučit než strojírenství. Ale zkusit na něm spočítat sinus? Nebo logaritmus? Ne, můžete, nehádám se, ale kolik stisknutí tlačítka a průběžných výpočtů to bude trvat? Stejná věc! Je mnohem pohodlnější pracovat, když máte po ruce spoustu různých akcí. Proto čím větší příkazový systém, tím lépe.
  • 6. Dostupnost bezplatných multiplatformních C kompilátorů. Samozřejmě, vždycky se dá najít trhlina. Kde kde, ale u nás s tím nikdy problém nebyl. Ale proč něco krást, když máte něco zdarma? ;)
  • 7. No, poslední argument je obvykle nejsilnější. Přítomnost někoho, kdo by poučil a poradil. Pomohl mi radou a nasměroval mě na správnou cestu. Vybral jsem si AVR pro sebe a na tomto webu (od alespoň prozatím) tato konkrétní rodina bude dokonale pochopena, což znamená, že nemáte moc na výběr :))))))

Oh, ale existuje celá řada stejných AVR. Který si mám vzít???
Zájem Zeptejte se. Obecně je pro úkol lepší zvolit MK. Ale abyste to studovali, je lepší chytit něco vycpaného.

Nejprve se podívejme na označení, abyste z ceníku okamžitě pochopili, jaké zvíře je před vámi. Zde je příklad pro vás

ATmega16A - 16PI

  • NA- vyrobeno v Atmelu
  • Mega- typ rodiny. Je tam ještě Tiny a Xmega (ta nová je hrozná věc, úplná helikoptéra). Obecně se mělo za to, že Drobeček byl jako nízkorozpočtový s malým množstvím mletého masa a obecně vadný, a naopak Mega bylo všechno najednou. Ve skutečnosti je nyní rozdíl mezi rodinami Tini a Mega, pokud jde o mleté ​​maso, minimální, ale Tini má menší paměť a pouzdra se dodává s počtem kolíků od 6 do 20.
  • 16 — množství flash paměti v kilobajtech. Ve skutečnosti to není tak jednoduché. Číslo paměti je mocninou dvou. Mega162 tedy není řadič se 162KB flash, ale jakási modifikace Mega162 s 16KB paměti. Nebo Mega88 není 88kb, ale 8kb flash a druhá 8 je jakousi nápovědou, že se jedná o další vývoj Mega8. Stejně tak Mega48 nebo Mega168. Totéž platí pro Tiniinu rodinu. Například Tini2313 - 2 kilobajty flash. Co je 313? Kdo sakra ví, co tím mysleli :) Nebo Tiny12 - 1kb Flash. Obecně se čip vyčistil.
  • A— předpona spotřeby energie (obvykle). Tento dopis možná neexistuje, ale v nové sérii je přítomen téměř všude. Například řady V a L jsou nízkonapěťové a mohou pracovat od 2,7 V. Pravda, za nízké napětí musíte platit nižší frekvenci. Ale přetaktování je možné i zde, nic lidského nám není cizí :) A a P mají nové řady AVR s technologií PicoPower tzn. ultra-ekonomický. U jejich neindexových modelů není žádný rozdíl ve výplně a vnitřní struktuře, rozdíl je pouze ve fungování všech režimů spánku a spotřebě energie. Tito. Mega16A lze snadno změnit na Mega16 bez A. A nic jiného není třeba měnit.
  • 16 — Limit hodinová frekvence v megahertzech. Ve skutečnosti to můžete přetaktovat na 20 ;)
  • P- druh skořápky. Důležitá vlastnost. Faktem je, že ne každý případ lze pájet doma bez hemoroidů. Prozatím doporučuji věnovat pozornost pouzdru P-DIP. Je to objemné monstrum, ale snadno se páje a hlavně se snadno zasune do speciální zásuvky a zase se z ní vyjme. Pouzdra SOIC (index S) nebo TQFP (index A) je lepší prozatím odložit. Bez dobrých zkušeností s pájením a schopnosti kvalitního leptání tištěný spoj Je lepší se do nich nemíchat.
  • — Typ cínování vývodů. I - olověná pájka. U - bezolovnatý. Pro vás v tom není absolutně žádný rozdíl. Vezměte ten, který je levnější.

Doporučuji následující modely:

  • ATMega16A-16PU - levné (asi 100-150 rublů), mnoho pinů, spousta periferií. Dostupné v různých pouzdrech. Je to jednoduché, můj výcvikový kurz a všechny další příklady jsou tomu přizpůsobeny.
  • ATTiny2313-20SU je ideální volbou pro výrobu všech druhů hodin/budíků a další malé domácí automatizace. Levné (40 rublů), kompaktní. Nevýhodou je, že neexistuje ADC.
  • ATmega48/88/168 některý z těchto ovladačů. Kompaktní (v případě tqfp je to nejtenčí a nejmenší z AVR), levné (100-150 rublů), plněné až po okraj.
  • ATmega128 pro zkušené. Velký, výkonný, spousta paměti. Drahé (asi 400 R)

Předpokládejme, že máte za úkol – nechat blikat LED.
Pojďme diskutovat o tom, jak tento problém vyřešit:

Možnost 1 je nejjednodušší, vezměte páčkový vypínač/tlačítko, umístěte vedle něj otroka, který bude LED zapínat/vypínat pomocí páčkového přepínače. Obvykle se v Rusku většina problémů řeší tímto způsobem. A co to bliká?)))
Možnost 2 - sestavte multivibrátor. Už zajímavější. K blikání stačí jedna LED dobré rozhodnutí. Navíc je jednoduchý, levný a spolehlivý.
Možnost 3 - sestavení na mikrokontroléru. Dražší než montáž multivibrátoru, ale podle mě jednodušší. Napsal jsem program, spustil ho a dostal výsledek. Žádné nastavení. To je samozřejmě ideální případ.

Nyní si úkol zkomplikujeme. Například 5 LED diod a 5 možností jejich blikání (mění se rychlost a pořadí jejich blikání). První možnost okamžitě zmizí, způsob 2 lze provést, ale velikost zařízení se prudce zvětší. Možnost 3 zůstane přibližně stejně velká, stačí přidat pár řádků kódu. Proto existují různé případy, kdy to bez mikrokontroléru nejde a kde je to nadbytečné. Vždy proto odhadněte mzdové, časové a finanční náklady.

Mikrokontrolér nám tedy umožňuje flexibilně řídit systémy, procesy atd., má malé rozměry a z hlediska funkčnosti je to minipočítač. Mikrokontroléry jsou vyráběny různými společnostmi. Jedna z odrůd mikrokontrolérů AVR od společnosti Atmel. proč oni? V obchodě se dají celkem snadno najít, příklady se dají snadno najít připravený kód, vestavěná funkčnost umožňuje řešit i složité problémy.

Aby mikrokontrolér pochopil, co od něj chceme, musíme do něj nahrát firmware – sekvenci akcí, které potřebuje provést. Firmware je posloupnost jedniček a nul. Aby to bylo pohodlnější, byly vynalezeny programovací jazyky. Například napíšeme zapnout a kompilátor to sám převede na posloupnost jedniček a nul, která je srozumitelná pro mikrokontrolér. Obrázek ukazuje HEX firmware, pokud jej otevřete pomocí poznámkového bloku.

Mikrokontroléry jsou obvykle programovány v jazyce C nebo v assembleru. Celkově vzato není rozdíl v tom, na co psát. Vzhledem k velkému množství hotových příkladů jsem se rozhodl pro C. Kromě toho existuje několik programů, které vám umožňují psát v C. Například zdarma, proprietární AVR Studio, CodeVision, WinAVR atd. I když píšu v CodeVision, velmi aktivně používám AVR Studio jako debugger.

Doufám, že vám alespoň něco z toho bylo jasné. Podle mě je nejtěžší udělat první krok. Ten, kdo to udělá, překoná svůj strach a svou lenost, určitě dosáhne výsledků. Hodně štěstí při učení mikrokontrolérů.