Programování Atmega8. Programování mikrokontrolérů AVR. Rozhraní MK v programovacím režimu

Pro přenos z počítače do mikrokontroléru potřebujeme USBasp a program AVRDUDE.Dnes existuje široký výběr programátorů určených pro programování Mikrokontroléry AVR. Mezi nimi najdete mnoho podomácku vyrobených, které lze stěží nazvat programátory, protože jsou přímo připojeny k COM portu pomocí několika rezistorů. nicméně moderní počítače a notebooky již prakticky nejsou vybaveny COM porty, takže jedním z hlavních kritérií při výběru programátoru je možnost jeho připojení k USB port. Nejlevnější, nejjednodušší a nejběžnější je programátor USBasp. Lze jej zakoupit téměř v každém obchodě s rádiem dostupná cena. Jeho cena je čínský internet Obchod se pohybuje od 1,5 do 3 $.

Programátor USBasp

Počítač komunikuje s mikrokontrolérem pomocí programátoru USBasp přes USB port a data jsou přenášena přes rozhraní SPI S erial P periferní rozhraní(sériové periferní rozhraní). Pro komunikaci MK s programátorem se používají speciální piny: MOSI, MISO, SCK, RESET, VCC, GND. Ačkoli SPI předpokládá použití pouze tří pinů MOSI, MISO a SCK, ale využijeme všech šest pinů.

Při výměně dat přes rozhraní SPI Mikrokontrolér může současně přijímat (MISO pin) nebo vysílat data (MOSI pin). Nastavení režimu příjmu nebo vysílání dat se provádí přivedením určitého impulsu na pin SCK.

Konektor programátoru má zpravidla 10 pinů a je připojen k mikrokontroléru pomocí 10-žilového kabelu. Je však výhodnější použít kabely, které mají 6pinový adaptér, protože v tomto případě jsou všechny piny obsazeny. U desetipinového konektoru zůstává jeden kolík neobsazený a čtyři kolíky jsou připojeny ke společnému vodiči (GND).

Aby počítač detekoval programátor, musíte nainstalovat ovladač USBasp.

Fotografie programátoru připojeného k mikrokontroléru ATmega8 je uvedena níže.

Jedinou nevýhodou nebo správněji menší nepříjemností tohoto programátoru je, že jej nepodporuje (bez různých triků) Atmel Studio, takže musíte použít program třetí strany. Nejosvědčenější je AVRDUDE.

Nastavení

Teď už jen musíme dokončit poslední krok. Spusťte program AVRDUDE. Ve výchozím nastavení se otevře karta Program. V dolní části okna v nabídce Nastavení vyberte typ programátoru usbasp. Další v kategorii Mikrokontrolér vyberte si náš mikrokontrolér ATmega8. Níže v kategorii Blikat klikněte na ikonu se třemi tečkami a v nabídce, která se otevře, zadejte cestu ke kompilovanému souboru s příponou hex. Cesta k souboru a samotný soubor budou stejné, jako jsme dříve zadali v .

Abyste se ujistili, že je programátor detekován operačním systémem (ovladač programátoru je správně nainstalován) a že je správně připojen k mikrokontroléru, klikněte na tlačítko Čtení. Pokud nejsou žádné chyby, objeví se okno se záznamem „ Kalibrační buňky generátoru byly načteny!“ A v horním okně se zobrazí hexadecimální číslo. Každý MK má své číslo.

Než začnete nahrávat nový program Doporučuje se vymazat paměť mikrokontroléru. To lze provést kliknutím na tlačítko Vše vymazat. V důsledku toho se objeví okno indikující, že krystal je čistý.

Nyní klikněte na tlačítko Program v kategorii Blikat. Když je program úspěšně nahrán do MK, objeví se okno s níže uvedeným záznamem.

Výsledkem nahraného, ​​nebo, jak se také říká, firmware programu je rozsvícená LEDka připojená na pin PC0 našeho mikrokontroléru.

Dobrý den. Pokračujme. Poté, co jsme se seznámili s procesem ladění programu, který jsme napsali v „atmel studiu“ a virtuálně sestavili obvod s jednou LED v „proteus“, nastal čas sestavit obvod do hardwaru a flashnout mikrokontrolér.

Naprogramovat prototyp ( Atmega 8) použijeme programátor USBASP. Vypadá to takto:

Ke konektoru bude připojen kabel, do kterého jsou připojeny propojky, které se zase připojí k zásuvkám na prkénku, na kterém je mikrokontrolér nainstalován:

První pin je na konektoru označen šipkou.


Poté, co jsme přišli na programátora. Přejděme k sestavení obvodu v hardwaru. Mikrokontrolér namontujeme na prkénko. Připomínám, že první noha je na MK označena malým kroužkem.

Úkolem je propojit piny programátoru s „kamennými“ piny.

Na 10pinový konektor připojíme propojky. Používáme následující piny MOSI, RST, SCK, MISO, VTG (VCC), GND.

Doufám, že jste si již stáhli datasheet na atmega8. Pokud ne, můžete si jej stáhnout. Podíváme se na pinout pinů mikrokontroléru.

Propojky připojíme k následujícím pinům:

  • VCC na pin 7 MK;
  • SCK na kolík 19 MK;
  • MISO na kolík 18 MK;
  • MOSI na kolík 17 MK;
  • GND (programátor pin 10) na pin 8 MK;
  • RST na 1 kolík MK;

Pro další úspěšnou činnost operační systém při prvním spuštění stroje shaitan (programátor) nabídne instalaci ovladačů nezbytných pro fungování zařízení.

Při práci s expeditorem by neměly být žádné problémy. Stažení. Vytvořte složku, do které rozbalíme stažený archiv. Poté v Průvodci instalací hardwaru určíme cestu ke složce s rozbaleným ovladačem.

Pokud používáte Windows 7 nebo vyšší, můžete zaznamenat drobné potíže. Ovladače pro programátor jsou dost staré, takže nemají digitální podpis. Když se pokusíte nainstalovat takový ovladač, operační systém zobrazí něco takového *

"Digitální podpis řidičů potřebný pro tohoto zařízení. Na poslední změna zařízení popř software nesprávně podepsané resp poškozený soubor nebo malware neznámý původ. (Kód 52).“

Chcete-li situaci napravit, musíte zakázat ověřování digitálního podpisu ovladače. Nebudu popisovat, jak to zakázat (každý má svůj vlastní operační systém), lze je najít na internetu.

Po vypnutí ověřování podpisu zadejte v Průvodci instalací hardwaru cestu ke složce s rozbaleným ovladačem.

