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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-03-28T00:32:08+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=6531&amp;mode</id>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2014-03-28T00:32:08+01:00</updated>
<published>2014-03-28T00:32:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6531&amp;p=76106#p76106</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6531&amp;p=76106#p76106"/>
<title type="html"><![CDATA[Re: Start programu po naciśnięciu przycisku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6531&amp;p=76106#p76106"><![CDATA[
tak właśnie myślałem i nawet jak dałem 3 pętle while jedna po drugiej to też działa poprawnie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> i o to chodzi.<br />Projekt zakończony - teraz zmontowac i wmontować.<br />Dzięki<br />Miłej nocy - ja mogę teraz spokojnie zasnąć - nie będą mi się śniły pętle.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 28 mar 2014, o 00:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-03-28T00:29:40+01:00</updated>
<published>2014-03-28T00:29:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6531&amp;p=76105#p76105</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6531&amp;p=76105#p76105"/>
<title type="html"><![CDATA[Re: Start programu po naciśnięciu przycisku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6531&amp;p=76105#p76105"><![CDATA[
Wcale nie dziwne, że tak ci działa.<br />Program  &quot;kręci się&quot; w wewnętrznej pętli while. Wciskasz przycisk i warunek if w linii 4 zostaje spełniony i po instrukcji <strong>break</strong> w linii 8 program opuszcza tą pętlę while. Potem w linii 13 znów jest sprawdzany if. A ty wciąż trzymasz przycisk wciśnięty więc ten warunek jest też spełniony przez co wykona się <strong>break</strong> w linii 17. I tym sposobem program przechodzi do pętli głównej while.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 28 mar 2014, o 00:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2014-03-28T00:29:49+01:00</updated>
<published>2014-03-27T23:44:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6531&amp;p=76099#p76099</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6531&amp;p=76099#p76099"/>
<title type="html"><![CDATA[Re: Start programu po naciśnięciu przycisku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6531&amp;p=76099#p76099"><![CDATA[
Może to nie najładniej, ale teraz działa jak powinno:<br />Ale czegoś nie rozumiem jeszcze.<br /><br />Dałem na początek oczekiwanie 30 sekund żeby nie robił program zupełnie nic (ale żeby się dało go przerwać) potem po 30 sek jeśli nic nie naciśniemy przechodzi do pętli pierwszej while(1) i miga nam diodą cały czas aż naciśniemy przycisk.<br />Ale nie rozumiem dlaczego po naciśnięciu przycisku w czasie bezczynności (pierwsze 30 sek) wychodzi do pętli głównej od razu - czyli wychodzi z obu while?<br /><br />Cieszę się, że tak działa, ale zastanawiam się dlaczego - czyżby dlatego, że on nie traktuje tego mojego naciśnięcia jako pojedynczy impuls tylko jako kilka impulsów i pierwszy wychodzi z pętli oczekującej a drugi z pętli migającej??<br /><br />[syntax=c]//pętla oczekująca<br />while(1) {<br />if (j &gt; 30) break;<br />if (!(PINB &amp; KEY)) {<br /> break;<br />}<br />}<br />//pętla migająca<br />while(1) {<br />m = j % 8;<br />if (m == 0) PORTB &amp;= ~LED_PIN1;<br />if (!(PINB &amp; KEY)) {<br /> PORTB |= LED_PIN1; //gasi diode 1<br /> PORTB |= LED_PIN2; //gasi diode 2<br /> j=0;<br /> break;<br />}<br />if (m == 2) PORTB |= LED_PIN1;<br />if (!(PINB &amp; KEY)) {<br /> PORTB |= LED_PIN1; //gasi diode 1<br /> PORTB |= LED_PIN2; //gasi diode 2<br /> j=0;<br /> break;<br />}<br />if (m == 4) PORTB &amp;= ~LED_PIN2;<br />if (!(PINB &amp; KEY)) {<br /> PORTB |= LED_PIN1; //gasi diode 1<br /> PORTB |= LED_PIN2; //gasi diode 2<br /> j=0;<br /> break;<br />}<br />if (m == 6) PORTB |= LED_PIN2;<br />if (!(PINB &amp; KEY)) {<br /> PORTB |= LED_PIN1; //gasi diode 1<br /> PORTB |= LED_PIN2; //gasi diode 2<br /> j=0;<br /> break;<br />}<br />}<br /><br />while(1) { Pętla główna }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 27 mar 2014, o 23:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordo]]></name></author>
<updated>2014-03-27T23:31:34+01:00</updated>
<published>2014-03-27T23:31:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6531&amp;p=76096#p76096</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6531&amp;p=76096#p76096"/>
<title type="html"><![CDATA[Re: Start programu po naciśnięciu przycisku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6531&amp;p=76096#p76096"><![CDATA[
<div class="quotetitle">iwi napisał(a):</div><div class="quotecontent"><br />[syntax=c]#define KEY (1&lt;&lt;PB0)[/syntax]<br /><br />Niestety to mi nie działa - może dlatego, że jest włączony timer sprzętowy i przerwania?? Nie mam pojęcia.<br /></div><br /><br />Podanym wyżej define'm niczego nie odczytujesz. Potrzebujesz czegoś takiego:<br /><br />[syntax=c]if (PINB &amp; (1 &lt;&lt; PB0))  break;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2592">gordo</a> — 27 mar 2014, o 23:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2014-03-27T23:15:58+01:00</updated>
<published>2014-03-27T23:15:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6531&amp;p=76093#p76093</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6531&amp;p=76093#p76093"/>
<title type="html"><![CDATA[Start programu po naciśnięciu przycisku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6531&amp;p=76093#p76093"><![CDATA[
Witajcie.<br />Temat wydaje się prosty - nawet poczytałem sporo na forum i wszystko ładnie opisane, ale mi nie działa. Tzn działa z taką przekombinowaną pętlą, a nie działa prosto.<br /><br />Zasada prsta. Po podpięciu zasilania program ma wykonywać jakiś podprogram, a po naciśnięciu przycisku ma wykonać program główny.<br /><br />Na necie na pierwszym miejscu wyskakuje<br />[syntax=c]#define KEY (1&lt;&lt;PB0)<br />while(KEY)<br />{<br />    //Podprogram<br />}<br />while(1)<br />{<br />    //Program główny<br />}[/syntax]<br /><br />Niestety to mi nie działa - może dlatego, że jest włączony timer sprzętowy i przerwania?? Nie mam pojęcia.<br /><br /><br />[syntax=c]while(1) {<br />l = j % 4;<br />if (l == 0) PORTB &amp;= ~LED_PIN1;<br />if (l == 1) PORTB |= LED_PIN1;<br />if (l == 2) PORTB &amp;= ~LED_PIN2;<br />if (l == 3) PORTB |= LED_PIN2;<br />if (KEY) break;<br />}<br /><br />while(1) {[/syntax]<br />wcześniej l jest zdefiniowane jako zmienna uint8_t a j jest co 1/2sek iterowana w timerze sprzętowym.<br />[syntax=c]ISR (TIM0_COMPA_vect) {<br />i++;<br />if (i==90) {<br />j++;<br />}<br />}[/syntax]<br /><br />a cała program wygląda tak (nie zamieszczałem definicji, ale z tym chyba nie ma problemów a szkoda zaśmiecać<br />[syntax=c]while(KEY) {<br />PORTB &amp;= ~LED_PIN1;<br />_delay_ms(250);<br />PORTB |= LED_PIN1;<br />_delay_ms(250);<br />PORTB &amp;= ~LED_PIN2;<br />_delay_ms(250);<br />PORTB |= LED_PIN2;<br />_delay_ms(250);<br />}<br /><br />while(1) {<br /><br />if( !key_lock1 &amp;&amp; !(PINB &amp; KEY_PIN1 ) &amp;&amp; (t1 &gt; 6) ) {<br />     key_lock1 = 1;<br />      // reakcja na PRESS (wcinięcie przycisku)<br />         PORTB &amp;= ~LED_PIN1;<br />         j=0;<br />         t1=0;<br />         t2=7;<br />         k=6;<br />      } else if( key_lock1 &amp;&amp; (PINB &amp; KEY_PIN1 ) ) key_lock1++;<br /><br />     if( !key_lock2 &amp;&amp; !(PINB &amp; KEY_PIN2 ) &amp;&amp; (t2 &gt; 6) ) {<br />         key_lock2 = 1;<br />          // reakcja na PRESS (wcinięcie przycisku)<br />         PORTB &amp;= ~LED_PIN2;<br />         k=0;<br />         t2=0;<br />         t1=7;<br />         j=6;<br />          } else if( key_lock2 &amp;&amp; (PINB &amp; KEY_PIN2 ) ) key_lock2++;<br />     if (j == 6) {<br />     PORTB |= LED_PIN1;<br />      }<br />     if (k == 6) {<br />         PORTB |= LED_PIN2;<br />         }<br />     if (t1 == 255) t1 = 7;<br />     if (t2 == 255) t2 = 7;<br />        }<br />}<br />// ===== obsługa przerwanie 20 Hz =====<br />ISR (TIM0_COMPA_vect) {<br />i++;<br />if (i==90) {<br />j++;<br />k++;<br />t1++;<br />t2++;<br />i=0;<br />}<br />}[/syntax]<br /><br />Teraz działa tylko pierwsza pętla while (nie przerywa się po naciśnięciu klawisza.<br />A ma być tak, że po jednorazowym naciśnięciu klawisza przechodzi do pętli głównej while(1) i już o pierwszej pętli zapomina do następnego resetu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 27 mar 2014, o 23:15</p><hr />
]]></content>
</entry>
</feed>