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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-03-04T21:40:29+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=128&amp;mode</id>
<entry>
<author><name><![CDATA[PJR]]></name></author>
<updated>2012-03-04T21:40:29+01:00</updated>
<published>2012-03-04T21:40:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3877#p3877</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3877#p3877"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3877#p3877"><![CDATA[
Dzięki Mirku za powitanie. Taki był cel. Żeby dioda migała cały czas to należy zawrzeć tę instrukcję w pętli nieskończonej. Jestem początkujący jeżeli chodzi o język C i mikrokontrolery. Wszystko się jeszcze plącze, ale cały czas eksperymentuję i poszerzam wiedzę. Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=246">PJR</a> — 4 mar 2012, o 21:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-03-04T21:06:42+01:00</updated>
<published>2012-03-04T21:06:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3876#p3876</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3876#p3876"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3876#p3876"><![CDATA[
Witamy witamy nowego użytkownika ciepło <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Ale przytoczony program mignie tylko 3 razy i się zakończy na śmierć - taki był twój cel ? Jeśli tak to OK, ale jeśli myślałeś że to się powtórzy to nie dobrze.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 mar 2012, o 21:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PJR]]></name></author>
<updated>2012-03-04T19:24:09+01:00</updated>
<published>2012-03-04T19:24:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3875#p3875</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3875#p3875"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3875#p3875"><![CDATA[
Można uzyskać ten efekt z diodą która zapala się trzy razy również w ten sposób:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define LED_PIN (1&lt;&lt;PC7)// definicja pinu do którego podłączona jest dioda<br />#define LED_ON PORTC &amp;= ~ LED_PIN//dioda włączona<br />#define LED_OFF PORTC |= LED_PIN//dioda wyłączona<br /><br /><br />int main(void)<br />{<br />DDRC |= LED_PIN;<br />int8_t i;<br /><br /><br />for(i=0; i&lt;3; i++)<br />{LED_ON;<br />_delay_ms(1000);<br />LED_OFF;<br />_delay_ms(1000);<br />}<br /> }[/syntax] Przy okazji jako nowy użytkownik forum chciałem pozdrowić kolegów.  <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=246">PJR</a> — 4 mar 2012, o 19:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-23T15:07:17+01:00</updated>
<published>2012-02-23T15:07:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3393#p3393</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3393#p3393"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3393#p3393"><![CDATA[
No to autor pytania dostał teraz mnóstwo pomysłów więc niech wypróbuje i da znać jak poszło <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 lut 2012, o 15:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miszczo]]></name></author>
<updated>2012-02-23T15:02:25+01:00</updated>
<published>2012-02-23T15:02:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3392#p3392</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3392#p3392"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3392#p3392"><![CDATA[
<div class="quotetitle">Sonix napisał(a):</div><div class="quotecontent"><br />to chyba jeszcze nie było takiej kombinacji żeby <span style="color: #FF0000">while</span> przenieść na koniec programu i zająć procesor 'nic nie robieniem' gdy już skończy migać np:<br /></div><br /><br />Albo wstawić drugie while(1) po pętli for.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=78">miszczo</a> — 23 lut 2012, o 15:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-23T14:59:38+01:00</updated>
<published>2012-02-23T14:59:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3391#p3391</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3391#p3391"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3391#p3391"><![CDATA[
<div class="quotetitle">Sonix napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">Klucha napisał(a):</div><div class="quotecontent">.....Kombinowałem z pętlą while , for oraz z miejscem deklaracji zmiennej i. W którym miejscu robię błąd?<br /></div><br /><br />to chyba jeszcze nie było takiej kombinacji żeby <span style="color: #FF0000">while</span> przenieść na koniec programu i zająć procesor 'nic nie robieniem' gdy już skończy migać np:<br /><br /><br />[syntax=c]      while(1)<br />        {<br />                asm(&quot;nop&quot;);<br /> <br />        }[/syntax]</div><br /><br />Tak tylko jak już to można się obejść bez tego nop <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> - po prostu tak - wyjdzie na dokładnie to samo:<br /><br />[syntax=c]      while(1) { }[/syntax]<br /><br />albo i tak:<br /><br />[syntax=c]      while(1); [/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 23 lut 2012, o 14:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sonix]]></name></author>
<updated>2012-02-23T14:30:15+01:00</updated>
<published>2012-02-23T14:30:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3389#p3389</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3389#p3389"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3389#p3389"><![CDATA[
<div class="quotetitle">Klucha napisał(a):</div><div class="quotecontent"><br />.....Kombinowałem z pętlą while , for oraz z miejscem deklaracji zmiennej i. W którym miejscu robię błąd?<br /></div><br /><br />to chyba jeszcze nie było takiej kombinacji żeby <span style="color: #FF0000">while</span> przenieść na koniec programu i zająć procesor 'nic nie robieniem' gdy już skończy migać np:<br /><br /><br />[syntax=c]      while(1)<br />        {<br />                asm(&quot;nop&quot;);<br /> <br />        }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=127">Sonix</a> — 23 lut 2012, o 14:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-23T00:53:12+01:00</updated>
<published>2012-02-23T00:53:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3361#p3361</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3361#p3361"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3361#p3361"><![CDATA[
<div class="quotetitle">worner napisał(a):</div><div class="quotecontent"><br />Żeby się o tym przekonać proponuję w linijce 26 wstawić wartość opóźnienia 3000.<br />Wtedy kolega zobaczy na żywo działanie swojego programu.<br /></div><br /><br />ja tylko dodam, że to bardzo cenna uwaga bo wskazuje także jak coś sobie sprawdzać, testować .... warto więc z niej skorzystać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 23 lut 2012, o 00:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[worner]]></name></author>
<updated>2012-02-22T23:28:20+01:00</updated>
<published>2012-02-22T23:28:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3352#p3352</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3352#p3352"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3352#p3352"><![CDATA[
No i bardzo dobrze, że dioda miga cały czas. Taki program kolega napisał, żeby migała cały czas. A &quot;sprawcą&quot; tego migania cały czas jest pętla nieskończona <span style="color: #FF0000">while</span>.<br /><br />Dioda mignie trzy razy, po czym program zacznie działanie od nowa.<br /><br />Żeby się o tym przekonać proponuję w linijce 26 wstawić wartość opóźnienia 3000.<br />Wtedy kolega zobaczy na żywo działanie swojego programu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=150">worner</a> — 22 lut 2012, o 23:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sonix]]></name></author>
<updated>2012-02-22T23:20:54+01:00</updated>
<published>2012-02-22T23:20:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3351#p3351</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3351#p3351"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3351#p3351"><![CDATA[
według mnie pętla 'for' jest wewnątrz nieskończonej pętli 'while' i stąd ten problem...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=127">Sonix</a> — 22 lut 2012, o 23:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Klucha]]></name></author>
<updated>2012-02-22T23:16:54+01:00</updated>
<published>2012-02-22T23:16:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3349#p3349</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3349#p3349"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=3349#p3349"><![CDATA[
Nie chciałem tworzyć nowego tematu, dlatego napiszę  tutaj. Otóż mam taki problem:<br />[syntax=c]<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br /><br /><br />int main(void)<br /><br />{<br />DDRC |= (1&lt;&lt;PC5);<br />PORTC |= (1&lt;&lt;PC5);<br />uint8_t i;<br /><br /><br />while(1)<br />{<br /><br />for(i=0; i&lt;3;i++)<br />{<br />PORTC &amp;= ~(1&lt;&lt;PC5);                                     //zapalenie diody D5<br /><br />_delay_ms (500);                                                //oczekiwanie 500 ms<br /><br />PORTC |= (1&lt;&lt;PC5);                                      //zgaszenie diody D5<br /><br />_delay_ms (500);<br />}<br /><br />}<br />}[/syntax]<br /><br />Dioda powinna się zapalić 3 razy i koniec (tak myślę), a ona miga cał czas. Kombinowałem z pętlą while , for oraz z miejscem deklaracji zmiennej i. W którym miejscu robię błąd?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=232">Klucha</a> — 22 lut 2012, o 23:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[worner]]></name></author>
<updated>2012-01-09T09:57:47+01:00</updated>
<published>2012-01-09T09:57:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1176#p1176</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1176#p1176"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1176#p1176"><![CDATA[
No tak, muszę przyznać, że nie pomyślałem o zmianie sposobu definiowania zmiennej &quot;i&quot;, nawet jak kolega <span style="color: #FF0000">DidekxD</span> mnie nakierował. Ba, co tu dużo gadać, wręcz zaprotestowałem! Nie wpadłem na to, że &quot;i&quot; może przyjąć wartość ujemną. A pewnie wynika to z niezrozumienia działania pętli FOR.<br /><br />No cóż panowie, dziękuję za pomoc. Sprawdzę wszystko jeszcze raz po powrocie z pracy.<br />Zapewne jeszcze nie raz będę sięgał po <span style="color: #FF0000">debuger</span>. Najlepszy debuger, a nazywający się FORUM Atnel.pl  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br /><span style="color: #0000FF">Po wprowadzeniu poprawek zgodnie z sugestiami kolegów programik zaczął działać zgodnie z oczekiwaniami. Mogłem go wreszcie dokończyć i teraz wygląda tak, jak poniżej. Oczywiście nic szczególnego, ale od czegoś trzeba zacząć. Jeszcze raz dziękuję za pomoc &quot;debugerom&quot;  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> </span><br /><br />[syntax=c]/* DiodaLed_12<br /> *<br /> *<br /> *Zadanie programu:<br /> *1.Zapalanie diod D0...D7 jedna po drugiej, a następnie ich wygaszanie w kolejności odwrotnej<br /> *  z wykorzystaniem dwóch pętli FOR.<br /> *2.Po całym cyklu z pkt. 1 szybkie dwa mrugnięcia całym portem ale zrobione tak samo, czyli<br /> *  również w dwóch pętlach FOR i po kolei.<br /> *<br /> *main.c<br /> *  Created on: 2012-01-08<br /> *      Author: Jacek Wagner<br /> */<br />//załączenie plików nagłówkowych<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />//***************pętla główna programu*****<br /><br />int main (void)<br />{<br />DDRC = 0xFF;//port C jako wyjście<br />PORTC = 0xFF;//ustawienie całego portu w stan wysoki - nieaktywny<br /><br />int8_t i;//definicja zmiennej iteracyjnej &quot;i&quot; - zmienna typu int!!!!!!!!<br />int8_t a;<br />while (1)<br />{<br />for(i=0;i&lt;=7;i++)//pętla zapalająca diody<br />{<br />PORTC &amp;= ~(1&lt;&lt;i);//zapalenie diody<br />_delay_ms (100);<br />}<br />for(i=7;i&gt;=0;i--)//pętla gasząca diody zmieniony warunek z (i&gt;=0) na (i&gt;0)<br />{<br />PORTC |= (1&lt;&lt;i);<br />_delay_ms (100);<br />}<br />uint8_t x=2;//definicja zmiennej iteracyjne x na potrzeby pętli while<br />while(x)//dwukrotnie wykonana pętla zapalająca szybko diody i gasząca je<br />{<br />for(a=0;a&lt;=7;a++)//powtórna pętla zapalająca diody, ale w obiegu szybkim<br />{<br />PORTC &amp;= ~(1&lt;&lt;a);//zapalenie diody<br />_delay_ms (10);//czas świecenia<br />}<br /><br />for(a=7;a&gt;=0;a--)//pętla gasząca szybko diody<br />{<br />PORTC |= (1&lt;&lt;a);//zgaszenie diod<br />_delay_ms (5);<br />}<br />--x;//zmniejszenie licznika o 1 i wpisanie do zmiennej &quot;x&quot;<br />}<br />}<br />}<br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=150">worner</a> — 9 sty 2012, o 09:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-01-08T22:20:35+01:00</updated>
<published>2012-01-08T22:20:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1164#p1164</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1164#p1164"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1164#p1164"><![CDATA[
Zastanów się jak to działa, zamiast załamywać ręce albo sięgać po debuger.<br /><br />jeśli masz tak jak miałeś czyli:<br /><br />[syntax=c]        uint8_t i;                                      //definicja zmiennej iteracyjnej &quot;i&quot;<br />        while (1)<br />        {<br />                for(i=0;i&lt;8;i++)                        //pętla zapalająca diody<br />                {<br />                        PORTC &amp;= ~(1&lt;&lt;i);       //zapalenie diody<br />                        _delay_ms (100);<br />                }<br />                for(i=7;i&gt;=0;i--)                        //pętla gasząca diody<br />                {<br />                        PORTC |= (1&lt;&lt;i);<br />                        _delay_ms (100);<br />                }<br />        }[/syntax]<br /><br />to pomyśl sobie co się stanie gdy w drugiej pętli zmienna i będzie już = 0 ???? Przecież to trzeba sobie rozpatrzeć - nie wyobrażam sobie, a szczególnie gdy program nie działa tak jak bym chciał - żebym nie rozpatrywał w najmniejszych drobiazgach jak działa program - bo jest tylko jedna możliwość. Nie żadna zła konfiguracja Eclipse czy inne kosmiczne powody, po prostu ja coś źle robię.<br /><br />A zatem jeśli w kolejnym przebiegu pętli zmienna i będzie już = 0, to co ? zostanie ona w związku z warunkiem (i&gt;=0) zmniejszona o 1 prawda ??? pomyślałeś o tym ? W takim razie ile wyniesie wynik działania 0-1 jeśli działamy na liczbie bez znaku (wszak zdefiniowałeś zmienną i jako uint8_t) ????? Myślę, że zgodzisz się ze mną, że i będzie równe 255 i to chyba nie jest dziwne tak ? Warunek pętli mówi, że będzie ona wykonywana do momentu większe lub równe 0, więc gdy po tym obiegu i będzie równe 255 no to nadal warunek jest spełniony i w związku z tym taka pętla jak sobie teraz uświadamiasz - zaczyna działać bez końca .... wciąż gasząc twoje diody LED - PRAWDA ???<br /><br />Jak temu zaradzić? Jest na to 1000 sposobów. Jeden taki na szybko przychodzi mi do głowy aby tę drugą pętlę zapisać tak:<br /><br /><br />[syntax=c]                for(i=0;i&lt;8;i++)                        //pętla gasząca diody<br />                {<br />                        PORTC |= (1&lt;&lt; (7-i) );<br />                        _delay_ms (100);<br />                }[/syntax]<br /><br />Czyli iteracja działa w identyczny sposób jak w pierwszej pętli a my się tylko posługujemy prostym działaniem matematycznym odwracającym (7-i) .... widzisz to ? Spróbuj sobie to przeanalizować.<br /><br />Ale też można oczywiście nie zmieniać sposobu iteracji tylko zmienić typ zmiennej jak radził kolega wyżej z uint8_t na int8_t (czyli nadal zmienna 8-bitowa ale będzie zawierała liczby dodatnie i ujemne z zakresu -128 do +127. Spokojnie nam to wystarczy gdyż zmienna zmienia się tylko w zakresie od 0 do 7 prawda ? <br /><br />wtedy gdy przed pętlą główną zmienisz definicję na <strong><span style="color: #0000FF">int8_t i;</span></strong> możesz napisać tę drugą pętlę np tak:<br /><br />[syntax=c]        int8_t i;                                      //definicja zmiennej iteracyjnej &quot;i&quot;<br />        while (1)<br />        {<br />                for(i=0;i&lt;8;i++)                        //pętla zapalająca diody<br />                {<br />                        PORTC &amp;= ~(1&lt;&lt;i);       //zapalenie diody<br />                        _delay_ms (100);<br />                }<br />                for(i=7;i&gt;0;i--)                        //pętla gasząca diody<br />                {<br />                        PORTC |= (1&lt;&lt;i);<br />                        _delay_ms (100);<br />                }<br />        }[/syntax]<br /><br />ale zauważ, że zmieniłem lekko warunek w pętli z (i&gt;=0) na (i&gt;0) - bo teraz gdy zmienna i dojdzie do wartości ZERO i nastąpi jej zmniejszenie o JEDEN to jaką przyjmie wartość ? przecież już nie 255 tylko -1 .... a -1 jest mniejsze od zera więc warunek spowoduje że pętla się zakończy.<br /><br />Można byłoby jeszcze powoływać dodatkowe zmienne jak pisał kolega wyżej albo jeszcze coś - no jak pisałem wyżej - sposobów jest milion - tylko trzeba zawsze analizować do bólu własny kod. A nawet będzie lepiej jeśli analiza tak prostych kodów zacznie wychodzić bez korzystania z DEBUGERA - bo sam chyba zdajesz sobie sprawę jak szybko wpłynie to na podniesienie twojej praktyki programowania.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 8 sty 2012, o 22:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DidekxD]]></name></author>
<updated>2012-01-08T21:01:21+01:00</updated>
<published>2012-01-08T21:01:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1158#p1158</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1158#p1158"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1158#p1158"><![CDATA[
Podałem też pętle która działa bez zmiany zmiennej na 'int' lub 'int8_t'<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">                    for(i=8;i&gt;0;i--)                        //pętla gasząca diody<br />                    {<br />                       a = i;<br />                       --a;<br />                            PORTC |= (1&lt;&lt;a);<br />                            _delay_ms (100);<br />                    }<br /></div><br /><br /><br />Albo zmieniamy typ zmiennej i nic więcej ruszać nie trzeba.<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">       int8_t i;<br /></div><br /><br />to zmienna jedno bajtowa... tak ? tyle że ze znakiem. Czemu ? Bo bez nie działa. Proste.<br />Z resztą pan Mirek pewnie wszystko rozwieje niebawem <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=146">DidekxD</a> — 8 sty 2012, o 21:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[worner]]></name></author>
<updated>2012-01-08T20:52:24+01:00</updated>
<published>2012-01-08T20:52:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1157#p1157</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1157#p1157"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1157#p1157"><![CDATA[
No ale dlaczego miałbym definiować (nie deklarować) zmienną &quot;i&quot; jako liczbę dwubajtową, jeszcze w dodatku ze znakiem. To chyba nie o to chodzi. Zainstalowałem sobie teraz Eclipsa Indigo i spróbuję na innej platformie wrzucić ten program do procka.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=150">worner</a> — 8 sty 2012, o 20:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DidekxD]]></name></author>
<updated>2012-01-08T20:26:52+01:00</updated>
<published>2012-01-08T20:26:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1156#p1156</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1156#p1156"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1156#p1156"><![CDATA[
<div class="codetitle"><b>Code:</b></div><div class="codecontent">                    for(i=8;i&gt;0;i--)                        //pętla gasząca diody<br />                    {<br />                       a = i;<br />                       --a;<br />                            PORTC |= (1&lt;&lt;a);<br />                            _delay_ms (100);<br />                    }</div><br /><br />tak działa lub tak:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">                    for(i=7;i&gt;0;i--)                        //pętla gasząca diody<br />                    {<br />                            PORTC |= (1&lt;&lt;i);<br />                            _delay_ms (100);<br />                    }</div><br /><br /><br />czemu nie działa z operatorem &quot; &gt;= &quot; to już nie wiem <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br /><br />PS<br /><br />Dobra już wiem! Najwyraźniej chodzi o tym 'unsigned int'. Mam wrażenie że pętla for po dojechaniu do Zera ustawia tak jak by -1 i wtedy zmienna się psuje. Tak też gdy zdeklarujesz zmienną 'i' jako po prostu 'int' wszystko powinno hulać<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">            int8_t i;<br /></div><br />lub<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">            int i;</div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=146">DidekxD</a> — 8 sty 2012, o 20:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[worner]]></name></author>
<updated>2012-01-08T19:38:28+01:00</updated>
<published>2012-01-08T19:38:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1153#p1153</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1153#p1153"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1153#p1153"><![CDATA[
Dzisiaj znowu pojawił się problem, tym razem w innym wydaniu, a chyba dotyczącym pętli <span style="color: #FF0000">while</span>.<br /><br />Napisałem taki oto program, który według założeń powinien wykonywać się w poętli nieskończonej. Tymczasem wykonuje się jeden raz i stoi.<br />Kod:<br /><br />[syntax=c]/* DiodaLed_12<br /> *<br /> *<br /> *Zadanie programu:<br /> *1.Zapalanie diod D0...D7 jedna po drugiej, a następnie ich wygaszanie w kolejności odwrotnej<br /> *  z wykorzystaniem dwóch ptli FOR.<br /> *2.Po całym cyklu z pkt. 1 szybkie dwa mrugnięcia całym portem ale zrobione tak samo, czyli<br /> *  również w dwóch pętlach FOR i po kolei.<br /> *<br /> *main.c<br /> *  Created on: 2012-01-08<br /> *      Author: Jacek Wagner<br /> */<br />//załączenie plików nagłówkowych<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />//***************pętla główna programu*****<br /><br />int main (void)<br />{<br />DDRC = 0xFF;//port C jako wyjście<br />PORTC = 0xFF;//ustawienie całego portu w stan wysoki - nieaktywny<br /><br />uint8_t i;//definicja zmiennej iteracyjnej &quot;i&quot;<br />while (1)<br />{<br />for(i=0;i&lt;8;i++)        //pętla zapalająca diody<br />{<br />PORTC &amp;= ~(1&lt;&lt;i);//zapalenie diody<br />_delay_ms (100);<br />}<br />for(i=7;i&gt;=0;i--)         //pętla gasząca diody<br />{<br />PORTC |= (1&lt;&lt;i);<br />_delay_ms (100);<br />}<br />}<br />}<br />[/syntax]<br /><br />No i cuduję we wszystkie strony i nie mogę sobie poradzić. Zmieniałem już wartość zmiennej i w pierwszej pętli i oczywiście wstawiałem operator porównania &lt;= 7, definicję zmiennej wstawiałem do pętli while i nic to nie pomaga.<br />Nie jestem pewien, czy może to mieć związek z ustawieniami samego Eclipse, bo wczoraj coś grzebałem, a dzisiaj już nie potrafię przypomnieć sobie, co zmieniłem, a czego nie ruszałem.<br />Proszę o wskazówki, bo ręce już załamuję.  <img src="https://forum.atnel.pl/images/smilies/icon_cry.gif" alt=":cry:" title="Płacze" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=150">worner</a> — 8 sty 2012, o 19:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-01-08T00:43:08+01:00</updated>
<published>2012-01-08T00:43:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1135#p1135</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1135#p1135"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1135#p1135"><![CDATA[
ach - nie zauważyłem tego średnika <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> rzeczywiście - pętla wykonała się trzy razy nic nie robiąc a w zasadzie to kompilator wyrżnął jej kod w asemblerze a potem grzecznie wykonał jednokrotnie blok kodu w nawiasach klamrowych.<br /><br />No dla mnie też bardziej przejrzyście jest definiować takie zmienne przed pętlą. Jednak jak coś - to nie jest błędem żeby definiować je wewnątrz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 8 sty 2012, o 00:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[worner]]></name></author>
<updated>2012-01-08T00:34:40+01:00</updated>
<published>2012-01-08T00:34:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1134#p1134</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1134#p1134"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1134#p1134"><![CDATA[
Od dziś także będę w ten sposób definiował zmienne iteracyjne. Chyba jest to bardziej przejrzyste.<br /><br />Dziękuję za pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=150">worner</a> — 8 sty 2012, o 00:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-01-08T00:28:51+01:00</updated>
<published>2012-01-08T00:28:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1132#p1132</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1132#p1132"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1132#p1132"><![CDATA[
No właśnie chciałem to sprawdzić, dlatego wciągnąłem definicję zmiennej przed pętlę. Byłem ciekaw, czy przestawiłeś w opcjach kompilatora odpowiednią rzecz, żeby można było w ten sposób definiować zmienne bezpośrednio w pętli ??? Bo bez tej zmiany powinno ci się co najmniej ostrzeżenie (WARNING) pokazywać. Ja osobiście jednak zawsze definiuję zmienne iteracyjne czyli takie np i ..... przed pętlą, tym bardziej, że może się ona przydać także czasem w dalszym rozwoju programu w dalszej jego części poza pętlą. A przy definicji w nawiasach pętli for() już byłoby to niemożliwe.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 8 sty 2012, o 00:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[worner]]></name></author>
<updated>2012-01-08T00:32:02+01:00</updated>
<published>2012-01-08T00:22:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1130#p1130</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1130#p1130"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1130#p1130"><![CDATA[
Teraz dział jak miało działać.  Pomogło chyba wyprowadzenie definicji zmiennej &quot;i&quot; poza pętlę while, chyba. No bo nic innego nie przychodzi mi do głowy. Oczywiście usunąłem opóźnienie 2 s i teraz dioda &quot;śmiga&quot; jak trzeba.<br /><br />Tylko czemu w pierwszej wersji nie działało? Przecież zmienna i byłą zdefiniowana prawidłowo, prawda?<br /><br /><br /><span style="color: #FF0000">Edit:<br />Po usunięciu nieskończonej pętli while układ także przestaje działać jak zakładałem, czyli dioda mignie tylko jeden raz i koniec, zamiast trzech razy. A przyczyną jak się okazało był średnik po pętli for  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /> </span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=150">worner</a> — 8 sty 2012, o 00:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-01-08T00:04:38+01:00</updated>
<published>2012-01-08T00:04:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1128#p1128</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1128#p1128"/>
<title type="html"><![CDATA[Re: Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1128#p1128"><![CDATA[
Ok, posłuchaj - pierwsza rzecz. Generalnie program jest poprawnie napisany. Aczkolwiek nie masz w nim nieskończonej pętli głównej - więc fakt, że dioda mignie trzy razy i przestaje reagować cały układ aż do resetu nie powinien cię dziwić. Po prostu po zakończeniu pętli for() program kończy swoje działanie i pozostaje w bezczynności.<br /><br />Dziwne jest tylko to, że piszesz iż dioda mignie tylko jeden raz. Bo oczywiście powinna mignąć sobie 3 razy. Ale może spróbuj to tak napisać:<br /><br />[syntax=c]int main (void)                                                         //główna pętla programu<br />{<br />        DDRC |= (1&lt;&lt;PC5);                                               //PIN5 portu C jako wyjście<br />        uint8_t i;<br />        while(1) {<br />            for (i=0;i&lt;3;i++);                                      //pętla trzykrotnego zapalenia diody<br />            {<br />                    PORTC &amp;= ~(1&lt;&lt;PC5);                                     //zapalenie diody D5<br />                    _delay_ms (500);                                                //oczekiwanie 500 ms<br />                    PORTC |= (1&lt;&lt;PC5);                                      //zgaszenie diody D5<br />                    _delay_ms (500);                                         //ponowne oczekiwanie<br />            }<br />            _delay_ms(2000); // przerwa 2 sekundy i znowu potrójne mignięcie diodą LED<br />        } // koniec pętli nieskończonej<br />}[/syntax]<br /><br />Może coś źle podłączyłeś ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 8 sty 2012, o 00:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[worner]]></name></author>
<updated>2012-01-07T23:29:11+01:00</updated>
<published>2012-01-07T23:29:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1124#p1124</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1124#p1124"/>
<title type="html"><![CDATA[Pętla FOR - problem początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=128&amp;p=1124#p1124"><![CDATA[
Witam wszystkich<br />Myślałem, że udało mi się to w miarę pojąć, jednak okazało się, że nie za bardzo. Dlatego też proszę o wskazówkę, co jest nie tak w moim programie:<br /><br />Otóż założenie jest takie, że program ma zapalić tę samą diodę D5 trzykrotnie, ale ma to zrobić przy użyciu pętli  FOR (z pętlą while sobie poradziłem). Napisałem taki kod:<br /><br />[syntax=c]/* DiodaLed_07<br /> *<br /> *<br /> *Zadanie programu:<br /> *1.Zapalić diodę D5 trzykrotnie w odstępie 1 s ale z użyciem instrukcji FOR<br /> *<br /> *main.c<br /> *  Created on: 2012-01-07<br /> *      Author: Jacek Wagner<br /> */<br />//dołączenie plików nagłówkowych<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />int main (void)//główna pętla programu<br />{<br />DDRC |= (1&lt;&lt;PC5);//PIN5 portu C jako wyjście<br />for (uint8_t i=0;i&lt;3;i++);//pętla trzykrotnego zapalenia diody<br />{<br />PORTC &amp;= ~(1&lt;&lt;PC5);//zapalenie diody D5<br />_delay_ms (500);//oczekiwanie 500 ms<br />PORTC |= (1&lt;&lt;PC5);//zgaszenie diody D5<br />_delay_ms (500);                                         //ponowne oczekiwanie<br />}<br />}<br />[/syntax]<br /><br />No i za diabła nie mogę zrozumieć, czego tu brakuje? Program po jednorazowym zapaleniu diody &quot;milknie&quot; że tak powiem.<br />Podejrzewam, że problem jest banalny, ale siedzę już godzinę nad tym, i nie rozumiem.<br />Proszę o pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=150">worner</a> — 7 sty 2012, o 23:29</p><hr />
]]></content>
</entry>
</feed>