From 7306400abb60fca572ac1e4be9c79a5bcc7e732e Mon Sep 17 00:00:00 2001 From: "Michal, OK1WMR" <ok1wmr@gmail.com> Date: Thu, 7 Apr 2011 06:33:14 +0200 Subject: [PATCH] =?UTF-8?q?P=C5=99id=C3=A1n=20=C4=8Dl=C3=A1nek=20AVR=20-?= =?UTF-8?q?=20LED=20panel=20-=20#3=20Program?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (Autoexportován z Joomly) --- articles/2011/avr-led-panel-3-program.md | 116 +++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 articles/2011/avr-led-panel-3-program.md diff --git a/articles/2011/avr-led-panel-3-program.md b/articles/2011/avr-led-panel-3-program.md new file mode 100644 index 0000000..e5cae07 --- /dev/null +++ b/articles/2011/avr-led-panel-3-program.md @@ -0,0 +1,116 @@ ++++ + +title = "AVR - LED panel - #3 Program" +perex_e = " + +KompatibilnĂ zapojenĂ: LED panel s ATmega8 + +Ke staĹľenĂ: LED_003.c == LED_003.pdf == LED_003.htm +. +. +" +tags = ["ÄŚlánek"] ++++ + + + +KompatibilnĂ zapojenĂ: LED panel s ATmega8 + +Ke staĹľenĂ: LED_003.c == LED_003.pdf == LED_003.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;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;amp;gt;</style> + +``` +/* +V minulĂ©m programu se nám podaĹ™ilo rozblikat Ĺ™adu LED diod pomocĂ cyklu, +ÄŤekánĂ a dvou konstant (STAV1 a STAV2) kterĂ© nám urÄŤovaly, jakĂ© ledky majĂ +svĂtit. ProblĂ©m je v tom, Ĺľe po napsánĂ prvnĂ konstanty musĂme vytvoĹ™it tu +druhou pĹ™esnÄ› opaÄŤnÄ› (kde byly jedniÄŤky, budou nuly, a naopak), protoĹľe jinak +by nám nÄ›kterĂ© ledky buÄŹto vĹŻbec nesvĂtily, nebo by svĂtily stále. NynĂ se +proto pokusĂme vytvoĹ™it podobnĂ˝ program jako minule, kterĂ˝ ale bude potĹ™ebovat +nadefinovat pouze jeden stav a druhĂ˝ si vypoÄŤte sám. +K tomuto účelu se pĹ™esnÄ› hodĂ takzvanĂ˝ bitovĂ˝ komplement. bitovĂ˝ komplement je +operace, pĹ™i nĂĹľ se z jedniÄŤek stanou nuly, a naopak. +*/ +/* +TeÄŹ ještÄ› vÄ›dÄ›t, jak takovou operaci zapsat. +Na tomto mĂstÄ› se hodĂ uvĂ©st tabulku operátorĹŻ jazyka C, mezi kterĂ© patřà +i náš bitovĂ˝ komplement. +*/ +/* +Operátory v C: + + + sÄŤĂtánĂ + - odÄŤĂtánĂ + * násobenĂ + / dÄ›lenĂ + % modulus (zbytek po celoÄŤĂselnĂ©m dÄ›lenĂ) + ++ inkrementace (zvÄ›tšenĂ o 1) + -- dekrementace (zmenšenĂ o 1) + = pĹ™iĹ™azenĂ + == porovnánĂ ( if(A==B)... + ~ bitovĂ˝ komplement ( 0b11110000 -> 0b00001111) + ! not + != nenĂ rovno + < menšà neĹľ + > vÄ›tšà neĹľ + <= menšà nebo rovno + >= vÄ›tšà nebo rovno + & bitovĂ© AND (takĂ© adresa promÄ›nnĂ©) + && logickĂ© AND + | bitovĂ© OR + || logickĂ© OR + ^ bitovĂ© exclusive OR + ? podmĂnkovĂ˝ operátor + << bitovĂ˝ posun doleva (A = B << 2 posun bitĹŻ o dvÄ› mĂsta doleva, + zprava doplĹuje nuly) + >> bitovĂ˝ posun doprava + += A += B totĂ©Ĺľ co A = A + B + -= A -= B totĂ©Ĺľ co A = A - B + /= podobnÄ›... + %= + &= + *= + ^= + |= + >>= + <<= +*/ +/* +NynĂ se tedy pokusĂme napsat program: +*/ + +#define F_CPU 1000000UL // 1 MHz (základnĂ frekvence) + +#include <avr/io.h> //Knihovna vstupĹŻ a vĂ˝stupĹŻ (PORT, DDR) +#include <util/delay.h> //Knihovna ÄŤekacĂch funkcĂ + +#define CEKANI 500 //kolik milisekund budou ledky svĂtit +#define STAV1 0b01010101//kterĂ© ledky se budou stĹ™Ădat + +int main (void) +{ +DDRB = 0b11111111; +PORTB= STAV1; +for(;;) + { + PORTB=~PORTB; //ZapĂšeme na portB bitovĂ˝ komplement pĹŻvodnĂ hodnoty + //VymÄ›nĂme ledky - ty kterĂ© svĂtily zhasnou, a naopak + _delay_ms (CEKANI); //ÄŚekánĂ + } +} + +/* +PozornĂ si jistÄ› všimli, Ĺľe se konstrukce programu zjednodušila. +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, rychlostĂ urÄŤenou +v konstantÄ› CEKANI. Tyto konstanty lze libovolnÄ› mÄ›nit... +*/ + +//Pro radioklub OK1KVK naspal Vašek Král + +``` \ No newline at end of file -- GitLab