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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-05-06T14:57:50+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=20690&amp;mode</id>
<entry>
<author><name><![CDATA[amilo_pa]]></name></author>
<updated>2018-05-06T14:57:50+01:00</updated>
<published>2018-05-06T14:57:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20690&amp;p=207460#p207460</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20690&amp;p=207460#p207460"/>
<title type="html"><![CDATA[Re: YB nowe timery programowe - czy aby a pewno dobrze?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20690&amp;p=207460#p207460"><![CDATA[
Cel jest wiadomy, a że wkradł mały babol no to cóż, bywa <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Tak też można zrobić <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3824">amilo_pa</a> — 6 maja 2018, o 14:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-05-06T14:44:07+01:00</updated>
<published>2018-05-06T14:44:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20690&amp;p=207457#p207457</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20690&amp;p=207457#p207457"/>
<title type="html"><![CDATA[Re: YB nowe timery programowe - czy aby a pewno dobrze?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20690&amp;p=207457#p207457"><![CDATA[
mylić się nie mylisz - ale nie to było celem pokazania timerów programowych w nowej wersji <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... bo tego typu warunki, to że tak powiem wałkujemy już od Bluebooka ...<br /><br />ale oczywiście masz rację - tylko zamiast tego odejmowania jedynki może bym zrobił szybciej tak<br /><br />[syntax=c]if( ++ms10 &gt;= (REFRESH_RATE/100) ) {<br />        tmr_irq_tick();<br />        ms10 = 0;<br />}[/syntax]<br /><br />chociaż - co to za różnica ? ale trzeba byłoby sprawdzić jak wygląda kod ASM i który lepiej się optymalizuje czasowo<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 6 maja 2018, o 14:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[amilo_pa]]></name></author>
<updated>2018-05-06T12:31:41+01:00</updated>
<published>2018-05-06T12:31:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20690&amp;p=207449#p207449</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20690&amp;p=207449#p207449"/>
<title type="html"><![CDATA[YB nowe timery programowe - czy aby a pewno dobrze?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20690&amp;p=207449#p207449"><![CDATA[
Hej,<br /><br />Chciałem dzisiaj wykorzystać nowe rozwiązanie timerów programowych zaprezentowanych w YB. <br />I wydaje mi się, że jest mały błąd w kodzie przerwania od Timera2 (strona 83 YB).<br /><br />[syntax=c]if( ms10++ &gt; (REFRESH_RATE/100) ) {<br />tmr_irq_tick();<br />ms10 = 0;<br />}[/syntax]<br /><br />Już objaśniam dlaczego.<br />Jeżeli ustawimy REFRESH_RATE na 500 Hz, to będziemy cyklicznie (co 2ms) sprawdzać warunek if( ms10++ &gt; 5).<br />Załóżmy, że właśnie wyszliśmy z warunku if więc zmienna ms10 ma wartość 0 i teraz analiza krokowa:<br />Krok 1. po 2ms sprawdzamy warunek if( 0 &gt; 5), wynik <span style="color: #FF0000">negatywny</span>, zwiększamy ms10 o 1 (ms10 = 1), wychodzimy z przerwania.<br />Krok 2. po 2ms sprawdzamy warunek if( 1 &gt; 5), wynik <span style="color: #FF0000">negatywny</span>, zwiększamy ms10 o 1 (ms10 = 2), wychodzimy z przerwania.<br />Krok 3. po 2ms sprawdzamy warunek if( 2 &gt; 5), wynik <span style="color: #FF0000">negatywny</span>, zwiększamy ms10 o 1 (ms10 = 3), wychodzimy z przerwania.<br />Krok 4. po 2ms sprawdzamy warunek if( 3 &gt; 5), wynik <span style="color: #FF0000">negatywny</span>, zwiększamy ms10 o 1 (ms10 = 4), wychodzimy z przerwania.<br />Krok 5. po 2ms sprawdzamy warunek if( 4 &gt; 5), wynik <span style="color: #FF0000">negatywny</span>, zwiększamy ms10 o 1 (ms10 = 5), wychodzimy z przerwania.<br />Krok 6. po 2ms sprawdzamy warunek if( 5 &gt; 5), wynik <span style="color: #FF0000">negatywny</span>, zwiększamy ms10 o 1 (ms10 = 6), wychodzimy z przerwania.<br />Krok 7. po 2ms sprawdzamy warunek if( 6 &gt; 5), wynik <span style="color: #00BF00">pozytywny</span>, zerujemy ms10 (ms10 = 0), wychodzimy z przerwania.<br /><br />Czyli tak naprawdę funkcja tmr_irq_tick() wykona się po 7*2ms = 14ms a nie zakładane 10ms.<br /><br />Moim zdaniem kod powinien wyglądać następująco:<br />[syntax=c]if( ms10++ &gt;= ((REFRESH_RATE/100)-1) ) {<br />tmr_irq_tick();<br />ms10 = 0;<br />}[/syntax]<br /><br />I teraz analiza krokowa z tym, że sprawdzamy warunek if( ms10++ &gt;= 4)<br />Załóżmy, że właśnie wyszliśmy z warunku if więc zmienna ms10 ma wartość 0.<br />Krok 1. po 2ms sprawdzamy warunek if( 0 &gt;= 4), wynik <span style="color: #FF0000">negatywny</span>, zwiększamy ms10 o 1 (ms10 =1), wychodzimy z przerwania.<br />Krok 2. po 2ms sprawdzamy warunek if( 1 &gt;= 4), wynik <span style="color: #FF0000">negatywny</span>, zwiększamy ms10 o 1 (ms10 = 2), wychodzimy z przerwania.<br />Krok 3. po 2ms sprawdzamy warunek if( 2 &gt;= 4), wynik <span style="color: #FF0000">negatywny</span>, zwiększamy ms10 o 1 (ms10 = 3), wychodzimy z przerwania.<br />Krok 4. po 2ms sprawdzamy warunek if( 3 &gt;= 4), wynik <span style="color: #FF0000">negatywny</span>, zwiększamy ms10 o 1 (ms10 = 4), wychodzimy z przerwania.<br />Krok 5. po 2ms sprawdzamy warunek if( 4 &gt;= 4), wynik <span style="color: #00BF00">pozytywny</span>, zerujemy ms10 (ms10 = 0), wychodzimy z przerwania.<br /><br />Funkcja tmr_irq_tick() wykona się po 5*2ms = 10ms.<br /><br />Jeżeli się mylę to proszę o sprostowanie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3824">amilo_pa</a> — 6 maja 2018, o 12:31</p><hr />
]]></content>
</entry>
</feed>