Jaký je princip fungování AVR?
Každý ví, že kompilátor C bez standardních knihoven je nudná věc. Při programování pro x86 jsou téměř vždy zahrnuty alespoň dva soubory záhlaví – stdio.h a conio.h, které poskytují základní možnosti vstupu/výstupu na obrazovku, přičemž nejoblíbenějšími funkcemi jsou printf(), scanf() a getch() . Kromě toho je obvykle zahrnuto mnoho dalších knihoven pro specifičtější funkce, jako je matematika. Je však zřejmé, že mikrokontrolér nemá klávesnici ani obrazovku (pokud si je sami nepřipojíme, a to je úplně jiný příběh). Má však mnoho dalších standardních periferií, ke kterým lze přistupovat ihned po vybalení.
Většina dalších argumentů a postulátů je uvedena pro kompilátor AVR GCC a prostředí AVR Studio.
Funkce stdio.h zde tedy je avr/io.h. Ano, správně, s lomítkem v názvu. Tento soubor obsahuje definice konstant, názvů registrů a čehokoli dalšího, co může být potřeba k provedení základního I/O. Můžete to porovnat s conio.h avr/interrupt.h – druhý nejdůležitější hlavičkový soubor. Jak název napovídá, poskytuje možnosti zpracování přerušení.
Přerušení lze považovat za volání hardwarové funkce. To znamená, že když nastane jakákoli fyzická událost (například výskyt napájecího napětí na určitém pinu portu), řadič sám začne okamžitě provádět nějaký předem určený kód a poté se vrátí do bodu v programu, kde jej tato událost zachytila. a pokračuje ve vykonávání hlavního kódu.
Další bod specifický pro vestavěné systémy. Nejčastěji se běžný program pro „velký“ počítač spouští pod kontrolou operačního systému, a proto funkce main() končí tzv. příkazem return. terminační kód – známý návrat 0 na konci. Kromě toho může main() přijímat argumenty – parametry příkazového řádku. Je však jasné, že mikrokontrolér nemá operační systém – od samého počátku je řízení všech zdrojů svěřeno jedinému ovládacímu programu. Standardní vyplňování proto nemá smysl – kód není kam vrátit. A samozřejmě main() v programu pro MK nemůže přijmout žádné argumenty – prostě nemají odkud pocházet.
Mimochodem, protože mikrokontrolér vykonává pouze jeden program, měl by vypadat jako nekonečná smyčka nebo s ní končit, protože chování zařízení mimo ovládací program není definováno a při zapnutí zařízení musí být uživatelský kód neustále prováděny.
Na základě výše uvedeného si můžete představit základní strukturu programu pro mikrokontrolér:
#obsahovat avr/io.h> zrušit hlavní(zrušit) /*Nastavení periferií se obvykle provádí zde*/ zatímco (1); >
Občas se něco smysluplného dělá v nekonečné smyčce, ale dost často je to prázdné, jako v příkladu, a slouží jen k tomu, aby se řadič nedostal dále než uživatelský program a veškerá práce se dělá v přerušeních.
2. Bitové operace.
Při programování MK dost často musíte manipulovat s jednotlivými bity v registrech a proměnných. Například nastavte nebo resetujte určitý bit, aniž byste se dotkli ostatních. Toho lze dosáhnout pomocí bitových logických operací – posun (>), bitový OR ( | ), bitový AND ( & ) a bitová inverze ( ~ ).
Nastavení jednoho bitu v proměnné:
byl|=(1bit_number);
Vymazání jednoho bitu:
Samozřejmě můžete také nastavit/resetovat skupinu bitů:
byl|=(1trochu1) | (1trochu2) | (1trochu3) ...; byl&=~((1trochu1) | (1trochu2) | (1trochu3) ...);
Kromě toho se často setkáváme s úkolem zkontrolovat stav bitu (je to nula nebo jedna). To je také možné pomocí bitových operací.
Kontrola bitu v proměnné var pro rovnost jedné:
if (byl & (1bit_number)) /*tento bit je nastaven (jedna)*/ > jiný /*bit reset (nula)*/ >
Je zřejmé, že podobným způsobem můžete současně zkontrolovat, zda se skupina bitů shoduje s jednou.
3. I/O porty.
I/O porty jsou hlavní periferní moduly, které jsou vždy přítomny v každém mikrokontroléru. Některé MK možná nemají skoro nic, ale rozhodně mají porty. Ve skutečnosti jsou to právě ty nohy, které trčí z epoxidového pouzdra mikroobvodu a kterými krystal komunikuje s vnějším světem. Pro program jsou porty, stejně jako jakékoli jiné periferie, reprezentovány I/O registry. Z hlediska programování v jazyce C lze registry považovat za předdefinované proměnné deklarované ve standardním hlavičkovém souboru (avr/io.h). Každý bit v řídicím registru je jedinečně mapován na pin fyzického ovladače.

