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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-11-07T22:13:07+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=16736&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-07T22:13:07+01:00</updated>
<published>2016-11-07T22:13:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174080#p174080</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174080#p174080"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174080#p174080"><![CDATA[
<div class="quotetitle">Barti9 napisał(a):</div><div class="quotecontent"><br />Proszę oto kod:<br /></div><br />Polecam ci zacząć od Bluebooka bo coś czuję (choć może nie mam racji, to mnie popraw), że książki nie masz - a kody próbujesz pisać na zasadzie sklejania czegoś tam na &quot;chybił trafił&quot; i bez niestety zrozumienia co i jak działa ... Widać to po podstawowych błędach jakie popełniasz. Żeby nie być gołosłownym proszę przykład:<br /><br />[syntax=c]volatile uint16_t Timer1=0;[/syntax]<br /><br />kolejny, może nie jakiś tam zaraz wielki błąd<br /><br />[syntax=c]OCR1A |=2000-1;[/syntax]<br /><br />ale pokazuje to jak na dłoni, że coś skądś przepisujesz a nie czytałeś jak &quot;to&quot; działa.<br /><br />No a twoje tajemnicze przyśpieszanie albo późnienie to rzecz naturalna w tak napisanym kodzie - tzn sklejonym z jakichś strzępków innych kodów na zasadzie - że hmmm chyba powinno działać .... <br /><br />przyczyny twoich problemów leżą zarówno tu:<br /><br />[syntax=c]TCCR1B|=(1&lt;&lt;CS11); //preskaler 8<br />   OCR1A |=2000-1;[/syntax]<br /><br />a w związku z tym szczególnie tu:<br /><br />[syntax=c]if(!Timer1)<br />      {<br />         Timer1 = 1000;<br />         ......[/syntax]<br /><br /><br />Nie wspomnę już o tym, że występuje paskudny brak komentarzy<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 7 lis 2016, o 22:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2016-11-07T21:48:26+01:00</updated>
<published>2016-11-07T21:48:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174074#p174074</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174074#p174074"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174074#p174074"><![CDATA[
Niewiele widac?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 7 lis 2016, o 21:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Barti9]]></name></author>
<updated>2016-11-07T21:35:09+01:00</updated>
<published>2016-11-07T21:35:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174071#p174071</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174071#p174071"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174071#p174071"><![CDATA[
Proszę oto kod:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;HD44780/HD44780.h&quot;<br /><br /><br />volatile uint16_t Timer1=0;<br /><br />ISR(TIMER1_COMPA_vect) //1000hz<br />{<br />   uint16_t x;<br />   x = Timer1;<br />   if(x)<br />      Timer1 = --x;<br />}<br /><br />int main(void)<br />{<br />   LCD_Initalize();<br /><br />   TCCR1B|=(1&lt;&lt;WGM12);<br />   TCCR1B|=(1&lt;&lt;CS11); //preskaler 8<br />   OCR1A |=2000-1;<br />   TIMSK |= (1&lt;&lt;OCIE1A);<br /><br />   sei();<br />   <br />   uint8_t h = 0;<br />   uint8_t min = 0;<br />   uint8_t sec = 0;<br /><br />   for(;;)<br />   {<br />      if(!Timer1)<br />      {<br />         Timer1 = 1000;<br />         LCD_GoTo(0,1);<br />         if (h&lt;10) LCD_WriteText(&quot;0&quot;);<br />         LCD_Int(h);<br />         LCD_WriteData(':');<br />         if (min&lt;10) LCD_WriteText(&quot;0&quot;);<br />         LCD_Int(min);<br />         LCD_WriteData(':');<br />         if (sec&lt;10) LCD_WriteText(&quot;0&quot;);<br />         LCD_Int(sec);<br />         <br />         sec++;<br />         <br />         if(sec &gt;= 60)<br />         {<br />            sec = 0;<br />            min++;<br />         }<br />         <br />         if(min &gt;= 60)<br />         {<br />            min = 0;<br />            h++;<br />         }<br />      }<br />   }<br />}<br /></div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15390">Barti9</a> — 7 lis 2016, o 21:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2016-11-07T20:06:07+01:00</updated>
<published>2016-11-07T20:06:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174061#p174061</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174061#p174061"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174061#p174061"><![CDATA[
Proponowałbym, żeby autor tematu przedstawił całość kodu, jeśli to nie tajemnica. Podejrzewam, że wtedy coś się uda doradzić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 7 lis 2016, o 20:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojtekr51]]></name></author>
<updated>2016-11-07T18:35:20+01:00</updated>
<published>2016-11-07T18:35:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174053#p174053</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174053#p174053"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174053#p174053"><![CDATA[
<div class="quotetitle">Daro69 napisał(a):</div><div class="quotecontent"><br />No nie do końca tak jest...<br /></div>A no rzeczywiście <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> . Przepraszam za błędną diagnozę. Sam w swoich kodach piszę to poprawnie, a tu źle doradzam <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> . Dziękuję za sprostowanie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1760">wojtekr51</a> — 7 lis 2016, o 18:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-11-07T17:38:54+01:00</updated>
<published>2016-11-07T17:38:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174047#p174047</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174047#p174047"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174047#p174047"><![CDATA[
<div class="quotetitle">wojtekr51 napisał(a):</div><div class="quotecontent"><br />Według mnie masz źle zainicjalizowany rejestr OCR1A. Powinno być:<br />Składnia: [ Pobierz ] [ Ukryj ]<br />język c<br />OCR1A = 2000;<br /></div><br />No nie do końca tak jest, bo OCR1A jest porównywane z licznikiem liczącym od 0.<br />dlatego do 1999 ma 2000 pozycji.  <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=11549">Daro69</a> — 7 lis 2016, o 17:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojtekr51]]></name></author>
<updated>2016-11-07T17:27:57+01:00</updated>
<published>2016-11-07T17:27:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174044#p174044</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174044#p174044"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174044#p174044"><![CDATA[
Według mnie masz źle zainicjalizowany rejestr OCR1A. Powinno być:<br />[syntax=c]OCR1A = 2000;[/syntax]<br />Ale to by nie wyjaśniało aż tak dużej odchyłki odmierzanego czasu. Na 20 min jak piszesz, ten błąd wniósł by mniej więcej tyle:<br />20 x 60 x 1000 = 1200000 - tyle razy wykonywane jest przerwanie w czasie 20 min<br />1200000 x (0.001 / 2000) = 0.6 - tyle sekund mniej więcej jest przyspieszenia z tego powodu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1760">wojtekr51</a> — 7 lis 2016, o 17:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-07T17:25:51+01:00</updated>
<published>2016-11-07T17:25:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174042#p174042</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174042#p174042"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174042#p174042"><![CDATA[
<div class="quotetitle">Barti9 napisał(a):</div><div class="quotecontent"><br />No dobrze, ja rozumiem że tego typu stoper może się późnic i to bardzo ale dlaczego w moim przypadku przyspieszał, jeżeli stoper w pętli głównej zwieksza swoją wartość tylko gdy flaga Timer1 jest równa 0.  Dodam jeszcze że na początku przez kilka sekund pracy, stoper działał prawidłowo a potem nagle przyspieszał.<br /></div><br /><br />No no i oczywiście pytanie dla jasnowidza na koniec <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> — 7 lis 2016, o 17:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Barti9]]></name></author>
<updated>2016-11-07T17:05:21+01:00</updated>
<published>2016-11-07T17:05:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174041#p174041</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174041#p174041"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174041#p174041"><![CDATA[
No dobrze, ja rozumiem że tego typu stoper może się późnic i to bardzo ale dlaczego w moim przypadku przyspieszał, jeżeli stoper w pętli głównej zwieksza swoją wartość tylko gdy flaga Timer1 jest równa 0.  Dodam jeszcze że na początku przez kilka sekund pracy, stoper działał prawidłowo a potem nagle przyspieszał.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15390">Barti9</a> — 7 lis 2016, o 17:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-07T16:33:32+01:00</updated>
<published>2016-11-07T16:33:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174037#p174037</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174037#p174037"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174037#p174037"><![CDATA[
<div class="quotetitle">APAP75 napisał(a):</div><div class="quotecontent"><br />Jako zegar jest ..... i tu, przychylając się do Twojej prośby, nie użyję tego słowa.   <br />Innymi słowy - zegar programuje się używając innych narzędzi.<br /></div><br />No i AMEN <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> o to chodzi ... i teraz zgadzamy się w 100% .... jako zegar/stoper jest ..... <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><br /><br />Mam nadzieję, że dzięki obszernym wyjaśnieniom kolegi squeez oraz tej całej dyskusji - wiele osób które tu zawitają - lepiej zrozumieją istotę timerów programowych <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> — 7 lis 2016, o 16:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[APAP75]]></name></author>
<updated>2016-11-07T15:36:18+01:00</updated>
<published>2016-11-07T15:36:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174032#p174032</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174032#p174032"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174032#p174032"><![CDATA[
OK. Jest dobre a nawet bardzo dobre do pewnych (określonych) zastosowań.<br />Jako zegar jest .....  i tu, przychylając się do Twojej prośby, nie użyję tego słowa.  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br />Innymi słowy - zegar programuje się używając innych narzędzi.<br /><br />Nie chciałem nikogo urazić - jeśli tak to przepraszam. <br />Ty też mnie nie uraziłeś - za dużo Twoich postów już czytałem   <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Purystą językowym także nie jestem.<br /><br />A koledze <strong> squeez</strong> dziękuję za obszerne wyjaśnienia. Okazało się, że opisujemy ścieżki idąc pod zupełnie inna góry  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Dzięki niemu jestem na 100% obrotach i to bez kawy.   <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6195">APAP75</a> — 7 lis 2016, o 15:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-07T15:06:42+01:00</updated>
<published>2016-11-07T15:06:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174030#p174030</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174030#p174030"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174030#p174030"><![CDATA[
<div class="quotetitle">APAP75 napisał(a):</div><div class="quotecontent"><br />Chyba, że znów błądzę, to proszę o kolejne wskazówki.<br /></div><br />Nie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> no teraz zrozumiałeś .... i oczywiście racją jest to co napisałeś <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><div class="quotetitle">APAP75 napisał(a):</div><div class="quotecontent"><br />Do głowy mi nie przyszło, że ktoś może na TAKIM timerze programowym zrobić zegar....<br /></div><br /><br />No ale z kolei to zdanie <br /><br /><div class="quotetitle">APAP75 napisał(a):</div><div class="quotecontent"><br />Wam chodzi o coś w rodzaju przerzutnika moinostabilnego - wyzwalamy timer w programie (Timer1=100), a on się zeruje w przerwaniach. Wówczas faktycznie jego dokładność jest do bani.<br /></div><br /> znowu świadczyć może, że nadal nie rozumiesz albo no - wybacz głupotki opowiadasz - jeśli chodzi o to stwierdzenie na końcu o bani. Nie chciałbym już odpowiadać tobie w takim samym tonie bo pewnie uznałbyś to zaraz za jakiś przytyk czy nieuprzejmość ....<br /><br />Więc proszę tylko uprzejmie nie pisz takich bzdur, że mechanizm ten jest do &quot;bani&quot; ..... bo nadal to może tylko świadczyć, że nie rozumiesz  tego mechanizmu ok - na prawdę proszę<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 7 lis 2016, o 15:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[APAP75]]></name></author>
<updated>2016-11-07T13:33:02+01:00</updated>
<published>2016-11-07T13:33:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174023#p174023</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174023#p174023"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174023#p174023"><![CDATA[
HE he he - teraz rozumiem - że mówiliśmy o dwóch różnych rzeczach.<br /><br />Wam chodzi o coś w rodzaju przerzutnika moinostabilnego - wyzwalamy timer w programie (Timer1=100), a on się zeruje w przerwaniach. Wówczas faktycznie jego dokładność jest do bani.<br />Do głowy mi nie przyszło, że ktoś może na TAKIM timerze programowym zrobić zegar....<br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />i co ? teraz ? .... rozumiesz dlaczego Timer1 może nagle MIEĆ rozbieżność z założonym czasem ? A pomimo to nadal taka konstrukcja jest pożądana i używana w milionach przypadków, projektów i rozwiązań<br /></div><br />Rozumiem, rozumiem - mały delay wystarczył. A zastosowanie - do nieblokującego odmierzenia pewnego odcinka czasu, coś jak minutnik do  jajek. I jak minutnik do jajek może być wykorzystywany w programie.<br /><br />Ja cały czas myślałem o czymś co chodzi &quot;w tle&quot; - takie &quot;cykadło&quot;. Używałem takiego czegoś kilka razy - i także nazywałem to sobie zegarem programowym....<br /><br />Chyba, że znów błądzę, to proszę o  kolejne wskazówki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6195">APAP75</a> — 7 lis 2016, o 13:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-07T13:07:16+01:00</updated>
<published>2016-11-07T13:07:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174022#p174022</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174022#p174022"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174022#p174022"><![CDATA[
<div class="quotetitle">APAP75 napisał(a):</div><div class="quotecontent"><br />Hmm. Nie wiem jak to napisać, bo większości Was jeśli chodzi o programowanie do pięt nie dorastam, ale:<br /></div><br />Tu wcale nie o to chodzi .... za to szkoda, że nie czytasz dokładnie tego co piszę i zamiast zapytać się o coś czego nie rozumiesz to piszesz (wybacz - ale robisz to już po raz drugi więc muszę to powiedzieć) więc piszesz BZDURY.<br /><br /><div class="quotetitle">APAP75 napisał(a):</div><div class="quotecontent"><br />Skoro timer programowy (postaram się nie używać słowa licznik) jest napędzany w przetrwaniu to nie powinniśmy go modyfikować gdzieś w programie.<br /></div><br />To po raz kolejny pokazuje, że W OGÓLE nie rozumiesz istoty działania i korzystania z timera programowego, a szkoda że zamiast próbować się dowiedzieć - bo przyniosłoby to tobie mnóstwo korzyści gdybyś zaskoczył o co chodzi w tym mechanizmie - to wolisz wypisywać swoje kosmiczne teorie i przekręcać to co staram się żmudnie tłumaczyć i w książce i w poradnikach i na forum .... Oczywiście, ja sobie zdaję sprawę, że pomimo tego wciąż ktoś nie może zrozumieć - i nie obwiniam nigdy kogoś za to że nie rozumie - winy mogę szukać u siebie, że nie potrafię dotrzeć .... no ale nie zgodzę się na to, żebyś opowiadał bzdury o tym mechanizmie i kręcił w głowach innym początkującym ok? stąd moje WYJAŚNIENIA.<br /><br /><div class="quotetitle">APAP75 napisał(a):</div><div class="quotecontent"><br />To tak jakbyśmy używali timera sprzętowego i przy pewnym warunku modyfikowali TCNT (jego licznik).<br /></div><br />No więc to BZDURA NAD BZDURAMI, ponieważ - timer programowy jest napędzany licznikiem który modyfikowany jest w przerwaniu ! .... zrozum to. Natomiast gdy ta modyfikacja się zakończy i ma on wartość = ZERO to już przestaje być modyfikowany w przerwaniu. Działa jak FLAGA na którą może zareagować pętla główna, i wtedy mamy pełne prawo modyfikować - hmmm w zasadzie to nie modyfikować tylko ponownie inicjalizować licznik. Oczywiście kwestia czy stosujemy w tym momencie ATOMIC BLOCK czy ręczne wyłączenie przerwań na chwilę to już całkiem inna rzecz i nie zawsze jest to nawet potrzebne ... choć dla porządku tak można uznać że to warto robić ... niech będzie, ale to NADAL NIE MA WPŁYWU na jakąś twoją WYIMAGINOWANĄ dokładność timera programowego - która wg ciebie ma być rzekomo taka sama jak realizacja procesów w oparciu o przerwania .... timera sprzętowego<br /><br />dlatego spójrz na prosty przykład - który może w końcu spowoduje, że przynajmniej zastanowisz się i pochylisz nad tym co to jest timer programowy<br /><br />[syntax=c]while(1)<br />        {<br />             if( !Timer1 )<br />                {<br />                        PORTD ^= (1&lt;&lt;PD0);<br />                        Timer1 = 100;<br />                }<br />// ***************************<br />             _delay_ms(20);  // symulacja procesu zajmującego czas pętli na 20 ms<br />// ***************************<br />        }[/syntax]<br /><br />i co ? teraz ? .... rozumiesz dlaczego Timer1 może nagle MIEĆ rozbieżność z założonym czasem ? A pomimo to nadal taka konstrukcja jest pożądana i używana w milionach przypadków, projektów i rozwiązań<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 7 lis 2016, o 13:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[APAP75]]></name></author>
<updated>2016-11-07T12:21:14+01:00</updated>
<published>2016-11-07T12:21:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174018#p174018</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174018#p174018"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174018#p174018"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />A kto tu mówi o liczniku programowym ? ... normalnie co odpowiedź w tym wątku to kompletne niezrozumienie ... masz w tytule &quot;timer programowy&quot; to jedno<br /></div><br />Przepraszam - przejęzyczenie. Licznik, timer - zasada działania taka sama - to i to liczy. Wybaczcie, nie jestem purystą. Bardziej jestem w drugiej skrajności. Choć w programowaniu  nie jest to pożądana cecha   <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br /><div class="quotetitle">squeez napisał(a):</div><div class="quotecontent"><br />Więc może zademonstruję prosty przykład który bardziej przemówi:<br /><br />Taki prosty kod:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /> <br />volatile uint8_t Timer1;<br /> <br />int main(void)<br />{<br />        DDRD = (1&lt;&lt;PD0);<br /> <br />        TCCR2 = (1&lt;&lt;WGM21) | (1&lt;&lt;CS20) | (1&lt;&lt;CS21) | (1&lt;&lt;CS22);<br />        TIMSK |= (1&lt;&lt;OCIE2);<br /> <br />        sei();<br />        while(1)<br />        {<br />             if( !Timer1 )<br />                {<br />                        PORTD ^= (1&lt;&lt;PD0);<br />                        Timer1 = 100;<br />                }<br />        }<br />        return 0;<br />}<br /> <br />ISR(TIMER2_COMP_vect)<br />{<br />        uint8_t n;<br /> <br />        n = Timer1;<br />        if(n) Timer1 = --n;<br />}<br />        }[/syntax]<br /></div><br /><br />Hmm. Nie wiem jak to napisać, bo większości Was jeśli chodzi o programowanie do pięt nie dorastam, ale:  <br />Skoro timer programowy (postaram się nie używać słowa licznik) jest napędzany w przetrwaniu to nie powinniśmy go modyfikować gdzieś w programie. Powinien być  modyfikowany tylko w  przerwaniu.  To tak jakbyśmy używali timera sprzętowego i przy pewnym warunku modyfikowali TCNT (jego licznik). W ten sposób sami strzelamy  sobie w stopę. Można spróbować to jakoś &quot;załatać&quot; i całe ciało warunku &quot;if&quot; włożyć w ATOMIC BLOCK, ale nadal to  może w przyszłości generować nam problemy. Bo co się stanie, jeśli rozbudujemy nasz program i wartość timera programowego zdąży zmienić się dwa razy zanim sprawdzimy warunek &quot;if&quot; np. przejdzie przez zero.<br /><strong>squeez</strong> - Twoje przemyślenia są  jak najbardziej poprawne, ale dla mnie jest to nadal kwesta dobrze napisanego programu.<br />Jest taki scalak: DS1904-F5. Jest to RTC, który tylko liczy - nie pokazuje dni tygodnia, daty itp itd. Gdyby z założenia  wszystkie timery programowe były obarczone błędem, ten układ nie miałby prawa istnieć. <br />Z innej beczki - są projekty zegarów na atmega8 wykorzystujących licznik asynchroniczny i kwarc zegarkowy. Tutaj także sami zliczamy impulsy (timer programowy), a ich dokładność  jest taka, jak dokładność zastosowanego kwarcu. Możemy zastosować też  inny kwarc i puścić licznik &quot;normalnie&quot; tylko, że wówczas bardziej  karkołomne będzie dla nas odmierzenie dokładnie 1 sekundy.<br /><br />Jak rozumiem timer programowy - dla mnie jest to liczba (komórka pamięci), której wartość zmieniana jest w ściśle określonych odstępach czasu. My możemy podglądnąć jej wartość, ALE TYLKO w określonym miejscu programu (chodzi mi tu o to, że nie wyzwoli przerwania w momencie osiągnięcia przez tą  liczbę określonej wartości). Dlatego też, aby jego wskazanie było poprawne modyfikowany może być tylko tam, skąd jest napędzany - w przerwaniu - nigdy w kodzie programu. <br />Gdy odczytujesz czas na zegarze i stwierdzisz, że minęła pełna np. minuta nie łapiesz wahadła i nie ustawiasz go w np. lewym skaranym położeniu - cyka sobie jak cykało - ty  tylko obserwujesz. Bo potem można się zdziwić i np. rewolucja październikowa wybucha w listopadzie  <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=6195">APAP75</a> — 7 lis 2016, o 12:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-07T10:18:43+01:00</updated>
<published>2016-11-07T10:18:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174008#p174008</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174008#p174008"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174008#p174008"><![CDATA[
squeez ---&gt; PIĘKNE podsumowanie tematu !<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 7 lis 2016, o 10:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-07T08:59:43+01:00</updated>
<published>2016-11-07T08:59:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174006#p174006</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174006#p174006"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174006#p174006"><![CDATA[
<div class="quotetitle">APAP75 napisał(a):</div><div class="quotecontent"><br />Co to właściwie jest licznik programowy?<br /></div><br />A kto tu mówi o liczniku programowym ? ... normalnie co odpowiedź w tym wątku to kompletne niezrozumienie ... masz w tytule &quot;timer programowy&quot;  to jedno<br /><br /><div class="quotetitle">APAP75 napisał(a):</div><div class="quotecontent"><br />Jeżeli jednak robimy to w określonych, stałych odstępach czasu - np. w funkcji obsługi przerwania timera, to dokładność takiego &quot;timera programowego&quot; jest dokładnie taka sama jak dokładność timera sprzętowego, który go wyzwala.<br /></div><br />Tu albo nadal nie rozumie kolega co to timer programowy albo kompletnie nie wie w czym rzecz ....<br /><br />Timer programowy jest wprawdzie napędzany w przerwaniu - ALE ... ale jego realizacja - czyli wywoływane zdarzenia są odpalane w pętli głównej a w niej mogą być umieszczane różne inne funkcje mniej lub bardziej blokujące co ZDECYDOWANIE może wpłynąć na czas albo precyzyjniej mówiąc na rozbieżności czasowe wykonywania się takich procesów i jest to z założenia działania timera programowego NORMALNE zjawisko ...<br /><br />NIE MA WIĘC mowy - że DOKŁADNOŚĆ timera programowego będzie taka sama jak sprzętowego .... no chyba, że ktoś właśnie mocno nie rozumie co to jest timer sprzętowy - to ok - wtedy można mówić takie dziwne rzeczy .... albo nazywać timer programowy jakimś tam licznikiem ...<br /><br />Zwracam na to uwagę z uporem maniaka - a jeśli ktoś nie rozumie nadal co to &quot;timer programowy&quot; no to proszę dopytać, napisać czego się nie rozumie - itp ... chętnie podpowiem i odpowiem na każde pytanie.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br /><div class="quotetitle">APAP75 napisał(a):</div><div class="quotecontent"><br />Barti9 - wrzuć cały kod,<br /></div><br />I to jest PODSTAWA - zamiast beletrystycznych opisów i domysłów czy mikrokontroler jest wadliwy ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 7 lis 2016, o 08:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[APAP75]]></name></author>
<updated>2016-11-07T08:48:17+01:00</updated>
<published>2016-11-07T08:48:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174005#p174005</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174005#p174005"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174005#p174005"><![CDATA[
Niby  rozumiem, ale pojąć nie mogę.<br /><br /><div class="quotetitle">mczarny napisał(a):</div><div class="quotecontent"><br />odpowiedź jest jedna: TAK może się późnić, śpieszyć albo raz późnić raz śpieszyć i to o DUŻO WIĘKSZE wartości niż tu podajesz .... i dodam pewnie dla ciebie zagadkowo. TO JEST PRAWIDŁOWE jeśli chodzi o timer programowy !  ... Ba! ... powiem więcej - jak na timer programowy ta niedokładność o której piszesz to i tak jakiś rekord świata DOKŁADNOŚCI dla timera programowego<br /></div><br /><br />Co to właściwie jest licznik  programowy? Rozumiem, że jest to jakaś liczba, którą zwiększamy/zmniejszamy co jakiś określony  czas.<br />Jeśli tak jest, to gdy zmieniamy jej wartość na delay'ach, powyższe zdanie ma sens.<br />Jeżeli jednak robimy to w określonych, stałych odstępach czasu - np. w funkcji obsługi przerwania timera, to dokładność takiego &quot;timera programowego&quot; jest dokładnie taka sama jak dokładność timera sprzętowego, który go wyzwala. Wszelkiego rodzaju odstępstwa wynikają tylko z niezrozumienia noty aplikacyjnej lub złego kodu.<br /><br />WSZYSTKIE moje błędy zawsze  sprowadzały się do powyższego (Panowie - kiedyś wymieniłem ATmega128, a okazało się, że błąd był w źle ustawionych fusebitach - i co...  mam teraz dwie ATmegi128  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> )<br /><br />Barti9 - wrzuć cały kod, to być może ktoś go wgra na procka i przetestuje (lub jakiś megamózg z forum po jednym rzucie oka napisze - TU JEST ŹLE). A błędy czasem wkradają się w najmniej spodziewanym miejscu. Sam jestem trochę zaintrygowany Twoim postem i ciekawi  mnie rozwiązanie Twojego problemu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6195">APAP75</a> — 7 lis 2016, o 08:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-07T06:47:33+01:00</updated>
<published>2016-11-07T06:47:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174000#p174000</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174000#p174000"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=174000#p174000"><![CDATA[
(tak dla wyjaśnienia bo widzę, że powtarzasz ten sam błąd - to dekrementacja a nie deklementacja ok?)<br /><br /><div class="quotetitle">Barti9 napisał(a):</div><div class="quotecontent"><br />Obsługę przerwania napisałem świadomie bez przypisywania nowo stworzonej zmiennej wartości zmiennej Timer1 a później jej deklementacji jak to jest napisane w książce ponieważ instynktownie stwierdziłem że jest to zbędne wydłużanie ilości instrukcji, lecz po głębszym zastanowieniu możliwe że jest to powodem zakłóceń.<br /></div><br /><br />Zaczynasz się uczyć programowania, ok ... więc tym bardziej nie polegaj na &quot;instynkcie&quot; bo on cię zwodzi na mega manowce - zamiast instynktu włącz dociekliwość a jak czegoś nie wiesz to dopytaj ... bo sam sobie kładziesz kłody pod nogi. Bo ani nie jest to ŻADNYM powodem wyimaginowanych przez ciebie zakłóceń, ani nie jest to żadne wydłużanie ilości instrukcji a wręcz przeciwnie - ZNACZNE przyśpieszenie działania tego fragmentu kodu - który jest napisany tak jak w książce a nie tak jak w twoim wypadku co może mieć szczególnie znaczenie jeśli chodzi o napędzanie timerów programowych...<br /><br /><div class="quotetitle">Barti9 napisał(a):</div><div class="quotecontent"><br />Przerwanie jest wywoływane z częstotliwością 64 khz. Pomimo wyższej częstotliwości niz wywolywanie się przerwania timera 16 bit(1 khz), dokładność na oko jest idealna. W obsłudze przerwań jest kod odpowiedzialny za podział częstotliwości przez 64000 czego rezultatem jest deklementacja zmiennej Timer1 co sekundę.<br /></div><br />Po tym co piszesz widać też, że na razie przynajmniej nie masz zielonego pojęcia o asemblrze ... skoro odpalasz przerwanie z częstotliwością 64 kHz (a nie wiem nawet co w nim wyprawiasz) ...<br /><br />i do tego piszesz już KOSMICZNE wizje typu:<br /><br /><div class="quotetitle">Barti9 napisał(a):</div><div class="quotecontent"><br />, być może powodem są zewnętrze zakłócenia lub wadliwy mikrokontroler? Co o tym sadzicie?<br /></div><br />Postaraj się zapamiętać na całe swoje programistyczne życie, że im częściej będziesz wymyślał aż TAK mocno kosmiczne historie - tym gorzej będzie ci się uczyć a na pewno proces uczenia wydłuży ci się gigantycznie .... Tyle mogę napisać o tym co sądzę na taki pomysł ...<br /><br />Jeśli chcesz odpalać przerwanie z częstotliwością 64 kHz to się grubo zastanów i zajrzyj do pliku *.lss po kompilacji, żeby zobaczyć ile w tym przerwaniu masz instrukcji asemblerowych. Pewnie cię to zaskoczy ile ich tam wlazło - nawet jeśli w C napisałeś np tylko jedną albo dwie linijki kodu..... Pewnie nie słyszałeś o tzw PROLOGU i EPILOGU kodu asemblerowego w ramach każdej funkcji, a zajmują one również nie tylko pamięć Flash ale i CZAS .... rozumiesz? CZAS wykonywania się. Weź sobie byle dokumentację w której zawsze masz podane ilości taktów przypadające na każdą komendę asm, zlicz sobie wtedy czas realizacji procedury obsługi przerwania i wtedy może dopiero to coś ci powie ... i zrozumiesz dlaczego trzeba uważać z częstotliwością przerwań w stosunku do ilości kodu która jest w nich realizowana ...<br /><br />wtedy też zobaczysz i zrozumiesz że pisanie o wadliwym mikrokontrolerze w tym aspekcie to jakaś kosmiczna teoria ....<br /><br />Przy okazji obejrzyj że sobie ten poradnik o przerwaniach:<br /><!-- m --><a class="postlink" href="https://www.youtube.com/watch?v=J82_Zop9cjE" >https://www.youtube.com/watch?v=J82_Zop9cjE</a><!-- m --><br /><br />(jest on może troszkę z przymrużeniem oka ale pokazuje to co może się dziać gdy ktoś nie zdaje sobie sprawy z tego jak działają przerwania i może ci się to mocno przydać)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 7 lis 2016, o 06:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Barti9]]></name></author>
<updated>2016-11-07T01:32:40+01:00</updated>
<published>2016-11-07T01:32:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173996#p173996</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173996#p173996"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173996#p173996"><![CDATA[
Witam, dziękuję za wszelkie odpowiedzi. Ogólnie program jest do celów eksperymentalnych. Obsługę przerwania napisałem świadomie bez przypisywania nowo stworzonej zmiennej wartości zmiennej Timer1 a później jej deklementacji jak to jest napisane w książce ponieważ instynktownie stwierdziłem że jest to zbędne wydłużanie ilości instrukcji, lecz po głębszym zastanowieniu możliwe że jest to powodem zakłóceń.<br />Idąc dalej uruchomilem drugi timer o rozdzielczości 8 bit, wartość ocr jest równa 249 a preskaler jest ustawiony na 1. Przerwanie jest wywoływane z częstotliwością 64 khz. Pomimo wyższej częstotliwości niz wywolywanie się przerwania timera 16 bit(1 khz), dokładność na oko jest idealna. W obsłudze przerwań jest kod odpowiedzialny za podział częstotliwości przez 64000 czego rezultatem jest deklementacja zmiennej Timer1 co sekundę.<br />W pętli głównej programu jest tylko i wyłącznie funkcja warunkowa sprawdzająca czy wartość Timer1 jest równa zero, więc timer programowy powinien działać bez zarzutu, o ile można to tak nazwać bo jedynie ma za zadanie dzielić częstotliwość taktowania.<br />Sprawa wydaje się dziwna, być może powodem są zewnętrze zakłócenia lub wadliwy mikrokontroler? Co o tym sadzicie?<br /><br />Pozdrawiam Bartek<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br />Witam, dziękuję za wszelkie odpowiedzi. Ogólnie program jest do celów eksperymentalnych. Obsługę przerwania napisałem świadomie bez przypisywania nowo stworzonej zmiennej wartości zmiennej Timer1 a później jej deklementacji jak to jest napisane w książce ponieważ instynktownie stwierdziłem że jest to zbędne wydłużanie ilości instrukcji, lecz po głębszym zastanowieniu możliwe że jest to powodem zakłóceń.<br />Idąc dalej uruchomilem drugi timer o rozdzielczości 8 bit, wartość ocr jest równa 249 a preskaler jest ustawiony na 1. Przerwanie jest wywoływane z częstotliwością 64 khz. Pomimo wyższej częstotliwości niz wywolywanie się przerwania timera 16 bit(1 khz), dokładność na oko jest idealna. W obsłudze przerwań jest kod odpowiedzialny za podział częstotliwości przez 64000 czego rezultatem jest deklementacja zmiennej Timer1 co sekundę.<br />W pętli głównej programu jest tylko i wyłącznie funkcja warunkowa sprawdzająca czy wartość Timer1 jest równa zero, więc timer programowy powinien działać bez zarzutu, o ile można to tak nazwać bo jedynie ma za zadanie dzielić częstotliwość taktowania.<br />Sprawa wydaje się dziwna, być może powodem są zewnętrze zakłócenia lub wadliwy mikrokontroler? Co o tym sadzicie?<br /><br />Pozdrawiam Bartek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15390">Barti9</a> — 7 lis 2016, o 01:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-06T21:01:12+01:00</updated>
<published>2016-11-06T21:01:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173976#p173976</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173976#p173976"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173976#p173976"><![CDATA[
Nie chodzi o to że coś jest źle - tylko od dłuższego czasu wszyscy zastanawiają się jakby i szukają przyczyny tak dużych rozbieżności w timerze programowym PODKREŚLAM, programowym - np w dokładności kwarcu - to jest wg mnie irracjonalne - więc ok wyjaśnię po raz kolejny<br /><br />timer programowy - to taki &quot;twór&quot; który z założenia może działać BARDZO NIEDOKŁADNIE <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... czyli korzystamy z niego w tych sytuacjach gdy nie ma znaczenia czy jakiś proces, którym zawiaduje timer programowy wykona się np co sekundę czy może co sekundę 250 ms albo co np sekundę i 500 ms (czyli aż 50% dłużej) <br /><br />TO JEST ISTOTA RZECZY i proszę tego nie mylić z działaniem timera sprzętowego - który akurat IDEALNIE, podkreślam IDEALNIE nadaje się na realizację stopera i nawet nie ma co wtedy rozważać czy w międzyczasie wykonują się inne przerwania .... <br /><br />BRAK ZROZUMIENIA tego co wyżej napisałem - NIGDY nie pozwoli początkującym zrozumieć co oznacza potoczne pojęcie &quot;WYKONYWANIA SIĘ KILKU RZECZY NARAZ W TYM SAMYM CZASIE&quot;<br /><br />--------------------------------------------------------------------<br /><br />realizacja stopera w oparciu nawet o &quot;kulawy&quot; kwarc 16 MHz ze słabą nawet wartością ppm ale przy wykorzystaniu timera sprzętowego da w 100% zadowalające rezultaty ... I nie trzeba żadnych specjalizowanych układów czasowych. No chyba, że ktoś chce zrobić jakiś mega dokładny stoper liczący z dokładnością co do femtosekund <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... ale już po pierwszym poście widać, że chodzi o jakiś najzwyklejszy stoperek że tak powiem.<br /><br />a więc podchodząc do realizacji niektórych założeń projektowych warto po prostu uczyć się dobierać narzędzia...<br /><br />Jeśli chcemy żeby np jakiś proces wykonywał się MNIEJ-WIĘCEJ co sekundę, hmmm co 5 sekund i nie robi nam różnicy że czasem będą odchyłki nawet o 20% , 30 % albo i 50% .... a takich zadań w projektach mamy na kopy - to IDEALNIE wpasowują się tu timery programowe. Przy założeniu takich procentowych błędów - dokładność kwarca ma się jak pięść do oka ...<br /><br />i to proszę zrozumieć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 6 lis 2016, o 21:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Situs]]></name></author>
<updated>2016-11-06T17:39:41+01:00</updated>
<published>2016-11-06T17:39:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173957#p173957</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173957#p173957"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173957#p173957"><![CDATA[
Bo kompilatory języków wysokiego poziomu muszą rozłożyć to na części pierwsze które trochę trwają czyli np inkrementacja może trwać koło 4-5 takty, przypisanie zmiennej wartości innej zmiennej z 8 taktów a  if(a+b&gt;c) z 10 takty. Ify mogą nawet 20 taktów zjeść. W Assemblerze masz pełną kontrolę nad czasem wykonania programu, więc napisz w assemblerze program albo wstaw wstawkę assemblerową.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14339">Situs</a> — 6 lis 2016, o 17:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-06T16:59:23+01:00</updated>
<published>2016-11-06T16:59:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173952#p173952</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173952#p173952"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173952#p173952"><![CDATA[
<div class="quotetitle">squeez napisał(a):</div><div class="quotecontent"><br />Więc jeśli chcesz używać czegoś takiego do odmierzania czasu to trzeba brać to pod uwagę.<br /></div><br />ale chyba kolega nie zauważył, że tu chodzi o timer programowy a nie sprzętowy .... <br /><br />więc po raz kolejny przypomnę - to nie ma nic wspólnego z dokładnością kwarca <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> — 6 lis 2016, o 16:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-06T14:51:50+01:00</updated>
<published>2016-11-06T14:51:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173944#p173944</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173944#p173944"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173944#p173944"><![CDATA[
<div class="quotetitle">Barti9 napisał(a):</div><div class="quotecontent"><br />   <span style="color: #FF0000">if(Timer1)<br />      Timer1--;</span><br /></div><br /><br />Pomijam już fakt - że robisz sam sobie KUKU - bo nie tak jak w Bluebooku <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> .... ale mi rym wyszedł <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> i nawet nie będę już tego komentował ...<br /><br />no to stwierdzenie z tytułu wątku oraz to:<br /><br /><div class="quotetitle">Barti9 napisał(a):</div><div class="quotecontent"><br />Po 20 minutach pracy, stoper uruchomiony na timerze 16 bit śpieszy się o około 40 sekund.<br /></div><br />Jeśli jest realizowane na timerze programowym - no to już jest to MEGA KOMPLETNY NONSESN .... po prostu masakra niezrozumienia - pomimo to, że nie dość, że w książce JAK BYK i NA TACY (już nie mogę tego inaczej określić, sorki) - podaję o co chodzi z timerami programowymi ....<br /><br />ok może nie masz Bluebooka - to co z tego - jeśli kod zaczerpnąłeś gdzieś z poradników wideo to oznacza, że też musiałeś w ogóle nie słuchać tego co mówię w poradnikach .... a jeśli zaczerpnąłeś gdzieś z forum to znaczy że kompletnie bez zrozumienia ....<br /><br />-----------------------------------------<br /><br />odpowiedź jest jedna: TAK może się późnić, śpieszyć albo raz późnić raz śpieszyć i to o DUŻO WIĘKSZE wartości niż tu podajesz .... i dodam pewnie dla ciebie zagadkowo. TO JEST PRAWIDŁOWE jeśli chodzi o timer programowy ! <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... Ba! ... powiem więcej - jak na timer programowy ta niedokładność o której piszesz to i tak jakiś rekord świata DOKŁADNOŚCI dla timera programowego <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><br /><br />może któryś kolega tobie wyjaśni dla czego - bo sorki ale ja - jak pisałem za dużo opisywałem to w książce i omawiałem w poradnikach wideo i nie mam już siły .... a i na forum mnóstwo razy o tym mówiłem - nawet o tym błędzie w kodzie który pokazałem na początku<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br /><div class="quotetitle">mczarny napisał(a):</div><div class="quotecontent"><br />Po pierwsze czy jesteś pewien, że kwarc generuje dokładnie 16MHz<br /></div><br />To nie ma NIC WSPÓLNEGO - nawet gdyby ktoś miał atomowy wzorzec czasu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> to i tak timer programowy będzie miał takie rozrzuty i to jest (co ciekawe - przypominam) N O R M A L N E <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> — 6 lis 2016, o 14:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2016-11-06T11:31:28+01:00</updated>
<published>2016-11-06T11:31:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173925#p173925</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173925#p173925"/>
<title type="html"><![CDATA[Re: Problem ze stabilnością timera programowego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16736&amp;p=173925#p173925"><![CDATA[
cześć<br /><br />myślę, że niestety ale nie uzyskasz zakładanej dokładności w ten sposób.<br />Po pierwsze czy jesteś pewien, że kwarc generuje dokładnie 16MHz - prawdopodobnie nie<br />możesz oczywiście wpisywać do rejestru porównania wartości większe lub mniejsze od wyliczonych 2000 tylko, że to i tak na dłuższą metę nie zda egzaminu.<br />Ja bym poszedł w stronę zewnętrznego układu RTC gdzie stabilność generowanych przebiegów jest dużo większa.<br />Układ pracujący jako stoper więc zakładam, że potrzebujesz nie tylko sekundy ale dziesiąte i setne a tu to już wchodzą zależności czasowe poszczególnych instrukcji wykonywanych przez procesor<br /><br />pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 6 lis 2016, o 11:31</p><hr />
]]></content>
</entry>
</feed>