czech english

Blikáme LEDkou

první praktické seznámení s jednočipem a elektronikou

Správný robot potřebuje mozek, nějaké senzory a nějaké efektory. Nemusí být ale nijak složitý. Základem může být jednoduchý levný jednočip, senzorem spínač a efektorem třeba LEDka. Takového robota si zvládne postavit každý s trochou času a trpělivosti, ale přitom základní principy, které si při jeho stavbě vysvětlíme, zůstávají stejné i u robotů podstatně složitějších. Naším cílem pro tuto kapitolu je „ošahat” si nějaký jednoduchý hardware a zbavit se „strachu z neznáma”. Odměnou Vám bude blikající LEDka řízená jednočipem.

Na první seznamovací robotický experiment budeme potřebovat zejména jednočip. Z minula víme, že jednočipem (nebo také mikrokontrolerem) nazýváme relativně malý integrovaný obvod, který v sobě ukrývá jednoduchý počítač. Jednočip má několik nožiček (už víme, že se jim správně říká piny), které jsou typicky sloučené do skupin po osmi, kterým se říká porty. Programem pak můžeme měnit napětí na jednotlivých výstupních pinech a nebo naopak napětí s různou přesností měřit (u pinů vstupních). V nejjednodušším případě jsme schopni rozlišit pouze high od low a tedy logickou 1 od logické 0.
Jak to funguje v praxi si ukážeme na zapojení LEDky, kterou se budeme snažit rozblikat. LEDka bude připojena na výstupní pin, který budeme střídavě nastavovat na high a low.
Zde je soupis potřebných součástek:
  • 3ks – odpor 330 Ω
  • 1ks – odpor 100 Ω
  • 1ks – odpor 470 Ω
  • Konektor na paralelní port (CAN25V)
  • Kabel 5 žil
  • piny (koncovky na zpevnění), případně i konektor (1x5)
  • jednočip ATmega8-16PI (nebo ATmega8L-8PI či PU), DIL balení (cca. 70Kč)
  • nepájivé pole, stačí i to nejmenší, co mají (cca. 250Kč)
  • zvonkový drát, asi 1m
  • regulátor/stabilizátor 5V, např. 7805
  • kondenzátory pro stabilizátor (0.33uF a 0.1uF)
  • LEDka (nějaká levná)
  • tlačítko
Většina součástek je k dispozici například v GM Elecronics (snad až na zvonkový drát, pro který budete muset zajít do nějaké obyčejné elektry). Určitě také pomůže, když budete mít po ruce voltmetr.
Čip ATmega8 je obvykle k dispozici ve dvou variantách. Varianta ATmega8L má širší rozsah napájení (funguje už od 2.7V), ale má nižší maximální frekvenci (8MHz proti 16MHz). My ovšem budeme pro taktování čipu používat jeho interní oscilátor, který mají oba stejný (1,2,4 a 8MHz). Po zakoupení je čip nakonfigurován tak, že pracuje s interním oscilátorem na 1MHz a potřebuje pouze minimum dalších součástek pro svoji funkci. Písmeno U v názvu čipu (ATmega8-PU) značí bezolovnatou (ekologickou) variantu.
Dále určitě chtějte DIL (Dual In-Line) package, protože to je ten jediný, který jde zasunout do nepájivého kontaktního pole. Občas můžete dostat také DIP (Dual Inline Package) nebo PDIP (Plastic Dual Inline Package) a ty jsou také v pořádku (na pohled vypadají stejně). Nepájivé kontaktní pole budeme používat, protože nám umožní snadné a rychlé experimentování bez nutnosti pájení součástek či výroby vlastních tištěných spojů.

Krok 1: Stabilizované napájení

Většina jednočipů ke své funkci potřebuje stabilizované napájení 5V. To nejsnáze zajistíme kombinací regulátoru 7805 a nějakého zdroje, co najdeme doma (např. 8-12V z autodráhy, či vláčku). Jediným požadavkem je napětí přes 7V. Na straně 4 v datasheetu je doporučené zapojení (obrázek č.3), které spočívá v doplnění dvou kondenzátorů (0.33uF na vstupu a 0.1uF na výstupu).
Stabilizátor si umístěte do nepájivého pole včetně obou blokovacích kondenzátorů a výstupních +5V si připojte na červenou sběrnici uprostřed pole. Modrá sběrnice by měla být připojena na zem z externího zdroje. Kdykoliv budete potřebovat někde v obvodu zem nebo +5V, připojte je na tyto sběrnice.