Doufám, že vám vše vyšlo a programátor je připraven k práci.

Přejděme k sestavení obvodu s LED.

K flashování firmwaru mikrokontroléru použijeme program „avrdudeprog“. Je v obecném archivu.

Vyberte atmega8 ze seznamu mikrokontrolérů. Po výběru MK se objeví okno s informací, že bity pojistky a zámku jsou standardně nastaveny.

Poté otevřete kartu Pojistky. Jednoduše řečeno Pojistky jsou nastavení konfigurace MK, se kterými je lepší si nehrát. Pro případ, že jste si zakoupili stejný regulátor jako já a nemáte externí quartzový rezonátor (používáte interní oscilátor hodinová frekvence), zaškrtněte přesně stejná políčka jako na obrázku. Vedle položky „inverzní“ musí být zatržítko.

Nakonfigurovaná nastavení „přikazují“ Atmega8A vykonávat svou práci v závislosti na taktování z interního oscilátoru (taktovací frekvence 8 MHz). Aby se nastavení projevilo, musíte kliknout na tlačítko „Programování“. Před stisknutím ale ještě jednou zkontrolujte, zda je vše správně nastaveno.

Vraťte se na stránku „Program“.

Poté, co jsme již řekli programu, který mikrokontrolér budeme flashovat, vybereme soubor firmwaru, který jsme napsali v minulé lekci. Má nástavec HEX. Nachází se ve složce "Debug".

Před blikáním „oblázku“ klikněte na tlačítko „Vymazat vše“. To vás ochrání před nepochopitelnými chybami (co když je kámen již šitý):

Výsledek naší práce nás baví :) Pokračování...

Více než jednou nebo dvakrát jsem řekl, že studium MK by mělo začít s assemblerem. Tomu byl věnován celý kurz na webu (sice není moc důsledný, ale postupně to česám do adekvátního vzhledu). Ano, je to těžké, výsledek nebude hned první den, ale naučíte se chápat, co se děje ve vašem ovladači. Budete vědět, jak to funguje, a nebudete kopírovat zdroje jiných lidí jako opice a snažit se pochopit, proč to najednou přestalo fungovat. Navíc je pro C mnohem snazší vytvořit kód dělníka, který vyleze vidlemi v tu nejméně vhodnou chvíli.

Bohužel každý chce výsledky hned. Tak jsem se rozhodl jít jinou cestou – udělat návod na C, ale s ukázkou jeho spodního prádla. Dobrý programátor embedderu vždy drží svůj kus hardwaru pevně za šroub a nedovolí mu udělat jediný krok bez povolení. Takže nejdřív bude C kód, pak co vytvořil kompilátor a jak to vlastně všechno funguje :)

Na druhou stranu Xi silný bod Toto je přenositelnost kódu. Pokud samozřejmě vše napíšete správně. Rozdělení pracovních algoritmů a jejich hardwarových implementací do různých částí projektu. Pak pro přenos algoritmu na jiný mikrokontrolér bude stačit přepsat pouze vrstvu rozhraní, kde jsou zapsána všechna volání hardwaru, a ponechat veškerý pracovní kód tak, jak je. A samozřejmě čtivost. Zdrojový kód C je na první pohled srozumitelnější (i když... například je mi jedno, na co ukazovat - ať už C nebo ASM :)), ale opět, pokud je vše napsáno správně. I těmto bodům budu věnovat pozornost.

Lví podíl na všech příkladech bude můj jako testovací kus, na kterém bude instalován lví podíl na všech příkladech. vývojová deska.

První C program pro AVR

Výběr kompilátoru a nastavení prostředí
Existuje mnoho různých kompilátorů C pro AVR:
Za prvé toto IAR AVR C- je téměř určitě uznáván jako nejlepší kompilátor pro AVR, protože samotný ovladač byl vytvořen v úzké spolupráci mezi Atmelem a specialisty z IAR. Za všechno se ale musí platit. A tento kompilátor je nejen drahý komerční software, ale má také takovou tunu nastavení, že to v něm jednoduše zkompilovat dá hodně úsilí. Opravdu jsem si s ním nevypěstoval přátelství, projekt hnil kvůli podivným chybám ve fázi propojení (později jsem zjistil, že to byla křivá trhlina).

Druhý přichází WinAVR GCC- výkonný optimalizační kompilátor. Plně open source, multiplatformní, obecně všechny radosti života. Dokonale se také integruje do AVR Studio umožňuje ladit přímo tam, což je zatraceně pohodlné. Obecně jsem si to vybral.

Existuje také CodeVision AVR C je velmi populární kompilátor. Stala se populární díky své jednoduchosti. Pracovní program Můžete to získat během několika minut - průvodce startovacím kódem s tím velmi pomáhá, razítkování standardů pro inicializaci všech druhů uartů. Abych byl upřímný, mám to trochu podezřelé - jakmile jsem musel rozebrat program napsaný tímto kompilátorem, ukázalo se, že to byl nějaký nepořádek a ne kód. Strašné množství zbytečných pohybů a operací, což mělo za následek značné množství kódu a pomalý výkon. Možná však došlo k chybě v DNA člověka, který napsal původní firmware. Navíc chce peníze. Ne tolik jako IAR, ale znatelné. A v demo režimu vám umožňuje napsat ne více než 2 kb kódu.
Samozřejmě existuje crack, ale pokud se chystáte krást, je to milion ve smyslu IAR :)

Existuje také Image Craft AVR C A MicroC z mikroelektroniky. Nemusel jsem použít ani jeden, ale S.W.G. velmi chválit MicroPascal, říkají, strašně pohodlné programovací prostředí a knihovny. Myslím, že MicroC nebude o nic horší, ale je také placený.

Jak jsem řekl, vybral jsem WinAVR ze tří důvodů: je zdarma, integruje se do AVR Studia a je pro něj napsán. připravený kód pro všechny příležitosti.

Stáhněte si tedy instalaci WinAVR pomocí AVR Studia. Dále se nejprve nainstaluje studio, poté se navrch natočí WinAVR a připojí se ke studiu ve formě pluginu. Důrazně doporučuji nainstalovat WinAVR na krátkou cestu, něco jako C:\WinAVR, předejdete tak spoustě problémů s cestami.

Vytvoření projektu
Takže studio je nainstalováno, C je zašroubováno, je čas zkusit něco naprogramovat. Začněme tím jednoduchým, nejjednodušším. Spusťte studio, vyberte si tam nový projekt, jako kompilátor AVR GCC a zadejte název projektu.

