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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-03-23T23:13:44+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=11142&amp;mode</id>
<entry>
<author><name><![CDATA[HCOOH]]></name></author>
<updated>2015-03-23T23:13:44+01:00</updated>
<published>2015-03-23T23:13:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124448#p124448</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124448#p124448"/>
<title type="html"><![CDATA[Re: Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124448#p124448"><![CDATA[
to jeszcze jedna metoda dla timera 100Hz <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />[syntax=c]void wysylaj_co_100_ms()<br />{<br /> if(!Timer1)<br /> {<br />  Timer1 = 505; // przyklad dla pieciu komunikatow co 100ms<br /> }<br /> if(Timer1 == 505)<br /> {<br />  Uart_puts(&quot;jeden&quot;);<br />  Timer1--;<br /> }<br /> else if(Timer1 == 404)<br /> {<br />  Uart_puts(&quot;dwa&quot;);<br />  Timer1--;<br /> }<br /> else if(Timer1 == 303)<br /> {<br />  Uart_puts(&quot;trzy&quot;);<br />  Timer1--;<br /> }<br /> else if(Timer1 == 202)<br /> {<br />  Uart_puts(&quot;cztery&quot;);<br />  Timer1--;<br /> }<br /> else if(Timer1 == 101)<br /> {<br />  Uart_puts(&quot;piec&quot;);<br />  Timer1--;<br /> }<br /><br />}[/syntax]<br />i 1 bajt statycznej RAM oszczedzony <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />ewentualnie parametrem funkcji można uczynić wskaźnik do zmiennej u16, jeśli jeszcze nie wiesz, z którego timera będziesz korzystał <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=2954">HCOOH</a> — 23 mar 2015, o 23:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-03-23T20:52:02+01:00</updated>
<published>2015-03-23T20:52:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124420#p124420</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124420#p124420"/>
<title type="html"><![CDATA[Re: Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124420#p124420"><![CDATA[
<div class="quotetitle">anshar napisał(a):</div><div class="quotecontent"><br />Co do oczywistego dla wielu zerowania zmiennej i (kroki) pomyślałem sobie, że może komuś się to przyda, komuś kto tego jeszcze nie załapał (lub nie do końca, tak jak np ja).<br /></div><br />No i BARDZO dobrze - po to jest to forum .... teraz jak ktoś poczyta całość to będzie miał fajny obraz całości<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 23 mar 2015, o 20:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2015-03-23T20:38:26+01:00</updated>
<published>2015-03-23T20:38:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124411#p124411</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124411#p124411"/>
<title type="html"><![CDATA[Re: Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124411#p124411"><![CDATA[
Dać IMPULS? To nie impuls, to bomba atomowa! <br />Panie Mirku zgadzam się z panem w 100 procentach, ba nawet w 200 procentach ze wszystkim oprócz jednego: <div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />mojego starego<br /></div> .  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br />Tutaj to chyba wiek nie ma żadnego znaczenia, a doświadczenie i to coś, czego wielu wykładowców czy nauczycieli nie posiada. Za to pan ma to wszystko, przeogromną wiedzę i dar jej przekazywania! <br />Co do oczywistego dla wielu zerowania zmiennej i (kroki) pomyślałem sobie, że może komuś się to przyda, komuś kto tego jeszcze nie załapał (lub nie do końca, tak jak np ja).  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br />Uczę się języka C bardzo krótko i często łapię się na tym, że te najbardziej oczywiste zagadnienia, na które się z regóły nie zwraca uwagi zaczynają się prędzej czy później mścić. <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> No ale po to między innymi mamy to forum prawda?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 23 mar 2015, o 20:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-03-23T12:32:31+01:00</updated>
<published>2015-03-23T12:32:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124352#p124352</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124352#p124352"/>
<title type="html"><![CDATA[Re: Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124352#p124352"><![CDATA[
<div class="quotetitle">anshar napisał(a):</div><div class="quotecontent"><br />Chodzi mi o to, że jednak warto pamiętać o zerowaniu zmiennej kroki.<br /></div><br />No warto warto <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> tyle że to mi się wydawało może zbyt jasne <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... a przykład miał być MEGA PROSTY dla zrozumienia idei działania dla KAŻDEGO.<br /><br />Jak widzisz - nawet taka rzecz jak to że kroki trzeba zerować - jest też już dzięki ogarnięciu tak prostego sposobu oczywista po kilku chwilach. Ale hmm o to chodzi mi zawsze - żeby wytłumaczyć coś NAJPROŚCIEJ JAK SIĘ TYLKO DA ... bo zawsze wierzę, że później to już każdy sobie poradzi ... i będzie sobie i optymalizował kod, i usprawniał a co ważniejsze - wymyślał coraz lepsze i bardziej zaawansowane sposoby w miarę uczenia się dalej ...<br /><br />Jak widzisz - TO działa - tzn takie podejście z mojej strony - ważne żeby dać IMPULS! <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... a później to już wszystko robi się proste - nieprawdaż ? Najtrudniej zwykle jest po prostu zacząć, zrozumieć - zaskoczyć ... i ja się na tym skupiam ... później pobudzone mózgi działają już same i lepiej nawet od mojego starego <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=54">mirekk36</a> — 23 mar 2015, o 12:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2015-03-23T10:31:51+01:00</updated>
<published>2015-03-23T10:31:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124338#p124338</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124338#p124338"/>
<title type="html"><![CDATA[Re: Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124338#p124338"><![CDATA[
No chyba źle się wyraziłem. Już się poprawiam. Chodziło mi o to, że musimy wyzerować zmienną kroki, bo gdy tego nie zrobimy to tak jak pisałem dla kroki % 5 będą dla (kroki = 255) % 5 = 0 i dla (kroki = 0) % 5 = 0. A to będzie błąd.<br />Chodzi mi o to, że jednak warto pamiętać o zerowaniu zmiennej kroki. Reszta panie Mirku jasna jak słońce!  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />[syntax=c]if( !Timer1 ) {<br />            if( 0 == (i % 5) ) { led1(); }<br />            if( 1 == (i % 5) ) { led2(); }<br />            if( 2 == (i % 5) ) { led3(); }<br />            if( 3 == (i % 5) ) { led4(); }<br />            if( 4 == (i % 5) ) { led5(); }<br />     <br />            i++;<br />            if( 5 == i ) { i = 0; }          //zerowanie zmiennej i (kroki)<br />            Timer1=20; // co 200 ms<br />    }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 23 mar 2015, o 10:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-03-23T10:12:26+01:00</updated>
<published>2015-03-23T10:12:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124335#p124335</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124335#p124335"/>
<title type="html"><![CDATA[Re: Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124335#p124335"><![CDATA[
<div class="quotetitle">anshar napisał(a):</div><div class="quotecontent"><br />Jest tylko jeden mały problem w przypadku %5.<br /></div><br />To nie jest problem - trzeba tylko zrozumieć jak działa &quot;modulo&quot; .... Pomyśl sobie co by było gdyby ktoś w takim przykładzie chciał np zrobić 140 kroków i miał 140 IF'ów <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><br /><br />[syntax=c]if( 4 == (i % 140) ) { ledx(); }[/syntax]<br /><br />toż roki powyżej 140 wykonałyby się w pierwszym obiegu zmiennej i od 0 do 140 a później w w kolejnych krokach od 141 do 255 ? ... to by była dziura <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />No wiadomo przecież że warunki graniczne w takim przykładzie trzeba sobie jakoś dobrać ... czyli np wyzerować zmienną kroki gdy wykonają się wszystkie nam potrzebne - tak jak to próbujesz dalej robić ... <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br /><div class="quotetitle">anshar napisał(a):</div><div class="quotecontent"><br />jednak przy i%5 nie działa to już tak dobrze.<br /></div><br />a co to oznacza wg ciebie ? <br /><br />toż przy i % 5 masz nie 4 a pięć kroków <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i co tu może działać źle ? lepiej ? albo gorzej ? <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 mar 2015, o 10:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2015-03-23T01:08:24+01:00</updated>
<published>2015-03-23T01:08:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124317#p124317</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124317#p124317"/>
<title type="html"><![CDATA[Re: Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124317#p124317"><![CDATA[
Jest tylko jeden mały problem w przypadku %5. Dla wartości uint8_t i; gdy i=255 otrzymamy 0, oraz dla wartości i=0 otrzymamy 0, czyli dwa razy pod rząd zostanie wywołana ta sama funkcja. Jeśli to nie ma znaczenia no to fajnie, jednak gdy ma to zamiast:<br /><br />[syntax=c]if( !Timer1 ) {<br />if( 0 == (i % 5) ) { led1(); }<br />        if( 1 == (i % 5) ) { led2(); }<br />if( 2 == (i % 5) ) { led3(); }<br />if( 3 == (i % 5) ) { led4(); }<br />if( 4 == (i % 5) ) { led5(); }<br /><br />        i++;<br />Timer1=20; // co 200 ms<br />}[/syntax]<br /><br />lepiej chyba zrobić tak:<br /><br />[syntax=c]if( !Timer1 ) {<br />if( 0 == i ) { led1(); }<br />if( 1 == i ) { led2(); }<br />if( 2 == i ) { led3(); }<br />if( 3 == i ) { led4(); }<br />if( 4 == i ) { led5(); }<br /><br />i++;<br />if( i == 5) i = 0;<br />Timer1=20; // co 200 ms<br />}[/syntax]<br /><br />Analizowałem kilka przykładów i wszystko było OK przy i%4, jednak przy i%5 nie działa to już tak dobrze.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 23 mar 2015, o 01:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-03-22T22:09:11+01:00</updated>
<published>2015-03-22T22:09:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124301#p124301</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124301#p124301"/>
<title type="html"><![CDATA[Re: Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124301#p124301"><![CDATA[
<div class="quotetitle">Wilu88 napisał(a):</div><div class="quotecontent"><br />ale problemem był fakt że wysyłanie nie zawsze rozpoczynało się od zerowej sekundy<br /></div><br />A dlaczego problemem ? dlaczego MUSIAŁO się zaczynać od zerowej ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> mogło od 13-tej do 15-tej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> jak widzisz i po tym przykładzie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br /><div class="quotetitle">Wilu88 napisał(a):</div><div class="quotecontent"><br />Jak zawsze Mirek w prosty sposób rozjaśnił wszystko<br /></div><br />Oczywiście to jest JEDEN z BARDZO prostych sposobów i warto myśleć nad lepszymi - ale .... ciężko myśleć nad bardziej skomplikowanymi jeśli się nie zaskoczy tego najprostszego - prawda ?<br /><br />Poza tym ja też powtarzam - ten sposób nie jest JEDYNIE NAJLEPSZY - bo sposobów na to są tysiące <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 mar 2015, o 22:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wilu88]]></name></author>
<updated>2015-03-22T21:59:16+01:00</updated>
<published>2015-03-22T21:59:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124300#p124300</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124300#p124300"/>
<title type="html"><![CDATA[Re: Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124300#p124300"><![CDATA[
Tak to jest jak człowiek przez tyle godzin walczy z tym szukając coraz dziwniejszych pomysłów. Najlepsze jest to że próbowałem pomysłu z BB z tematu o DS18B20 ale tak samo jak tam bazowałem na dzieleniu modulo sekund z RTC ale problemem był fakt że wysyłanie nie zawsze rozpoczynało się od zerowej sekundy. Jak zawsze Mirek w prosty sposób rozjaśnił wszystko <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=743">Wilu88</a> — 22 mar 2015, o 21:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2015-03-22T20:57:06+01:00</updated>
<published>2015-03-22T20:57:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124285#p124285</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124285#p124285"/>
<title type="html"><![CDATA[Re: Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124285#p124285"><![CDATA[
<img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Zgadza się! Jest to super metoda! A NO LECIMY!  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 22 mar 2015, o 20:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-03-22T20:41:00+01:00</updated>
<published>2015-03-22T20:41:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124281#p124281</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124281#p124281"/>
<title type="html"><![CDATA[Re: Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124281#p124281"><![CDATA[
<div class="quotetitle">anshar napisał(a):</div><div class="quotecontent"><br />że takie głupoty wcześniej wypisywałem!<br /></div><br />Proszę nie pisz tak - KAŻDY kto próbuje podpowiadać sam się uczy - ja także - a to że popełniamy czasem błędy to co ? to grzech ? ... NIE! ... dzięki temu sam przyznaj ... udaje nam się uczyć szybciej ? ...<br /><br />to jest właśnie tajny i mega szybki sposób uczenia się - takie właśnie pomaganie i udzielanie się ... bo nawet jak robimy błąd to ktoś inny poprawi i LECIMY DO PRZODU! <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 mar 2015, o 20:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2015-03-22T20:24:42+01:00</updated>
<published>2015-03-22T20:24:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124279#p124279</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124279#p124279"/>
<title type="html"><![CDATA[Re: Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124279#p124279"><![CDATA[
Człowiek cały czas się uczy! Można to zrobić tak:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define LED1 (1&lt;&lt;PA0)<br />#define LED2 (1&lt;&lt;PA1)<br />#define LED3 (1&lt;&lt;PA2)<br />#define LED4 (1&lt;&lt;PA3)<br />#define LED5 (1&lt;&lt;PA4)<br />#define LED6 (1&lt;&lt;PA5)<br /><br />#define LED1_TOG PORTA ^= LED1<br />#define LED2_TOG PORTA ^= LED2<br />#define LED3_TOG PORTA ^= LED3<br />#define LED4_TOG PORTA ^= LED4<br />#define LED5_TOG PORTA ^= LED5<br /><br />volatile uint16_t Timer1;/* timer programowy 100Hz */<br /><br />void led1();<br />void led2();<br />void led3();<br />void led4();<br />void led5();<br /><br />uint8_t i;<br /><br />int main(void)<br />{<br />DDRA |= LED1 | LED2 | LED3 | LED4 | LED5;//diody LED<br /><br />    /* Timer2 – inicjalizacja przerwania co 10ms */<br />    TCCR2   |= (1&lt;&lt;WGM21);                  // tryb pracy CTC<br />    TCCR2   |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20);       // preskaler = 1024<br />    OCR2    = 108;                                  // przerwanie porównania co 10ms (100Hz)<br />    TIMSK   = (1&lt;&lt;OCIE2);                   // Odblokowanie przerwania CompareMatch<br /><br />sei();<br /><br />while(1)<br />{<br />//led1();<br />//_delay_ms(1000);<br />//led2();<br />//_delay_ms(1000);<br />//led3();<br />//_delay_ms(1000);<br />//led4();<br />//_delay_ms(1000);<br />//led5();<br />//_delay_ms(1000);<br /><br />if(!Timer1) {<br />Timer1=100;<br /><br />switch( i%5 ) {<br />case 0: led1(); break;<br />case 1: led2(); break;<br />case 2: led3(); break;<br />case 3: led4(); break;<br />case 4: led5(); break;<br />}<br />i++;<br />}<br />}<br />}<br /><br />void led1() {<br />LED1_TOG;<br />}<br /><br />void led2() {<br />LED2_TOG;<br />}<br /><br />void led3() {<br />LED3_TOG;<br />}<br /><br />void led4() {<br />LED4_TOG;<br />}<br />void led5() {<br />LED5_TOG;<br />}<br /><br />ISR(TIMER2_COMP_vect)<br />{<br />        uint16_t n;<br /><br />        n = Timer1;             /* 100Hz Timer1 */<br />        if (n) Timer1 = --n;<br />}[/syntax]<br /><br />Patrzę, a tu p. Mirek już napisał gotową odpowiedź, no ale jak już napisałem to zamieszczę. Może się komuś przyda?  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />Szczerze p. Mirku? To mi jest osobiście wstyd, że takie głupoty wcześniej wypisywałem!  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Pozdrawiam!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 22 mar 2015, o 20:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-03-22T20:06:56+01:00</updated>
<published>2015-03-22T20:06:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124269#p124269</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124269#p124269"/>
<title type="html"><![CDATA[Re: Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124269#p124269"><![CDATA[
eeeeh panowie panowie .... przecież - po pierwsze POKAZUJĘ I OMAWIAM DOKŁADNIE TO ZAGADNIENIE w Bluebooku - przy okazji ćwiczenia z pomiarem temperatury ... gdzie w jednym kroku, procek wysyła rozkaz pomiaru, w drugim, odczytuje temperaturę z jednego czujnika, w kolejnym z kolejnego a jeszcze w innym kroku sprawdza ilość czujników ...<br /><br />przy czym tam mechanizm timerów programowych pokazuję jeszcze troszkę inaczej niż w tym przykładzie ale zasada jest IDENTYCZNA!<br /><br />dlaczego nie rozgryzacie ćwiczeń z Bluebooka. Ja tyle razy piszę - że jak rozdział o multipleksowaniu LED to nie po to przecież ten rozdział żeby ogłaszać światu że to są NAJLEPSZE WYŚWIETLACZE ŚWIATA! <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> tylko żeby na prostym przykładzie pokazać kilka prostych technik programowania - żeby sobie ćwiczyć - ćwiczyć ćwiczyć<br /><br />tak samo z przykładem o 1wire - IDENTYCZNA sytuacja .... czy kolega Willu88 pochylił się nad tym ? chyba nie - a szkoda<br /><br />może żeby za dużo znowu nie ględzić - pokażę JAK MEGA TO PROSTE i aż wstyd będzie - mam nadzieję - że ktoś tego nie zrobił - bo to nie jest żadna jakaś tam TAJEMNICZA technika programistyczna .... <br /><br /><br />[syntax=c]uint8_t kroki;<br /><br />int main( void ) {<br /><br />     // jakaś tam inicjalizacja <br /><br />     while(1) {<br /><br />          if( !Timer1 ) {<br /><br />               if( 0 == (kroki % 4) ) { .... akcja w pierwszym kroku co ileś ms - ile jest ustawionych niżej w timerze }<br />               if( 1 == (kroki % 4) ) { .... akcja w drugim kroku co ileś ms - ile jest ustawionych niżej w timerze }<br />               if( 2 == (kroki % 4) ) { .... akcja w trzecim kroku co ileś ms - ile jest ustawionych niżej w timerze }<br />               if( 3 == (kroki % 4) ) { .... akcja w czwartym kroku co ileś ms - ile jest ustawionych niżej w timerze }<br />       <br />               kroki++;<br />               Timer1=20; // co 200 ms<br />          }<br />     }<br />}[/syntax]<br /><br />proszę bardzo powyżej przykład np dla cyklicznie wykonujących się czterech kroków ? trudne ? ... łatwe ? .... ciężko przerobić to dla 8 kroków ? dla 50 kroków ? dla 2 kroków - dla innych kombinacji jeszcze łącznie np z zatrzymywaniem Timera1 po iluś tam krokach ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 22 mar 2015, o 20:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wilu88]]></name></author>
<updated>2015-03-22T17:36:37+01:00</updated>
<published>2015-03-22T17:36:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124253#p124253</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124253#p124253"/>
<title type="html"><![CDATA[Re: Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124253#p124253"><![CDATA[
<div class="quotetitle">anshar napisał(a):</div><div class="quotecontent"><br />Raczej bym spróbował w ten sposób i wykorzystał pięć timerów programowych, każdy przecież ma wysyłać komendy w różnym czasie. <br />[syntax=c]if(!Timer1) {<br />            Timer1=10;<br />            wyslanie_komendy1();<br />    }<br />    if(!Timer2) {<br />            Timer2=20;<br />            wyslanie_komendy2();<br />    }<br />    if(!Timer3) {<br />            Timer3=30;<br />            wyslanie_komendy3();<br />    }<br />    if(!Timer4) {<br />            Timer4=50;<br />            wyslanie_komendy4();<br />    }<br />    if(!Timer5) {<br />            Timer5=60;<br />            wyslanie_komendy5();<br />    }[/syntax]<br /></div><br /><br /><br />Niestety to nic nie zmieniło. Wysyła pierwszą komende i koniec<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=743">Wilu88</a> — 22 mar 2015, o 17:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wilu88]]></name></author>
<updated>2015-03-22T17:04:45+01:00</updated>
<published>2015-03-22T17:04:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124247#p124247</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124247#p124247"/>
<title type="html"><![CDATA[Re: Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124247#p124247"><![CDATA[
No ale chyba to<br /><br />[syntax=c]_delay_ms(3000);[/syntax]<br /><br /><br />To nei bardzo nadaje się na projekt wielozadaniowy?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=743">Wilu88</a> — 22 mar 2015, o 17:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2015-03-22T15:26:44+01:00</updated>
<published>2015-03-22T15:26:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124234#p124234</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124234#p124234"/>
<title type="html"><![CDATA[Re: Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124234#p124234"><![CDATA[
Raczej bym spróbował w ten sposób i wykorzystał pięć timerów programowych, każdy przecież ma wysyłać komendy w różnym czasie. <br />[syntax=c]if(!Timer1) {<br />            Timer1=10;<br />            wyslanie_komendy1();<br />    }<br />    if(!Timer2) {<br />            Timer2=20;<br />            wyslanie_komendy2();<br />    }<br />    if(!Timer3) {<br />            Timer3=30;<br />            wyslanie_komendy3();<br />    }<br />    if(!Timer4) {<br />            Timer4=50;<br />            wyslanie_komendy4();<br />    }<br />    if(!Timer5) {<br />            Timer5=60;<br />            wyslanie_komendy5();<br />    }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 22 mar 2015, o 15:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wilu88]]></name></author>
<updated>2015-03-22T12:27:11+01:00</updated>
<published>2015-03-22T12:27:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124217#p124217</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124217#p124217"/>
<title type="html"><![CDATA[Timery Programowe a UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11142&amp;p=124217#p124217"><![CDATA[
Witam sekciarską brać! <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Zabrałem się ostatnio za projeky wielozadaniowe na AVR i czas zastąpić okrutne _delay_ms ale ciągle mam jakieś problemy :/<br /><br />Potrzebuje w jednej funkcji wywołać kilka operacji przesłania danych do UARTA z tym że pomiędzy nimi powinien nastąpić niewielki delay rzędu 100ms. Wszystko działa super gdy używam standardowych _delay_ms ale gdy próbuję zastosować do tego Timery programowe opisane w BB zaczynają się schody. Kompletnie nie potrafię zrozumieć jak to zastosować przy kilku operacjach. O ile zastosowanie tego Timera do migania diodą wydaje się być łatwe to przy 5 operacjach które muszą być w wykonane w określonej kolejności zaczynają się schody<br /><br />Ustawienia Timera<br />[syntax=c]/* Timer2 – inicjalizacja przerwania co 10ms */<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb pracy CTC<br />TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20);// preskaler = 1024<br />OCR2 = 108;// przerwanie porównania co 10ms (100Hz)<br />TIMSK = (1&lt;&lt;OCIE2);// Odblokowanie przerwania CompareMatch[/syntax]<br /><br />Obsługa Przerwania<br />[syntax=c]ISR(TIMER2_COMP_vect)<br />{<br />uint16_t n;<br /><br />n = Timer1;/* 100Hz Timer1 */<br />if (n) Timer1 = --n;<br />n = Timer2;/* 100Hz Timer2 */<br />if (n) Timer2 = --n;<br />n = Timer3;/* 100Hz Timer3 */<br />if (n) Timer3 = --n;<br />n = Timer4;/* 100Hz Timer4 */<br />if (n) Timer4 = --n;<br />}[/syntax]<br /><br />No i funkcja która ma być wykonana w odpowiedniej kolejności<br /><br />[syntax=c]if(!Timer1) {<br />         Timer1=10;<br />        wyslanie_komendy1();<br />         }<br />        if(!Timer1) {<br />        Timer1=10;<br />        wyslanie_komendy2();<br />        }<br />        if(!Timer1) {<br />        Timer1=10;<br />        wyslanie_komendy3();<br />        }<br />        if(!Timer1) {<br />        Timer1=20;<br />        wyslanie_komendy4();<br />        }<br />        if(!Timer1) {<br />        Timer1=10;<br />        wyslanie_komendy5();<br />        }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=743">Wilu88</a> — 22 mar 2015, o 12:27</p><hr />
]]></content>
</entry>
</feed>