<?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=1024&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-04-23T19:34:56+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1024&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-04-23T19:34:56+01:00</updated>
<published>2012-04-23T19:34:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1024&amp;p=5740#p5740</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1024&amp;p=5740#p5740"/>
<title type="html"><![CDATA[Re: Przerwanie...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1024&amp;p=5740#p5740"><![CDATA[
Timer tyknie zawsze 65536 razy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ale ..... ale uwaga - przyzwyczaj się do myślenia że to oznacza zliczenie od 0 do 65535 a nie do 65536 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />a tą wyliczoną liczbę jak mówiłem lepiej na przyszłość wpisuj do rejestru OCRx ustawiając tryb CTC timera - wtedy nie będziesz się w ogóle borykał z jakimś tam odejmowaniem. Jak chcesz żeby zliczył ci 15 impulsów to wpiszesz 15 jak chcesz żeby odliczył 25800 to wpiszesz 25800<br /><br />rozumiesz ? <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> — 23 kwi 2012, o 19:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[spid]]></name></author>
<updated>2012-04-23T16:23:49+01:00</updated>
<published>2012-04-23T16:23:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1024&amp;p=5728#p5728</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1024&amp;p=5728#p5728"/>
<title type="html"><![CDATA[Re: Przerwanie...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1024&amp;p=5728#p5728"><![CDATA[
Jak to pięknie wygląda - pytanie, a pod spodem wyczerpująca odpowiedź <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Tak powinny wyglądać wszystkie tematy na elektrodzie! <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Zapytam jeszcze o drobny szczegół.<br />Timer 16-bitowy pomieści max. liczbę 2^16-1= 65535, a więc przepełnienie nastąpi z 65536-tym tyknięciem zegara, a za kolejnym przejście do obsługi przerwania?<br />Pytam z ciekawości bo zastanawiałem się czy odjąć te 10800 od liczby 65536 czy 65535, chociaż to raczej bez znaczenia<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=323">spid</a> — 23 kwi 2012, o 16:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-04-23T15:25:55+01:00</updated>
<published>2012-04-23T15:25:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1024&amp;p=5722#p5722</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1024&amp;p=5722#p5722"/>
<title type="html"><![CDATA[Re: Przerwanie...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1024&amp;p=5722#p5722"><![CDATA[
Święta prawda z tym jak najszybszym wykonywaniem się przerwań <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ale....<br /><br />.... po pierwsze gdybyś już aż tak bardzo potrzebował wyżyłować przerwanie tzn jego czas (chociaż w tym przypadku nie ma to już większego sensu o czym za chwilę) to skorzystałbyś z trybu CTC Timera1 a nie tak jak teraz z przerwania od przepełnienia przez co w przerwaniu MUSISZ wpisywać wartość TCNT1 .... <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> w razie czego to pamiętaj że tu tracisz już kilka cykli zegara <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... tym bardziej dla Timera1 gdzie trzeba liczbę 16-bitową wpisać <br /><br />po drugie - oczywiście że taki warunek IF nie ma większego znaczenia - chodzi raczej o to żeby nie wpaść na pomysł np wyświetlania czegoś na LCD w przerwaniu albo stosowania jakichś pętli itp ....<br /><br />po trzecie - nie jesteś pierwszym i na pewno nie ostatnim, który spróbował zrobić sobie SUPER dokładny zegarek - chociaż i tak kilka sekund na kilka godzin to niezły wynik <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> .... Ale to dlatego że korzystasz z kwarca a nie z wen. oscylatora<br /><br />OK co  byś nie robił - to i tak nigdy nie uzyskasz SUPER wyniku tą metodą i nawet nie idź w tym kierunku <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />jakbyś nie wiedział to kwarce też mają swoją tolerancję no i na dodatek wraz z upływem czasu potrafi się ona zmieniać (pogarszać) .....<br /><br />Jak chcesz zrobić dokładniejszy zegarek to zrób go na kwarcu zegarkowym 32,768kHz podpiętym pod wejścia asynchroniczne Timera2 - ale to też nie da ci w żadnym wypadku atomowego wzorca czasu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />--------<br /><br />odnośnie czasu wykonywania twojego przerwania - to nie ma ONO NAJMNIEJSZEGO wpływu w takiej postaci jak jest na to że zegarek się późni bądź śpieszy bo i tak czas pomiędzy przerwaniami jest ogromny - masz bardzo krótką obsługę przerwania <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ..... a ta niedokładność która ci wychodzi spowodowana jest wprost niedokładnością kwarca<br /><br />próba robienia super dokładnych zegarków na prockach to jak poszukiwanie świętego grala - nie uda się. Nawet specjalizowane układy RTC mają pewne tolerancje niedokładności<br /><br />..... aha i jeszcze weź pod uwagę że taki zegarek jaki próbujesz robić tzn może to odmierzanie czasu jest zależne od temperatury otoczenia<br /><br />zamiast więc - siedzieć godzinami i obserwować czy procek dokładnie odmierza sekundy - weź lepiej zrób coś innego <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> albo jakiś zegarek na kwarcu zegarkowym - one dają szansę uzyskać nieco większą dokładność i co więcej można sobie go nawet programowo korygować nieco..... Zresztą ten też <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... skoro co 5 godzin późni ci się np o 3 sekundy to co 5 godzin odejmuj 3 sekundy i już będzie dużo dużo lepiej<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 23 kwi 2012, o 15:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[spid]]></name></author>
<updated>2012-04-23T14:58:36+01:00</updated>
<published>2012-04-23T14:58:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1024&amp;p=5721#p5721</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1024&amp;p=5721#p5721"/>
<title type="html"><![CDATA[Przerwanie...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1024&amp;p=5721#p5721"><![CDATA[
<strong><span style="color: #408000">Jak Pan Mirek zaznacza przerwania powinny wykonywać się jak najszybciej.</span></strong><br />Ja mam pytanie: czy w często zachodzącym przerwaniu warunek logiczny ma znaczący wpływ na opóźnienie? <br />Korzystam z zestawu ATB 1.03 i postanowiłem napisać prosty zegarek z wykorzystaniem LCD i biblioteki z płyty załączonej do książki. <br />Po kilku godzinach od uruchomienia opóźnienie wynosiło kilka sekund(porównywałem z zegarkiem PC synchronizowanym z serwerem czasu)<br />[syntax=c]volatile uint8_t hh=23, mm=59, ss=49, set=0;//hh, mm, ss - przechowują odpowiednio godziny, minuty, sekundy; set&gt;0 - tryb ustawiania zegara<br />//obsługa przerwania<br />ISR(TIMER1_OVF_vect)<br />{<br />TCNT1=54736;//1Hz<br />set&gt;0?ss=0:ss++;<br />}<br /><br />int main()<br />{<br />//ustawienie Timera1<br />TCCR1B = (1&lt;&lt;CS12)|(1&lt;&lt;CS10); // preskaler=1024<br />TCNT1 = 54736; // do przepełnienia minie 1 sekunda<br />TIMSK = (1&lt;&lt;TOIE1); // enable overflow interrupt<br />sei(); //globalne zezwolenie na wykonywanie przerwań<br />...<br />[/syntax]<br />Odliczanie do przepełnienia licznika obliczałem tak:<br />2^16 - F_CPU / preskaler / żądana_częstotliwość_przerwania =&gt;<br />65536 - 11 059 200 / 1024 / 1 = 65536 - 10800 = 54736<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=323">spid</a> — 23 kwi 2012, o 14:58</p><hr />
]]></content>
</entry>
</feed>