Otevře se pracovní pole s prázdným souborem *.c.

Nyní nebude na škodu nakonfigurovat zobrazení cest v záložkách studia. Chcete-li to provést, přejděte na:
Nabídka Nástroje - Možnosti - Obecné - Záložky souborů a z rozevíracího seznamu vyberte možnost „Pouze název souboru“. V opačném případě nebude možné pracovat - karta bude obsahovat úplnou cestu k souboru a na obrazovce nebudou více než dvě nebo tři karty.

Nastavení projektu
Obecně se za klasické považuje vytvoření souboru make, ve kterém jsou popsány všechny závislosti. A to je asi správně. Ale pro mě, který vyrostl s plně integrovanými IDE, jako uVision nebo AVR Studio tento přístup je hluboce cizí. Proto si to udělám po svém, vše pomocí studiových prostředků.

Stiskněte tlačítko s ozubeným kolem.


Jedná se o nastavení pro váš projekt, respektive nastavení pro automatické generování make souboru. Na první stránce stačí zadat frekvenci, na které bude váš MK fungovat. To závisí na pojistkových bitech, takže předpokládáme, že naše frekvence je 8 000 000 Hz.
Pozornost věnujte také optimalizační linii. Nyní je zde -Os - to je optimalizace velikosti. Nechte to zatím tak, jak je, pak si můžete zkusit pohrát s tímto parametrem. -O0 není vůbec žádná optimalizace.

Dalším krokem je konfigurace cest. Nejprve tam přidejte svůj adresář projektu – přidáte tam knihovny třetích stran. V seznamu se objeví cesta „.\“.

Soubor Make byl vygenerován, můžete se na něj podívat ve výchozí složce ve vašem projektu, stačí se podívat a zjistit, co tam je.


To je prozatím vše. Všude klikněte na OK a přejděte ke zdroji.

Formulace problému
Prázdný list papíru svádí k realizaci nějakého mazaného nápadu, protože banální blikání diody už nefunguje. Okamžitě vezmeme býka za rohy a implementujeme spojení s počítačem - to je první věc, kterou dělám.

Bude to fungovat takto:
Když přes COM port dorazí jednička (kód 0x31), diodu rozsvítíme, a když přijde nula (kód 0x30), zhasne. Navíc vše bude probíhat na přerušení a na pozadí bude blikat další dioda. Jednoduché a smysluplné.

Sestavení obvodu
Potřebujeme připojit modul převodníku USB-USART k pinům USART mikrokontroléru. Chcete-li to provést, vezměte propojku ze dvou vodičů a umístěte ji na kolíky křížem. To znamená, že připojíme Rx regulátoru k Tx převodníku a Tx převodníku k Rx regulátoru.

Nakonec je toto schéma:


Neuvažuji o připojení zbývajících pinů, napájení nebo resetu, je to standardní.

Psaní kódu

Dovolím si hned učinit výhradu, že se nebudu pouštět konkrétně do popisu samotného jazyka C. Existuje na to prostě obrovské množství materiálu, od klasického „programovacího jazyka C“ od K&R po různé příručky.

Jednu takovou metodu jsem našel ve své skrýši, kdysi jsem ji použil ke studiu tohoto jazyka. Vše je tam krátké, jasné a věcné. Postupně to dávám dohromady a přetahuji na svůj web.

Je pravda, že ještě nebyly převedeny všechny kapitoly, ale myslím, že to nebude na dlouho.

Je nepravděpodobné, že bych to mohl popsat lépe, takže od výcvikový kurz, místo podrobného vysvětlení jemností uvedu jednoduše přímé odkazy na jednotlivé stránky tohoto návodu.

Přidávání knihoven.
Nejprve přidáme potřebné knihovny a hlavičky s definicemi. C je přece univerzální jazyk a musíme mu vysvětlit, že pracujeme konkrétně s AVR, takže do zdrojového kódu napište řádek:

1 #zahrnout

#zahrnout

Tento soubor je umístěn ve složce WinAVR a obsahuje popis všech registrů a portů řadiče. Navíc je tam vše mazané, s vazbou na konkrétní řadič, který překladač přenáší přes udělat soubor v parametru MCU a na základě této proměnné se k vašemu projektu připojí hlavičkový soubor s popisem adres všech portů a registrů pro tento konkrétní řadič. Páni! Bez toho je to také možné, ale pak nebudete moci používat symbolická jména registrů jako SREG nebo UDR a budete si muset pamatovat adresy každého z nich, jako je „0xC1“, což bude bolet hlavy.

Samotný tým #zahrnout<имя файла> umožňuje přidat do projektu jakýkoli obsah textový soubor, například soubor s popisem funkcí nebo kusem jiného kódu. A aby direktiva mohla tento soubor najít, zadali jsme cestu k našemu projektu (adresář WinAVR je tam již registrován standardně).

Hlavní funkce.
Program v C se skládá výhradně z funkcí. Mohou být vnořeny a volány od sebe v libovolném pořadí a různé způsoby. Každá funkce má tři požadované parametry:

  • Návratová hodnota je např. hřích(x) vrátí hodnotu sinusu x. Zkrátka jako v matematice.
  • Přenášené parametry jsou stejné X.
  • Funkční tělo.

Všechny přenášené a vrácené hodnoty musí být určitého typu v závislosti na datech.

Jakýkoli program v jazyce C musí obsahovat funkci hlavní jako vstupní bod do hlavního programu, jinak to vůbec není C :). Přítomností hlavního ve zdrojovém kódu někoho jiného z milionu souborů můžete pochopit, že toto je hlavní část programu, kde vše začíná. Tak se zeptejme:

1 2 3 4 5 int main(void) ( return 0 ; )

int main(void) ( return 0; )

To je ono, za prvé nejjednodušší program napsané, nevadí, že to nic nedělá, právě jsme začali.

Pojďme zjistit, co jsme udělali.
int Toto je datový typ, který vrací hlavní funkce.

Samozřejmě v mikrokontroléru hlavní v zásadě nelze nic vrátit a teoreticky by mělo být void main (void), ale GCC byl původně navržen pro PC a tam program může vrátit hodnotu operační systém po dokončení. Proto GCC zapnuto void main (void) přísahá Varováním.

Toto není chyba, bude to fungovat, ale nemám rád varování.

prázdnota v tomto případě jde o typ dat, která funkci předáme hlavní také nemůže přijmout nic zvenčí, proto prázdnota- figurína. Útržek se používá, když není potřeba nic přenášet nebo vracet.