Krok 2: Rozsviťte si LEDku jen tak

Vůbec není na škodu nejprve si zkusit rozsvítit LEDku jen tak bez čipu. Ověříme si tím funkčnost zdroje i správné zapojení LEDky. Termín „dioda” v názvu LEDky se nám snaží říci, že v zapojení záleží na její polaritě (delší nožička by měla být plus). Mimo toho má každá definovaný úbytek napětí i maximální proud. Pokud chceme připojit LEDku k vyššímu napětí, měli bychom si z těchto údajů spočítat velikost odporu, který zapojíme s LEDkou do série tak, aby součet úbytků napětí na LEDce a odporu dával naše napájecí napětí (v našem případě 5V). Pokud se Vám do toho ještě nechce , stačí zvolit hodnotu odporu dostatečně vysokou (LEDka bude pouze méně svítit). Pro ty nejlevnější LEDky se hodnota odporu pohybuje někde okolo 470Ω.

Krok 3: Nainstalujte si vývojové prostředí

Čip budeme programovat v jazyce C na osobním počítači. Pro zkompilování zdrojového kódu do binární podoby potřebujeme kompilátor. Pro následné nahrání binárního kódu do čipu zase tzv. „programátor”.

Debian Linux

Uživatelé Debianu mají situaci velmi jednoduchou, protože potřebné balíčky mají k dispozici jako součást distribuce. Pro instalaci stačí jeden příkaz:
apt-get install gcc-avr avr-libc avrdude
Tímto nainstalujeme kompilátor gcc, knihovnu avr-libc a programátor avrdude. Pokud si budete chtít hrát i se simulátorem a debuggerem, můžete nainstalovat ještě simulavr a gdb-avr.

Windows

Uživatelé Windows naleznou potřebné balíčky na stránkách http://winavr.sourceforge.net/. Instalační balík má kolem 14MB a nainstaluje kompilátor gcc, knihovnu avr-libc, programátor avrdude a spoustu dalších věcí.
Po nainstalování vývojového prostředí byste měli být schopni zkompilovat přiložený program blink.c pomocí tohoto Makefile prostým zavoláním make. Program make slouží ke kompilaci zdrojových kódů programů do binární podoby. V souboru Makefile jsou uloženy příkazy, jak toho dosáhnout. Pro zkompilování našeho programu je třeba uložit soubory blink.c a Makefile společně do jinak prázdného adresáře, pustit si „command prompt” (například Start->Run a napsat cmd), přepnout se do adresáře, kam jste uložili zmiňované soubory (pomocí cd cela_cesta_k_adresari) a zavolat make.

Krok 4: Postavte si programovací kabel

schéma zapojení
schéma zapojení
Úspěšně zkompilovaný program je třeba nahrát do čipu. K tomu nám poslouží tzv. programátor, což v našem případě bude kombinace programu avrdude a programovacího kabelu. To je jednoduché zařízení připojené na paralelní port, které sestává ze čtyř odporů a kusu kabelu. Schéma zapojení je k dispozici na obrázku. Při stavbě je třeba dávat pozor, jestli se na konektor paralelního portu díváme zepředu nebo zezadu (porovnáme zkosení rohů).

Krok 5: Nahrajte program do čipu

Čip umístíme do nepájivého pole a připojíme napájení - tj. piny čipu označené jako GND a Vcc propojíme s napájecí sběrnicí (GND na modrou, Vcc na červenou). Pak do nepájivého pole umístíme programovací kabel. Piny čipu označené jako MISO, SCK, MOSI a RESET připojíme ke stejně označeným pinům programovacího kabelu. Pin na programovacím kabelu označený jako GND připojíme na napájecí sběrnici (modrá). Tím je propojení dokončeno.
Příkaz make load zkompiluje program a pokusí se ho nahrát do čipu. Pokud máme vše správně zapojené, je program nahrán do flash paměti procesoru, kde zůstane, dokud ho zase nepřeprogramujeme. Po naprogramování čipu tedy můžeme programovací kabel opět odpojit odpojit.
Pokud pracujete pod Windows a programování se nezdaří s chybou jako avrdude: can't open device "giveio" nebo avrdude: failed to open parallel port "lpt1", je třeba nainstalovat ovladač giveio, který programu avrdude umožní přístup k paralelnímu portu. Ovladač nainstalujeme spuštěním install_giveio.bat, který se nachází v adresáři C:\WinAVR\bin\. Tuto instalaci stačí provést jen jednou.

