English version

Atmel AVR pro začátečníky - programování Světelných hadů a Vzdušného displeje

     Nedávno jsem se začal věnovat programování mikroprocesorů Atmel AVR. Zakoupil jsem si pár kousků ATmega a ATtiny v tme.cz, kde je mají nejlevnější. Vytvořil jsem jednoduchý programátor připojený přes LPT. Je to v podstatě jen konektor, kabel, pár odporů a zdroj 5V (7805 jak jinak). Jako vývojové a simulační prostředí používám AVR Studio stažené z webu atmelu, pro programování používám PonyProg. Programování probíhá připojením signálů MISO, MOSI, SCK a RESET na příslušné vývody mikroprocesoru a zapojení napájení.
     První pokusy vedly ke světelným hadům s ATmega8 s 28 nožičkami a pamětí 8kB. Na něm využívám port D, který je jako jediný celý volný (všech 8 nožiček) i při vývoji. Portu C chybí bit PC7 a bit PC6 je využit jako RESET, takže má jen 6 volných nožiček. Port B je využit k programování a také slouží k případnému připojení krystalu pro přesnější časování, takže zůstaly volné jen 3 bity (nožičky). Po pokusech se světelnými hady jsem přistoupil ke světelnému vzdušnému displeji. Je to maticový displej se mechanickým skenováním, řada LED diod vykresluje text nebo obrázky ve vzduchu díky zpoždění lidského oka nebo fotoaparátu. Nejprve jsem zkoušel paralelní skenování, při kterém mohou svítit všechny diody současně, ale příliš se neosvědčilo. Proto jsem přešel na sériové skenování, vyznačující se tím, že nikdy nesvítí více než 1 LED současně a díky tomu je zobrazení ostré (nevytváří vodorovné čáry, ale body). Další jeho výhodou je použití jediného odporu pro všechny LED. Programovací a vývojové zapojení ATmega8 a jemu podobných AVR je na schématu níže.
     Dále jsem zkoušel hady a vzdušný displej s malou osminožičkovou ATtiny13, která má paměť 1kB a využitelných je jen 5 vývodů (port B). Výstupy jsou společné s programovacími vstupy a proto je potřeba při programování odpojit společný pól LEDek. Původně jsem to dělal spínačem, ale později jeho funkci nahradil tranzistor NPN, který to dělá automaticky. Při programování se na RESET objeví log 0 a tranzistor se zavře. Jinak je vše skoro stejné jako u ostatních obvodů AVR. Tento obvod se mi podařilo využít k zobrazení číslic pomocí 5 LED v různých barvách. I tento displej používá sériové skenování, při kterém svítí vždy jen jedna LED.
     Nakonec jsem se pustil do obvodu ATmega 32. To je plnohodnotný 40nožičkový mikroprocesor se všemi čtyřmi osmibitovými porty a pamětí 32kB. Pouze port B je využíván jako programovací. Vstup RESET je vyveden samostatně. Tento obvod jsem využil jako vzdušný displej se 16 LED na portech C a D. Bylo nutné vypnout nastavovací bit JTAGEN, který přiřazoval vývodům PC2...5 alternativní funkce. U tohoto obvodu jsem použil dvojité sériové skenování. Na každém ze dvou portů svítí vždy nejvíce jedna LED. Každých 8 led má společný odpor. Kromě ručního skenování (mávání obvodem ve vzduchu) jsem zkoušel obvod i připevnit na motor a roztočit, aby vznikl vrtulový displej. Použil jsem motor z 8cm větráku a mechanický přenos napětí. Pro motor to ale byla velká zátěž a točil se dosti pomalu. Příště plánuji použít silnější motor a přenos napájecího napětí pomocí cívek. Zapojení programátoru ATmega32 je obdobné jako u ATmega8, jen je tam několik vývodů navíc. Rozmístění vývodů najdete v jeho datasheetu.
     Software: Vývojové prostředí AVR Studio si stáhněte zde. Já jsem stáhl verzi 4.14, časem se nejspíš oběví novější. Před stažením je nutné vyplnit nějaké údaje, které si samozřejmě vymyslíte. Pro zapsání programu do mikroprocesoru je potřeba PonyProg, který stáhnete tady. V PonyProgu je potřeba nastavit správný typ mikroprocesoru (nahoře) a v nastavení zvolit paralelní port LPT1. Pokud nastanou problémy s přístupem PonyProgu k LPT, pomůže vám userport. Zapisování programu PonyProgem se podrobněji věnuji zde.
     Dole najdete některé z mých prográmků ke stažení v souborech ASM. Upozornění pro profíky: jsou napsány prasácky :).

