AVR - LED panel - #1 Program Tisk
Koutek AVR - KIT #1 - LED panel s ATmega8 (zapojení a programy)
Napsal uživatel Vašek Král   
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