V predchádzajúcom článku sme uviedli, že bez použitia externého kryštálu je možné nastavením FUSE bitov zvýšiť frekvenciu mikrokontroléra až na 8MHz (defaultne je frekvencia nastavená na 1MHz). Aby sme využili maximálnu možnú frekvenciu 16MHz, je potrebné zapojiť externý kryštál 16MHz a dva keramické kondenzátory 27pF.
V našich zapojeniach sa program začal vykonávať vždy po jeho uložení (upload) do mikrokontroléra alebo po pripojení elektrického napätia na mikrokontrolér. Ak chceme, aby sa program začal vykonávať opäť od začiatku, musíme mikrokontrolér odpojiť od napätia a opätovne ho zapojiť. Pohodlnejšie je realizovať resetovací obvod, kde vždy po stlačení mikrospínača dôjde k resetu mikrokontroléra a uložený program sa spustí znova od začiatku. Potrebujeme mikrospínač a rezistor s hodnotou odporu 10k.
Kryštál, keramické kondenzátory, rezistor aj mikrospínač by nemal byť problém zohnať v akomkoľvek obchode s elektrotechnickými súčiastkami v cene pár desiatok centov. V prípade, že súčiastky chceme objednať nie z lokálneho obchodu, treba si všimnúť aké minimálne množstvo musíme kúpiť a tiež aj cenu za zabalenie a dopravu. Niektorí predajcovia tiež požadujú nákup v istej minimálnej hodnote. Pre úplnosť uvedieme aj možnosť nákupu z ebay.com
[] 16MHz kryštál možno z ebay.com získať od 0.99 USD (10ks) [16MHz Crystal].
[] 27pF keramické kondenzátory možno z ebay.com získať od 0.99 USD (30ks) [27pF].
[] 10k rezistor možno z ebay.com získať od 0.99 USD (50ks) [10k Resistor 1/4W].
[] Mikrospínač možno z ebay.com získať od 1.99 USD (40ks) [Switch Button 6mm 7mm].
16MHz kryštál s kondenzátormi zapojíme (podľa datasheetu) na nožičky 12 a 13, čomu zodpovedajú piny XTAL1 a XTAL2 podľa schémy:
Na kontaktnom poli to bude vyzerať takto:
Pred sebou máme zapojenie ATmega32 z predchádzajúceho článku. Kryštál zapojíme medzi piny XTAL1 a XTAL2.
Každý z dvoch kondenzátorov zapojíme medzi nožičku kryštálu a zem GND (modrá čiara).
Zapojenie na kontaktom poli je zrealizované. Potrebujeme ešte nastaviť FUSE bity na použitie externého kryštálu. Aby sme mohli pristupovať aj k pinom Portu C ako k bežným vstupno-výstupným pinom, je ešte potrebné zakázať JTAG (ak niekedy budeme chcieť použiť JTAG debugger, treba zas JTG povoliť). FUSE bity pre ATmega32 s využitím externého kryštálu (low:FF high:C9).
Resetovací mikrospínač s rezistorom zapojíme na pin RESET podľa schémy:
Na kontaktnom poli to bude vyzerať takto:
Do kontaktného poľa vložíme mikrospínač.
Prepojovacím káblikom spojíme pin 9 (RESET) mikrokontroléra ATmega32 s jedným kontaktom mikrospínača.
Druhý kontakt mikropsínača spojíme so zemou GND (modrá čiara). Po stlačení mikrospínača sa teda na pin RESET privedie log. 0 a mikrokontrolér sa resetuje.
Aby nedochádzalo k samovoľnému resetu vplyvom neurčitého log. stavu na pine RESET, je potrebné pripojiť pull-up rezistor medzi pin RESET a napájacie napätie VCC (+5V). Prepojíme preto pin 10 (VCC) s červenou čiarou.
10k rezistor pripojíme medzi pin RESET (je prepojený s kontaktom mikrospínača) a VCC (kdekoľvek s červenou čiarou).
Zapojenie na kontaktom poli je zrealizované.
Zapíšme .hex súbory z predchádzajúceho článku do mikrokontroléra. Ako bliká LED teraz? Prečo? Vráťme FUSE bity do pôvodného, default stavu (low:E1 high:99).
40-pinový mikrokontrolér ATmega32 by sme týmto mohli odložiť a ďalej sa budeme venovať už iba menším, 28-pinovým ATmega8 a ATmega328. Dôvodom je aj skutočnosť, že v nasledujúcom pokračovaní zo zapojenia na kontaktnom poli s pridaním FTDI prevodníka a uložením bootloadera do ATmega8 si urobíme "Arduino" vývojovú dosku s Arduino NG vývojovým prostredím (zámenou ATmega328 za ATmega8 a príslušným bootloaderom potom dostaneme dosku Arduino UNO).
16MHz kryštál s kondenzátormi zapojíme (podľa datasheetu) na nožičky 9 a 10, čomu zodpovedajú piny XTAL1 a XTAL2 podľa schémy:
Na kontaktnom poli to bude vyzerať takto:
Pred sebou máme zapojenie ATmega8 z predchádzajúceho článku. Kryštál zapojíme medzi piny XTAL1 a XTAL2.
Každý z dvoch kondenzátorov zapojíme medzi nožičku kryštálu a zem GND (modrá čiara).
Zapojenie na kontaktom poli je zrealizované. Potrebujeme ešte nastaviť FUSE bity na použitie externého kryštálu. FUSE bity pre ATmega8 s využitím externého kryštálu (low:FF high:C9).
Resetovací mikrospínač s rezistorom zapojíme na pin RESET podľa schémy:
Na kontaktnom poli to bude vyzerať takto:
Do kontaktného poľa vložíme mikrospínač.
Prepojovacím káblikom spojíme pin 1 (RESET) mikrokontroléra ATmega8 s jedným kontaktom mikrospínača.
Druhý kontakt mikropsínača spojíme so zemou GND (modrá čiara). Po stlačení mikrospínača sa teda na pin RESET privedie log. 0 a mikrokontrolér sa resetuje.
Aby nedochádzalo k samovoľnému resetu vplyvom neurčitého log. stavu na pine RESET, je potrebné pripojiť pull-up rezistor medzi pin RESET a napájacie napätie VCC (+5V). Prepojíme preto pin 7 (VCC) s červenou čiarou.
10k rezistor pripojíme medzi pin RESET (je prepojený s kontaktom mikrospínača) a VCC (kdekoľvek s červenou čiarou).
Zapojenie na kontaktom poli je zrealizované. Nemusíme už do mikrokontrolóra pomocou eXtreme Burner AVR ukladať .hex program z minulého článku, lebo v ďalšom kroku si podobný program napíšeme vo vývojovom prostredí Arduino.
O hardvérovej platforme Arduino ako Open Source Hardware a o konkrétnych doskách napíšeme možno niekedy neskôr. Teraz je pre nás podstatný softvér Arduino, vývojové prostredie spolu s programátorom. Balíček .zip stiahneme z domovskej stránky www.arduino.cc, sekcia Download. V súčasnosti (október 2012) je k dispozícii verzia 1.0.1 Stiahnutý súbor stačí rozbaliť a spustiť.
Najprv musíme nastaviť náš typ dosky s mikrokontrolérom (pre ATmega8 je to NG or older, pre ATmega328 je to UNO) cez Tools - Board - Arduino ...
Ďalej je potrebné nastaviť náš programátor USBasp cez Tools - Programmer - USBasp
Každý program pre mikrokontrolér písaný v prostredí Arduino musí mať minimálne dve funkcie. Sú to setup() a loop(), viď. obrázok. Príkazy v každej z funkcií sú zapísané medzi "motýlikovými" zátvorkami. Pri písaní programu sa oboznamujeme s jednotlivými príkazmi a štruktúrami pomocou referencií cez Help - Reference. Otvorí sa webový prehliadač a preštudujeme si informácie o každom príkaze a štruktúre: setup(), loop(), pinMode(), digitalWrite(), delay(), bodkočiarka, motýlikové zátvorky, komentáre
Napíšeme jednoduchý príklad na blikanie našej LED na pine PB0, čo je pre Arduino dosky Digitálny pin 8. Na obrázku nižšie je znázornené ako treba jednotlivé piny mikrokontroléra ATmega8 označovať v prostredí Arduino.
Častou chybou pri písaní programu je chýbajúca bodkočiarka za príkazom. Zo začiatku sa chybám pri písaní určite nevyhneme. Kontrolu správnosti zdrojového kódu programu vykonáme cez Sketch - Verify/Compile a ak je všetko v poriadku, v spodnej časti okna sa zobrazí veľkosť skompilovaného programu, vhodného pre upload do mikrokontroléra. V prípade chyby je zobrazený stručný opis chyby.
Ak kontrola a kompilácia zdrojového kódu programu prebehla v poriadku, môžeme program uložiť (napáliť, uploadovať) do mikrokontroléra pomocou programátora USBasp cez File - Upload Using Programmer
Dnešnou domácou úlohou bude napísať program, ktorý "vybliká" signál SOS v morseovej abecede. LED bude opakovane blikať 3x krátko, 3x dlho a 3x krátko. Prestávka medzi jednotlivými blikmi v písmene nech je 200ms, krátky blik nech trvá tiež 200ms a dlhý blik nech je trojnásobkom krátkeho (600ms). Po každom "vyblikaní" písmena nech je prestávka trojnásobná (600ms) a po "vyblikaní" celého "slova" SOS nech je prestávka sedem násobne dlhšia (1400ms), kým sa opäť beh programu dostane na začiatok funkcie loop(). Zo začiatku je dobré si po každom jednom príkaze overiť správnosť a funkčnosť programu jeho uploadom do mikrokontroléra.
Okrem vývojového prostredia Arduino je možno písať a ladiť programy pre mikrokontrolér aj vo vývojovom prostredí AVR Studio priamo od výrobcu mikrokontrolérov, firmy Atmel
Schémy zapojení boli vytvorené v programe Eagle 6.1.0.
Obrázky schematického znázornenia obvodov na kontaktnom poli boli vytvorené v programe Fritzing 0.7.7.
PaedDr. Karol Pauchly, ZŠ s MŠ Chlebnice, október 2012