Schéma zapojení ATmega8 pro programování i vývoj. Využit je celý port D.
Schéma zapojení ATmega8 pro programování i vývoj. Využit je celý port D.

Schéma zapojení ATtiny13 pro programování i vývoj.
Schéma zapojení ATtiny13 pro programování i vývoj. V aplikacích, kde svítí nejvýše 1 LED, lze použít jediný společný odpor. Výstupy a programovací vstupy sdílejí stejné vývody, proto je nutno během programování odpojit LED. Původně jsem to dělal spínačem, ale později jeho funkci nahradil tranzistor NPN, který to dělá automaticky.

Programátor v kontaktním poli s kabelem LPT a síťovým adaptérem
Vznikající programátor v kontaktním poli s kabelem LPT a síťovým adaptérem

 Pokusy s ATmega8-16PU
Pokusy s ATmega8-16PU

 První úspěch se vzdušným displejem. Zobrazení ještě není dokonalé
První úspěch se "vzdušným displejem". Zobrazení ještě není dokonalé :)

Nyní v kontaktním poli přibyla osminožičková ATtiny13V-10PU s 5ti LED.
Nyní v kontaktním poli přibyla osminožičková ATtiny13V-10PU s 5ti LED.

 2 vzdušné displeje pracující současně (nezávisle na sobě). Nahoře ATmega8, dole ATtiny13.
2 vzdušné displeje pracující současně (nezávisle na sobě). Nahoře ATmega8, dole ATtiny13.

 zde už je zobrazení ATmegy8 vylepšeno (nyní svítí v jednom okamžiku vždy jen 1 LED)
zde už je zobrazení ATmegy8 vylepšeno (nyní svítí v jednom okamžiku vždy jen 1 LED).

Smajlík
Smajlík :)

 ATtiny s modrými a bílými LED
ATtiny s modrými a bílými LED.

a se zelenými
a se zelenými

Moje sbírka mikroprocesorů - ATmege32-16PU, ATmega8-16PU, ATmega88-20PU a ATtiny13V-10PU
Moje sbírka mikroprocesorů (ATmege32-16PU, ATmega8-16PU, ATmega88-20PU a ATtiny13V-10PU)

 A zde již zapřahuji ATmega32
A zde již zapřahuji ATmega32

Vzdušny displej se 16ti LED
Vzdušné displeje se 16ti LED.

Vzdušné displeje se 16ti LED


Vzdušné displeje se 16ti LED


ATmega32 se šestnácti LEDkami na vrtuli
ATmega32 se šestnácti LEDkami na vrtuli

a v pohybu
a v pohybu


Vzdušný displej s ATmega32 a 16ti LED | Červeno-zeleno-modrá LED (RGB) s ATtiny13


Světelní hadi s ATmega8 a s ATtiny13.


Světelná houpačka s ATtiny13 | "padající cihly" s ATmega8.


Nějaké prográmky ke stažení pro ATmega8:

Program pro vzdušný displej - nápis DANYK.WZ.CZ (moje stará adresa) a smajlík
Had na kterém svítí 1 led
Had na kterém svítí 4 led
Had na kterém svítí 7 led
Padající cihly
Binární počítání
2 blechy běžící proti sobě
Světelný had (svítí 1 LED) s plynulým přeléváním jasu (pomocí PWM)
Vylepšený plynulý PWM had, svítí 3LED, bohatě komentovaný - lehce upravitelný a pochopitelný !!

Pro ATtiny13:

Vzdušný displej s čísly 0 až 9
Vzdušný displej s čísly 1 až 7, napsaný neúsporně :)
Binární počítadlo
Světelný had
Světelná "houpačka"
Plynulé přelévání jasu z jedné LED do druhé (pomocí PWM) na PB3,4
totéž, ale obousměrně
Přelévání jasu mezi 3ma LED (vhodné i pro RGB LED diodu)
a obdoba s 5ti led (plynulý had)
Vylepšené přelévání jasu, speciálě pro červeno-zeleno-modrou (RGB) LED (porty PB2,3,4)

A pro ATmega32:

Dvouřádkový vzdušný displej s 16ti led na portech C a D, zobrazuje viz výše :)


Upozornění pro lamy
Pozor! nesprávným zapojením si můžete poškodit LPT port nebo celý PC.



Další článek - Přerušení a binární počítadlo
zpět na úvodní stránku