Zde jsou { } složené závorky jsou programový blok, v tomto případě tělo funkce hlavní, bude tam kód umístěn.

vrátit se- to je návratová hodnota, kterou funkce main vrátí po dokončení, protože máme int, tedy číslo, musíme vrátit číslo. I když to stále nedává smysl, protože... na mikrokontroléru můžeme nikam jít pouze z hlavního. Vracím se nula. Protože na tom nezáleží. Kompilátor je ale většinou chytrý a kód pro tento případ negeneruje.
I když, když zvrácený, tak z hlavní Můžete přejít na MK - například spadnout do sekce bootloader a spustit jej, ale bude to vyžadovat nízkoúrovňové pohrávání s firmwarem, aby se opravily přechodové adresy. Níže uvidíte sami a pochopíte, jak na to. Proč? To je další otázka, v 99,999% případů to není nutné :)

Udělali jsme to a šli dál. Přidejme proměnnou, vlastně ji nepotřebujeme a bez ní nemá smysl zavádět proměnné, ale učíme se. Pokud jsou proměnné přidány do těla funkce, pak jsou lokální a existují pouze v této funkci. Když funkci ukončíte, tyto proměnné se vymažou a paměť RAM je přidělena pro důležitější potřeby. .

1 2 3 4 5 6 int main(void) ( unsigned char i; return 0; )

int main(void) ( unsigned char i; return 0; )

nepodepsaný znamená nepodepsaný. Faktem je, že v binární reprezentaci je nejvýznamnější bit přidělen znaménku, což znamená, že číslo +127/-128 se vejde do jednoho bajtu (char), ale pokud se znaménko zahodí, vejde se od 0 do 255. Obvykle znak není potřeba. Tak nepodepsaný.
i je pouze název proměnné. Už ne.

Nyní musíme inicializovat porty a UART. Samozřejmě můžete vzít a připojit knihovnu a zavolat nějaký druh UartInit(9600); ale pak nebudete vědět, co se vlastně stalo.