Je zřejmé, že data mohou proudit jak uvnitř MK, tak z něj do externích zařízení. Porty tedy mohou fungovat jako vstupní nebo výstupní. Směr chodu každé nohy lze nastavit nezávisle. K tomu slouží registr DDRx, kde x je písmeno
přístav.
Obecně mají označení rejstříku obvykle následující formát:
Že., DDRB – Data Dsměrování Rregistr přístavu B.
Jeden bit v DDRx znamená, že odpovídající pin je nakonfigurován pro výstup, nula – pro vstup. Registr PORTx se používá k ovládání pinů nakonfigurovaných pro výstup. Jednička v PORTx znamená, že pin spojený s odpovídajícím bitem registru bude napájen napájecím napětím; pokud se tam napíše nula, noha se připojí na společný vodič. Ke čtení stavu pinů nakonfigurovaných pro vstup se používá registr PINx. Podobně čtecí jednotka znamená, že na nohu je zvenčí přivedeno napětí větší než tři volty (přibližně), nula znamená, že na nohu je přivedeno méně než jeden a půl voltu (také přibližně).
Speciálním případem je zápis jedničky do bitu PORTx odpovídajícímu pinu nakonfigurovanému jako vstup pomocí DDRx. V tomto případě bude k noze připojen interní pull-up rezistor (k napájení).
Pull-up rezistor (“pull-up”) je rezistor zapojený mezi bod obvodu a napájecí zdroj (nebo zem), aby fixoval potenciál tohoto bodu. Říká se, že to „táhne“ směrem k výživě (zemi).
Piny MK konfigurované jako vstupy mají velmi vysoký vstupní odpor, a proto je takové opatření nutné, aby se zabránilo čtení náhodných hodnot kvůli rušení (a někdy i pro specifičtější účely).
Takže zjednodušené blokové schéma výstupu mikrokontroléru lze znázornit následovně:
Příkladem je jednoduchá blikající LED na výstupu regulátoru.
Níže uvedený příklad používá standardní knihovnu util/delay. Obsahuje funkce jednoduchých (počítání hodinových cyklů) zpoždění – _delay_ms() (zpoždění v milisekundách), _delay_us() (zpoždění v mikrosekundách) atd.
Důležité – parametr zadaných funkcí může být pouze konstanta! To je způsobeno zvláštnostmi jejich kompilace.
#obsahovat avr/io.h> #obsahovat util/delay.h> zrušit hlavní(zrušit) DDRB=0xFF; PORTB=; zatímco (1) PORTB|=(1PB0); _delay_ms(250); PORTB&=~(1PB0); _delay_ms(250); > >
AVR je název oblíbené rodiny mikrokontrolérů vyráběných společností Atmel. Kromě AVR se pod touto značkou vyrábějí i mikrokontroléry jiných architektur, například ARM a i8051.
Jaké typy mikrokontrolérů AVR existují?

Existují tři typy mikrokontrolérů:
- 8bitový AVR.
- 32bitový AVR.
- AVR xMega
Rodina 8bitových mikrokontrolérů je nejpopulárnější již více než deset let. Mnoho radioamatérů od něj začalo studovat mikrokontroléry. Téměř všichni prozkoumali svět programovatelných ovladačů výrobou vlastních jednoduchých řemesel, jako jsou LED blikače, teploměry, hodiny, a také jednoduchou automatizaci, jako je ovládání osvětlení a topných zařízení.
8bitové mikrokontroléry AVR se zase dělí do dvou populárních rodin:
- Attiny – z názvu je jasné, že ty nejmladší (malé – mladé, mladé, mladší) mívají 8 a více špendlíků. Jejich kapacita paměti a funkčnost jsou obvykle skromnější než u následujících;
- Atmega – pokročilejší mikrokontroléry mají více paměti, pinů a různých funkčních jednotek;

Nejvýkonnější podrodinou mikrokontrolérů je xMega – tyto mikrokontroléry jsou dostupné v pouzdrech s obrovským počtem pinů, od 44 do 100. To je nezbytné pro projekty s velkým počtem senzorů a aktuátorů. Zvýšená kapacita paměti a provozní rychlost navíc umožňují vysoký výkon.

