<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=4538&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-10-31T23:23:01+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=4538&amp;mode</id>
<entry>
<author><name><![CDATA[peter81j]]></name></author>
<updated>2013-10-31T23:23:01+01:00</updated>
<published>2013-10-31T23:23:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=55004#p55004</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=55004#p55004"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=55004#p55004"><![CDATA[
No wlasnie nie za bardzo rozumiem tych ms, a sekundy, minuty i godziny to mamy na codzien tak wiec wydaja sie latwiejsze.<br /><br />Przerobilem kod tak:<br /><br />Timer :<br />[syntax=c]//ustawien Timer1 dla F_CPU=16000000<br />TCCR0A |= (1&lt;&lt;WGM01);// tyrb CTC<br />TCCR0B |= (1&lt;&lt;CS02);// prescaler 256<br />OCR0A = 125;// dodatkowy podzial przez 125<br />TIMSK0 |= (1&lt;&lt;OCIE1A);// zezwolnie na przerwanie CompareMatch<br />// przerwanie wykonywanie z czestotliwoscia 500 razy na sekunde[/syntax]<br /><br />Procedura obslugi przerwania:<br />[syntax=c]// procedura obslugi przewania<br />ISR(TIMER0_COMPA_vect){<br /><br />static uint16_t cnt=0;// statyczna zmienna cnt do odlicznia setnych ms<br /><br />if(++cnt&gt;499){// gdy licznik ms &gt; 499 ( minela sekunda)<br />s1_flag=1;// ustaw flage tykniecia sekundy<br />sekundy++;// zwiekszenie licznika sekund<br />if(sekundy&gt;59){<br />sekundy=0;// jesli sekundy &gt; 59 - wyzeruj<br />minuty++;<br />}<br />if(minuty&gt;59){// jesli minuty &gt; 59 - wyzeruj<br />minuty=0;<br />godziny++;<br />}<br />if(godziny&gt;23){// jesli godziny &gt; 23 - wyzeruj<br />godziny=0;<br />}<br />cnt=0;// zerowanie liczniki cnt<br />}<br />}[/syntax]<br /><br />Dioda dziala teraz zupelnie inaczej. Wydlug stopera wychodzi sekunda na ON, OFF<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 56 minutach ]</span></strong><br /><br />Timer dziala bez problemu. I wiedze ze jeszcze przedemna dluga droga do poznania jezyka C.<br /><br />Panie Mirku napisal pan wczesniej zeby zamienic godziny i minuty na liczbe calkowita, to rozumiem ale jak teraz zamienic te godziny i minute ktore liczy procek w przerwaniu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1673">peter81j</a> — 31 paź 2013, o 23:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-10-31T23:03:57+01:00</updated>
<published>2013-10-31T23:03:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54999#p54999</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54999#p54999"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54999#p54999"><![CDATA[
aha ok to teraz zrozum - co za różnica że użyjesz timer 8 bitowy, który będzie zliczał czas od powiedzmy 20ms zamiast od 1s ?<br /><br />Tym bardziej że jeszcze po drodze może ci się przydać to do timerów programowych i do wielu rzeczy w programie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 31 paź 2013, o 23:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[peter81j]]></name></author>
<updated>2013-10-31T22:47:35+01:00</updated>
<published>2013-10-31T22:47:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54997#p54997</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54997#p54997"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54997#p54997"><![CDATA[
Czytalem i analizowale, wiem czemu bedzie 113 zamiast 625 dlatego edytowal post i napisalem wyliczenia dla mojego taktowania przy prescaler 256 i 1024<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1673">peter81j</a> — 31 paź 2013, o 22:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-10-31T22:40:48+01:00</updated>
<published>2013-10-31T22:40:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54994#p54994</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54994#p54994"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54994#p54994"><![CDATA[
<div class="quotetitle">peter81j napisał(a):</div><div class="quotecontent"><br />Tylko ze teraz widze ze on zlicza ale nie wiadomo co bo<br />Składnia: [ Pobierz ] [ Ukryj ]<br />język c<br />OCR0A = 625;<br />GeSHi<br />wprowadza blad.<br /></div><br /><br />No ja widzę, że coś ci się zawiesiło bo pisząc to widać że albo nie przeczytałeś tego co pisałem wyżej albo nie chciałeś przeczytać i przeanalizować <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 31 paź 2013, o 22:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[peter81j]]></name></author>
<updated>2013-10-31T22:44:29+01:00</updated>
<published>2013-10-31T22:37:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54992#p54992</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54992#p54992"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54992#p54992"><![CDATA[
Taktowanie procka to 16MHz ale chyba je zmienie na 8 MHz bo wtedy kwarc odejdzie.<br /><br />Wlasnie nie wiem czemu ale moj umysl zawiesil sie na tych sekundach ale ja ich wcale nie potrzebuje bo chcem odliczac godziny.<br /><br />Dopisale w kodzie jeszcze cos takiego i mysle ze teraz program zlicza mi tez minuty i godziny:<br /><br />[syntax=c]ISR(TIMER0_COMPA_vect){<br /><br />static uint8_t cnt=0;// statyczna zmienna cnt do odlicznia setnych ms<br /><br />if(++cnt&gt;99){// gdy licznik ms &gt; 99 ( minela sekunda)<br />s1_flag=1;// ustaw flage tykniecia sekundy<br />sekundy++;// zwiekszenie licznika sekund<br />if(sekundy&gt;59){<br />sekundy=0;// jesli sekundy &gt; 59 - wyzeruj<br />minuty++;<br />}<br />if(minuty&gt;59){// jesli minuty &gt; 59 - wyzeruj<br />minuty=0;<br />godziny++;<br />}<br />if(godziny&gt;23){// jesli godziny &gt; 23 - wyzeruj<br />godziny=0;<br />}<br />cnt=0;// zerowanie liczniki cnt<br />}<br />}[/syntax]<br /><br />Tylko ze teraz widze ze on zlicza ale nie wiadomo co bo [syntax=c]OCR0A = 625;[/syntax] wprowadza blad.<br /><br />Wyliczylem to tak :<br /><br />16000000/ 256/ 100 = 625<br /><br />jak dam wiekszy prescaler - 1024<br /><br />16000000/ 1024/ 100 = 156.25 i tu ma problem bo zostaje reszta .25<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1673">peter81j</a> — 31 paź 2013, o 22:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-10-31T22:20:28+01:00</updated>
<published>2013-10-31T22:20:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54989#p54989</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54989#p54989"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54989#p54989"><![CDATA[
a niby dlaczego program miałby nie działać po takim zapisie ?<br /><br />OCR0A = 625;<br /><br />hmmm ? .... będzie działać ... tyle że jak można próbować do rejestru 8-bitowego wpisywać wartość liczby zapisanej na 16-bitach ?<br /><br />OCR0A = 0b 00000010 01110001;<br /><br />jak pan myślisz jaka wartość pojawi się w rejestrze ? <br /><br />Mała podpowiedź w OCR0A pojawi się 113 zamiast 625 - o to tobie chodziło ? i przed tym ostrzega cię kompilator ... bo nie ma powodu zatrzymać kompilacji - timer będzie działać tylko że z CAŁKIEM nieoczekiwaną częstotliwością dla ciebie<br /><br /><div class="quotetitle">peter81j napisał(a):</div><div class="quotecontent"><br />Czy mam sie przejmowac tym warringiem czy nie<br /></div><br />teraz sam pomyśl czy się przejmować warningiem czy nie ?<br /><br /><br /><div class="quotetitle">peter81j napisał(a):</div><div class="quotecontent"><br />Dlatego wlasnie we wczesniejszym kodzie uzylem wczesniej Timera 16 bitowego gdzy tam mozna zliczac wieksze wartosci<br /></div><br /><br />pisałem ci że da się na takie potrzeby jak twoje - wystarczy odliczać 100Hz ...<br /><br />ale napisz jaką masz częstotliwość taktowania procka i co chcesz w ogóle teraz uzyskać ...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 31 paź 2013, o 22:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[peter81j]]></name></author>
<updated>2013-10-31T22:07:05+01:00</updated>
<published>2013-10-31T22:07:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54987#p54987</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54987#p54987"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=54987#p54987"><![CDATA[
No to po malej przerwie powrot na forum i zapytanie odnosnie Timera 8-bitowego.<br /><br />Zmienilem kod tak zeby uzywac timera 8 bitowego ale teraz mam Warring ze <br /><br />[syntax=c]OCR0A = 625;[/syntax] jest LARGE INTEGER IMPLICITLY TRUNCATED TO UNSIGNED TYPE<br /><br />Mysle ze wiem dlaczego tak jest, Timer 8 bitowy moze tylko zliczac do 256 a ja mam wieksza wartosc.<br />O dziwo po wgraniu tego kodu do procka program dziala.<br />Dlatego wlasnie we wczesniejszym kodzie uzylem wczesniej Timera 16 bitowego gdzy tam mozna zliczac wieksze wartosci.<br />Czy mam sie przejmowac tym warringiem czy nie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1673">peter81j</a> — 31 paź 2013, o 22:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-10-22T22:52:34+01:00</updated>
<published>2013-10-22T22:52:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53989#p53989</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53989#p53989"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53989#p53989"><![CDATA[
trzymać czas np w postaci jednej liczby. Sekundy można sobie darować a godziny i minuty zamieniać na jedną liczbę całkowitą tak:<br /><br /><strong><span style="color: #0040FF">( godziny * 60 ) + minuty</span></strong><br /><br />wtedy możesz sobie łatwo porównywać i sprawdzać czas w procku<br /><br />masz np dwie zmienne jedna będzie zawierać czas1 = 17:34 a druga czas2 = 21:18<br /><br />[syntax=c]uint16_t czas1 = ( 17 * 60 ) + 34;<br />uint16_t czas2 = ( 21 * 60 ) + 18;[/syntax]<br /><br />i teraz gdzieś w kodzie:<br /><br />[syntax=c]if( czas2 &gt; czas1 ) .... to coś robimy[/syntax]<br /><br />to tylko taki obrazowy przykład ale już chyba widzisz co i jak można z tym dalej robić na różne sposoby <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 22 paź 2013, o 22:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[peter81j]]></name></author>
<updated>2013-10-22T21:59:19+01:00</updated>
<published>2013-10-22T21:59:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53986#p53986</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53986#p53986"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53986#p53986"><![CDATA[
Z dodaniem minut i godzin to nie bedzie problemu bo to tak samo jak sekundy tylko za bardzo nie rozumiem jak dalej rozpoczac dzialanie po uplywie 10 godzin i zeby trwalo 20 minut a potem reset i tak w kolko.<br />Jakas ciemnosc mnie nawiedzila.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1673">peter81j</a> — 22 paź 2013, o 21:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-10-20T23:26:17+01:00</updated>
<published>2013-10-20T23:26:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53827#p53827</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53827#p53827"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53827#p53827"><![CDATA[
No to w obsłudze przerwania tyle że na timerze 8-bitowym robisz tykanie co 100ms<br /><br />a w przerwaniu co za problem zliczać: ss,mm i hh ??? przecież teraz masz zliczanie tylko sekund a co za kłopot dodać kolejny if i kolejny if dla minut i godzin ?<br /><br /><img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 paź 2013, o 23:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[peter81j]]></name></author>
<updated>2013-10-20T23:00:37+01:00</updated>
<published>2013-10-20T23:00:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53826#p53826</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53826#p53826"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53826#p53826"><![CDATA[
Nie z tym timere to takie proby. Timer moze byc teraz zmieniony. <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" /><br /><br /> No wlasnie potrzeba mi tego do sterowania lodowka a dokladnie odmrazaniem. Bo padla mi elektronika. Od strony elektrycznej nie ma problemu bo to latwe. Tak wiec jak pisalem po wlaczeniu ukladu ma odmierzyc 10 godzin, wylaczyc kompresor I wlaczyc gzalke na 20 minut I tak w kolko.<br /><br />Moj cel to jak najmniesza ilosc czesci elektronicznych.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1673">peter81j</a> — 20 paź 2013, o 23:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-10-20T22:38:43+01:00</updated>
<published>2013-10-20T22:38:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53823#p53823</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53823#p53823"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53823#p53823"><![CDATA[
<div class="quotetitle">peter81j napisał(a):</div><div class="quotecontent"><br />Chcialbym tak ustawic flage zeby przeranie nastapilo po uplywie 36000 sekund,<br />to znaczy procek zliczy te sekundy wykona zadanie, zadanie to ma trwac 20-30 minut i od nowa.<br /></div><br /><br />no to proszę podpowiedź<br /><br />przede wszystkim to ja myślałem że ty to piszesz ot tak żeby po prostu pobawić się i potestować ... bo jeśli nie tylko zamierzasz w ten sposób liczyć tak długie czasy i to nie mówię już o 20-30min ale w ogóle jakichś typu nawet minuta a do tego bierzesz TIMER 16-bitowy !!! <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> to to jest jak najcięższy grzech pierworodny <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i jak ZEUS by się o tym dowiedział to od razu pierdyknąłby jakimś gromem z nieba . To w najczystszej postaci - marnotrastwo zasobów procka a szczególnie czegoś tak cennego jak timer 16bitowy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Panie kochany przede wszystkim jak chcesz odmierzać tak długaśne czasy to na pewno nie jest ci potrzebna precyzja co do us, ba! nawet co do ms ani nawet jak myślę co do kilku sekund<br /><br />dlatego jak już to użyć tu można albo timera programowego którego podstawę czasu można zrobić sobie na zwyklaku timerze 8-bitowym a przy okazji jeszcze kilka innych timerów programowych do różnych rzeczy ....<br /><br />zajrzyj proszę w bluebooku do rozdziału:<br /><br />&quot;Wstęp do systemów czasu rzeczywistego&quot; <br /><br />tam jest to czego potrzebujesz do takich projektów <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />------------------------------------------------------<br /><br />po drugie przy TAK długich czasach 20-30min to nawet zewnętrznego RTC użyć ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 paź 2013, o 22:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[peter81j]]></name></author>
<updated>2013-10-20T21:40:12+01:00</updated>
<published>2013-10-20T21:40:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53813#p53813</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53813#p53813"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53813#p53813"><![CDATA[
Juz doszedlem, za chwile poprawie kod i wkleje na nowo.<br />Zmylilo mnie to ze u pana w ksiazce taktowanie timera, ustawil pan na 108.<br /><br />Ja to wyliczylem blednie ( mialem ustawiony blednie takze pryscaler) a powinno byc tak<br /><br />16000000 Hz / 256 prescaler / 100 ilosc cykli w sekundzie = 625.<br /><br />Kod dzial dobrze.<br /><br />Mam jeszcze jedno pytanie:<br /><br />Chcialbym tak ustawic flage zeby przeranie nastapilo po uplywie 36000 sekund,<br />to znaczy procek zliczy te sekundy wykona zadanie, zadanie to ma trwac 20-30 minut  i od nowa. <br /><br />I tu wlasnie chcial bym malej wskazowni jak to rozwiazac.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 16 minutach ]</span></strong><br /><br />Oto poprawiony dzialajacy kod z opisem:<br /><br />[syntax=c]//pliki naglowkowe<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define led_pin (1&lt;&lt;PB4)//definicja pinu Led<br />#define led_on PORTB |= led_pin//makrodefinicja - zalacz Led<br />#define led_off PORTB &amp;= ~led_pin//makrodefinicja - wylacz Led<br /><br /><br />volatile uint8_t s1_flag;// flaga tyknicia Timera co 1 sekunde<br />volatile uint8_t sekundy;// licznik sekund 0-59<br /><br /><br />int main(void) {<br /><br />DDRB |= led_pin;// kierunek pinu PB4 - wyjscie<br /><br />//ustawien Timer1 dla F_CPU=16000000<br />TCCR1B |= (1&lt;&lt;WGM12);// tyrb CTC<br />TCCR1B |= (1&lt;&lt;CS12);// prescaler 256<br />OCR1A = 625;// dodatkowy podzial przez 625<br />TIMSK1 |= (1&lt;&lt;OCIE1A);// zezwolnie na przerwanie CompareMatch<br />// przerwanie wykonywanie z czestotliwoscia 100 razy na sekunde<br /><br /><br />sei();// wlaczenie globalne przerwania<br /><br />while(1){<br /><br />if(s1_flag){// spawdzenie flagi tyknieca Timer programowe co 1s<br /><br />if ( 0 == (sekundy%2) ) led_on;<br />if ( 1 == (sekundy%2) ) led_off;<br /><br /><br /><br />s1_flag = 0;// zerowanie flagi<br />}<br />}<br />}<br />// procedura obslugi przewania<br />ISR(TIMER1_COMPA_vect){<br /><br />static uint8_t cnt=0;// statyczna zmienna cnt do odlicznia setnych ms<br /><br />if(++cnt&gt;99){// gdy licznik ms &gt; 99 ( minela sekunda)<br />s1_flag=1;// ustaw flage tykniecia sekundy<br />sekundy++;// zwiekszenie licznika sekund<br />if(sekundy&gt;59) sekundy=0;// jesli sekundy &gt; 59 - wyzeruj<br />cnt=0;// zerowanie liczniki cnt<br />}<br />}[/syntax]<br /><br />Dziekuje panie Mirku a moze mi pan podpowiedziec jak rozwiazac moje pytanie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1673">peter81j</a> — 20 paź 2013, o 21:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sosnus]]></name></author>
<updated>2013-10-20T21:55:44+01:00</updated>
<published>2013-10-20T21:22:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53804#p53804</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53804#p53804"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53804#p53804"><![CDATA[
Ostatnio sam się bawiłem Atmegą328p i zauważyłem dziwną sprawę.<br />Jeżeli używasz zewnętrznego rezonatora kwarcowego BEZWZGLĘDNIE musisz odznaczyć tą opcję:<br /><a href="http://forum.atnel.pl/_obrazki/o/364/686c1152973d3b015e951ce1d2867936.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/364/686c1152973d3b015e951ce1d2867936.jpg" alt="Obrazek" /></a><br /><br />Sam się na to naciąłem, bo mi UART krzaczył, a ja nie wiedziałem dlaczego...<br />Jeżeli masz zaznaczone to pole, to zewnętrzny rezonator nie będzie poprawnie działał.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=364">sosnus</a> — 20 paź 2013, o 21:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-10-20T21:13:38+01:00</updated>
<published>2013-10-20T21:13:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53801#p53801</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53801#p53801"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53801#p53801"><![CDATA[
No dobrze ale widzisz - pewnie masz bluebooka i nie stosujesz się do zasady dobrego programowania - czyli np wstawiania komentarzy, co :<br /><br />1. i ciebie gubi<br />2. i utrudnia innym analizę kodu <br /><br />bo weźmy np to jaką częstotliwość taktowania timera ustawiłeś ? hmmm a też nawet słowa o tym nie napisałeś ...<br /><br />więc pochyl się nad tym i zobacz co zrobiłeś - opisz to a pewnie sam od razu dojdziesz do babola ok ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 paź 2013, o 21:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[peter81j]]></name></author>
<updated>2013-10-20T21:07:04+01:00</updated>
<published>2013-10-20T21:07:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53799#p53799</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53799#p53799"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53799#p53799"><![CDATA[
Tak przestawilem, fusebity ustawione ma arduino. Inne programy z ksiazki smigaja bez problemu tylko ten moj cos nie chce.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1673">peter81j</a> — 20 paź 2013, o 21:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-10-20T20:45:26+01:00</updated>
<published>2013-10-20T20:45:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53796#p53796</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53796#p53796"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53796#p53796"><![CDATA[
tyko czy aby na pewno przestawiłeś pan fusebity z fabrycznego taktowania 1MHz ? na zewn. kwarc ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 paź 2013, o 20:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[peter81j]]></name></author>
<updated>2013-10-20T20:19:41+01:00</updated>
<published>2013-10-20T20:19:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53787#p53787</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53787#p53787"/>
<title type="html"><![CDATA[Problem z przerwaniami w Atmega328p]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4538&amp;p=53787#p53787"><![CDATA[
Witam,<br /><br />Napisalem sobie taki oto kod:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define led_pin (1&lt;&lt;PB4)<br />#define led_on PORTB |= led_pin<br />#define led_off PORTB &amp;= ~led_pin<br /><br /><br />volatile uint8_t s1_flag;<br />volatile uint8_t sekundy;<br /><br /><br />int main(void) {<br /><br />DDRB |= led_pin;<br /><br />TCCR1B |= (1&lt;&lt;WGM12);<br />TCCR1B |= (1&lt;&lt;CS12) | (1&lt;&lt;CS10);<br />OCR1A = 15625;<br />TIMSK1 |= (1&lt;&lt;OCIE1A);<br /><br /><br />sei();<br /><br />while(1){<br /><br />if(s1_flag){<br /><br />if ( 0 == (sekundy%2) ) led_on;<br />if ( 1 == (sekundy%2) ) led_off;<br /><br />s1_flag = 0;<br />}<br />}<br />}<br /><br />ISR(TIMER1_COMPA_vect){<br /><br />static uint8_t cnt=0;<br /><br />if(++cnt&gt;99){<br />s1_flag=1;<br />sekundy++;<br />if(sekundy&gt;59) sekundy=0;<br />cnt=0;<br />}<br />}[/syntax]<br /><br />Zadanie tego programu jest co sekunde zapalic i zgasic diode led.<br />Program dziala tylko zamiast 1 sekundy jest ich o wiele wiecej, nie wiem dokladnie ile bo nie sprawdzalem.<br /><br />Mozecie prosze spawdzic kod i podpowiedzic co jest zle. <br />Timer jaki wykorzystuje to TIMER1 16 bit.<br />Taktowanie procka 16MHz<br />Kod ten jest przerobka kodu o pomiarze temperatury.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1673">peter81j</a> — 20 paź 2013, o 20:19</p><hr />
]]></content>
</entry>
</feed>