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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-11-22T23:20:23+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=4862&amp;mode</id>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-11-22T23:20:23+01:00</updated>
<published>2013-11-22T23:20:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=58219#p58219</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=58219#p58219"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=58219#p58219"><![CDATA[
Nie udało mi się zmusić funkcji for, while do pracy, natomiast skróciłem kod od IF i tak musi zostać.<br />Ale nie wytrzymałem i pojechałem po Bluebooka - przez weekend będzie już łatwiej.<br /><br />[syntax=c]if (Napiecie &gt; Trzymaj) {<br />if( 255 == i ) i--;<br />                        else {<br />i++;<br />    OCR1A=i;<br />if( 255 == i ) i--;<br />                        }<br />}<br />if (Napiecie &lt; Trzymaj) {<br />if( 0 == i ) i++;<br />                        else {<br />                        i--;<br />    OCR1A=i;<br />        }<br />}<br /><br />if (Napiecie == Trzymaj) {<br />uart_puts(&quot;   Napiecie=Napiecie bazowe   &quot;);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 22 lis 2013, o 23:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-11-21T12:52:34+01:00</updated>
<published>2013-11-21T12:52:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57992#p57992</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57992#p57992"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57992#p57992"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Za radą Mirka i poradników robię każdy blok osobno i dopiero jak zacznie działać to wstawiam do gotowego projektu<br /></div><br /><br />i to jest BARDZo dobry pomysł<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lis 2013, o 12:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-11-21T12:30:31+01:00</updated>
<published>2013-11-21T12:30:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57985#p57985</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57985#p57985"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57985#p57985"><![CDATA[
<div class="quotetitle">PJS napisał(a):</div><div class="quotecontent"><br />Której pętli? Bo z tego, co ja widzę to przed pierwszą pętlą i jest zerowane, a przed drugą ustawiane na 255. Te inicjalizacje są poza pętlami.<br /></div><br />mam wszystko zrobione na stykówce. diody, przełączniki, RS232 - z tym, że jak zobaczycie pierwszy projekt (specjalnie zamieściłem w całości) to wolę wywalać na ekran po RS232 wszystko niż patrzyć się na diody <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> aczkolwiek jedna pokazuje mi częstotliwość PWM a druga stan przycisku, więc wszystko ćwiczę.<br /><br />Ale wracając do tego i=255;<br />to i=255 stoi w pętli głównej while(1).<br />więc przy każdorazowym obrocie jest ustawione na 255.<br /><br />z tego co zrozumiałem to pętla &quot;while&quot; mi nie podejdzie bo chcę żeby nie zapętlał się program w podpętlach bo stracę przyciski i obsługę wyświetlacza itp Mam If - bezpieczny warunek ale zajmuje dużo linii.<br />Natomiast na pierwszy rzut for by podeszło, ale nie działa.<br /><br />Mimo że u Mirka w obsłudze przycisku to działa to nie mogę tego nijak dostosować<br />[syntax=c]if( !key_lock &amp;&amp; !(PIND &amp; KEY1 ) ) {<br />          key_lock=200;<br />          // reakcja na PRESS (wcinięcie przycisku)<br />          PORTB ^= LED2;<br />          uart_puts(&quot;Nacisnieto KEY1&quot;);<br /> <br />         } else if( key_lock &amp;&amp; (PIND &amp; KEY1 ) ) {<br />                 key_lock++;[/syntax]<br />tzn przy każdorazowym naciśnięciu keylock ustawione jest na 200 i po puszczeniu odlicza sobie do 255 i na tym się zatrzymuje. <br />Nie wiem dlaczego nie liczy znowu od 0 do 255 i tak w kółko. Liczy tylko jeden raz.<br />i to samo chcę osiągnąć u siebie - żeby i liczyło od 0 do 255 i tam sobie stało a po zmianie warunku od 255 do 0 i tam znowu sobie stało.<br />ale nie przez while tylko inaczej zeby nie blokowało pętli głównej.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 10 minutach ]</span></strong><br /><br />Co do założeń - bo nie wspomniałem bo to jest wycinek całego dużego projektu - MPPT do sterowania obciążeniem grzałek w funkcji energii z solarów..<br /><br />Ale zanim do MPPT trzeba najpierw uporać się z PWM.<br /><br />Uruchamiamy PWM sterujące Mosfetem <br />Na ADC mierzymy napięcie na Solarach<br />W programie mamy zmienną Trzymaj, która mówi nam jakie napięcie ma być to wzorcowe - idealne dla naszego układu.<br />zmieniając zmienną OCR1A w zakresie od 0 do 255 regulujemy mocą przekazywaną przez solar na obciążenie.<br />Jeśli teraz zmienna z ADC Napiecie jest wieksza od napięcia wzorcowego Trzymaj to ODC1A (wypełnienie) powinno się zacząc zwiększać, żeby <br />Napiecie spadało. Jeśli się wyrówna to będzie sobie stał i czekał co się dalej stanie. Jeśli natomiast Napiecie będzie mniejsze od Trzymaj to wypełnienie powinno się zmniejszyć żeby utrzymać to napięcie właściwe.<br /><br />Za radą Mirka i poradników robię każdy blok osobno i dopiero jak zacznie działać to wstawiam do gotowego projektu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 21 lis 2013, o 12:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-11-21T12:17:53+01:00</updated>
<published>2013-11-21T12:17:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57983#p57983</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57983#p57983"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57983#p57983"><![CDATA[
<div class="quotetitle">PJS napisał(a):</div><div class="quotecontent"><br />Toż przecież oczywiste, że rozwiązanie Mirka musisz dostosować do swojego projektu, bo nie wiemy jaki masz układ, założenia oraz cel projektu. A z tego co się domyślam, to Mirkowa propozycja powinna być w pętli głównej while(1) - po właściwym &quot;dostrojeniu&quot;.<br /></div><br /><br />dokładnie - chociaż lepiej byłoby w ogóle wywoływać te pętelki jako funkcje albo jako jedną funkcję - no ale tu tylko można zgadywać - jak się nie zna ogólnych założeń itp<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lis 2013, o 12:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PJS]]></name></author>
<updated>2013-11-21T12:13:47+01:00</updated>
<published>2013-11-21T12:13:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57981#p57981</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57981#p57981"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57981#p57981"><![CDATA[
Toż przecież oczywiste, że rozwiązanie Mirka musisz dostosować do swojego projektu, bo nie wiemy jaki masz układ, założenia oraz cel projektu. A z tego co się domyślam, to Mirkowa propozycja powinna być w pętli głównej while(1) - po właściwym &quot;dostrojeniu&quot;.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1614">PJS</a> — 21 lis 2013, o 12:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-11-21T12:10:00+01:00</updated>
<published>2013-11-21T12:10:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57980#p57980</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57980#p57980"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57980#p57980"><![CDATA[
<div class="quotetitle">iwi napisał(a):</div><div class="quotecontent"><br />chyba że skorzystamy z goto itp<br /></div><br /><br />panie,..... panie .... o goto to zapomnij <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> zrób sobie coś takiego jak ja - czyli małą lobotomię jeśli chodzi o goto - <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i będzie po problemie. W C nie używaj tego najlepiej nigdy a już na pewno nie wtedy gdy jesteś początkujący albo tylko średnio zaawansowany. <br /><br />-------------------------<br /><br />wiesz ja nie robiłem zarzutu z tego że jesteś początkujący - każdy nim jest w pewnym okresie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... ja też tylko może kilka kroków przed tobą ...<br /><br />oczwyiście że ćwicz - oczywiście że pętla główna w main<br /><br />while(1) {<br /><br />}<br /><br />ZAWSZE MUSI być<br /><br />a w niej można umieszczać inne pętle - czemu nie<br /><br />tyle że ty chcesz zrobić taki od razu siedmiomilowy skok - bo nie rozumiejąc jeszcze podstaw działania różnych pętli od razu chcesz pomieszać mnóstwo rzeczy ....<br /><br />tzn hmmm z jednej strony dobrze mieć od razu jakiś konkretny cel ... i do niego dążyć ... bo chyba chcesz zrobić jakiś projekt<br /><br />ale ja na twoim miejscu najpierw bym wziął sobie jakiś albo zestaw uruchomieniowy albo stykówkę do tego 8 diod LED może jakiś klawisz czy klawisze i tym sposobem najpierw poćwiczył pętle do MEGA BÓLU ! ... tak żeby wycisnąć z nich wszystkie soki, zrozumieć do końca - da się tak .... no może nie na 100% ale na 95% napewno<br /><br />a wtedy dopiero zabierałbym się za dalsze prace nad projektem ....<br /><br />przynajmniej ja mam takie podejście zawsze jak się czegoś uczę - i staram się to wciąż przekazywać początkującym .... bo to działa<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lis 2013, o 12:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-11-21T12:02:27+01:00</updated>
<published>2013-11-21T12:02:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57979#p57979</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57979#p57979"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57979#p57979"><![CDATA[
Ja to wszystko wrzucałem do pętli głównej<br /><br />tą deklaracje uint8_t i = 0 dałem na samym początku przy def zmiennych <br />ale to i=255 stoi w środku pętli while(1) więc nijak to nie może działać - tzn działa, ale przy każdym wywołaniu pętli jest 255.<br />ale gdyby to stało poza pętlą główną while(1)<br /><br />tylko teraz pytanie początkującego może głupie, ale nie mogę sobie tego wyobrazić<br /><br />Będę miał 3 pętle w int main<br />while( Napiecie&lt;Trzymaj )<br />while( Napiecie&gt;=Trzymaj )<br />i główna<br />while(1)<br /><br />program idąc od góry napotka pierwszą pętlę i po dojściu do granicy zrobi break i wyjdzie z tej pętli i wejdzie do pętli drugiej. Po przeliczeniach i nie spełnieniu warunku Napiecie&gt;=Trzymaj wyjdzie z pętli i pójdzie do pętli while(1) i tam już będzie działać w kółko aż do resetu procesora chyba że skorzystamy z goto itp.<br />Ale w takim przypadku jeżeli w głównej pętli jest obsługa przycisków to jak program się zapętli w pętli pierwszej to dopóki nie wróci do głównej pętli to nie zobaczy przycisku.<br />Mirek ma rację z jednym = jestem początkującym i może jeszcze nie wiem co chcę, ale na tych prostych przykładach chcę poznać tajniki programowania. <br />Więc rozsądne wydaje się wrzucenie tych pętli do pętli While(1).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 21 lis 2013, o 12:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PJS]]></name></author>
<updated>2013-11-21T11:48:14+01:00</updated>
<published>2013-11-21T11:48:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57977#p57977</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57977#p57977"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57977#p57977"><![CDATA[
<div class="quotetitle">iwi napisał(a):</div><div class="quotecontent"><br />a po co jest 10 linijka<br />i = 255;<br />nie bardzo rozumiem jej celowości - przecież będize przy każdym obrocie pętli ustawiało i na 255.<br /></div><br /><br />Której pętli? Bo z tego, co ja widzę to przed pierwszą pętlą i jest zerowane, a przed drugą ustawiane na 255. Te inicjalizacje są poza pętlami.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1614">PJS</a> — 21 lis 2013, o 11:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-11-21T10:55:01+01:00</updated>
<published>2013-11-21T10:55:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57970#p57970</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57970#p57970"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57970#p57970"><![CDATA[
Posłuchaj - ja nie wiem co ty chciałeś na końcu uzyskać i ci nie napiszę gotowego programu nie znając założeń ....<br /><br />pokazałem ci mniej więcej drogę, jeden z tysiąca sposobów jak można podejść do realizacji twojego zadania<br /><br />i troszkę coś krębasisz pisząc że nie rozumiesz jej celowości - a nie wiszisz funkcji break ? bo jeśli wystąpi to chyba i nie osiągnie 255 <br /><br />z drugiej strony kto to może wiedzieć co i w jaki sposób ty potrzebujesz bo też tego jak na razie nie potrafisz jasno opisać <br /><br />ja ci podałem tylko alternatywę dla tych dwóch twoich nieszczęsnych pętli for ... a to w jaki sposób ty je wykorzystujesz ? Ba! czy w ogóle je prawidłowo wykorzystujesz do realizacji swojego tam wyższego celu to już CAŁKIEM inna sprawa i z tego co teraz piszesz - to pewnie i na tym wyższym etapie masz pokręcone w założeniach <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lis 2013, o 10:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-11-21T10:08:32+01:00</updated>
<published>2013-11-21T10:08:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57960#p57960</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57960#p57960"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57960#p57960"><![CDATA[
a po co jest 10 linijka<br />i = 255;<br />nie bardzo rozumiem jej celowości - przecież będize przy każdym obrocie pętli ustawiało i na 255.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 21 lis 2013, o 10:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-11-21T10:03:07+01:00</updated>
<published>2013-11-21T10:03:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57959#p57959</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57959#p57959"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57959#p57959"><![CDATA[
[syntax=c]uint8_t i=0;<br /><br />while( Napiecie&gt;=Trzymaj ) {<br />   i++;<br />   OCR1A = i;<br />   if( 255 == i ) break; // przerywamy bo i tak więcej nie wlezie<br />}<br /><br /><br />i = 255;<br />while( Napiecie&lt;Trzymaj ) {<br />   i--;<br />   OCR1A = i;<br />   if( 0 == i ) break;  // przerywamy bo się zmienna przekręci na 255<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lis 2013, o 10:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-11-21T10:04:22+01:00</updated>
<published>2013-11-21T09:53:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57957#p57957</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57957#p57957"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57957#p57957"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />poczekaj poczekaj - masz bluebooka ?<br /></div><br />mam - tylko nie przy sobie - zostawiłem w firmie i będę miał po weekendzie a nie ukrywam, że bez książki działam po omacku, a na necie jest mnóstwo przykładów z których nic nie wynika.<br /><br />Tak jak napisałem - ta funkcja z IF mi działa. Tylko chce zamienić te 20 linijek kodu na jedną (może dwie) czytelną.<br />Jeżeli zapiszę tak to w chwili kiedy i=0 oraz i=255 wyrażenie ORC1A=i nie dziadziała<br />[syntax=c]for(i=0;i&lt;255 &amp;&amp; (Napiecie&gt;=Trzymaj); i++) OCR1A=i;<br />for(i=0;i&gt;0 &amp;&amp; (Napiecie&lt;Trzymaj); i--) OCR1A=i;[/syntax]<br /><br />natomiast jeżeli tak<br />[syntax=c]for(i=0;i&lt;=255 &amp;&amp; (Napiecie&gt;=Trzymaj); i++) OCR1A=i;<br />for(i=0;i&gt;=0 &amp;&amp; (Napiecie&lt;Trzymaj); i--) OCR1A=i;[/syntax]<br />to będzie przechodziło po dojściu do zera na 255 i tak w kółko.<br /><br />Jak zrobić warunek, żeby i się zwiększał, ale tylko do 255 oraz zmniejszał ale tylko do 0<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 21 lis 2013, o 09:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-11-21T09:45:50+01:00</updated>
<published>2013-11-21T09:45:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57954#p57954</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57954#p57954"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57954#p57954"><![CDATA[
iwi ----&gt; to nie jest tak w języku programowania że pewne mechanizmy w nim będą działać tak - jak ty akurat to sobie w danej chwili wyobrazisz i dopiszesz swoją teorię - bo tak to troszkę teraz wygląda <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />ale może też ten przecinek po inicjalizacji zmiennej i, to u ciebie tylko literówka ? - tu musiałby być średnik<br /><br />poza tym pomyśl masz tam wtedy w warunku pętli &amp;&amp; czyli co się stanie gdy napięci będzie &lt; trzymaj ? <br /><br />poza jak chcesz żeby działała pierwsza pętla skoro inicjalizujesz i=0 a potem w pętli dekrementujesz to i. Przecież to się kupy nie trzyma <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> Jeśli i jest zmienną np uint8_t to się przekręci na 255 i cała pętla poleci w dół z i a jest też szansa że znowu się przekręci)<br /><br />totalnie do góry nogami wszystko a nie tylko pytanie co w sytuacji gdy dojdzie do 0 lub 255<br /><br />napisz może najpierw czy w ogóle rozumiesz do końca jak działa pętla for ? i co to są typy zmiennych - żeby można było wiedzieć jak ci pomóc bo z pytania wynika że jesteś z tym na razie mocno na bakier i raczej na naukę tego powinieneś zwrócić uwagę. Jakieś proste ćwiczenia na pętlę for sobie porobić - potestować jak ona działa itp ... a jak coś będzie niejasne to dopytać koniecznie.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br /><div class="quotetitle">iwi napisał(a):</div><div class="quotecontent"><br />Oblicza wyrażenie_1.<br />Oblicza wyrażenie_2.<br />Jeśli wartość liczbowa wyrażenia_2 jest różna od zera (wartość logiczna PRAWDA), wykonuje instrukcję w pętli i przechodzi do punktu 4; w przeciwnym przypadku działanie instrukcji pętli jest zakończone.<br />Oblicza wyrażenie_3 i przechodzi do punktu 2.<br />Na przykład, jeśli jest potrzeba, żeby jakiś fragment kodu wykonał się określoną ilość razy, można wtedy zbudować pętlę z użyciem instrukcji for.<br />z której nijak nie wynika co to jest Oblicza wyrażenie_1<br /></div><br /><br />poczekaj poczekaj - masz bluebooka ?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br />a pytam bo u mnie w bluebooku rozdział na temat pętli for zaczyna się tak:<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />for( init; wyrażenie_warunkowe; krok) treść_pętli;<br /></div><br /><br />więc nie wiem gdzie , co i jak czytałeś o tej pętli ....<br /><br />owszem init to też wyrażenie - no ale warto sięgnąć do takiego opisu gdzie to jest solidnie pokazane co i jak<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lis 2013, o 09:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-11-21T09:47:34+01:00</updated>
<published>2013-11-21T09:37:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57952#p57952</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57952#p57952"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57952#p57952"><![CDATA[
chyba, że tak to zapisać<br />Jeżeli napięcie jest większe od napięcia wzorcowego (Trzymaj) to zmniejszaj PWM aż do 0<br />[syntax=c]for(i=0,i&gt;0 &amp;&amp; (Napiecie&gt;=Trzymaj); i++) OCR1A=i;[/syntax]<br />Jeżeli napięcie jest mniejsze od napięcia wzorcowego (Trzymaj) to zwiększaj PWM aż do 255<br />[syntax=c]for(i=0,i&lt;255 &amp;&amp; (Napiecie&lt;Trzymaj); i--) OCR1A=i;[/syntax]<br />tylko co w sytuacji aż i dojdzie do 0 lub 255?<br />Czy się zatrzyma na krańcach przedziału?wzorcowego?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 5 minutach ]</span></strong><br /><br />Masz rację Mirku. Nie rozumiem i próbuję to rozgryźć.<br />Znalazłem taką instrukcję:<br />Instrukcja for ma postać:<br /><br />for(wyrażenie_1; wyrażenie_2; wyrażenie_3) instrukcja_w_pętli;<br /><br />/* LUB  */<br /><br />for(wyrażenie_1; wyrażenie_2; wyrażenie_3)<br />{   <br />  /* Instrukcje wykonywane w pętli */<br />}<br />I działa w następujący sposób:<br /><br />Oblicza wyrażenie_1.<br />Oblicza wyrażenie_2.<br />Jeśli wartość liczbowa wyrażenia_2 jest różna od zera (wartość logiczna PRAWDA), wykonuje instrukcję w pętli i przechodzi do punktu 4; w przeciwnym przypadku działanie instrukcji pętli jest zakończone.<br />Oblicza wyrażenie_3 i przechodzi do punktu 2.<br />Na przykład, jeśli jest potrzeba, żeby jakiś fragment kodu wykonał się określoną ilość razy, można wtedy zbudować pętlę z użyciem instrukcji for.<br />z której nijak nie wynika co to jest Oblicza wyrażenie_1<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 21 lis 2013, o 09:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-11-21T09:30:18+01:00</updated>
<published>2013-11-21T09:30:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57950#p57950</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57950#p57950"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57950#p57950"><![CDATA[
<div class="quotetitle">iwi napisał(a):</div><div class="quotecontent"><br />ale w ogóle nie działa<br /></div><br /><br />ale jak może działać ? <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> kolega nie rozumie za bardzo jak w ogóle działa pętla <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />na początku pętli jest inicjalizacja zmiennej a nie warunek więc co tam robią warunki<br /><br />i&gt;=0<br /><br />albo <br /><br />i&lt;=255<br /><br />to totalne nieporozumienie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lis 2013, o 09:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-11-21T09:25:36+01:00</updated>
<published>2013-11-21T09:25:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57948#p57948</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57948#p57948"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57948#p57948"><![CDATA[
no jak zauważysz to tak jest napisane<br />z tym, że jeżeli napięcie nie zrówna się a zmienna i dojdzie do granicy uint8_t to zaczyna odliczać od nowa. więc przez pewien czas będzie PWM większe.<br />Dlatego dołożyłem te 2 dodatkowe warunki.<br /><br />Ale myślę nad funkcją for<br />for(wyrażenie_1; wyrażenie_2; wyrażenie_3)<br />{   <br />  /* Instrukcje wykonywane w pętli */<br />}<br />ale w ogóle nie działa<br />[syntax=c]for (i&gt;=0; Napiecie&gt;Trzymaj; i--) OCR1A = i;<br />for (i&lt;=255; Napiecie&lt;Trzymaj; i++) OCR1A = i;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 21 lis 2013, o 09:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matekogon]]></name></author>
<updated>2013-11-21T08:22:58+01:00</updated>
<published>2013-11-21T08:22:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57941#p57941</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57941#p57941"/>
<title type="html"><![CDATA[Re: Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57941#p57941"><![CDATA[
Kolego ja bym to napisał tak:<br />[syntax=c]if napiecie&gt;napiecie1 <br />to zwieksz pwm<br />napiecie1=napiecie<br />koniec if<br /><br />a drugi przypadek <br /><br />if napiecie&lt;napiecie1 <br />to zmniejsz pwm<br />napiecie1=napiecie<br />koniec if[/syntax]<br /><br />Sory za język C bo jeszcze go nie umiem więc tylko tak poglądowo piszę<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1380">matekogon</a> — 21 lis 2013, o 08:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-11-21T00:47:15+01:00</updated>
<published>2013-11-21T00:47:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57929#p57929</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57929#p57929"/>
<title type="html"><![CDATA[Odliczanie od 1 do 255 w pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4862&amp;p=57929#p57929"><![CDATA[
Witajcie.<br /><br />Napisałem prosty kod i nie działa tak jak chce. <br />Czyli ogólnie PWM ma zwiększać wypełnienie jeżeli zmienna Napiecie &gt; Trzymaj a PWM ma zmniejszać wypełnienie kiedy Napiecie &lt; Trzymaj<br />W przypadku zrównania Napiecie == Trzymaj wypełnienie ma się nie zmieniać.<br /><br />tutaj cały kod.<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 19-11-2013<br /> *      Atmega8A 8MHz<br /> */<br /><br /><br />// Podpinamy biblioteki<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />// Podpinamy własne biblioteki<br />#include &quot;MYUART/myuart.h&quot;<br />#include &quot;MK_TERMINAL/mk_term.h&quot;<br /><br />//Definicje<br />#define LED1 (1&lt;&lt;PD7)<br />#define LED2 (1&lt;&lt;PB0)<br />#define LED3 (1&lt;&lt;PB1)<br />#define LED4 (1&lt;&lt;PB2)<br />#define KEY1 (1&lt;&lt;PD6)<br />uint8_t key_lock;<br />uint8_t Timer1=254;<br />uint8_t Napiecie = 0;<br />uint8_t Trzymaj = 100;<br /><br />int main (void) {<br /> PORTD |= KEY1;  // podciągamy linie klawiszy do VCC<br /> DDRD |= LED1;   // pin LED1 jako Wyjście<br /> DDRB |= LED2 | LED3 | LED4;   // pin LED2-4 jako Wyjście<br />//************************* INIZJALIZACJA UART ********************************<br />uart_init( __UBRR );<br /><br />//*****PWM***********************<br />  // Fast PWM mode (14), patrz str. 89  atmega8 datasheet<br />  volatile uint8_t i;<br />   ICR1  = 255;<br />   OCR1A = 0;<br />   OCR1B = 0;<br />   // Fast PWM mode (14), patrz str. 89  atmega8 datasheet<br />   TCCR1A=(1&lt;&lt;COM1A1)|(1&lt;&lt;COM1B1)|(1&lt;&lt;WGM11);<br />   TCCR1B=(1&lt;&lt;WGM13)|(1&lt;WGM12)|(1&lt;&lt;CS10);<br />//Koniec PWM<br /><br />tr_cls(0);<br />_delay_ms( 100 );<br />tr_cls(1);<br />tr_locate(0,3);<br />tr_attr(1,YELLOW,BLACK);<br />uart_puts( &quot;ATmega8 &quot;);<br />sei();<br />//***************PĘTLA GŁÓWNA<br />while(1) {<br />if (Napiecie &gt; Trzymaj ) {<br />i++;<br />    OCR1A=i;<br />tr_locate(10,3);<br />tr_attr(1,BLACK,YELLOW);<br />uart_putlong(i, 10);<br />uart_puts(&quot;   ROSNIJ&quot;);<br />}<br />if (Napiecie &lt; Trzymaj ) {<br />i--;<br />    OCR1A=i;<br />tr_locate(10,3);<br />tr_attr(1,BLACK,YELLOW);<br />uart_putlong(i, 10);<br />uart_puts(&quot;   MALEJ&quot;);<br /><br />}<br /><br />if (Napiecie == Trzymaj) {<br />tr_locate(10,3);<br />tr_attr(1,BLACK,YELLOW);<br />uart_putlong(i, 10);<br />uart_puts(&quot;   DOSZEDŁEM&quot;);<br />}<br /> if( !key_lock &amp;&amp; !(PIND &amp; KEY1 ) ) {<br />  key_lock=254;<br />  Napiecie = Napiecie + 20;<br /><br />  // reakcja na PRESS (wcinięcie przycisku)<br />  PORTB ^= LED2;<br />  //tr_cls(50);<br />  tr_locate(5,3);<br />  tr_attr(1,WHITE,BLACK);<br />  uart_puts(&quot;Nacisnieto KEY1&quot;);<br /><br /> } else if( key_lock &amp;&amp; (PIND &amp; KEY1 ) ) {<br /> key_lock++;<br />    }<br />  tr_locate(6,3);<br /> uart_putlong(key_lock, 10);<br /> uart_puts(&quot;   &quot;);<br />  tr_locate(7,3);<br /> uart_putlong(Napiecie, 10);<br /> uart_puts(&quot;   / &quot;);<br /> uart_putlong(Trzymaj, 10);<br /> uart_puts(&quot;   &quot;);<br />  _delay_ms(10);<br />Timer1++;<br />if (!Timer1){<br />PORTD ^= LED1;<br />Timer1=254;<br />}<br />} //Koniec Pętli głownej<br />} //Koniec programu głownego[/syntax]<br /><br />można co prawda dodać 2 warunki, ale to nie jest elegancko - nie da się tego prościej napisać?<br />Tak działa<br />[syntax=c]if (Napiecie &gt; Trzymaj &amp;&amp; i &lt;255) {<br />i++;<br />    OCR1A=i;<br />tr_locate(10,3);<br />tr_attr(1,BLACK,YELLOW);<br />uart_putlong(i, 10);<br />uart_puts(&quot;   ROSNIJ&quot;);<br />}<br />if (Napiecie &gt; Trzymaj &amp;&amp; i == 255) {<br />OCR1A=i;<br />tr_locate(10,3);<br />tr_attr(1,BLACK,YELLOW);<br />uart_putlong(i, 10);<br />uart_puts(&quot;   ROSNIJ&quot;);<br />}<br />if (Napiecie &lt; Trzymaj &amp;&amp; i &gt; 0) {<br />i--;<br />    OCR1A=i;<br />tr_locate(10,3);<br />tr_attr(1,BLACK,YELLOW);<br />uart_putlong(i, 10);<br />uart_puts(&quot;   MALEJ&quot;);<br /><br />}<br />if (Napiecie &lt; Trzymaj &amp;&amp; i == 0) {<br />OCR1A=i;<br />tr_locate(10,3);<br />tr_attr(1,BLACK,YELLOW);<br />uart_putlong(i, 10);<br />uart_puts(&quot;   ZERO&quot;);<br /><br />}<br /><br />if (Napiecie == Trzymaj) {<br />tr_locate(10,3);<br />tr_attr(1,BLACK,YELLOW);<br />uart_putlong(i, 10);<br />uart_puts(&quot;   DOSZEDŁEM&quot;);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 21 lis 2013, o 00:47</p><hr />
]]></content>
</entry>
</feed>