AVR - LED panel - #1 Program Tisk
Koutek AVR -
Napsal uživatel Michal, OK1WMR   
Pátek, 04 Únor 2011 08:03

Kompatibilní zapojení: LED panel s ATmega8

Ke stažení: LED_001.c == LED_001.pdf == LED_001.htm
.
.


Untitled
/*
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á

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ý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.
*/



//Pro radioklub OK1KVK naspal Vašek Král