/* 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 lze zapisovat 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že programu 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 zadat cestu, kam se má projekt uložit. V dalším okn? se nás AVR Studio zeptá na debugger a typ mikrokontroléru vybereme "AVR simulator" a "ATmega8". Po stisknutí tla?ítka "Finish" otev?e AVR 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?íklad od 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 na piny (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?ky 0, 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že 01011100 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ítila ledka. 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?íklad chtí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ách u 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?ipojeny k 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á
intmain(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ýstup PORTB=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?žeme nahrá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" (vybereme ATmega8) 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ítit druhá 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. */