diff --git a/articles/2011/avr-led-panel-2-program.md b/articles/2011/avr-led-panel-2-program.md new file mode 100644 index 0000000000000000000000000000000000000000..e49f6d710588b1b9b2a4373e29fdea9c883f3014 --- /dev/null +++ b/articles/2011/avr-led-panel-2-program.md @@ -0,0 +1,29 @@ ++++ + +title = "AVR - LED panel - #2 Program" +perex_e = " + +KompatibilnĂ zapojenĂ: LED panel s ATmega8 + +Ke staĹľenĂ: LED_002.c == LED_002.pdf == LED_002.htm +. +. +" +tags = ["ÄŚlánek"] ++++ + + + +KompatibilnĂ zapojenĂ: LED panel s ATmega8 + +Ke staĹľenĂ: LED_002.c == LED_002.pdf == LED_002.htm +. +. + +* * * + +<title>Untitled</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="generator" content="SynEdit HTML exporter"> <style type="text/css">&amp;amp;amp;amp;amp;lt;!-- body { color: #000000; background-color: #FFFFFF; } .cpp1-assembler { } .cpp1-brackets { } .cpp1-comment { color: #008000; font-style: italic; } .cpp1-float { color: #000080; } .cpp1-hexadecimal { color: #000080; } .cpp1-character { } .cpp1-identifier { } .cpp1-illegalchar { } .cpp1-number { color: #000080; } .cpp1-octal { color: #0000FF; } .cpp1-preprocessor { } .cpp1-reservedword { font-weight: bold; } .cpp1-space { color: #008080; } .cpp1-string { color: #800000; } .cpp1-symbol { } --&amp;amp;amp;amp;amp;gt;</style> + +``` +/*V minulĂ©m "programu" se nám podaĹ™ilo rozsvĂtit vybranĂ© Led diody. ProtoĹľe sevš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Ă programumÄ›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, budemepotĹ™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 jeprogramová konstrukce, která zajistĂ nekoneÄŤnĂ© opakovánĂ instrukcĂ ve svĂ©mtÄ›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 procesorpoběžĂ, 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, alestaÄŤĂ 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 +``` \ No newline at end of file