Krok 6: Blikáme

Jak fungují výstupní piny

Zapojení proti zemi
Zapojení proti zemi
Na pinech konfigurovaných jako výstupní je mikrokontroler schopen nastavovat různá napětí. Nejjednodušším ovládaným „zařízením” je LED (zkratka z anglického Light Emitting Diode). Jak sám název napovídá, je to svítivá dioda. Aby svítila, je třeba ji připojit ke zdroji napětí. V našem případě bude tímto zdrojem přímo mikrokontroler.
LEDky (a obecně většinu efektorů) lze připojit dvěma způsoby:
Zapojení proti V+
Zapojení proti V+
V prvním případě je LEDka připojena trvale k zemi a druhý kontakt je ovládán čipem. Jak již víme, tak logická nula odpovídá napětí 0V a tak tedy v případě zápisu nuly na výstupní pin nebude na LEDce žádné napětí. Zápis logické jedničky odpovídá připojení 5V, které se rozdělí mezi LEDku a odpor. V druhém případě je LEDka trvale připojena k 5V a její chování je tedy invertováno. LEDka svítí při zápisu logické nuly.
Odpor v zapojení je většinou nutný, protože omezuje proud tekoucí obvodem (jeho hodnotu můžeme vypočítat pomocí Ohmova zákona a katalogových údajů použité LEDky). Vyšší proud by mohl poškodit jednak LEDku, ale i vlastní čip. Proud tekoucí jedním pinem je totiž omezen (např. na 20mA). Mimo omezení proudu na jeden pin, má řada čipů omezení i na součet proudů na jednom portu (pozor – typicky to není součet maximálních proudů přes všechny piny), či na součet všech proudů vůbec. Není tedy možné přímo k čipu připojit náročnější zařízení jak třeba elektromotor.

Připojení LEDky k čipu

ATmega8
ATmega8
Poté, co se nám podařilo nainstalovat vývojové prostředí, postavit, připojit a vyzkoušet programátor, můžeme přejít k samotnému připojení LEDky. Tu připojíme k pinu PB0 stejně, jako když jsme ji zkoušeli (tj. i s odporem). V čipu by již touto dobou měl být nahrán příslušný vzorový program, takže se můžeme okamžitě po zapojení kochat blikající LEDkou .
Jak asi tak vypadá sestavený obvod, si můžete prohlédnout na obrázku.

Obecné zásady

Při práci s obvodem je třeba dodržovat některé základní zvyklosti, které nám pomohou předejít určitým nepříjemnostem. S obvodem vždy manipulujeme pouze s odpojeným napájením a programovacím kabelem. Napájení připojujeme vždy pouze a jenom na nejkratší možnou dobu, která je nutná k ověření, zda obvod funguje či nikoli. Programovací kabel zase jen pro přeprogramování čipu. Jinak riskujeme poškození čipu, napájení nebo i paralelního portu.

Dokumentace, data sheets

Dokumentace k jednočipům je dostupná v angličtině a se jí říká data sheets. Je většinou velmi podrobná (často přes 100 stránek k jednomu čipu) a obsahuje mimo jiné i popis funkce a ovládání všech integrovaných modulů v čipu. Data sheets jsou typicky k dispozici zdarma na internetu na webových stránkách příslušného výrobce.

Související odkazy

Závěr

Po přečtení této kapitoly byste měli být schopni zkompilovat s využitím Makefile program blink.c, nahrát jej do mikrokontroléru ATmega8 (příkazem make install) a podle schématu připojit LEDku, která by měla vesele blikat .
Pokud se Vám něco z toho nepodařilo nebo Vám některá část přišla méně srozumitelná, můžete se nám ozvat pomocí našeho kontaktního formuláře.