Děláme toto:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 int main(void) ( unsigned char i; #define XTAL 8000000L #define baudrate 9600L #define bauddivider (XTAL/(16*baudrate)-1)#define HI(x) ((x)>>8) #define LO(x) ((x)& 0xFF) UBRRL = LO(přenosový oddělovač) ; UBRRH = HI(přenosový dělič) ; UCSRA = 0; UCSRB = 1<< RXEN| 1 << TXEN| 1 << RXCIE| 0 << TXCIE; UCSRC = 1 << URSEL| 1 << UCSZ0| 1 << UCSZ1; }

int main(void) ( unsigned char i; #define XTAL 8000000L #define baudrate 9600L #define bauddivider (XTAL/(16*baudrate)-1) #define HI(x) ((x)>>8) #define LO( x) ((x)& 0xFF) UBRRL = LO (přenosový dělič); UBRRH = HI (přenosový dělič); UCSRA = 0; UCSRB = 1<

děsivé? Ve skutečnosti existuje pouze pět posledních řádků skutečného kódu. Všechno, to #definovat je to preprocesorový makro jazyk. Téměř stejné věci jako v Assembly, ale syntaxe je mírně odlišná.

Usnadní vám rutinní operace výpočtu potřebných koeficientů. V prvním řádku říkáme místo toho XTAL můžete bezpečně nahradit 8000000 a L- označení typu, přičemž long je hodinová frekvence procesoru. Stejný přenosová rychlost— frekvence přenosu dat přes UART.

přenosový dělič již složitější, místo něj bude nahrazen výraz vypočítaný pomocí vzorce ze dvou předchozích.
Dobře a HLE. A AHOJ nízké a vysoké bajty budou převzaty z tohoto výsledku, protože Zjevně se nemusí vejít do jednoho bajtu. V AHOJ X (parametr vstupu makra) se osmkrát posune doprava, takže zbývá pouze nejvýznamnější bajt. A dovnitř HLE. uděláme bitový AND s číslem 00FF, ve výsledku zůstane pouze nízký bajt.

Takže všechno, co se dělá, je jako #definovat můžete to klidně vyhodit a na kalkulačce si spočítat potřebná čísla a hned je zadat do řádků UBBRL = …. a UBBRH = …..

Umět. Ale! Udělej to NAPROSTO NEMOŽNÉ!

Bude to fungovat tak nebo tak, ale budete mít tzv magická čísla- hodnoty převzaté odnikud a z neznámých důvodů, a pokud takový projekt otevřete za pár let, bude zatraceně těžké pochopit, co tyto hodnoty jsou. I nyní, pokud chcete změnit rychlost nebo změnit frekvenci quartz, bude se muset vše znovu přepočítat, ale změnili jste pár čísel v kódu a je to. Obecně platí, že pokud nechcete být označeni jako kodér, vytvořte svůj kód tak, aby byl snadno čitelný, srozumitelný a snadno upravitelný.

Pak je vše jednoduché:
Všechny tyto „UBRRL and Co“ jsou konfigurační registry vysílače UART, pomocí kterých budeme komunikovat se světem. A nyní jsme jim přiřadili požadované hodnoty a nastavili je na požadovanou rychlost a režim.

Typ záznamu 1< Znamená následující: vezměte 1 a umístěte jej na místo RXEN v byte. RXEN toto je 4. bit registru UCSRB, Tak 1< tvoří binární číslo 00010000, TXEN- toto je 3. bit a 1< dá 00001000. Jediné "|" je to bitové NEBO, takže 00010000 | 00001000 = 00011000. Stejným způsobem se nastaví zbývající potřebné konfigurační bity a přidají se do obecné haldy. Výsledkem je, že shromážděné číslo je zaznamenáno v UCSRB. Více podrobností je popsáno v datovém listu na MK v sekci USART. Nenechme se tedy rozptylovat technickými detaily.

Hotovo, je čas podívat se, co se stalo. Klikněte na kompilaci a spusťte emulaci (Ctrl+F7).

Ladění
Proběhly všechny možné ukazatele průběhu, studio se změnilo a poblíž vstupu do hlavní funkce se objevila žlutá šipka. Zde právě běží procesor a simulace je pozastavena.

Faktem je, že zpočátku to ve skutečnosti bylo na řádku UBRRL = LO(bauddivider); Koneckonců, to, co definujeme, není kód, ale pouhé předběžné výpočty, a proto je simulátor trochu nudný. Ale teď si uvědomil, že první instrukce byla dokončena a pokud vylezete na strom Zobrazení I/O, do sekce USART a podívejte se tam na byte UBBRL, uvidíte, že ta hodnota už tam je! 0x33.

Udělejte to ještě o krok dále. Podívejte se, jak se mění obsah druhého registru. Projděte si je tedy všechny, věnujte pozornost tomu, že všechny uvedené bity jsou nastaveny tak, jak jsem vám řekl, a jsou nastaveny současně pro celý bajt. Dál než Návrat to nepůjde – program je u konce.

Otevírací
Nyní resetujte simulaci na nulu. Klikněte tam Resetovat (Shift+F5). Otevřete rozložený výpis, nyní uvidíte, co se vlastně v ovladači děje. Zobrazit -> Disassembler. A ne YYAAAAAA!!! Assembler!!! HRŮZA!!! A JE TO NUTNÉ. Abyste později, až se něco pokazí, nebyli v kódu hloupí a nekladli hloupé otázky na fórech, ale okamžitě se dostali do vnitřností a viděli, kde jste uvízli. Není tam nic děsivého.

Nejprve budou topy ze série:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 +00000000: 940C002A JMP 0x0000002A Skok +00000002: 940C0034 JMP 0x00000034 Skok +00000004: 940C0034 JMP 0x340900000000006 0009000000000000000000000004 0x00000034 Skok +00000008: 940C0034 JMP 0x00000034 Skok +0000000A: 940C0034 JMP 0x00000034 Skok +0000000C: 3440C0000C: 000000000 0000000E: 940C0034 JMP 0x00000034 Skok +00000010: 940C0034 JMP 0x00000034 Skok +00000012: 940C0034 JMP0010C00900001 0x00000034 Skok +00000016: 940C0034 JMP 0x00000034 Skok +00000018: 940C0034 JMP 0x00000034 Skok +0000001A: 0000001A:1001A: 000001 : 940C0034 JMP 0x00000034 Skok +0000001E: 940C0034 JMP 0x00000034 Skok +00000020: 940C0034 JMP 0x00000034 Skok 0x00000034 Skok 04020000304 +00002002 34 Jump +00000024: 940C0034 JMP 0x00000034 Jump +00000026: 940C0034 JMP 0x00000034 Jump +00000028: 940C0030 Jump 0x003

00000000: 940C002A JMP 0x0000002A Skok +00000002: 940C0034 JMP 0x00000034 Skok +00000004: 940C0034 JMP00000000000000000000C0034 JMP 0x000000034 0x00000034 Jump +00000008: 940C0034 JMP 0x00000034 Jump +0000000A: 940C0034 JMP 0x00000034 Jump +0000000C: 0000000C: 00000000000000000000000000: 940C0034 JMP 0x00000034 Skok +00000010: 940C0034 JMP 0x00000034 Skok +00000012: 940C0034 JMP 0x00000034 Skok 0904 +00003004 +00000004 0004 34 Jump +00000016: 940C0034 JMP 0x00000034 Jump +00000018: 940C0034 JMP 0x00000034 Jump +0000001A: 940C00030 Jump +0x0003004000003 : 940C0034 JMP 0x00000034 Skok +0000001E: 940C0034 JMP 0x00000034 Skok +00000020: 940C0034 JMP 0x00000034 Skok 0x00000034 Skok 04020000304 +00002002 34 Jump +00000024: 940C0034 JMP 0x00000034 Jump +00000026: 940C0034 JMP 0x00000034 Jump +00000028: 940C0030 Jump 0x003

Toto je tabulka vektorů přerušení. Vrátíme se k tomu později, ale zatím se jen podívejte a zapamatujte si, že existuje. V prvním sloupci je adresa flash buňky, ve které příkaz leží, ve druhém je kód příkazu, ve třetím je mnemotechnická pomůcka příkazu, stejná instrukce sestavení, ve třetím jsou operandy příkazu. No, automatický komentář.
Takže, když se podíváte, jsou tam nepřetržité přechody. A příkazový kód JMP je čtyřbajtový, obsahuje adresu skoku zapsanou pozpátku - dolní bajt na nízké adrese a kód příkazu skoku 940C

0000002B: BE1F OUT 0x3F,R1 Out to I/O umístění

Zaznamenejte tuto nulu na adrese 0x3F. Pokud se podíváte na sloupec zobrazení I/O, uvidíte, že adresa 0x3F je adresa registru SREG - registru příznaků řadiče. Tito. resetujeme SREG, aby program běžel za nulových podmínek.

1 2 3 4 +0000002C: E5CF LDI R28,0x5F Okamžité načtení +0000002D: E0D4 LDI R29,0x04 Okamžité načtení +0000002E: BFDE OUT 0x3E,R29 Out to I/O umístění +0000002F: BFCD IROUT/O0x umístění Out33 IROUT/00x

0000002C: E5CF LDI R28,0x5F Okamžité načtení +0000002D: E0D4 LDI R29,0x04 Okamžité načtení +0000002E: BFDE OUT 0x3E,R29 Out to I/O umístění +0000002F: BFCD OUT8/O0x umístění BFCD IR29,0x04

Tím se načítá ukazatel zásobníku. Nemůžete přímo načíst do I/O registrů, pouze přes přechodný registr. Proto nejprve LDI na střední a pak odtud OUT na I/O. Později vám také řeknu více o zásobníku. Prozatím vězte, že se jedná o oblast dynamické paměti, která visí na konci RAM a ukládá adresy a meziproměnné. Nyní jsme naznačili, odkud bude náš stack začínat.

00000032: 940C0041 JMP 0x00000041 Skok

Přejděte na úplný konec programu a tam máme zákaz přerušení a těsného opakování:

1 2 +00000041: 94F8 CLI Global Interrupt Disable +00000042: CFFF RJMP PC-0x0000 Relativní skok

00000041: 94F8 CLI Global Interrupt Disable +00000042: CFFF RJMP PC-0x0000 Relativní skok

To v případě nepředvídaných okolností, jako je opuštění hlavní funkce. Regulátor lze z takové smyčky vyvést buď hardwarovým resetem, nebo pravděpodobněji resetem z hlídacího psa. No, nebo, jak jsem řekl výše, opravte to v hexadecimálním editoru a odcválejte tam, kam si naše srdce přeje. Všimněte si také, že existují dva typy přechodů: JMP a RJMP; první je přímý přechod na adresu. Zabírá čtyři bajty a může přímo přeskakovat celou oblast paměti. Druhým typem přechodu je RJMP – relativní. Jeho příkaz zabere dva bajty, ale z aktuální pozice (adresy) se posune o 1024 kroků dopředu nebo dozadu. A jeho parametry udávají posun od aktuálního bodu. Používá se častěji, protože zabírá polovinu místa v jedné rovině a dlouhé přechody jsou potřeba jen zřídka.

1 +00000034: 940C0000 JMP 0x00000000 Skok

00000034: 940C0000 JMP 0x00000000 Skok

A to je skok na úplný začátek kódu. Nějaký restart. Zde můžete zkontrolovat, že všechny vektory přeskakují. Závěr z toho je, že pokud nyní povolíte přerušení (ve výchozím nastavení jsou zakázána) a vaše přerušení nastane, ale neexistuje žádná obsluha, dojde k softwarovému resetu – program se vrátí na úplný začátek.

Funkce hlavní. Všechno je podobné, ani to není třeba popisovat. Stačí se podívat na již vypočítaný počet zapisovaný do registrů. Preprocesor kompilátoru rockuje!!! Takže žádná „magická“ čísla!

1 2 3 4 5 6 7 8 9 10 11 12 <

00000036: E383 LDI R24,0x33 Okamžité načtení +00000037: B989 OUT 0x09,R24 Out to I/O umístění 15: UBRRH = HI(bauddivider); +00000038: BC10 OUT 0x20,R1 Out to I/O umístění 16: UCSRA = 0; +00000039: B81B OUT 0x0B,R1 Výstup do I/O umístění 17: UCSRB = 1<

A tady je chyba:

1 2 3 +0000003E: E080 LDI R24.0x00 Okamžité načtení +0000003F: E090 LDI R25.0x00 Okamžité načtení +00000040: 9508 Návrat podprogramu RET

0000003E: E080 LDI R24.0x00 Okamžité načtení +0000003F: E090 LDI R25.0x00 Okamžité načtení +00000040: 9508 Návrat podprogramu RET

Otázkou je, proč kompilátor přidává takové vrcholy? A to není nic jiného než Return 0, funkci jsme definovali jako int main(void) a tak jsme promarnili další čtyři bajty za nic :) A pokud uděláte void main(void) tak zůstane jen RET, ale objeví se varování , že naše hlavní funkce nic nevrací. Obecně udělej, jak chceš :)

