Zapojenie 16MHz kryštálu (XTAL1, XTAL2) a resetovací obvod (RESET)



Čo potrebujeme (hardvér)

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.

Čo potrebujeme (hardvér) - kryštál 16MHz

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.

Čo potrebujeme (hardvér) - resetovací obvod

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].

Hore hájom chodník

Zapojenie 16MHz kryštálu ATmega32

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:

ATmega32 - schéma - kryštál 16MHz

Na kontaktnom poli to bude vyzerať takto:

ATmega32 - schéma - kryštál 16MHz na kontaktnom poli

Pred sebou máme zapojenie ATmega32 z predchádzajúceho článku. Kryštál zapojíme medzi piny XTAL1 a XTAL2.

ATmega32 v kontaktnom poli

Každý z dvoch kondenzátorov zapojíme medzi nožičku kryštálu a zem GND (modrá čiara).

ATmega32 v kontaktnom poli

ATmega32 v kontaktnom poli

ATmega32 v kontaktnom poli

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).

Zväčši ma! Zväčši ma! Zväčši ma!
Hore hájom chodník

Zapojenie resetovacieho obvodu ATmega32

Resetovací mikrospínač s rezistorom zapojíme na pin RESET podľa schémy:

ATmega32 - schéma - kryštál 16MHz

Na kontaktnom poli to bude vyzerať takto:

ATmega32 - schéma - Reset na kontaktnom poli

Do kontaktného poľa vložíme mikrospínač.

ATmega32 v kontaktnom poli

Prepojovacím káblikom spojíme pin 9 (RESET) mikrokontroléra ATmega32 s jedným kontaktom mikrospínača.

ATmega32 v kontaktnom poli

ATmega32 v kontaktnom poli

ATmega32 v kontaktnom poli

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.

ATmega32 v kontaktnom poli

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.

ATmega32 v kontaktnom poli

10k rezistor pripojíme medzi pin RESET (je prepojený s kontaktom mikrospínača) a VCC (kdekoľvek s červenou čiarou).

ATmega32 v kontaktnom poli

ATmega32 v kontaktnom poli

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).

Hore hájom chodník

Zapojenie 16MHz kryštálu ATmega8

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:

ATmega8 - schéma - kryštál 16MHz

Na kontaktnom poli to bude vyzerať takto:

ATmega8 - schéma - kryštál 16MHz na kontaktnom poli

Pred sebou máme zapojenie ATmega8 z predchádzajúceho článku. Kryštál zapojíme medzi piny XTAL1 a XTAL2.

ATmega8 v kontaktnom poli

Každý z dvoch kondenzátorov zapojíme medzi nožičku kryštálu a zem GND (modrá čiara).

ATmega8 v kontaktnom poli

ATmega8 v kontaktnom poli

ATmega8 v kontaktnom poli

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).

Zväčši ma! Zväčši ma!
Hore hájom chodník

Zapojenie resetovacieho obvodu ATmega8

Resetovací mikrospínač s rezistorom zapojíme na pin RESET podľa schémy:

ATmega8 - schéma - kryštál 16MHz

Na kontaktnom poli to bude vyzerať takto:

ATmega8 - schéma - Reset na kontaktnom poli

Do kontaktného poľa vložíme mikrospínač.

ATmega8 v kontaktnom poli

Prepojovacím káblikom spojíme pin 1 (RESET) mikrokontroléra ATmega8 s jedným kontaktom mikrospínača.

ATmega8 v kontaktnom poli

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.

ATmega8 v kontaktnom poli

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.

ATmega8 v kontaktnom poli

10k rezistor pripojíme medzi pin RESET (je prepojený s kontaktom mikrospínača) a VCC (kdekoľvek s červenou čiarou).

ATmega8 v kontaktnom poli

ATmega8 v kontaktnom poli

ATmega8 v kontaktnom poli

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.

Hore hájom chodník

Arduino softvér (USBasp upload)

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 ...

ATmega8 Arduino

Ďalej je potrebné nastaviť náš programátor USBasp cez Tools - Programmer - USBasp

ATmega8 Arduino

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

ATmega8 Arduino

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.

ATmega8 Arduino pinmap

Č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.

ATmega8 Arduino

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

ATmega8 Arduino

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.

Hore hájom chodník

Optional

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. Hore hájom chodník

PaedDr. Karol Pauchly, ZŠ s MŠ Chlebnice, október 2012