Gustav |
Nové stránky BETA
Hlavní nabídka
Technika & Bastlení
Média
Reklama Google

AVR - LED panel - #2 Program PDF Tisk Email
Koutek AVR -
Napsal uživatel Michal, OK1WMR   
Středa, 06 Duben 2011 07:33

Kompatibilní zapojení: LED panel s ATmega8

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



Untitled
/*
V minulém "programu" se nám poda?ilo rozsvítit vybrané Led diody. Protože se
však nejednalo o program v pravém slova smyslu, ale o pouhé jednorázové
nastavení pin?, pokusíme se nyní toto nastavení v pr?b?hu ?asu pomocí programu
m?nit. Vytvo?íme program, který bude ledky st?ídav? rozsv?cet a zhasínat.
*/
/*
Protože už Led diody nebudou svítit stále, ale pouze ur?itý ?as, budeme
pot?ebovat ?ekací funkce z knihovny "delay.h" která se nachází v adresá?i
"util". Tuto knihovnu na?teme do programu p?íkazem:
#include <util/delay.h>
*/
/*
Blikání je periodická ?innost, a bylo by neú?elné vypisovat do nekone?na
program typu:
rozsvi?;
?ekej;
zhasni;
?ekej;
rozsvi?;
?ekej;
...
Takovýto program by byl velice objemný, a dokázal by bliknout pouze tolikrát,
kolikrát bychom mu to napsali. My však chceme, aby ledky blikaly stále.
K tomuto ú?elu se hodí takzvaná nekone?ná smy?ka. Nekone?ná smy?ka je
programová konstrukce, která zajistí nekone?né opakování instrukcí ve svém
t?le.
Možnosti jak zapsat nekone?nou smy?ku jsou dv?:
Bu?to jako cyklus for:
for(;;)
{
opakované p?íkazy;
}

Nebo jako cyklus while:
while (1)
{
opakované p?íkazy;
}
Použití je vícemén? libovolné, protože AVR GCC oba cykly p?ekládá stejn?.
*/
//Náš program by tedy mohl vypadat takto:
/*
Funkce ?ekání z knihovny delay.h pot?ebuje v?d?t, na jaké frekvenci procesor
pob?ží, protože musí vypo?ítat, kolik cykl? má procesor po?kat, než bude
pokra?ovat dál. Tuto informaci o?ekává v konstant? "F_CPU", a my jí tedy
musíme nadefinovat:
*/
#define F_CPU 1000000UL // 1 MHz (základní frekvence)

#include <avr/io.h> //Nahrajeme zase knihovnu vstup? a výstup? (PORT, DDR)
#include <util/delay.h> //Nahrajeme knihovnu ?ekacích funkcí
/*
Je vhodné si p?edem nadefinovat konstanty, které se pozd?ji objeví v programu.
Když pak budeme chtít program upravovat, nemusíme jej celý prohledávat, ale
sta?í pouze p?epsat tyto konstanty na za?átku.
*/
#define CEKANI 500 //konstanta "CEKANI" má hodnotu 500 (500 milisekund)
#define STAV1 0b01000101 //ledky které budou svítit nejd?ív (1 = svítí)
#define STAV2 0b10111010 //ledky, které budou svítit potom.

int main (void) //jako vždy - hlavní funkce
{
DDRB
= 0b11111111; //Piny 0 - 7 budou výstupní
for (;;) // Nekone?ná smy?ka
{
PORTB = STAV1; //Pošleme konstantu STAV1 na noži?ky - rozsvítí se LED
_delay_ms (CEKANI); //?ekání tolik milisekund, kolik je v konstant? CEKANI
PORTB = STAV2; //Rozsvítíme jiné ledky...
_delay_ms (CEKANI); //...a op?t ?ekáme (funkce z knihovny delay.h)
} // ...a zase na za?átek! (cyklu for)
} //konec programu - sem se program nikdy nedostane. Bude b?hat po?ád v
//cyklu for.
/*
Po nahrání programu do p?ípravku "ATmega8 - LED panel" budou st?ídav? blikat
LED diody tak, jak je to definováno v konstant? STAV1 a STAV2. ?as mezi
jednotlivými zm?nami stavu je definován v konstant? CEKANI.
Tyto konstanty lze libovoln? m?nit..
*/

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


 
Poslední aktualizace
 5 January 2016, 07:01 
Webkamera
Webkamera na Blatenském vrchu
Change language
Sociální sít?
Náhodné foto
Podporují nás