diff --git a/articles/2010/digitalni-hodiny-s-atmega8.md b/articles/2010/digitalni-hodiny-s-atmega8.md new file mode 100644 index 0000000000000000000000000000000000000000..0e5555bb977a5f1f3167de2cbe83a8bcc6fbe736 --- /dev/null +++ b/articles/2010/digitalni-hodiny-s-atmega8.md @@ -0,0 +1,163 @@ ++++ + +title = "DigitálnĂ hodiny s ATmega8" +perex_e = "Toto zapojenĂ vyuĹľĂvá k Ĺ™ĂzenĂ hodin mikroprocesor od firmy Atmel - ATmega8. OriginálnĂ realizace na Daqq.eu. CelĂ© zapojenĂ je pomÄ›rnÄ› jednoduchĂ©, ale je tĹ™eba naprogramovat mikroprocesor. ZpĹŻsobĹŻ jak toho ĂşspěšnÄ› dosáhnout je mnoho. Pokud nechce stavÄ›t nÄ›co sloĹľitĂ©ho, jeden jednoduchĂ˝ programátor je zde. My jsme si pak na krouĹľku postavili tento do USB. Všechny součástky jsou vĂ˝vodovĂ© a pod mikroprocesor jsme zatĂm dali radÄ›ji patici pro snažšà manipulaci s mikroprocesorem. +.. +. + +" +tags = ["ÄŚlánek"] ++++ + +Toto zapojenĂ vyuĹľĂvá k Ĺ™ĂzenĂ hodin mikroprocesor od firmy Atmel - ATmega8. OriginálnĂ realizace na Daqq.eu. CelĂ© zapojenĂ je pomÄ›rnÄ› jednoduchĂ©, ale je tĹ™eba naprogramovat mikroprocesor. ZpĹŻsobĹŻ jak toho ĂşspěšnÄ› dosáhnout je mnoho. Pokud nechce stavÄ›t nÄ›co sloĹľitĂ©ho, jeden jednoduchĂ˝ programátor je zde. My jsme si pak na krouĹľku postavili tento do USB. Všechny součástky jsou vĂ˝vodovĂ© a pod mikroprocesor jsme zatĂm dali radÄ›ji patici pro snažšà manipulaci s mikroprocesorem. +.. +. + + +Toto zapojenĂ jsme pojali jako motivaÄŤnĂ, postavit si nÄ›co praktickĂ©ho s vyuĹľitĂm mikroprocesoru. CelĂ© hodiny jsou tvoĹ™eny dvÄ›ma [DPS](http://cs.wikipedia.org/wiki/Plo%C5%A1n%C3%BD_spoj), kterĂ© jsou na sebe navzájem kolmĂ©. V mĂstÄ› kontaktu desek jsou sletovány pájecĂ plošky a tĂm je zaruÄŤen pĹ™enost signálu pro displej. Ihned po zapojenĂ na napájenĂ by se na hodinách mÄ›l objevit ÄŤas 00:00 a jiĹľ hodiny běžà (pokud máte samozĹ™ejmÄ› správnÄ› zapojenĂ a naprogramován mikroprocesor). AktuálnĂ ÄŤas nastavĂte pomocĂ tlaÄŤĂtek SW1 (minuty) a SW2 (hodiny). CelĂ© hodiny je pak moĹľnĂ© zabudovat do krabiÄŤky a lze je napájet 9V bateriĂ nebo lĂ©pe adaptĂ©rem ze sĂtÄ› (spotĹ™eba 100mA). Displej jsme pouĹľili [CA56-21SRWA](http://www.tme.eu/cz/katalog/artykuly.phtml?search=CA56-21SWRA&idp=1#cleanParameters%3D1%26search%3DCA56-21SRWA%26bf_szukaj%3D+) ([2](http://www.hledejsoucastky.cz/Hledani.aspx?lastsearch=CA56-21SRWA)), na kterĂ© máme i nakreslenĂ˝ plošnĂ˝ spoj. Mikroprocesor je [ATmega8 - 16PU](http://www.hledejsoucastky.cz/Hledani.aspx?lastsearch=ATMEGA8-16PU) v pouzdru DIL28. +SchĂ©ma: +. +PlošnĂ˝ spoj: +. +PDF verze: [schĂ©ma](../upload/ok1wmr/clanky/hodiny/hodiny_sch.pdf), [plošnĂ˝ spoj 1:1](../upload/ok1wmr/clanky/hodiny/hodiny_dps.pdf), [osazovacĂ plán](../upload/ok1wmr/clanky/hodiny/hodiny_osaz.pdf)Eagle 5.7: [SCH](../upload/ok1wmr/clanky/hodiny/hodiny_1.0.sch) a [BRD](../upload/ok1wmr/clanky/hodiny/hodiny_1.0.brd)Program: [hodiny.c](../upload/ok1wmr/clanky/hodiny/hodiny.c), [hodiny.hex](../upload/ok1wmr/clanky/hodiny/hodiny.hex) (.hex se nahrává do mikroprocesoru, mĹŻĹľete prohlĂĹľet v editoru txt) pĹŻvodnĂ zdroj [Daqq.eu](http://daqq.eu/)Deska byla vyrobena [metodou naĹľehlenĂm tonneru.](index.php/technicke-lanky/425-vyroba-plonych-spoj)[ +](index.php/technicke-lanky/425-vyroba-plonych-spoj)Seznam součástek:R1-R8 - 330RR9-R11 - 10KC1,C2 - 22pC3 - 100nFC4, C5 - 100uF/16VIC1 - 7805 (TO220)IC4 - ATmega8-16PU (DIL28) + patice pro DIL28D1 - LED displej [CA56-21SRWA](http://www.tme.eu/cz/katalog/#cleanParameters%3D1%26searchClick%3D1%26search%3DCA56-21SRWA%26bf_szukaj%3D+)Q1 - krystal 14.7456 MHz - HC49 +SW1, SW2 - mikrotlaÄŤĂtka s delšĂm hmatnĂkem<object height="344" width="425" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"><param value="true" name="allowFullScreen"> <param value="always" name="allowscriptaccess"> <param value="http://www.youtube.com/v/CAZYkOt0Mgk&hl=cs_CZ&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6" name="src"><embed height="344" width="425" src="http://www.youtube.com/v/CAZYkOt0Mgk&hl=cs_CZ&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6" allowscriptaccess="always" allowfullscreen="true" type="application/x-shockwave-flash"></object> + +* * * + +**Program v jazyce C**<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;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;gt;</style> + +``` +#include <avr/io.h> +#include <avr/interrupt.h> +#include <avr/wdt.h> +#include <stdio.h> + +#define _s_A 2 +#define _s_B 0 +#define _s_C 6 +#define _s_D 4 +#define _s_E 3 +#define _s_F 1 +#define _s_G 7 +#define _s_dot 5 + +const unsigned char segs[] = +{ + _BV(_s_A) | _BV(_s_B) | _BV(_s_C) | _BV(_s_D) | _BV(_s_E) | _BV(_s_F), //0 + _BV(_s_B) | _BV(_s_C), //1 + _BV(_s_A) | _BV(_s_B) | _BV(_s_D) | _BV(_s_E) | _BV(_s_G), //2 + _BV(_s_A) | _BV(_s_B) | _BV(_s_C) | _BV(_s_D) | _BV(_s_G), //3 + _BV(_s_B) | _BV(_s_C) | _BV(_s_F) | _BV(_s_G), //4 + _BV(_s_A) | _BV(_s_C) | _BV(_s_D) | _BV(_s_F) | _BV(_s_G), //5 + _BV(_s_A) | _BV(_s_C) | _BV(_s_D) | _BV(_s_E) | _BV(_s_F) | _BV(_s_G), //6 + _BV(_s_A) | _BV(_s_B) | _BV(_s_C), //7 + _BV(_s_A) | _BV(_s_B) | _BV(_s_C) | _BV(_s_D) | _BV(_s_E) | _BV(_s_F) | _BV(_s_G),//8 + _BV(_s_A) | _BV(_s_B) | _BV(_s_C) | _BV(_s_F) | _BV(_s_G),//9 + + _BV(_s_A) | _BV(_s_B) | _BV(_s_C) | _BV(_s_E) | _BV(_s_F) | _BV(_s_G), //A + _BV(_s_C) | _BV(_s_D) | _BV(_s_E) | _BV(_s_F) | _BV(_s_G), //B + _BV(_s_A) | _BV(_s_D) | _BV(_s_E) | _BV(_s_F), //C + _BV(_s_B) | _BV(_s_C) | _BV(_s_D) | _BV(_s_E) | _BV(_s_G), //D + _BV(_s_A) | _BV(_s_D) | _BV(_s_E) | _BV(_s_F) | _BV(_s_G), //E + _BV(_s_A) | _BV(_s_E) | _BV(_s_F) | _BV(_s_G) //F + +}; + +#define _ms(n) (17*n) + +void wait(unsigned int a) //basic wait +{ + volatile unsigned int b,c; + for(b=0;b!= a; b++)for(c=0;c!= 50;c++); + return; +} + +unsigned char prescale=0; +unsigned char sec=0; +unsigned char min_1=0; +unsigned char min_10=0; +unsigned char hour_1=0; +unsigned char hour_10=0; +unsigned char show_t=0; + + ISR(TIMER1_OVF_vect) +{ + if(++prescale == 225){prescale = 0;sec++;}; + if(sec>59){min_1++;sec=0;}; + if(min_1>9){min_1=0;min_10++;}; + if(min_10>5){min_10=0;hour_1++;}; + if(hour_1>9){hour_1=0;hour_10++;}; + if(hour_10>1 && hour_1>3){hour_1=0;hour_10=0;}; + + if(++show_t==4) show_t=0; + switch(show_t) + { + case 0: //show minutes + PORTC = 0x04; + PORTD = (~segs[min_1]); + break; + case 1: //show 10 minutes + PORTC = 0x08; + PORTD = (~segs[min_10]); + break; + case 2: //show hours + PORTC = 0x10; + PORTD = (~segs[hour_1]) & ~_BV(_s_dot); + break; + case 3: //show 10hours + PORTC = 0x20; + PORTD = (~segs[hour_10]); + break; + default: + show_t = 0; + break; + } + return; +} + +#define B1() (bit_is_clear(PINB,3)) +#define B2() (bit_is_clear(PINB,4)) +#define B_WAIT 300 + +#define nop() asm volatile ("nop;") + +int main(void) +{ + + TIMSK = 0x04; + TCCR1B = 0x01; + + DDRD = 0xFF; + DDRC = 0x3F; + DDRB = 0x00; + PORTB = 0xFF; + + sei(); + while(1) + { + if(B1()) + { + wait(_ms(B_WAIT)); + min_1++; + sec=0; + } + if(B2()) + { + wait(_ms(B_WAIT)); + hour_1++; + sec=0; + } + } +} + +``` + +* * * + +.....[http://krouzek.radioklub.cz](http://krouzek.radioklub.cz) +........ + +* * * + +New layer...New layer...New layer... \ No newline at end of file