Obtížný? Očividně ne. Klikněte na spouštění krok za krokem v režimu disassembler a podívejte se, jak procesor provádí jednotlivé instrukce, co se děje s registry. Jak probíhá pohyb po příkazech a finální smyčka?

Pokračování za pár dní...

Mimo:
Alexej78 Vytvořil jsem plugin pro Firefox, který usnadňuje navigaci na mém webu a fóru.
Diskuse a stahování,

Úkol: Vyvineme program pro ovládání jedné LED. Po stisknutí tlačítka se LED dioda rozsvítí a po uvolnění zhasne.

Nejprve vytvoříme schematický diagram zařízení. I/O porty slouží k připojení jakýchkoliv externích zařízení k mikrokontroléru. Každý z portů je schopen fungovat jako vstupní i výstupní. Zapojme LED do jednoho z portů a tlačítko do druhého. Pro tento experiment použijeme ovladač Atmega8. Tento čip obsahuje 3 I/O porty, má 2 osmibitové a 1 šestnáctibitový časovač/čítač. Na palubě je také 3kanálový PWM, 6kanálový 10bitový analogově-digitální převodník a mnoho dalšího. Podle mého názoru je mikrokontrolér skvělý pro naučení základů programování.

Pro připojení LED použijeme linku PB0 a pro čtení informací z tlačítka linku PD0. Schéma je na obr. 1.

Rýže. 1

Přes rezistor R2 je na vstup PD0 přiváděno plus napájecí napětí, které odpovídá signálu logické jedničky. Při sepnutí tlačítka klesne napětí na nulu, což odpovídá logické nule. V budoucnu lze R2 vyloučit z obvodu a nahradit jej interním zátěžovým odporem a zadat potřebná nastavení do programu. LED je připojena k výstupu portu P0 přes odpor R3 omezující proud. Aby se LED rozsvítila, musíte na linku PB0 přivést signál logické jedničky. Použijeme interní generátor hlavních hodin na 4 MHz, protože zařízení nemá vysoké požadavky na frekvenční stabilitu.

Nyní napíšeme program. Programovací prostředí používám k psaní programů AVR Studio A WinAvr. Otevřete AVR Studio, objeví se uvítací okno, klikněte na tlačítko "Vytvořit nový projekt", poté vyberte typ projektu - AVR GCC, napište název projektu např. "cod1", zaškrtněte jak "Vytvořit složku projektu" tak "Vytvořit". inicializační soubor“ , klikněte na tlačítko „Další“, v levém okně vyberte „AVR Simulator“ a v pravém okně vyberte typ mikrokontroléru „Atmega8“, klikněte na tlačítko „Dokončit“, otevře se editor a strom kategorií projektu – počáteční nastavení jsou dokončena.

Nejprve přidejte standardní text popisu pro Atmega8 pomocí operátoru pro připojení externích souborů: #zahrnout

syntaxe direktivy #zahrnout

#zahrnout<имя_файла.h>
#include „název souboru.h“

Úhlové držáky< и >označte kompilátoru, že zahrnuté soubory je třeba nejprve vyhledat ve standardní složce WinAvr s názvem include. Dvojité uvozovky „ a “ říkají kompilátoru, aby začal hledat v adresáři, kde je projekt uložen.

Každý typ mikrokontroléru má svůj vlastní hlavičkový soubor. Pro ATMega8 se tento soubor nazývá iom8.h, pro ATtiny2313 - iotn2313.h. Na začátek každého programu musíme zahrnout hlavičkový soubor mikrokontroléru, který používáme. Existuje ale také společný hlavičkový soubor io.h. Preprocesor tento soubor zpracuje a v závislosti na nastavení projektu zařadí požadovaný hlavičkový soubor do našeho programu.

Pro nás bude první řádek programu vypadat takto:

#zahrnout

Každý program v jazyce C musí obsahovat jednu hlavní funkci. Jmenuje se hlavní. Provádění programu vždy začíná provedením hlavní funkce. Funkce má záhlaví - int main(void) a tělo - je ohraničeno složenými závorkami ().

int main (void)
{
funkční tělo
}

Náš kód přidáme do těla funkce. Návratový typ je uveden před názvem funkce. Pokud funkce nevrátí hodnotu, použije se klávesa prázdnota.

