Kompatibilní zapojení: LED panel s ATmega8
Ke stažení: LED_001.c == LED_001.pdf == LED_001.htm
/*Mikrokontrolér ATmega8 je vlastně malý počítač s vlastním procesorem o pracovní frekvenci až 16 MHz, RAM pamětí 1KB, a obdobou HDD - 512 Bajtů EEPROM a 8 KB Flash. Mikrokontrolér má oddělenou paměť pro program a data. Vlastní program mikrokontroléru se zapisuje do paměti Flash (8 KB).Do této paměti se dá zapisovat pouze při programování mikrokontroléru.Paměť EEPROM slouží k ukládání dat při běhu programu. Ukládají se do ní data, která nechceme ztratit při restartu mikrokontroléru. Do paměti EEPROM lzezapisovat i při programování mikrokontroléru.*//*ATmega8 obsahuje také mnohé periferie, například:- 3 čítače/časovače (Slouží k načítání impulzů, nebo k přesnému časování operací)- šestikanálový A/D převodník s 10 bitovou přesností- analogový komparátor- seriové kanály (USART, SPI)- a další...*//*Potřebný SW:Pro práci s mikrokontroéry Atmel budeme potřebovat následující software:- AVR Studio (vývojové prostředí) http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725- WinAVR (přidá do AVR studia překladač jazyka C) http://winavr.sourceforge.net/download.html- eXtreme Burner- AVR (SW pro nahrávání námi vytvořených programů do mikrokontroléru) http://extremeelectronics.co.in/avr-tutorials/gui-software-for-usbasp-based-usb-avr-programmers/- usbasp-windriver.2009-02-28.zip (Ovladače USB programátoru) http://www.fischl.de/usbasp/*//*Vlastní instalace:Doporučuji nejdříve nainstalovat AVR Studio a pak teprve WinAVR. Protožeprogramu WinAVR může vadit mezera v názvu složky "Program files" je lepší oba tyto programy nainstalovat do složky např: "C:\Programy".Dále je potřeba stáhnout a rozbalit ovladače pro USB programátor, a poté připojit do USB portu samotný programátor. Po připojení programátoru se windows se pokusí neúspěšně nainstalovat ovladače pro tento hardware. - Vybereme "zpět", pak "instalovat ze seznamu či vybraného umístění" a do pole "Při hledání zahrnout i toto umístění" zadáme cestu do složky, kam jsme předtím rozbalili usbasp-windriver.2009-02-28.zip.Nakonec už zbývá jen nainstalovat program eXtreme Burner- AVR.*//*Práce s AVR Studio:- Vytvoření nového projektu:Po spuštění se AVR studio zeptá, zda má vytvořit nový, otevřít existujícíprojekt. Vybereme "New Project"Poté se zeptá, jaký typ projektu (překladač) má vytvořit. Vybereme AVR GCC (má logo GNU - obrázek pakoně). Jakmile je vybrán překladač, altivují se textová pole, do kterých napíšeme název projektu. Pro lepší přehlednost doporučuji zaškrtnout "Create folder". Ve spodní části okna můžeme zadatcestu, kam se má projekt uložit.V dalším okně se nás AVR Studio zeptá na debugger a typ mikrokontroléruvybereme "AVR simulator" a "ATmega8". Po stisknutí tlačítka "Finish" otevřeAVR Studio s prázdným projektem.*//*Nyní se můžeme pokusit napsat první program, který rozsvítí LED diody.Abychom však dokázali rozsvítit ledku, musíme se seznámit s tím, jak se v programu přistupuje k jednotlivým nožičkám mikrokontroléru. Mirokontrolér ATmega8 disponuje třemi vstupně výstupním porty (PB, PC, PD).Port je vlastně sada osmi nožiček, které mohou sloužit jako vstup (napříkladod tlačítka), nebo výstup (rozsvítí ledku, nebo sepnou tranzistor).Led diody v naší aplikaci "ATmega8 - LED panel" jsou připojeny k portu PB napiny (nožičky) 0, 1, 2, 3, 4, 5, 6 a 7.K pinům se v programu přistupuje tak, že se nejříe nataví, které nožičky majísloužit jako vstup (0) a které jako výstup (1). Toto nastavení se provádí pomocí DDR registru. Takže pokud budeme například chtít, aby na portu "D" byly nožičky0, 1, 5 a 7 použity jako vstup a ostatní nožičky (2, 3, 4 a 6) sloužily jako výstupy, použijeme registr DDRD (DDRD je DDR registr portu "D"). Do tohoto registru zapíšeme jedničky na pozice, kde mají být výstupy a nuly tam, kde budou vstupy. Takže číslo, které potřebujeme nahrát do registru DDRD je:01011100 (nultá nožička je první číslo zprava (0-čtení), první nožička je druhé číslo zprava (0-čtení), druhá nožička je třetí číslo zprava (1-zápis),atd.)Nyní potřebujeme tedy nějak do DDRD zapsat binární číslo 01011100\. Protože01011100 je v desítkové soustavě 92 lze to zařídit takto:DDRD = 92;Protože se ale nechceme zdržovat převodem binárních čísel do desítkové soustavy, můžeme číslo zapsat i takto:DDRD = 0b01011100;Předponou 0b říkáme, že následující znaky jsou číslo v binárním tvaru. Podobněpředpona 0x znamená, že následující znaky jsou číslo v šestnáckové soustavě.Pokud píšeme číslo v desítkové soustavě, žádná předpona se nepíše.Zpět však k našemu problému. Nyní již víme, jak nastavit nožičky jako vstupy nebo výstupy a zbývá nám už jen na správný pin zapsat "1", aby se rozsvítilaledka. K tomu slouží "výstupní" registr PORT. Jméno registru se odvozuje stejnějako u registru DDR (PORTB je výstupní registr portu B).Stejným způsobem se do něj i zapisuje. Na nožičky,kde chceme, aby se rozsvítila dioda, zapíšeme jedničky. Takže když budu napříkladchtít rozsvítit tři diody připojené (přez odpor) k pinům 0, 1 a 3 portu "B" zapíšeme:PORTB = 0b11110100;Tímto způsobem jdou nastavit (zapnout) dokonce i ty nožičky, které jsou v registru DDR nastaveny jako vstup, Takže se objeví +5V na všech nožičkáchu kterých je v registru PORT zapsaná jednička. Rozdíl je akorát v tom, že u nožiček, které jsou nastaveny jako výstup, se použije "silný" výstupní tranzistor, zatímco u nožiček nastavených jako vstup se použije jen malý pull-up tranzistor, který na rozsvícení ledky nestačí.Můžeme si to vyzkoušet v následujícím programu:*//*Poznámka:Zelený text je komentář. Komentář na program nemá žádný vliv. Slouží jen k okomentování a zpřehlednění programu. Uvozuje se buďto "//" (jednořádkový - ukončuje ho konbec řádku) nebo víceřádkový: začátek: /* a konec: *//*Jak již bylo napsáno, ledky jsou na našem "ATmega8 - LED panel" jsou připojenyk pinům 0 až 7 portu B. Takže budeme potřebovat registry DDRB a PORTB."Program" by mohl vypadat třeba takto:*/#include <avr/io.h> //Nejprve si nahrajeme knihovnu, ve které jsou definovány //registry DDR a PORT - samotný jazyk C tyto registry neznáint main(void) //hlavní funkce - každý program musí mít alespoň tuto funkci{ //do těchto závorek se uzavírá tělo hlavní funkce (náš program)DDRB = 0b10101010; // Každá druhá ledka bude nastavena jako výstupPORTB = 0b00001111; // První 4 LED zapneme (1 = svítí)} //konec hlavní funkce (a programu vůbec)/*Náš první "program" je hotov. Nyní již stačí jen program přeložit pomocítlačítka "build" na horní liště, nebo pomocí nabídky "Build" -> "build"a nebo pomocí klávesy F7\. Tím dojde k vytvoření HEX souboru, který můžemenahrát do mikrokontroléru. Program nahrajeme tak, že připojíme programátor k počítači a isp kabel programátoru připojíme k desce "ATmega8 - LED panel". Poté spustíme program eXtreme Burner- AVR. Stiskneme tlačítko "Open" a zadáme cestu do složky ...\Default v našem projektu (stejná cesta, jako jsme zadávali při vytvořeníprojektu v AVRstudiu).Vybereme HEX soubor a dáme "Otevřít". Program eXtreme Burner- AVR napíše, žeúspěšně načetl soubor.Nyní je třeba vybrat správný typ mikrokontroléru z nabídky "Chip" (vyberemeATmega8)Teď už stačí jen nahrát program do mikrokontreoléru výběrem "FLASH" z nabídky"Write"Pokud vše dopadlo správně, měla by nyní na našem "ATmega8 - LED panel" svítitdruhá a čtvrtá ledka. Svítí jen ty ledky, kde byla zapsána "1" pomocí "silného"tranzistoru - tedy ty, kde je zapsána "1" jak v registru DDR, tak i v registru PORT.*///Pro radioklub OK1KVK naspal Vašek Král