Dekódování: Pin (anglicky pin – needle, pin) je výstup mikrokontroléru nebo, jak se říká, nohy. Odtud slovo „pinout“ – tzn. informace o účelu každé z nohou.
K čemu jsou mikrokontroléry potřebné a čeho jsou schopny?
Mikrokontroléry se používají téměř všude! Téměř každé zařízení 21. století běží na mikrokontroléru: měřicí přístroje, nářadí, domácí spotřebiče, hodinky, hračky, hrací skříňky a karty a mnoho dalšího; Samotný výpis by zabral několik stran textu.
Vývojář může použít analogový signál k jeho přivedení na vstup mikrokontroléru a manipulovat s daty o jeho hodnotě. Tuto práci provádí analogově-digitální převodník (ADC). Tato funkce umožňuje uživateli komunikovat s mikrokontrolérem a také vnímat různé parametry okolního světa pomocí senzorů.

V běžných mikrokontrolérech AVR například Atmega328, který je v roce 2017 srdcem mnoha desek Arduino, ale o nich později. Je použit 8kanálový ADC s kapacitou 10 bitů. To znamená, že můžete číst hodnotu z 8 analogových senzorů. A digitální senzory jsou připojeny k digitálním pinům, což může být zřejmé. Digitální signál však může být pouze 1 (jedna) nebo 0 (nula), zatímco analogový signál může nabývat nekonečného počtu hodnot.

Vysvětlení:
Bitová hloubka je hodnota, která charakterizuje kvalitu, přesnost a citlivost analogového vstupu. Nezní to úplně jasně. Trochu praxe: 10bitový ADC, zápis analogových informací z portu do 10 bitů paměti, jinými slovy, plynule se měnící digitální signál je rozpoznán mikrokontrolérem jako číselná hodnota od 0 do 1024.
12bitový ADC vidí stejný signál, ale s vyšší přesností – ve tvaru 0 až 4096, což znamená, že naměřené hodnoty vstupního signálu budou 4krát přesnější. Abyste pochopili, odkud pocházejí 1024 a 4096, jednoduše zvyšte 2 na výkon rovnající se velikosti bitu ADC (2 na mocninu 10, pro 10 bitů atd.)
Pro regulaci výkonu zátěže máte k dispozici PWM kanály, které lze použít například pro nastavení jasu, teploty nebo otáček motoru. Ve stejném ovladači 328 je jich 6.
Obecně je struktura mikrokontroléru AVR znázorněna na obrázku:
Všechny uzly jsou podepsané, ale přesto některá jména nemusí být tak zřejmá. Podívejme se na jejich označení.
- ALU – aritmeticko-logický prostředek. Potřebné k provedení výpočtu.
- Registry pro všeobecné použití (RON) – registry, které mohou přijímat data a ukládat je, když je mikrokontrolér připojen k napájení, jsou po restartu vymazány. Slouží jako dočasné buňky pro datové operace.
- Přerušuje – něco jako událost, ke které dojde vlivem vnitřních nebo vnějších vlivů na mikrokontrolér – přetečení časovače, vnější přerušení z pinu MK atp.
- JTAG – rozhraní pro obvodové programování bez demontáže mikrokontroléru z desky.
- Flash, RAM, EEPROM – typy pamětí – programy, dočasná pracovní data, dlouhodobé uložení, nezávislé na napájení mikrokontroléru, dle pořadí v názvech.
- Časovače a čítače – nejdůležitější součásti v mikrokontroléru u některých modelů může být až deset; Jsou potřebné pro hlášení počtu hodinových cyklů, respektive časových intervalů, a čítače zvyšují svou hodnotu podle kterékoli z událostí. Jejich činnost a její režim závisí na programu, ale tyto akce se provádějí hardwarově, tzn. paralelně s hlavním textem programu mohou způsobit přerušení (volitelně kvůli přetečení časovače) v jakékoli fázi provádění kódu na libovolném řádku.
- A/D (analogový/digitální) – ADC, jeho účel jsme již popsali dříve.
- WatchDogTime – RC generátor nezávislý na mikrokontroléru a dokonce i jeho generátor hodin, který počítá určitý časový úsek a generuje resetovací signál pro MK, pokud fungoval, a signál pro probuzení, pokud byl v režimu spánku (úspora energie) . Jeho provoz lze zakázat nastavením bitu WDTE na 0.
Výstupy mikrokontroléru jsou poměrně slabé, to znamená, že proud přes ně je obvykle až 20-40 miliampérů, což stačí k zapálení LED a LED indikátorů. Pro výkonnější zátěž jsou potřeba proudové nebo napěťové zesilovače, například stejné tranzistory.
Co potřebujete, abyste se mohli začít učit mikrokontroléry?
Nejprve musíte zakoupit samotný mikrokontrolér. První mikrokontrolér může být jakýkoli Attiny2313, Attiny85, Atmega328 a další. Je lepší zvolit model, který je popsán v lekcích, které budete studovat.