int- toto je 2bajtové celé číslo, rozsah hodnot je od - 32768 do 32767

Za názvem funkce jsou parametry, které jsou předány funkci při jejím volání, uvedeny v závorkách (). Pokud funkce nemá žádné parametry, použije se klíčové slovo prázdnota. Funkce hlavní obsahuje sadu příkazů, nastavení systému a hlavní programovou smyčku.

Dále nakonfigurujeme port D u vchodu. Provozní režim portu je určen obsahem registru DDRD(registr směru přenosu informací). Do tohoto registru zapíšeme číslo „0x00“ (0b0000000 - v binárním tvaru), na tento port není nic připojeno kromě tlačítka, takže celý port D nakonfigurujeme jako vstup. Port můžete nakonfigurovat bit po bitu zápisem čísel 0 nebo 1 do každého bitu registru (0-vstup, 1-výstup), například DDRD = 0x81 (0b10000001) - první a poslední řádek portu D funguje jako výstup, zbytek jako vstup. Musí být také připojen interní zatěžovací odpor. Registr PORTx řídí, zda jsou vnitřní odpory zapnuty nebo vypnuty, když je port ve vstupním režimu. Napíšeme tam jednotky.

Nastavení portu B k východu. Provozní režim portu je určen obsahem registru DDRB. Nic než LED do portu B není připojen, takže celý port lze nakonfigurovat jako výstup. To se provádí zápisem do registru DDRBčísla "0xFF". Chcete-li zabránit rozsvícení LED při prvním zapnutí, zapište na port B logické nuly. To se provádí nahráváním PORTB= 0x00;

K přiřazení hodnot se používá symbol "=" a nazývá se operátor přiřazení, nezaměňovat se znakem "rovná se".

Konfigurace portu bude vypadat takto:

DDRD = 0x00;
PORTD = 0xFF;
DDRB = 0xFF;
PORTB = 0x00;

Píšeme hlavní smyčku programu. zatímco(„zatímco“ z angličtiny) - tento příkaz organizuje smyčku a mnohokrát opakuje tělo smyčky, dokud není splněna podmínka, to znamená, že výraz v závorkách je pravdivý. V C je výraz považován za pravdivý, pokud se nerovná nule, a za nepravdivý, pokud je.

Příkaz vypadá takto:

zatímco (podmínka)
{
tělo smyčky
}

V našem případě se hlavní smyčka bude skládat pouze z jednoho příkazu. Tento příkaz přiřadí registr PORTB hodnotu registru, která má být invertována PORTD.

PORTB = ~PIND; //vezměte hodnotu z portu D, invertujte ji a přiřaďte ji PORTB (zapište do PORTB)

// C výrazy se čtou zprava doleva

PIND registr vstupních informací. Abyste mohli číst informace z externího výstupu ovladače, musíte nejprve přepnout požadovaný bit portu do vstupního režimu. To znamená, zapsat do odpovídajícího bitu registru DDRx nula. Teprve poté lze na tento pin přivést digitální signál z externího zařízení. Dále mikrokontrolér načte bajt z registru PINx. Obsah odpovídajícího bitu odpovídá signálu na externím pinu portu. Náš program je připraven a vypadá takto:

#zahrnout int main (void) ( DDRD = 0x00; //port D - vstup PORTD = 0xFF; //připojíme zatěžovací odpor DDRB = 0xFF; //port B - výstup PORTB = 0x00; //nastavíme výstup na 0 while(1 ) ( PORTB = ~PIND; //~ znak bitové inverze ) )

Komentáře jsou široce používány v jazyce C. Jsou dva způsoby psaní.

/*Komentář*/
//Komentář

V tomto případě nebude kompilátor věnovat pozornost tomu, co je napsáno v komentáři.

Pokud použijete stejný program a připojíte k mikrokontroléru 8 tlačítek a 8 LED diod, jak je znázorněno na obrázku 2, pak bude jasné, že každý bit portu D odpovídá jeho bitu portu B. Stisknutím tlačítka SB1 se rozsvítí HL1, stisknutím tlačítka SB2 se rozsvítí HL2 atd.

Obrázek 2

V článku byly použity materiály z knihy A. V. Belova. "Výukový program pro vývojáře zařízení AVR"

Mikrokontroléry Atmega8 jsou nejoblíbenějšími zástupci své rodiny. V mnoha ohledech za to vděčí na jedné straně jednoduchosti ovládání a srozumitelné struktuře a na straně druhé poměrně široké funkčnosti. Tento článek se bude zabývat programováním Atmega8 pro začátečníky.

obecná informace

Mikrokontroléry jsou všude. Najdeme je v ledničkách, pračkách, telefonech, továrních strojích a velkém množství dalších technických zařízení. Rozsah mikrokontrolérů je od jednoduchých až po extrémně složité. Ty druhé nabízejí podstatně více funkcí a funkcí. Ale nebudete schopni porozumět složité technologii hned. Zpočátku musíte zvládnout něco jednoduchého. A jako vzorek bude vzat Atmega8. Programování na něm není obtížné díky jeho kompetentní architektuře a přívětivému rozhraní. Navíc má dostatečný výkon pro použití ve většině a navíc se používají i v průmyslu. V případě Atmega8 vyžaduje programování znalost jazyků jako je AVR (C/Assembler). Kde začít? Zvládnutí této technologie je možné třemi způsoby. A každý si sám vybere, kde s Atmega8 začne pracovat:

  1. Programování přes Arduino.
  2. Nákup hotového zařízení.
  3. Samostatná montáž mikrokontroléru.

Zvážíme první a třetí bod.

Arduino

Jedná se o pohodlnou platformu navrženou ve formě, která je vhodná pro rychlé vytváření různých zařízení. Na desce je již vše potřebné v podobě samotného mikrokontroléru, jeho svazku a programátoru. Sledováním této cesty člověk získá následující výhody:

  1. Nízkoprahové požadavky. K vývoji technických zařízení nepotřebujete mít speciální dovednosti.
  2. Pro připojení bez dodatečné přípravy bude k dispozici široká škála prvků.
  3. Rychlý start vývoje. S Arduinem se můžete vrhnout přímo do vytváření zařízení.
  4. Dostupnost velkého množství školicích materiálů a ukázek realizací různých provedení.

