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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-06-27T21:36:16+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=18695&amp;mode</id>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-06-27T21:36:16+01:00</updated>
<published>2017-06-27T21:36:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191364#p191364</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191364#p191364"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191364#p191364"><![CDATA[
już poprawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 27 cze 2017, o 21:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2017-06-27T21:34:46+01:00</updated>
<published>2017-06-27T21:34:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191363#p191363</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191363#p191363"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191363#p191363"><![CDATA[
[syntax=c]if (kontrolka_1 == 1)<br />    {<br />        if (zliczanie == 10)<br />        {<br />                LED_M_1_ON;<br />        }<br />        else  if  (zliczanie == 20)<br />                {<br />                LED_M_1_OFF;<br />                }<br />    }<br />else (kontrolka_1 == 0)   //chodziło o ten warunek by był jako tylko else do głównego ifa a nie zagnieżdźony w drugim ifie<br />   {<br />                LED_M_1_ON;<br />   }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 27 cze 2017, o 21:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-06-27T21:28:36+01:00</updated>
<published>2017-06-27T21:28:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191362#p191362</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191362#p191362"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191362#p191362"><![CDATA[
To zdanie:<br /><br />&quot;Warunek gaszenia kontrolek najlepiej wyrzucić poza ify sprawdzające kontrolki - chyba że nie zależy ci na stanie w jakim zostaną po zatrzymaniu (co jest zresztą powodem tego że kontrolka_1 czasem gaśnie a czasem świeci po jej zatrzymaniu).&quot;<br /><br />pisałeś odnośnie ifów w przerwaniu, czy w funkcji klawisza?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 5 minutach ]</span></strong><br /><br />zależy mi na stanie w jakim pozostaną po zatrzymaniu. Bardzo mi zależy. <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=14082">wojciechgorzolka</a> — 27 cze 2017, o 21:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2017-06-27T21:22:20+01:00</updated>
<published>2017-06-27T21:22:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191361#p191361</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191361#p191361"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191361#p191361"><![CDATA[
zauważ że wszystkie warunki kontrolek, zarówno zapalające jak i gaszące, masz wrzucone na koniec funkcji przycisków po wszystkich poleceniach gdzie masz jeszcze _delay_ms(500)...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 27 cze 2017, o 21:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-06-27T21:06:11+01:00</updated>
<published>2017-06-27T21:06:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191359#p191359</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191359#p191359"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191359#p191359"><![CDATA[
tak, są jako volatile<br />[syntax=c]volatile uint8_t kontrolka_1;     //zmienna do świecących kontrolek , startuje w deklaracji z wartością =0<br />volatile uint8_t kontrolka_2;<br />volatile uint8_t kontrolka_3;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 27 cze 2017, o 21:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2017-06-27T21:06:31+01:00</updated>
<published>2017-06-27T20:59:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191357#p191357</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191357#p191357"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191357#p191357"><![CDATA[
Zmienne kontrolka_X masz zadeklarowane jako globalne z dopiskiem volatile?<br /><br />Co do kodu w przerwaniu to dla każdej kontrolki możesz wywalić po jednym ifie - wystarczą 2np przy zliczanie==0 zgaś, a przy zliczanie==10 zapal (lub odwrotnie wedle uznania), licznik nadal powinien tykać do 20.<br />Warunek gaszenia kontrolek najlepiej wyrzucić poza ify sprawdzające kontrolki - chyba że nie zależy ci na stanie w jakim zostaną po zatrzymaniu (co jest zresztą powodem tego że kontrolka_1 czasem gaśnie a czasem świeci po jej zatrzymaniu).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 27 cze 2017, o 20:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-06-27T20:36:52+01:00</updated>
<published>2017-06-27T20:36:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191352#p191352</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191352#p191352"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191352#p191352"><![CDATA[
powracam z poprawionym kodem.<br />[syntax=c]//________przerwania____________<br />ISR(TIMER0_COMP_vect)<br />{<br />        if (zliczanie &lt; 20)<br />                zliczanie++; //zliczanie jest mniejsze od 199, jeśli tak to zliczanie (licznik) dodawaj<br /><br />        else                    // jeśli licznik jest większy lub równy od 199 to :<br />        {<br />        zliczanie = 0;<br />        }<br /><br />// ------------------------------------------------------------------------<br /><br /><br />    if (kontrolka_1 == 1)<br />    {<br />        if (zliczanie == 10)<br />        {<br />        LED_M_1_ON;<br />        }<br />        else  if  (zliczanie == 20)<br />{<br />        LED_M_1_OFF;<br />}<br /><br />        else if (kontrolka_1 == 0)<br />        {<br />        LED_M_1_ON;<br />        }<br />    }<br /><br />    if (kontrolka_2 == 1)<br />    {<br />        if (zliczanie == 10)<br />        {<br />        LED_M_2_ON;<br />        }<br />        else  if  (zliczanie == 20)<br />{<br />        LED_M_2_OFF;<br />}<br /><br />        else if (kontrolka_1 == 0)<br />        {<br />        LED_M_2_ON;<br />        }<br />    }<br /><br />    if (kontrolka_3 == 1)<br />    {<br />        if (zliczanie == 10)<br />        {<br />        LED_M_3_ON;<br />        }<br />        else  if  (zliczanie == 20)<br />{<br />        LED_M_3_OFF;<br />}<br /><br />        else if (kontrolka_3 == 0)<br />        {<br />        LED_M_3_ON;<br />        }<br />    }<br /><br /><br />}[/syntax]<br /><br /><br />Poprawiłem kod w przerwaniu i gdy wpisuję zmienne z wartością jeden w pętli głównej (dla sprawdzenia poprawności działania kodu), to wszystko pięknie działa. Diody migają  z założoną częstotliwością. Gdy zmieniam wartość kontrolki_3, na zero, to oczywiście przestaje migać. <br />Następnie usunąłem z pętli głównej moje zmienne i wrzuciłem je odpowiednio do funkcji trzech klawiszy. Czyli na początku funkcji wystawiam wartość jeden, na końcu funkcji zeruję i wystawiam jedynkę kolejnej kontrolki. <br />[syntax=c]void klawisz_jeden(void)//funkcja pierwszego klawisza<br />{<br /><br />if ((KLAWISZ_1_WCISNIETY)&amp;&amp;(KOLEJNOSC_KLAWISZA == 1))<br />{<br />KOLEJNOSC_KLAWISZA = 2;<br /><br />if (!KLAWISZ_1_WCISNIETY)<br />migacz_foor();<br />        else if ( KLAWISZ_1_WCISNIETY)<br />        {<br />                _delay_ms(80);<br />                if ( KLAWISZ_1_WCISNIETY)<br />                {<br /><br />                        czerwony();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        //czerwony();<br />                        _delay_ms(500);<br />                        nacisnij_niebieski();<br />                        KOLEJNOSC_KLAWISZA = 2;<br />                        kontrolka_1 = 0;<br />                        kontrolka_2 = 1;<br />                }<br />        }<br /> }}<br /><br />void klawisz_dwa(void)         //funkcja drugiego klawisza<br />{<br /><br />if ((KLAWISZ_2_WCISNIETY)&amp;&amp;(KOLEJNOSC_KLAWISZA == 2))<br />{<br />KOLEJNOSC_KLAWISZA = 3;<br />if (!KLAWISZ_2_WCISNIETY)<br />migacz_foor();<br />//PORT_LED = 0;<br />        else if ( KLAWISZ_2_WCISNIETY)<br />           {<br />                _delay_ms(80);<br />                if ( KLAWISZ_2_WCISNIETY)<br />                 {<br />                KOLEJNOSC_KLAWISZA = 3;<br />                        niebieski();<br />                        czerwony();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        _delay_ms(500);<br />                        nacisnij_zielony();<br />                        KOLEJNOSC_KLAWISZA = 3;<br />                        kontrolka_2 = 0;<br />                        kontrolka_3 = 1;<br /><br />                }<br />        }<br />}}<br />void klawisz_trzy(void)        //funkcja trzeciego klawisza<br />{<br />if ((KLAWISZ_3_WCISNIETY)&amp;&amp;(KOLEJNOSC_KLAWISZA == 3))<br />{<br /><br />        if (!KLAWISZ_3_WCISNIETY)<br />        migacz_foor();<br />              //  PORT_LED = 0;<br />        else if ( KLAWISZ_3_WCISNIETY)<br />        {<br />                _delay_ms(80);<br />                if ( KLAWISZ_3_WCISNIETY)<br />                {<br />                       wydajcukierka;<br />                        _delay_ms(80);<br />                        zielony();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        _delay_ms(500);<br />                        odbierz_cukierka();<br />                        pulsar();<br />                        _delay_ms(500);<br />                        pulsar();<br />                        lcd_locate(0, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        lcd_locate(1, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        _delay_ms(500);<br />                        pulsar();<br />                        odbierz_cukierka();<br />                        _delay_ms(500);<br />                        pulsar();<br />                        lcd_locate(0, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        lcd_locate(1, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        _delay_ms(500);<br />                        pulsar();<br />                        odbierz_cukierka();<br />                        _delay_ms(500);<br />                        pulsar();<br />                        lcd_locate(0, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        lcd_locate(1, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        _delay_ms(500);<br />                        pulsar();<br />                        odbierz_cukierka();<br />                        _delay_ms(500);<br />                        pulsar();<br />                        lcd_locate(0, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        lcd_locate(1, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        _delay_ms(500);<br />                        pulsar();<br />                        odbierz_cukierka();<br />                        _delay_ms(500);<br />                        pulsar();<br />                        lcd_locate(0, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        lcd_locate(1, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        _delay_ms(500);<br />                        pulsar();<br />                        _delay_ms(80);<br />                        odbierz_cukierka();<br />                        _delay_ms(80);<br />                        pulsar();<br />                        wybierz_klawisz();<br />                        KOLEJNOSC_KLAWISZA = 1;<br />                        kontrolka_3 = 0;<br />                        kontrolka_1 = 1;<br /><br />                }<br />        }<br />}}[/syntax]<br /><br />Teoretycznie powinno działaś poprawnie. I działa, pięknie się zmieniają moje trzy kontrolki. Tylko niestety przy kontrolce drugiej jest awaria w postaci takiej,że jest zapalona ciągle z takim bardzo delikatnym mruganiem. Pierwsza natomiast raz mi zgaśnie, a raz świeci się ciągłym światłem. Dodam jeszcze,że gdy zmienna od kontrolek ma wartość =0, to kontrolka, czyli dioda powinna się świecić. <br />Reasumując. Jeśli robiłem testy w pętli głównej, to działało poprawnie, natomiast w funkcjach klawiszy już jest problem.<br /><br />Czy taka usterka mojego kodu może być spowodowana licznymi delajami, czy może tym,że w przerwaniu mam sporo kodu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 27 cze 2017, o 20:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-06-26T15:37:58+01:00</updated>
<published>2017-06-26T15:37:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191281#p191281</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191281#p191281"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191281#p191281"><![CDATA[
teraz mam dużo bardziej jaśniejszy obraz. Wieczorem się tym pobawię i będę próbował. a jak mi się nie uda, to wywalę timer i zrobię tylko zapalanie diody na początku funkcji klawisza i gaszenie na samym końcu. A temat będę zagłębiał w osobnych ćwiczeniach <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=14082">wojciechgorzolka</a> — 26 cze 2017, o 15:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2017-06-26T11:11:42+01:00</updated>
<published>2017-06-26T11:11:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191258#p191258</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191258#p191258"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191258#p191258"><![CDATA[
<div class="quotetitle">wojciechgorzolka napisał(a):</div><div class="quotecontent"><br />co do przerwania, to chodzi o to, aby było jak naj mniej tekstu pisanego?<br /></div> Niezupełnie, na podstawie kodu pisanego w C jest generowany plik *.asm w którym są instrukcje asemblerowe dla procesora, trzeba odnaleźć sekcję przerwania i sprawdzić ile instrukcji asemblerowych zawiera dane przerwanie (w bluebooku masz to opisane w rozdzielne o sterowaniu PWM (kolorowa dioda RGB)). Większości instrukcji wykonuje się w jednym takcie zegara więc stosunkowo łatwo można policzyć czas wykonywania przerwania. A nie może on być zbyt długi bo jeśli będzie a przerwanie będzie wywoływane częściej niż zdąża się wykonywać wówczas podczas trwania przerwania zostanie zgłoszone już kolejne, co będzie skutkować tym że jak w końcu skończy się wykonywać, wróci do programu głównego wykona jeden rozkaz i jako że było międzyczasie kolejne zgłoszenie przerwania to znów zacznie się ono wykonywać. W rezultacie raz że same wywołania przerwania mogą się pogubić (podczas wykonywani przerwania może zbuforować się tylko jedno kolejne wywołanie) a dwa że program główny będzie praktycznie zamrożony (będzie się wykonywał po jednej instrukcji asemblerowej między przerwaniami)<br /><br /><div class="quotetitle">wojciechgorzolka napisał(a):</div><div class="quotecontent"><br />[syntax=c]if ((zliczanie == 10) ||  (zliczanie == 30)<br />          || (zliczanie == 50) || (zliczanie == 70)<br />          || (zliczanie == 90) || (zliczanie == 110)<br />          || (zliczanie == 130) ||  (zliczanie == 150)<br />          || (zliczanie == 160) ||  (zliczanie == 180)<br />          || (zliczanie == 190))<br />        {<br /><br />        LED_M_1_ON;<br />        LED_M_2_ON;<br />        LED_M_3_ON;<br />        }<br />        else if  ((zliczanie == 20) ||  (zliczanie == 40)<br />        || (zliczanie == 60) || (zliczanie == 80)<br />            || (zliczanie == 100) || (zliczanie == 120)<br />            || (zliczanie == 140) ||  (zliczanie == 160)<br />    || (zliczanie == 180) || (zliczanie == 200))<br />{<br /><br />LED_M_1_OFF;<br />LED_M_2_OFF;<br />LED_M_3_OFF;<br />}[/syntax]<br /></div> Co do tego tworu to nie lepiej zmniejszyć wartość do której zlicza &quot;zliczanie&quot; i dodać drugą zmienną która będzie zawierała liczbę mrugnięć (po każdym mrugnięciu liczba będzie dekrementowana, czyli zliczanie będzie odpowiedzialne za czas świecenia, i zgaszenia diody, a druga zmienna za liczbę mrugnięć jeśli wogule liczba mrugnięć jest potrzebna), przez co warunki ifa będą dużo mniej czasochłonne dla procka?<br /><br />Co do przycisków, to w jakim celu ich obsługę masz zarówno w przerwaniu timera i w pętli głównej programu? Samo załączenie migania ledów możesz zrobić dodając po jednej zmiennej/fladze dla każdej diody ze specyfikatorem volatile, i w pętli głównej, w warunkach od przycisków jeśli wciśnięty masz kod który ma się wykonać, to na początku dodajesz by flaga dla danej diody została ustawiona na 1, a po wszystkich poleceniach które od przycisku mają się wykonać dajesz zerowanie flagi. Natomiast w przerwaniu dajesz tylko warunek jeśli flaga 1 to mrugaj, jeśli 0 to nie mrugaj.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 26 cze 2017, o 11:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-06-25T22:13:11+01:00</updated>
<published>2017-06-25T22:13:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191242#p191242</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191242#p191242"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191242#p191242"><![CDATA[
to już jest ostatnia rzecz, która będzie w tym programie.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 41 minutach ]</span></strong><br /><br />[syntax=c]//________przerwania____________<br />ISR(TIMER0_COMP_vect)<br />{<br />        if (zliczanie &lt; 199)<br />                zliczanie++; //zliczanie jest mniejsze od 199, jeśli tak to zliczanie (licznik) dodawaj<br /><br />        else                    // jeśli licznik jest większy lub równy od 199 to :<br />        {<br />                zliczanie = 0; //to zeruj licznik<br />//                if (flaga_buzzer)<br />//                    flaga_buzzer = 0;     //jeżeli flaga jest 1 to wyzeruj flagę.<br />//<br />//                else //jeśli flaga icznik nie jest większy od 199 to (jeżeli nie&quot;czyli jest 0&quot; ):<br />//                {<br />//                     flaga_buzzer = 1; // przypisz fladze buzzer wartośc =1         pierwsza zmienna od buzera (używana).<br />//                        flaga_sekunda = 1;  //przypisanie fladze sekunda wartośc =1<br />//                }<br /><br />//                if (flaga_buzzer == 1)<br />//                        BUZ_OFF; //jeśli flaga buzzer będzie miała wartośc 1, to buzer się uruchomi<br />//                else<br />//                        BUZ_ON;<br />        }  // jeśli nie, to buzer się wyączy.<br />        // if(flaga_sekunda == 1 )LED_M_1_TOG;<br /><br /><br /><br />        if ((zliczanie == 10) ||  (zliczanie == 30)<br />          || (zliczanie == 50) || (zliczanie == 70)<br />          || (zliczanie == 90) || (zliczanie == 110)<br />          || (zliczanie == 130) ||  (zliczanie == 150)<br />          || (zliczanie == 160) ||  (zliczanie == 180)<br />          || (zliczanie == 190))<br />        {<br /><br />        LED_M_1_ON;<br />        LED_M_2_ON;<br />        LED_M_3_ON;<br />        }<br />        else if  ((zliczanie == 20) ||  (zliczanie == 40)<br />        || (zliczanie == 60) || (zliczanie == 80)<br />            || (zliczanie == 100) || (zliczanie == 120)<br />            || (zliczanie == 140) ||  (zliczanie == 160)<br />    || (zliczanie == 180) || (zliczanie == 200))<br />{<br /><br />LED_M_1_OFF;<br />LED_M_2_OFF;<br />LED_M_3_OFF;<br />}<br /><br /><br />     //   if (0 == (zliczanie % 45))//miganie pierwszą diodą<br />     //           LED_M_2_TOG;  //miganie pierwszą diodą, druga i osrtatnia linijka<br /><br />       // if (0 == (zliczanie % 45))<br />                      //  LED_M_1_TOG;<br /><br />if<br />(KLAWISZ_1_WCISNIETY)<br />{<br />kontrolka = 1;<br />LED_M_1_ON;<br /><br />}<br />else<br />{<br />kontrolka = 2;<br />LED_M_1_OFF;<br />}<br /><br /><br /> if (KLAWISZ_2_WCISNIETY)<br />{<br />kontrolka = 2;<br />LED_M_2_ON;<br />}<br /><br /> if (KLAWISZ_3_WCISNIETY)<br />{<br />kontrolka = 3;<br />LED_M_3_ON;<br />}<br /><br /><br />}[/syntax]trochę przerobiłem przerwanie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 25 cze 2017, o 22:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2017-06-25T22:08:21+01:00</updated>
<published>2017-06-25T22:08:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191240#p191240</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191240#p191240"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191240#p191240"><![CDATA[
hejka, <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Ale tasiemiec już powstał. ;D<br />Wojtku, gdyby udało się Tobie ogarnąć wszystko na timerach, to nie musiał byś wciskać takich ilości poleceń do przerwania. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />A tak jeżeli chcesz by wraz z wykonującą się jakąś funkcją zawierającą delaye wykonało się równorzędnie inne mryganie,<strong> to trzeba by wcisnąć to mryganie pomiędzy wiersze tej funkcji</strong> - albo zapchać przerwanie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />.<br />A jak dojdzie coś jeszcze to co wtedy zapchamy.  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /> <br />Lepiej pomęcz timery bo jeszcze parę pomysłów tam upchniesz i i może zacząć się blokować.<br /><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=11549">Daro69</a> — 25 cze 2017, o 22:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-06-25T22:03:51+01:00</updated>
<published>2017-06-25T22:03:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191239#p191239</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191239#p191239"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191239#p191239"><![CDATA[
ok, postaram się nad dym pochylić. i to poprawię w miarę własnych możliwości <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Wiele rzeczy jest tam jeszcze do poprawy, ale na tą chwilę nie mogę sobie poradzić z tym problemem, o który pytam na początku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 25 cze 2017, o 22:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Makowka]]></name></author>
<updated>2017-06-25T22:03:54+01:00</updated>
<published>2017-06-25T21:59:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191238#p191238</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191238#p191238"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191238#p191238"><![CDATA[
<div class="quotetitle">wojciechgorzolka napisał(a):</div><div class="quotecontent"><br />co do przerwania, to chodzi o to, aby było jak naj mniej tekstu pisanego?<br /></div><br />Nie do końca, chodzi o to, aby wykonywać jak najmniejszą liczbę operacji. Zmiana stanu wyjścia i sprawdzanie takiej ilości ifów zajmuje sporo czasu i może zablokować w pewnym momencie program, gdyż &quot;nie będzie się on po prostu ze wszystkim wyrabiał&quot;.<br /><br /><div class="quotetitle">wojciechgorzolka napisał(a):</div><div class="quotecontent"><br />#define LED_1_PIN (1&lt;&lt;PC0)<br />#define LED_2_PIN (1&lt;&lt;PC1)<br />#define LED_3_PIN (1&lt;&lt;PC2)<br />#define LED_4_PIN (1&lt;&lt;PC3) // diody 8szt.<br />#define LED_5_PIN (1&lt;&lt;PC4)<br />#define LED_6_PIN (1&lt;&lt;PC5)<br />#define LED_7_PIN (1&lt;&lt;PC6)<br />#define LED_8_PIN (1&lt;&lt;PC7)<br /></div><br /><br />A propos robala, zauważyłem, że wszystkie diody masz podłączone do tego samego portu. Żeby uzyskać prosty efekt migania wystarczy, że zastosujesz przesunięcie bitowe (np. w przerwaniu). Z każdym przerwaniem możesz przesuwać logiczne 1 w prawo. Jeżeli oczywiście o taki efekt ci chodzi <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Dobrze jest to wyjaśnione w tym poradniku mirka:<br /><a href="https://www.youtube.com/watch?v=tIS1LX6if3E"  class="postlink">https://www.youtube.com/watch?v=tIS1LX6if3E</a><br /><br />Pozdrawiam,  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Michał<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10748">Makowka</a> — 25 cze 2017, o 21:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-06-25T21:42:49+01:00</updated>
<published>2017-06-25T21:42:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191236#p191236</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191236#p191236"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191236#p191236"><![CDATA[
co do przerwania, to chodzi o to, aby było jak naj mniej tekstu pisanego? w późniejszym czasie zamięnię w przerwaniu  na modulo.<br />a chodzi mi o trzy diody<br />[syntax=c]#define DDR_M_1 DDRB<br />#define PORT_M_1 PORTB// dioda 1<br />#define LED_M_1 (1&lt;&lt;PB4)<br /><br />#define DDR_M_2 DDRB<br />#define PORT_M_2 PORTB// dioda 2<br />#define LED_M_2 (1&lt;&lt;PB5)<br /><br />#define DDR_M_3 DDRB<br />#define PORT_M_3 PORTB// dioda 3<br />#define LED_M_3 (1&lt;&lt;PB6)[/syntax]<br /><br /><br />każda dioda ma być przypisana do jednego z klawisza<br />[syntax=c]//KLAWISZE______________________<br />#define KLA_1_PIN_NR (1&lt;&lt;PD0) //definicja pinu do którego podłączony jest klawisz nr 1<br />#define DDR_KLA_1 DDRD<br />#define PORT_KLA_1 PORTD<br />#define PIN_KLA_1 PIND<br /><br />#define KLA_2_PIN_NR (1&lt;&lt;PD1) //definicja pinu do którego podłączony jest klawisz nr 2<br />#define DDR_KLA_2 DDRD<br />#define PORT_KLA_2 PORTD<br />#define PIN_KLA_2 PIND<br /><br />#define KLA_3_PIN_NR (1&lt;&lt;PD2) //definicja pinu do którego podłączony jest klawisz nr 1<br />#define DDR_KLA_3 DDRD<br />#define PORT_KLA_3 PORTD<br />#define PIN_KLA_3 PIND[/syntax]<br /><br /><br />na wstępie zapytałem o jeden klawisz i jedną diodę. <br />Ale chodzi mi o to, że gdy nacisnę klawisz pierwszy,to ma mi mrygać z timera dioda pierwsza i ma tak długo mrygać, aż się wykona cała funkcja z pierwszego klawisza. Analogicznie będzie z druga diodą i drugim klawiszem, oraz z trzecią diodą i trzecim klawiszem.<br />Z tym mam właśnie kłopot.<br /><br />z częścią kodu pomagał mi Daro69. Głównie pomagał z obsługą serwa, bo z tym też było ciężko.<br /><br /><br /><br />Po kolejnym zastanowieniu myślę sobie,że może tutaj powinienem tą zmienną przypisać? w tej części kodu?<br />[syntax=c]if ((zliczanie == 10) || (zliczanie == 20) || (zliczanie == 30)<br />                        || (zliczanie == 40) || (zliczanie == 50) || (zliczanie == 60)<br />                        || (zliczanie == 70) || (zliczanie == 80) || (zliczanie == 90)<br />                        || (zliczanie == 100) || (zliczanie == 110) || (zliczanie == 120)<br />                        || (zliczanie == 130) || (zliczanie == 140) || (zliczanie == 150)<br />                        || (zliczanie == 160) || (zliczanie == 170) || (zliczanie == 180)<br />                        || (zliczanie == 190) || (zliczanie == 200))<br />        {<br /><br />        LED_M_1_TOG;<br /><br />        }<br /><br /><br />        if ((zliczanie == 10) || (zliczanie == 20) || (zliczanie == 30)<br />                        || (zliczanie == 40) || (zliczanie == 50) || (zliczanie == 60)<br />                        || (zliczanie == 70) || (zliczanie == 80) || (zliczanie == 90)<br />                        || (zliczanie == 100) || (zliczanie == 110) || (zliczanie == 120)<br />                        || (zliczanie == 130) || (zliczanie == 140) || (zliczanie == 150)<br />                        || (zliczanie == 160) || (zliczanie == 170) || (zliczanie == 180)<br />                        || (zliczanie == 190) || (zliczanie == 200))<br />        {<br /><br />        LED_M_2_TOG;<br /><br />        }<br /><br />        if ((zliczanie == 10) || (zliczanie == 20) || (zliczanie == 30)<br />                        || (zliczanie == 40) || (zliczanie == 50) || (zliczanie == 60)<br />                        || (zliczanie == 70) || (zliczanie == 80) || (zliczanie == 90)<br />                        || (zliczanie == 100) || (zliczanie == 110) || (zliczanie == 120)<br />                        || (zliczanie == 130) || (zliczanie == 140) || (zliczanie == 150)<br />                        || (zliczanie == 160) || (zliczanie == 170) || (zliczanie == 180)<br />                        || (zliczanie == 190) || (zliczanie == 200))<br />         {<br /><br />        LED_M_3_TOG;<br /><br />         }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 25 cze 2017, o 21:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2017-06-25T21:34:03+01:00</updated>
<published>2017-06-25T21:34:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191235#p191235</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191235#p191235"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191235#p191235"><![CDATA[
No to jak na osobę początkującą to zmajstrowałeś potężny kawał kodu  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Jeszcze mógłbyś wskazać o którą konkretnie diodę chodzi bo analizować taki kod to nie wiem czy ktokolwiek się podejmie...<br />Tak czy siak jedno co kłuje w oczy to znacznych rozmiarów procedura obsługi przerwania, a przy przerwaniach trzeba się starać by trwało ono jak najkrócej...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 25 cze 2017, o 21:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-06-25T21:19:27+01:00</updated>
<published>2017-06-25T21:19:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191234#p191234</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191234#p191234"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191234#p191234"><![CDATA[
to o co pytam jest częścią kodu, ale już udotępniam kodzik. Jestem początkujący, więc proszę o wyrozumiałość, ponieważ zdaję sobie sprawę,że wiele rzeczy można by napisać w mniej liniowy sposób. Ja jednak dopiero się uczę <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 29 mar 2017<br /> *      Author: amaru1<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br />//KRAŃCÓWKI______________________<br />#define KRA_1_PIN_NR (1&lt;&lt;PA0)<br />#define DDR_KRA_1 DDRA<br />#define PORT_KRA_1 PORTA<br />#define PIN_KRA_1 PINA<br /><br />#define KRA_2_PIN_NR (1&lt;&lt;PA1)<br />#define DDR_KRA_2 DDRA<br />#define PORT_KRA_2 PORTA<br />#define PIN_KRA_2 PINA<br /><br />//KLAWISZE______________________<br />#define KLA_1_PIN_NR (1&lt;&lt;PD0) //definicja pinu do którego podłączony jest klawisz nr 1<br />#define DDR_KLA_1 DDRD<br />#define PORT_KLA_1 PORTD<br />#define PIN_KLA_1 PIND<br /><br />#define KLA_2_PIN_NR (1&lt;&lt;PD1) //definicja pinu do którego podłączony jest klawisz nr 2<br />#define DDR_KLA_2 DDRD<br />#define PORT_KLA_2 PORTD<br />#define PIN_KLA_2 PIND<br /><br />#define KLA_3_PIN_NR (1&lt;&lt;PD2) //definicja pinu do którego podłączony jest klawisz nr 1<br />#define DDR_KLA_3 DDRD<br />#define PORT_KLA_3 PORTD<br />#define PIN_KLA_3 PIND<br /><br />//LEDY__________________________<br />#define DDR_LED DDRC<br />#define PORT_LED PORTC<br /><br />#define LED_1_PIN (1&lt;&lt;PC0)<br />#define LED_2_PIN (1&lt;&lt;PC1)<br />#define LED_3_PIN (1&lt;&lt;PC2)<br />#define LED_4_PIN (1&lt;&lt;PC3) // diody 8szt.<br />#define LED_5_PIN (1&lt;&lt;PC4)<br />#define LED_6_PIN (1&lt;&lt;PC5)<br />#define LED_7_PIN (1&lt;&lt;PC6)<br />#define LED_8_PIN (1&lt;&lt;PC7)<br /><br />#define DDR_M_1 DDRB<br />#define PORT_M_1 PORTB// dioda 1<br />#define LED_M_1 (1&lt;&lt;PB4)<br /><br />#define DDR_M_2 DDRB<br />#define PORT_M_2 PORTB// dioda 2<br />#define LED_M_2 (1&lt;&lt;PB5)<br /><br />#define DDR_M_3 DDRB<br />#define PORT_M_3 PORTB// dioda 3<br />#define LED_M_3 (1&lt;&lt;PB6)<br /><br />#define DDR_CNZ DDRD<br />#define PORT_CNZ PORTD<br />#define LED_CZERWONY_PIN_NR (1&lt;&lt;PD3)<br />#define LED_NIEBIESKI_PIN_NR (1&lt;&lt;PD6)<br />#define LED_ZIELONY_PIN_NR (1&lt;&lt;PD7)<br /><br />//BUZ____________________________<br />//#define DDR_BUZ DDRB<br />//#define PORT_BUZ PORTB<br />//#define BUZ_PIN_NR (1&lt;&lt;PB3)<br /><br />//SERWO__________________________<br />#define PIN_SERWO_NR (1&lt;&lt;PD5)<br />#define DDR_SERWO DDRD<br />#define PORT_SERWO PORTD<br /><br />//    '**********************************************************************DEFINICJE**********************<br />#define wydajcukierka flaga_serwa = 1<br /><br />#define PRAWO 1000 ///    1350tu moge sobie regulowac predkosc obrotow<br />#define LEWO 1800////       1650tu tez<br />#define STOP 1500//       1500tu tez//tu tez<br /><br />#define KRA_1_DOWN !(PIN_KRA_1 &amp; KRA_1_PIN_NR)<br />#define KRA_2_DOWN !(PIN_KRA_2 &amp; KRA_2_PIN_NR)<br />#define KLAWISZ_1_WCISNIETY !(PIN_KLA_1 &amp; KLA_1_PIN_NR) //makro sprzwdzające czy klawisz jest wciśnięty<br />#define KLAWISZ_2_WCISNIETY !(PIN_KLA_2 &amp; KLA_2_PIN_NR) //makro sprzwdzające czy klawisz jest wciśnięty<br />#define KLAWISZ_3_WCISNIETY !(PIN_KLA_3 &amp; KLA_3_PIN_NR) //makro sprzwdzające czy klawisz jest wciśnięty<br /><br />#define LED_M_1_ON PORT_M_1  &amp;=~LED_M_1<br />#define LED_M_1_OFF PORT_M_1 |=LED_M_1<br />#define LED_M_1_TOG PORT_M_1 ^=LED_M_1<br /><br />#define LED_M_2_ON PORT_M_2  &amp;=~LED_M_2<br />#define LED_M_2_OFF PORT_M_2 |=LED_M_2<br />#define LED_M_2_TOG PORT_M_2 ^=LED_M_2<br /><br />#define LED_M_3_ON PORT_M_3  &amp;=~LED_M_3<br />#define LED_M_3_OFF PORT_M_3 |=LED_M_3<br />#define LED_M_3_TOG PORT_M_3 ^=LED_M_3<br /><br />//#define BUZ_ON PORT_BUZ &amp;=~BUZ_PIN_NR<br />//#define BUZ_OFF PORT_BUZ |=BUZ_PIN_NR<br />//#define BUZ_TOG PORT_BUZ ^=BUZ_PIN_NR<br /><br />//*********************************************************************DEKLARACJE F&gt;*******************<br />void ustaw_timer_1(void);<br />void ustaw_timer_0(void);<br />void robal(void);       //pierwsza funkcia<br />void robal_2(void);     //druga funkcja<br />void pulsar(void);      // trzecia funkcja<br />void klawisz_jeden(void);<br />void klawisz_dwa(void);<br />void klawisz_trzy(void);<br />void czerwony(void);<br />void niebieski(void);<br />void zielony(void);<br />void nacisnij_niebieski(void);<br />void nacisnij_zielony(void);<br />void odbierz_cukierka(void);<br />void wybierz_klawisz(void);<br />void koniec(void);<br />void migacz_foor(void); //funkcja migania diodami - pętla foor<br />void szuflada(void); //deklaracja funkcji szuflady<br />void ustaw_we_wy (void);<br /><br /><br />//-----------------------------------------zmienne--------<br />volatile uint8_t zliczanie;                     //zmienna do przerwania<br />//volatile uint8_t flaga_sekunda;                 //zmienna do przerwania<br />//volatile uint8_t flaga_buzzer;                  //zmienna do przerwania<br />volatile uint8_t flaga_ms;<br />uint8_t flaga_serwa;              // startuje z wartością zero<br />volatile uint8_t KOLEJNOSC_KLAWISZA = 1;   //zmienna do kolejności naciskania klawiszy<br /><br />volatile uint8_t kontrolka = 1;     //zmienna do świecących kontrolek<br /><br /><br />// *****************************************************************************************************<br /> // ***************************************************************************************************<br /> //                                              PROGRAM<br /> //  ****************************************************************************************************<br />int main(void) {<br /><br />        lcd_init(); // inicjalizacja LCD  //TO MUSI BYC, ABY WYŚWIETLACZ ZACZĄŁ WYŚWIETLAC !!!<br />        // inicjalizacja wyświetlacza LCD musi byc przed pętlą główną<br /><br />        ustaw_we_wy();   //we_wy<br />       ustaw_timer_0(); //uruchom timer 0<br />        ustaw_timer_1(); //uruchom timer 1<br /><br />        sei();  //globalne zezwolenie na przerwania<br /><br />        _delay_ms(500);<br />        migacz_foor();<br />        migacz_foor();<br />        migacz_foor();<br />        pulsar();<br />        robal_2();<br />        robal_2();<br />        wybierz_klawisz();<br /><br />        while (1)<br />        {<br />                migacz_foor();<br />                klawisz_jeden();<br />                klawisz_dwa();<br />                klawisz_trzy();<br />                szuflada();<br /><br />        }<br /><br />}<br /><br />//definicje funkcji<br />//______napisy__________________<br />void koniec(void) {<br />        lcd_locate(0, 0);<br />        lcd_str(&quot;:) KONIEC :)&quot;);<br />        lcd_locate(1, 0);<br />        lcd_str(&quot;         &quot;);<br />        _delay_ms(1000);<br />        lcd_locate(0, 0);<br />        lcd_str(&quot;        &quot;);<br />        lcd_locate(1, 0);<br />        lcd_str(&quot;:) KONIEC :)   &quot;);<br />        _delay_ms(1000);<br />        lcd_locate(0, 0);<br />        lcd_str(&quot;:) KONIEC :) &quot;);<br />        lcd_locate(1, 0);<br />        lcd_str(&quot;         &quot;);<br />        _delay_ms(1000);<br />        lcd_locate(0, 0);<br />        lcd_str(&quot;        &quot;);<br />        lcd_locate(1, 0);<br />        lcd_str(&quot;:) KONIEC :)       &quot;);<br />        _delay_ms(1000);<br />}<br />void wybierz_klawisz(void) {<br />        lcd_locate(0, 0);<br />        lcd_str(&quot;    WYBIERZ     &quot;);<br />        lcd_locate(1, 0);<br />        lcd_str(&quot;    KLAWISZ     &quot;);<br />}<br />void nacisnij_niebieski(void) {<br />        lcd_locate(0, 0);<br />        lcd_str(&quot;  NACISNIJ  &quot;);<br />        lcd_locate(1, 0);<br />        lcd_str(&quot;     NIEBIESKI  &quot;);<br />}<br />void nacisnij_zielony(void) {<br />        lcd_locate(0, 0);<br />        lcd_str(&quot;   NACISNIJ  &quot;);<br />        lcd_locate(1, 0);<br />        lcd_str(&quot;      ZIELONY    &quot;);<br />}<br />void odbierz_cukierka(void) {<br />        lcd_locate(0, 0);<br />        lcd_str(&quot;    ODBIERZ      &quot;);<br />        lcd_locate(1, 0);<br />        lcd_str(&quot;    CUKIEREK      &quot;);<br />}<br />void czerwony(void) {<br />        lcd_locate(0, 0);<br />        lcd_str(&quot;     BRAWO       &quot;);<br />        lcd_locate(1, 0);<br />        lcd_str(&quot;    CZERWONY     &quot;);<br />}<br />void niebieski(void) {<br />        lcd_locate(0, 0);<br />        lcd_str(&quot;     BRAWO      &quot;);<br />        lcd_locate(1, 0);<br />        lcd_str(&quot;   NIEBIESKI  &quot;);<br />}<br />void zielony(void) {<br />        lcd_locate(0, 0);<br />        lcd_str(&quot;     BRAWO     &quot;);<br />        lcd_locate(1, 0);<br />        lcd_str(&quot;    ZIELONY    &quot;);<br />}<br />//______porty___________________<br />void klawisz_jeden(void)//funkcja pierwszego klawisza<br />{<br /><br />if ((KLAWISZ_1_WCISNIETY)&amp;&amp;(KOLEJNOSC_KLAWISZA == 1)&amp;&amp;(kontrolka ==1))<br />{<br />KOLEJNOSC_KLAWISZA = 2;<br /><br />if (!KLAWISZ_1_WCISNIETY)<br />migacz_foor();<br />        else if ( KLAWISZ_1_WCISNIETY)<br />        {<br />                _delay_ms(80);<br />                if ( KLAWISZ_1_WCISNIETY)<br />                {<br />                KOLEJNOSC_KLAWISZA = 2;<br />                        czerwony();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        //czerwony();<br />                        _delay_ms(500);<br />                        nacisnij_niebieski();<br />                        KOLEJNOSC_KLAWISZA = 2;<br /><br />                }<br />        }<br /> }}<br /><br />void klawisz_dwa(void)         //funkcja drugiego klawisza<br />{<br /><br />if ((KLAWISZ_2_WCISNIETY)&amp;&amp;(KOLEJNOSC_KLAWISZA == 2))<br />{<br />KOLEJNOSC_KLAWISZA = 3;<br />if (!KLAWISZ_2_WCISNIETY)<br />migacz_foor();<br />//PORT_LED = 0;<br />        else if ( KLAWISZ_2_WCISNIETY)<br />           {<br />                _delay_ms(80);<br />                if ( KLAWISZ_2_WCISNIETY)<br />                 {<br />                KOLEJNOSC_KLAWISZA = 3;<br />                        niebieski();<br />                        czerwony();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        _delay_ms(500);<br />                        nacisnij_zielony();<br />                        KOLEJNOSC_KLAWISZA = 3;<br />                }<br />        }<br />}}<br />void klawisz_trzy(void)        //funkcja trzeciego klawisza<br />{<br />if ((KLAWISZ_3_WCISNIETY)&amp;&amp;(KOLEJNOSC_KLAWISZA == 3))<br />{<br /><br />        if (!KLAWISZ_3_WCISNIETY)<br />        migacz_foor();<br />              //  PORT_LED = 0;<br />        else if ( KLAWISZ_3_WCISNIETY)<br />        {<br />                _delay_ms(80);<br />                if ( KLAWISZ_3_WCISNIETY)<br />                {<br />                       wydajcukierka;<br />                        _delay_ms(80);<br />                        zielony();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        pulsar();<br />                        _delay_ms(500);<br />                        odbierz_cukierka();<br />                        pulsar();<br />                        _delay_ms(500);<br />                        pulsar();<br />                        lcd_locate(0, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        lcd_locate(1, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        _delay_ms(500);<br />                        pulsar();<br />                        odbierz_cukierka();<br />                        _delay_ms(500);<br />                        pulsar();<br />                        lcd_locate(0, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        lcd_locate(1, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        _delay_ms(500);<br />                        pulsar();<br />                        odbierz_cukierka();<br />                        _delay_ms(500);<br />                        pulsar();<br />                        lcd_locate(0, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        lcd_locate(1, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        _delay_ms(500);<br />                        pulsar();<br />                        odbierz_cukierka();<br />                        _delay_ms(500);<br />                        pulsar();<br />                        lcd_locate(0, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        lcd_locate(1, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        _delay_ms(500);<br />                        pulsar();<br />                        odbierz_cukierka();<br />                        _delay_ms(500);<br />                        pulsar();<br />                        lcd_locate(0, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        lcd_locate(1, 0);<br />                        lcd_str(&quot;                &quot;);<br />                        _delay_ms(500);<br />                        pulsar();<br />                        _delay_ms(80);<br />                        odbierz_cukierka();<br />                        _delay_ms(80);<br />                        pulsar();<br />                        wybierz_klawisz();<br />                        KOLEJNOSC_KLAWISZA = 1;<br /><br />                }<br />        }<br />}}<br />void robal(void)        //definicja pierszej funkcji<br />{<br />        //PORTC ^= 1&lt;&lt;PC0;<br />        _delay_ms(30);<br />        PORT_LED ^= LED_2_PIN;<br />        _delay_ms(30);<br />        PORT_LED ^= LED_3_PIN;<br />        _delay_ms(30);<br />        PORT_LED ^= LED_4_PIN;<br />        _delay_ms(30);<br />        PORT_LED ^= LED_5_PIN;<br />        _delay_ms(30);<br />        PORT_LED ^= LED_6_PIN;<br />        _delay_ms(30);<br />        PORT_LED ^= LED_7_PIN;<br />        _delay_ms(30);<br />        PORT_LED ^= LED_8_PIN;<br />        PORT_LED ^= LED_1_PIN;<br />        _delay_ms(30);<br />        PORT_LED ^= LED_1_PIN;<br /><br />}<br />void robal_2(void)      //definicja drugiej funkcji<br />{<br /><br />        _delay_ms(30);<br />        PORT_LED ^= LED_8_PIN;<br />        _delay_ms(30);<br />        PORT_LED ^= LED_7_PIN;<br />        _delay_ms(30);<br />        PORT_LED ^= LED_6_PIN;<br />        _delay_ms(30);<br />        PORT_LED ^= LED_5_PIN;<br />        _delay_ms(30);<br />        PORT_LED ^= LED_4_PIN;<br />        _delay_ms(30);<br />        PORT_LED ^= LED_3_PIN;<br />        _delay_ms(30);<br />        PORT_LED ^= LED_2_PIN;<br /><br />}<br />void pulsar(void)       //definicja trzeciej funkcji<br />{<br />        PORT_LED ^= LED_1_PIN | LED_3_PIN | LED_5_PIN | LED_7_PIN;<br />        _delay_ms(100);<br />        PORT_LED ^= LED_2_PIN | LED_4_PIN | LED_6_PIN | LED_8_PIN;<br />        _delay_ms(100);<br />        PORT_LED ^= LED_1_PIN | LED_3_PIN | LED_5_PIN | LED_7_PIN;<br />        _delay_ms(100);<br />        PORT_LED ^= LED_2_PIN | LED_4_PIN | LED_6_PIN | LED_8_PIN;<br />        _delay_ms(100);<br />}<br />void migacz_foor(void)  //definicja funkcji z pętlą foor<br />{<br />        uint8_t i, liczba = 1;<br />        for (i = 0; i &lt; 8; i++)<br />        {<br />                PORT_LED = ~liczba;<br />                liczba = liczba * 2;<br />                _delay_ms(30);<br />                PORT_LED = 0xFF;<br />                _delay_ms(10);<br />        }<br />}<br />void klawisz_1_robal(void) //definicja funkcji obsługi klawisza z efektem fobala<br />{<br />        if ( KLAWISZ_1_WCISNIETY == 0)<br /><br />                PORT_LED = 0;<br /><br />        else if ( KLAWISZ_1_WCISNIETY) {<br />                _delay_ms(80);<br />                if ( KLAWISZ_1_WCISNIETY) {<br />                        migacz_foor();<br />                        migacz_foor();<br />                        migacz_foor();<br />                }<br />        }<br />}<br />void szuflada(void) {<br /><br />        if (flaga_serwa) //jeśli flaga serwa ma wartośc 1<br />        {<br />                DDR_SERWO |= (PIN_SERWO_NR); // wlaczenie wyjscia**********<br /><br />                if (!KRA_1_DOWN) // dopoki druga nie wcisnieta !!!<br />                {<br />                        OCR1A = PRAWO; // otwieraj<br />                } else // gdy wcisnieta<br />                {<br />                        OCR1A = LEWO; // zamykaj<br />                        flaga_serwa = 0; // zeruj flage<br />                }<br />        } else // gdy flaga zero<br />        {<br />                if (KRA_2_DOWN)  // gdy krancowka pierwsza (domknieta szuflada)<br />                {<br />                        OCR1A = STOP;  // stop<br />                        DDR_SERWO &amp;= ~(PIN_SERWO_NR); // wylaczenie wyjscia na serwo<br />                } else {<br />                        OCR1A = LEWO; // awaryjnie domyka<br /><br />                        DDR_SERWO |= (PIN_SERWO_NR); // wlaczenie wyjscia*********<br />                }<br />        }<br />}<br /><br /><br /><br /><br /><br />void ustaw_timer_0(void) { //timer od migania kontrolkami<br />        //ustawienie Timera 0:<br />        TCCR0 |= (1 &lt;&lt; WGM01);                            // tryb CTC<br />        TCCR0 |= (1 &lt;&lt; CS00) | (1 &lt;&lt; CS02);           // preskaler = 1024<br />        OCR0 = 38;             //podział przez 38 - rejestr porównania zlicza 200/1s<br />        TIMSK |= (1 &lt;&lt; OCIE0);             // zezwolenie na przerwanie od porównania<br />}<br />void ustaw_timer_1(void)                         //definicja ustawienia timera 1<br />{ //--------------------------timer_1  SERWO-+-90stopni -&gt; 20Hz . 1,5 - 2,5 ms.-  /<br /><br />        //tryb 14. Fast PWM TOP ICR1------- / /<br />        TCCR1A |= (1 &lt;&lt; WGM11);<br />        TCCR1B |= (1 &lt;&lt; WGM12) | (1 &lt;&lt; WGM13);<br /><br />        //porownanie zeruje OC1A//<br />        TCCR1A |= (1 &lt;&lt; COM1A1); // Porównanie zeruje OC1A , ustawia przy wartoci szczytowej, CZYLI PRZY WARTOSCO ZERO ''''''''''''''''''<br /><br />        //preskaler 8 =  1 000 000 Hz----------//<br /><br />        //      TCCR1B |= (1 &lt;&lt; CS11) | (1 &lt;&lt; CS10);//64<br />        TCCR1B |= (1 &lt;&lt; CS11); //8<br /><br />        //ICR1 max = 1 000 000 Hz / 50Hz = 20 000 - 1 (-1 bo od zera)//<br />        ICR1 = 19999; //zlicza do wartosci 19999 i zeruje ta wartosc i to powtarza  20ms<br /><br />        // 20ms -&gt; 0,5ms=499, 1ms=999,  1,5ms=1499,  2ms=1999,  2,5ms = 2499  //<br />        OCR1A = 1499; //może tu jest środek zakresu//<br /><br />}<br />void ustaw_we_wy (void){<br />        DDR_LED = 0xFF;    // wejscie-wyjście - ustaw jako wyjście<br />        PORT_LED = 0xFF; //podanie stanu wysokiego na PORTC - wygaszenie wszystkich diod<br /><br />        DDR_CNZ |= LED_CZERWONY_PIN_NR | LED_NIEBIESKI_PIN_NR | LED_ZIELONY_PIN_NR;<br /><br />        PORT_CNZ |= LED_CZERWONY_PIN_NR | LED_NIEBIESKI_PIN_NR | LED_ZIELONY_PIN_NR; //wyjście dla diod<br />//        DDR_BUZ |= BUZ_PIN_NR; //wyjście dla buzera<br />        DDR_M_1 |= LED_M_1; // wyjście dla diody 1 z multipleksowania<br />        DDR_M_2 |= LED_M_2; // wyjście dla diody 2 z multipleksowania<br />        DDR_M_3 |= LED_M_3; // wyjście dla diody 3 z multipleksowania<br /><br />        DDR_KLA_1 &amp;= ~KLA_1_PIN_NR;<br />        PORT_KLA_1 |= KLA_1_PIN_NR;<br />        DDR_KLA_2 &amp;= ~KLA_2_PIN_NR;<br />        PORT_KLA_2 |= KLA_2_PIN_NR;<br />        DDR_KLA_3 &amp;= ~KLA_3_PIN_NR;<br />        PORT_KLA_3 |= KLA_3_PIN_NR;<br /><br />        DDR_SERWO |= PIN_SERWO_NR;<br /><br />        DDR_KRA_1 &amp;=~ KRA_1_PIN_NR;<br />        DDR_KRA_2 &amp;=~ KRA_2_PIN_NR;<br />        PORT_KRA_1 |= KRA_1_PIN_NR;<br />        PORT_KRA_2 |= KRA_2_PIN_NR;<br />}<br />//________przerwania____________<br />ISR(TIMER0_COMP_vect)<br />{<br />        if (zliczanie &lt; 199)<br />                zliczanie++; //zliczanie jest mniejsze od 199, jeśli tak to zliczanie (licznik) dodawaj<br /><br />        else                    // jeśli licznik jest większy lub równy od 199 to :<br />        {<br />                zliczanie = 0; //to zeruj licznik<br />//                if (flaga_buzzer)<br />//                    flaga_buzzer = 0;     //jeżeli flaga jest 1 to wyzeruj flagę.<br />//<br />//                else //jeśli flaga icznik nie jest większy od 199 to (jeżeli nie&quot;czyli jest 0&quot; ):<br />//                {<br />//                     flaga_buzzer = 1; // przypisz fladze buzzer wartośc =1         pierwsza zmienna od buzera (używana).<br />//                        flaga_sekunda = 1;  //przypisanie fladze sekunda wartośc =1<br />//                }<br /><br />//                if (flaga_buzzer == 1)<br />//                        BUZ_OFF; //jeśli flaga buzzer będzie miała wartośc 1, to buzer się uruchomi<br />//                else<br />//                        BUZ_ON;<br />        }  // jeśli nie, to buzer się wyączy.<br />        // if(flaga_sekunda == 1 )LED_M_1_TOG;<br /><br /><br /><br />        if ((zliczanie == 10) || (zliczanie == 20) || (zliczanie == 30)<br />                        || (zliczanie == 40) || (zliczanie == 50) || (zliczanie == 60)<br />                        || (zliczanie == 70) || (zliczanie == 80) || (zliczanie == 90)<br />                        || (zliczanie == 100) || (zliczanie == 110) || (zliczanie == 120)<br />                        || (zliczanie == 130) || (zliczanie == 140) || (zliczanie == 150)<br />                        || (zliczanie == 160) || (zliczanie == 170) || (zliczanie == 180)<br />                        || (zliczanie == 190) || (zliczanie == 200))<br />        {<br /><br />        LED_M_1_TOG;<br /><br />        }<br /><br /><br />        if ((zliczanie == 10) || (zliczanie == 20) || (zliczanie == 30)<br />                        || (zliczanie == 40) || (zliczanie == 50) || (zliczanie == 60)<br />                        || (zliczanie == 70) || (zliczanie == 80) || (zliczanie == 90)<br />                        || (zliczanie == 100) || (zliczanie == 110) || (zliczanie == 120)<br />                        || (zliczanie == 130) || (zliczanie == 140) || (zliczanie == 150)<br />                        || (zliczanie == 160) || (zliczanie == 170) || (zliczanie == 180)<br />                        || (zliczanie == 190) || (zliczanie == 200))<br />        {<br /><br />        LED_M_2_TOG;<br /><br />        }<br /><br />        if ((zliczanie == 10) || (zliczanie == 20) || (zliczanie == 30)<br />                        || (zliczanie == 40) || (zliczanie == 50) || (zliczanie == 60)<br />                        || (zliczanie == 70) || (zliczanie == 80) || (zliczanie == 90)<br />                        || (zliczanie == 100) || (zliczanie == 110) || (zliczanie == 120)<br />                        || (zliczanie == 130) || (zliczanie == 140) || (zliczanie == 150)<br />                        || (zliczanie == 160) || (zliczanie == 170) || (zliczanie == 180)<br />                        || (zliczanie == 190) || (zliczanie == 200))<br />         {<br /><br />        LED_M_3_TOG;<br /><br />         }<br /><br />     //   if (0 == (zliczanie % 45))//miganie pierwszą diodą<br />     //           LED_M_2_TOG;  //miganie pierwszą diodą, druga i osrtatnia linijka<br /><br />       // if (0 == (zliczanie % 45))<br />                      //  LED_M_1_TOG;<br /><br />if<br />(KLAWISZ_1_WCISNIETY)<br />{<br />kontrolka = 1;<br />LED_M_1_ON;<br /><br />}<br />else<br />{<br />kontrolka = 2;<br />LED_M_1_OFF;<br />}<br /><br /><br /> if (KLAWISZ_2_WCISNIETY)<br />{<br />kontrolka = 2;<br />LED_M_2_ON;<br />}<br /><br /> if (KLAWISZ_3_WCISNIETY)<br />{<br />kontrolka = 3;<br />LED_M_3_ON;<br />}<br /><br /><br />}[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br />nie oczekuję gotowego rozwiązania, tylko podpowiedzi, w którą stronę mam pójść. <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=14082">wojciechgorzolka</a> — 25 cze 2017, o 21:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2017-06-25T21:12:52+01:00</updated>
<published>2017-06-25T21:12:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191233#p191233</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191233#p191233"/>
<title type="html"><![CDATA[Re: łączenie migania diodą w timerze z klawiszem w pętli głó]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191233#p191233"><![CDATA[
Bez zobaczenia kodu który naskrobałeś trudno będzie cokolwiek pomóc.<br />Czy pod pojęciem uruchomienia timera i mrugania w nim diodą rozumiesz timer sprzętowy i mruganie diodą w przerwaniu od niego?<br />Jeśli tak to pomysł z dodatkową zmienną jest jak najbardziej prawidłowy (potocznie taką zmienną się nazywa flagą), tylko taka zmienna musi być globalna (bądź typu static) i opatrzona dopiskiem volatile...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 25 cze 2017, o 21:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-06-25T20:54:33+01:00</updated>
<published>2017-06-25T20:54:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191231#p191231</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191231#p191231"/>
<title type="html"><![CDATA[łączenie migania diodą w timerze z klawiszem w pętli głównej]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18695&amp;p=191231#p191231"><![CDATA[
Mam taką zagwozdkę. Działam na ATB.<br />    Napisałem sobie w programie,że po naciśnięciu klawisza zapalają mi się diody, przechodzą diody jak w typowym robalu, czyli z lewej do prawej. Robal powtarzany jest cztery razy i diody gasną. wszystko trwa około 3 sekund. Zrobiłem obsługę klawisza i po naciśnięciu, robal jest uruchamiany. Wszystko działa z delajami, więc program jest blokujący się. Ale działa według moich założeń.<br />    Następnie uruchomiłem sobie timer, w którym mrygam jedną diodą(niezależnie od pętli głównej), którą pożyczyłem sobie z wyświetlacza 7-mio segmentowego  i chcę, aby ta dioda z timera mrygałą mi tylko i wyłącznie podczas momentu, gdy wykonuje się cztery razy robal w pętli głównej, następnie ma zgasnąć. I z tym mam problem.<br /><br />W timerze napisałem sobie obsługę klawisza, tego samego co w pętli głównej i gdy go naciskam, to dioda przestaje migać i świeci ciągle. Gdy puszczę klawisz, to dioda znów zaczyna mrygać z timera <br /><br />Myślałem, aby powołać zmienną o wartości 1. <br /><br />Na mój chłopski rozum po naciśnięciu klawisza w pętli głównej powinienem zamieścić tą zmienną z wartością =1, gdy robal wykona się cztery razy, zeruję tą zmienną. Ale to tak nie chce działać. <br /><br />proszę o podpowiedź.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 25 cze 2017, o 20:54</p><hr />
]]></content>
</entry>
</feed>