Další věc, kterou potřebujete, je programátor. Je potřeba nahrát firmware do paměti MK, je považován za nejlevnější a nejoblíbenější USBASP.

Trochu dražší, ale neméně běžný programátor AVRISP MKII, které si můžete vyrobit vlastníma rukama – z běžné desky Arduino

Další možností je probliknout je USB-UART adaptér, který se obvykle vyrábí na jednom z převodníků: FT232RL, CH340, PL2303 a CP2102.
V některých případech se pro takový převodník používají mikrokontroléry AVR s hardwarovou podporou USB, takových modelů není příliš mnoho. Zde jsou některé:
- ATmega8U2;
- ATmega16U2;
- ATmega32U2.

Existuje pouze jedno „ale“ – nejprve musíte načíst zavaděč UART do paměti mikrokontroléru. K tomu samozřejmě ještě potřebujete programátor pro mikrokontroléry AVR.
Zajímavost: Bootloader – jedná se o běžný program pro mikrokontrolér, jen s neobvyklou úlohou – po spuštění (připojení k napájení) čeká nějakou dobu, než se do něj nahraje firmware. Výhodou této metody je, že ji můžete flashnout jakýmkoliv USB-UART adaptérem a jsou velmi levné. Nevýhodou je, že se firmware načítá dlouho.
Pro práci UART (RS-232) v mikrokontrolérech AVR je přidělen celý registr UDR (registr dat UART). UCSRA (bitové nastavení transceiveru RX, TX), UCSRB a UCSRC jsou sady registrů odpovědné za nastavení rozhraní jako celku.
V čem můžete psát programy?
K napsání a stažení programu potřebujete kromě programátora také IDE – vývojové prostředí. Kód můžete samozřejmě napsat v poznámkovém bloku, spustit jej přes kompilátory atd. Proč je to nutné, když existují vynikající hotové možnosti. Snad jeden z nejsilnějších je IAR, ale je placený.
Oficiálním IDE od Atmelu je AVR Studio, které se ve verzi 6 přejmenovalo na Atmel studio. Podporuje všechny mikrokontroléry AVR (8, 32, xMega), automaticky detekuje příkazy a pomáhá vám je zadávat, zvýrazní správnou syntaxi a mnoho dalšího. S jeho pomocí můžete flashovat MK.
Nejrozšířenější je C AVR, tak si na něj najděte návod, je tam spousta ruskojazyčných možností a jednou z nich je V.Ya. „Mikrokontroléry AVR. Workshop pro začátečníky.”

Nejjednodušší způsob, jak se naučit AVR
Kupte si nebo si vytvořte vlastní desku Arduino. Projekt Arduino je navržen speciálně pro vzdělávací účely. Má desítky desek různých tvarů a počtu kontaktů. U Arduina je nejdůležitější, že nekupujete jen mikrokontrolér, ale plnohodnotnou ladicí desku, napájenou na kvalitním textolitovém plošném spoji, pokrytou maskou a osazenými SMD součástkami.
Nejběžnější jsou Arduino Nano a Arduino UNO, jsou v podstatě totožné, kromě toho, že „Nano“ je asi 3krát menší než „Uno“.

Několik faktů:
- Arduino lze naprogramovat ve standardním jazyce – „C AVR“;
- vlastní – elektroinstalace;
- standardní vývojové prostředí – Arduino IDE;
- Pro připojení k počítači stačí zapojit USB kabel do micro-USB zdířky na Arduino nano desce, nainstalovat ovladače (s největší pravděpodobností k tomu dojde automaticky, kromě případů, kdy je převodník na CH340, neměl jsem ovladače na Win 8.1, musel jsem si je stáhnout, ale nezabralo to moc času.) poté můžete nahrát své „náčrty“;
- „Sketches“ je název programů pro Arduino.

Závěry
Výborným pomocníkem ve vaší radioamatérské praxi budou mikrokontroléry, které vám umožní objevovat svět digitální elektroniky a navrhovat si vlastní měřicí přístroje a zařízení pro automatizaci domácnosti.
Již dříve ElektroVesti napsal, že na letišti Boryspil byla spuštěna první elektrická nabíječka pro dvě parkovací místa. Na své facebookové stránce to uvedl náměstek generálního ředitele letiště Georgij Zubko.