Existují ale i určité nevýhody. Arduino programování Atmega8 vám tedy neumožňuje ponořit se hlouběji do světa mikrokontroléru a pochopit mnoho užitečných aspektů. Navíc se budete muset naučit programovací jazyk, který se liší od těch, které používá AVR (C/Assembler). A ještě jedna věc: Arduino má poměrně úzkou škálu modelů. Proto dříve nebo později vznikne potřeba použít mikrokontrolér, který se v deskách nepoužívá. Ale obecně je to dobrá volba pro práci s Atmega8. Programování přes Arduino vám poskytne sebevědomý začátek ve světě elektroniky. A člověk se pravděpodobně nevzdá kvůli selháním a problémům.

Vlastní montáž

Díky přívětivému designu si je můžete vyrobit sami. To koneckonců vyžaduje levné, dostupné a jednoduché komponenty. To vám umožní důkladně prostudovat návrh mikrokontroléru Atmega8, jehož programování po složení se vám bude zdát jednodušší. V případě potřeby můžete také nezávisle vybrat další součásti pro konkrétní úkol. Je pravda, že je zde určitá nevýhoda - složitost. Není snadné sestavit mikrokontrolér svépomocí, když nemáte potřebné znalosti a dovednosti. Tuto možnost zvážíme.

Co je potřeba k sestavení?

Nejprve musíte získat samotný Atmega8. Programování mikrokontroléru bez něj, víte, je nemožné. Bude to stát několik stovek rublů - při poskytování slušné funkčnosti. Je také otázka, jak se bude Atmega8 programovat. USBAsp je docela dobré zařízení, které se osvědčilo jako velmi dobré. Ale můžete použít jiný programátor. Nebo si to sestavte sami. Jenže v tomto případě hrozí, že při špatném vytvoření udělá z mikrokontroléru nefunkční kus plastu a železa. Také by nebylo na škodu mít prkénko na krájení a svetry. Nejsou povinné, ale ušetří vám nervy a čas. A nakonec potřebujete 5V zdroj.

Programování Atmega8 pro začátečníky na příkladu

Podívejme se, jak v obecné rovině vzniká zařízení. Řekněme tedy, že máme mikrokontrolér, LED, rezistor, programátor, propojovací vodiče a napájecí zdroj. Prvním krokem je napsání firmwaru. Je chápán jako soubor příkazů pro mikrokontrolér, který je prezentován jako výsledný soubor ve speciálním formátu. Je nutné specifikovat spojení všech prvků a také interakci s nimi. Poté můžete začít sestavovat obvod. Pin VCC by měl být napájen. Ke každému jinému, určenému pro práci se zařízeními a prvky, je nejprve připojen odpor a poté LED. V tomto případě výkon prvního závisí na požadavcích na výkon druhého. Můžete použít následující vzorec: R=(Up-Ups)/Is. Zde p je výkon a s je LED. Představme si, že máme LED, která spotřebuje 2V a vyžaduje napájecí proud 10 mA, převedeme ji do podoby vhodnější pro matematické operace a dostaneme 0,01A. Potom bude vzorec vypadat takto: R=(5V-2V)/0,01A=3V/0,01A=300 Ohm. Ale v praxi je často nemožné vybrat ideální prvek. Proto se bere ten nejvhodnější. Musíte však použít rezistor s odporem vyšším, než je hodnota získaná matematicky. Díky tomuto přístupu prodloužíme jeho životnost.

Co bude dál?

Takže máme malé schéma. Nyní zbývá pouze připojit programátor k mikrokontroléru a do jeho paměti zapsat firmware, který vznikl. Je tu jeden bod! Při stavbě obvodu je nutné jej vytvořit tak, aby bylo možné mikrokontrolér flashovat bez odpájení. To ušetří čas, nervy a prodlouží životnost prvků. Včetně Atmega8. Je třeba poznamenat, že programování v obvodu vyžaduje znalosti a dovednosti. Umožňuje ale také vytvářet pokročilejší návrhy. Často se totiž stává, že při odpájení dojde k poškození prvků. Poté je schéma připraveno. Lze použít napětí.

Důležité body

Rád bych začátečníkům dal užitečné tipy ohledně programování Atmega8. Neměňte vestavěné proměnné a funkce! Po kontrole na nepřítomnost „věčných smyček“, které zablokují jakékoli jiné rušení, a pomocí dobrého vysílače je vhodné zařízení flashnout vytvořeným programem. Pokud pro tyto účely používáte domácí produkt, měli byste být psychicky připraveni na selhání mikrokontroléru. Když flashujete zařízení pomocí programátoru, měli byste připojit odpovídající výstupy VCC, GND, SCK, MOSI, RESET, MISO. A neporušujte bezpečnostní opatření! Pokud je v technických specifikacích stanoveno, že napájení by mělo být 5V, pak musíte přesně toto napětí dodržet. I použití 6V prvků může negativně ovlivnit výkon mikrokontroléru a zkrátit jeho životnost. 5V baterie mají samozřejmě určité rozdíly, ale zpravidla je vše v rozumných mezích. Například maximální napětí bude udržováno na 5,3V.

Školení a zlepšování dovedností

Naštěstí je Atmega8 velmi oblíbeným mikrokontrolérem. Najít podobně smýšlející lidi nebo jednoduše znalé a šikovné lidi proto nebude těžké. Pokud nechcete znovu vynalézat kolo, ale chcete pouze vyřešit určitý problém, můžete požadované schéma vyhledat na rozsáhlém webu. Mimochodem, malá nápověda: ačkoli je robotika v rusky mluvícím segmentu docela populární, pokud neexistuje odpověď, měli byste ji hledat v anglicky mluvícím segmentu - obsahuje řádově více informací. Pokud existují určité pochybnosti o kvalitě stávajících doporučení, můžete se podívat po knihách, které pojednávají o Atmega8. Naštěstí výrobní společnost bere v úvahu popularitu svého vývoje a dodává jim odbornou literaturu, kde zkušení lidé říkají, co a jak, a také uvádějí příklady, jak zařízení funguje.

Je těžké začít tvořit něco vlastního?

Stačí mít 500-2000 rublů a pár volných večerů. Na seznámení s architekturou Atmega8 je tentokrát více než dostačující. Po troše cviku si snadno vytvoříte vlastní projekty, které plní konkrétní úkoly. Například robotická ruka. Samotný Atmega8 by měl být více než dostačující pro zprostředkování základních motorických funkcí prstů a ruky. To je samozřejmě poměrně obtížný úkol, ale je docela proveditelný. V budoucnu bude možné vytvářet složité věci, které budou vyžadovat desítky mikrokontrolérů. Ale to je vše před námi, předtím musíte získat dobrou cvičnou školu na něčem jednoduchém.