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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-08-14T09:55:59+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21133&amp;mode</id>
<entry>
<author><name><![CDATA[fobos]]></name></author>
<updated>2018-08-14T09:55:59+01:00</updated>
<published>2018-08-14T09:55:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21133&amp;p=210710#p210710</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21133&amp;p=210710#p210710"/>
<title type="html"><![CDATA[Re: YB 1.11.6 nietypowe zastosowanie nowych timerów programo]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21133&amp;p=210710#p210710"><![CDATA[
Dziękuję za odpowiedź i wyjaśnienie wątpliwości jaką miałem,<br /><br />pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7548">fobos</a> — 14 sie 2018, o 09:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-08-14T08:49:02+01:00</updated>
<published>2018-08-14T08:49:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21133&amp;p=210708#p210708</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21133&amp;p=210708#p210708"/>
<title type="html"><![CDATA[Re: YB 1.11.6 nietypowe zastosowanie nowych timerów programo]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21133&amp;p=210708#p210708"><![CDATA[
Jak to się nie odpali - jak odpali <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Tylko musisz argument ON dać na 1 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... ale też mówię - że GetNtp coś tam robi z counterem i nie pamiętam teraz co - więc zajrzyj do jej środka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 14 sie 2018, o 08:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fobos]]></name></author>
<updated>2018-08-14T08:25:58+01:00</updated>
<published>2018-08-14T08:25:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21133&amp;p=210707#p210707</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21133&amp;p=210707#p210707"/>
<title type="html"><![CDATA[Re: YB 1.11.6 nietypowe zastosowanie nowych timerów programo]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21133&amp;p=210707#p210707"><![CDATA[
Dzięki Mirek za odp. jest zgodna z moim &quot;zbitkiem&quot; no wiesz jak się mieli coś długo to właśnie później wychodzi taka mielonka.<br /><br />Jednak nie zgodzę się z tym co napisałeś w p.4<br /> &quot;... ale jakbyś chciał to równie dobrze mógłbyś podłączyć jeszcze swoje zdarzenie (swoją funkcję) zamiast tego NULL przy definicji tego timera&quot;<br />o ile dobrze rozumiem w tym przypadku f.timer_init( 1, 5000, 0, NULL ) jest to niemożliwe bo nawet gdyby napisać własną <br />funkcję callbacko-wą np f.migaj_led to żeby ona miała szansę zadziałać musi zostać wywołana f. timers_process a tak się w tym przypadku nie dzieje.<br />No chyba, że nie zrozumiałem tego co miałeś na myśli, bo oczywiści gdyby było tak f.timer_init( 1, 5000, 1, migaj_led ) to ok f.callback migaj_led się odpali.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7548">fobos</a> — 14 sie 2018, o 08:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-08-14T08:03:21+01:00</updated>
<published>2018-08-14T08:03:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21133&amp;p=210706#p210706</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21133&amp;p=210706#p210706"/>
<title type="html"><![CDATA[Re: YB 1.11.6 nietypowe zastosowanie nowych timerów programo]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21133&amp;p=210706#p210706"><![CDATA[
Ja bym chętnie pomógł (i nie piszę tego teraz złośliwie czy coś) ... ale napisałeś taki zbitek myśli, bez żadnego przecinka czy kropki prawie - wszystko jednym ciurkiem ... <br /><br />ale ok opiszę w skrócie jak działa ten mechanizm bo być może coś ci umknęło.<br /><br />1. to jest CAŁKOWICIE inne podejście niż z Bluebooka<br /><br />2. przygotowana została fajna funkcja napędzająca timery programowe o nazwie <strong><span style="color: #0080FF">tmr_irq_tick();</span></strong> którą wystarczy odpalać w jakimś timerze sprzętowym odpalanym np co 10ms ... ale wtedy nie jest kompletnie potrzebny ten IF <span style="color: #8040FF">(To jest podobne z kolei podejście jakie pokazałem w bibliotece Matrix KEYBOARD <!-- m --><a class="postlink" href="https://www.youtube.com/watch?v=b1dAuBJm7EQ" >https://www.youtube.com/watch?v=b1dAuBJm7EQ</a><!-- m --> , gdzie też wystarczy do przerwania timera sprzętowego co 10ms - dodać małą napędzającą obsługę klawiatury/klawiszy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> )</span><br /><br />[syntax=c]if  (co 5 przerwanie TRUE){[/syntax]<br /><br />opisuję przecież w YB skąd się wziął ten IF, ale przypomnę, wykorzystałem bowiem przerwanie które odbywa się 5x szybciej niż 10ms i stąd zrobiłem licznik i warunek IF, żeby funkcja obsługująca timery programowe wykonywała się jednak co 10ms a nie szybciej. Jeśli sam tworzysz timer sprzętowy napędzany co 10ms to w ogóle ten IF jest przecież niepotrzebny<br /><br /><br />3. Argument timera ON/OFF nie jest do tego, żeby nie działał jego counter. On będzie zawsze tykał jeśli timer powołany jest do życia. Parametr ON/OFF mówi o tym czy ma być odpalane zdarzenie timera programowego o ile podłączyłeś do niego jakąś funkcję. Bo jeśli jako ostatni parametr dałeś NULL to argument ON/OFF będzie ignorowany.<br /><br /><br />4. funkcja GetNtpTime_EVENT() może działać ponieważ przekazujemy do niej tylko wskaźnik do countera jednego z powołanych timerów programowych <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ona go wewnątrz zagospadarowuje na swoje potrzeby <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... ale jakbyś chciał to równie dobrze mógłbyś podłączyć jeszcze swoje zdarzenie (swoją funkcję) zamiast tego NULL przy definicji tego timera. Wtedy w oparciu o jeden timer programowy działałby i GetNtpTime_EVENT() i twoja funkcja. Tyle że GetNtpTime_EVENT() panuje nad counterem i zmienia jego zawartość więc trzeba mieć to na uwadze<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 14 sie 2018, o 08:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fobos]]></name></author>
<updated>2018-08-14T07:44:38+01:00</updated>
<published>2018-08-14T07:44:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21133&amp;p=210705#p210705</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21133&amp;p=210705#p210705"/>
<title type="html"><![CDATA[YB 1.11.6 nietypowe zastosowanie nowych timerów programowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21133&amp;p=210705#p210705"><![CDATA[
Witajcie<br />nie mam pewności czy dobrze zrozumiałem fragment kodu dotyczący obsługi zdarzenia GetNtpTime_EVENT( &amp;stimers[1].cnt , 10,0,0, NULL ); Poglądowo i dużym skrócie cod:<br /><br />[syntax=c]/*---------------------------------------------------------------------------------------------------------------*/<br />main{<br />....<br />timer_init( 1, 5000, 0, NULL ){  <br />/* 1- stimer&#91;1&#93;, interval 5000 (5s), 0 - enable (0-OFF, 1-ON), NULL nie korzystamy z własnej funkcji (callback) */<br /><br />while (1){<br />...<br />TIMERS_EVENT( void ) {<br />....<br />if( stimers&#91; i &#93;.enabled ) timers_process( &amp;stimers&#91; i &#93; );<br />...<br />}<br /><br />GetNtpTime_EVENT( &amp;stimers&#91;1&#93;.cnt , 10,0,0, NULL ){<br />/* &amp;stimers&#91;1&#93;.cnt adres stimer&#91;1&#93;.cnt (500), &#91;10ss,0min, 0hh)-okres/czas synchronizacji */<br />...<br /><br />if( !*tmr_10ms ) {<br />...<br /><br />*tmr_10ms = 10;<br />...<br /><br />}<br />}<br />/*---------------------------------------------------------------------------------------------------------------*/<br />ISR( TIMER2_COMPA_vect ) {<br />....<br /><br />if  (co 5 przerwanie TRUE){<br />...<br />    tmr_irq_tick();<br />...   <br />}[/syntax] <br /><br />Nie mogłem zrozumieć dlaczego działa funkcja (f.) GetNtpTime_EVENT( &amp;stimers[1].cnt , 10,0,0, NULL ); bo f.timer_init( 1, 5000, 0, NULL ); określa <br />wszystkie parametry stimer[1] (1-index tablicy/timera, 5000-interval 5s, 0- enable OFF (1-ON), NULL nie wykorzystujemy własnej funkcji callback-owej)<br />3-ci parametr funkcji timer_init (enabled) mając wartość 0 wyłącza timer1, f. TIMERS_EVENT nie wywoła dla stimer[1] f. timers_process <br />bo wartość wyrażenia if( stimers[1].enabled ) jest FALSE inaczej mówiąc bez wywołania f.timers_process nie może wykonać się: wywołanie f.callback oraz ponowne załadowanie licznika cnt. <br />Jednak dekrementacja stimers[1].cnt dokonuje się w przerwaniu Timera2  f. tmr_irq_tick dla każdego licznika stimers[i].cnt niezależnie od wartości parametru<br />enabled dlatego po osiągnięciu warności 0 (stimers[1].cnt) wykonają się instrukcje zawarte w f.GetNtpTime_EVENT wartość licznika stimers[1].cnt jest przekazana zmienną wskaźnikową stąd wyrażenie <br /> if( !*tmr_10ms ) będzie miało wartość TRUE i instrukcje zawarte w f.GetNtpTime_EVENT zostaną wykonane po 5s od startu programu a wiec po wartości jaką określono f.timer_init( 1, 5000, 0, NULL ).<br />Wykonanie instrukcji zawartych w f.GetNtpTime_EVENT( &amp;stimers[1].cnt , 10,0,0, NULL ) określi nową wartość *tmr_10ms = 10; (100ms) oraz czas/okres synchronizacji NTP zmienną co_ile_czasu ja dla testu ustawiłem 10s chciałem ten proces częściej obserwować na wyświetlaczu.<br /><br />Proszę  Was o info czy to co napisałem jest TRUE or FALSE<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7548">fobos</a> — 14 sie 2018, o 07:44</p><hr />
]]></content>
</entry>
</feed>