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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-02-26T22:14:14+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=10812&amp;mode</id>
<entry>
<author><name><![CDATA[Marcin_G]]></name></author>
<updated>2015-02-26T22:14:14+01:00</updated>
<published>2015-02-26T22:14:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121117#p121117</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121117#p121117"/>
<title type="html"><![CDATA[Re: Powrót po długiej przerwie... braki ??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121117#p121117"><![CDATA[
<div class="quotetitle">Ghann napisał(a):</div><div class="quotecontent"><br />... No ale niestety nie działa ten kod z flagami. Diody się zapalają ale po drugim wciśnięciu już nic się nie dzieję. A co to jest ta flaga tak łopatologicznie ??<br /></div><br /><br />Właśnie wgrałem ten kod u siebie, i działa. Co prawda nie idealnie, ale jednak działa.<br /><br />Drobne zmiany i działa tak jak sobie tego życzysz <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Nie będzie to jednak miało nic wspólnego z kodem nieblokującym <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> , no ale do testowania może się przyda.<br /><br />Rozwiązanie które podał kolega <strong>rekon</strong> będzie stokroć lepsze <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />[syntax=c]int main(void){<br /> <br /> <br />  DDRB |= (1&lt;&lt;PB2);   // wyjcia<br />  DDRD |= (1&lt;&lt;PD7);   // wyjcia<br /> <br />  DDRB &amp;= ~(1 &lt;&lt; PB0 | 1 &lt;&lt; PB1) // wejścia<br />  PORTB |= (1&lt;&lt;PB0) | (1&lt;&lt;PB1);  // podciągnięcie vcc<br /> <br />  uint8_t x = 0;   // &quot;flaga&quot;<br /> <br />  while(1){<br /> <br />  if (!(PINB &amp; (1&lt;&lt;PB1)) &amp;&amp; x == 0){<br />     PORTD |= (1&lt;&lt;PD7);<br />     x = 1;<br />    _delay_ms(300);<br />  }<br /> <br />  if (!(PINB &amp; (1&lt;&lt;PB1)) &amp;&amp; x == 1 ){<br />     PORTD &amp;= ~(1&lt;&lt;PD7);<br />     x = 0;<br />     _delay_ms(300);<br />  }<br /> }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=758">Marcin_G</a> — 26 lut 2015, o 22:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rekon]]></name></author>
<updated>2015-02-26T19:59:38+01:00</updated>
<published>2015-02-26T19:59:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121079#p121079</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121079#p121079"/>
<title type="html"><![CDATA[Re: Powrót po długiej przerwie... braki ??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121079#p121079"><![CDATA[
flaga to jest takie ustrojstwo które informuje o czymś ...<br />zwykle flaga ma 2 stany - włączony, wyłączony czy też aktywny, nieaktywny więc często jest to robione jako zmienna boolean (w języku C inicjalizowana przez skrót bool z biblioteki stdbool.h)<br />co można tam sobie zapisać? co tylko chcesz a z natury jest dualne czyli właśnie np poprzedni stan diody albo czy wielki zderzać hadronów zniszczył już ziemię (polecam stronę <!-- m --><a class="postlink" href="http://hasthelargehadroncolliderdestroyedtheworldyet.com/" >http://hasthelargehadroncolliderdestroy ... ldyet.com/</a><!-- m -->). <br />Flagi przydają się np. przy robieniu programowego zbocza (narastającego/opadającego) czyli zapisujesz sobie poprzedni stan sygnału i jeśli jest on różny od obecnego stanu to znaczy ze wydarzyło się zbocze <br />[syntax=c]bool obecny_stan, poprzedni_stan;<br />while(1){<br />obecny_stan = PINB &amp; (1&lt;&lt;PB1);<br />if(obecny_stan != poprzedni_stan){<br />    //tutaj robimy to co mamy zrobić na zboczu<br />}<br />poprzedni_stan = obecny_stan; // zapisujemy poprzedni stan dla następnej iteracji<br />}[/syntax]<br />i dzięki tak skonstruowanemu warunkowi będziesz wykrywał moment wciśnięcia przycisku (oraz wszystkie ew. drgania zestyków) oraz moment puszczenia<br /><br />to np jest wykorzystanie flagi (flagą jest poprzedni stan) <br />flaga to jest po prostu zapis jakiegoś wydarzenia itp.<br />Nie potrafię tego lepiej wytłumaczyć - z tym tematem jest tak że jak się nie wie co to jest to wydaje się to wiedzą tajemną a w momencie jak już pojmiesz zasady wykorzystywania tego to nie będziesz widział w tym nic niesamowitego - flagi to flagi i już ;P<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7932">rekon</a> — 26 lut 2015, o 19:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ghann]]></name></author>
<updated>2015-02-26T19:15:03+01:00</updated>
<published>2015-02-26T19:15:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121069#p121069</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121069#p121069"/>
<title type="html"><![CDATA[Re: Powrót po długiej przerwie... braki ??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121069#p121069"><![CDATA[
No tak suma modulo 2 działa bez zarzutu. Ale bardziej interesują mnie flagi, gdyż można to wykorzystać w dalszych projektach, a mam takie w planach. Mianowicie żeby móc jednym przyciskiem obsługiwać kilka funkcji.<br /><br />No ale niestety nie działa ten kod z flagami. Diody się zapalają ale po drugim wciśnięciu już nic się nie dzieję. A co to jest ta flaga tak łopatologicznie ??<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6944">Ghann</a> — 26 lut 2015, o 19:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rekon]]></name></author>
<updated>2015-02-26T15:01:14+01:00</updated>
<published>2015-02-26T15:01:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121035#p121035</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121035#p121035"/>
<title type="html"><![CDATA[Re: Powrót po długiej przerwie... braki ??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121035#p121035"><![CDATA[
wystarczy po wciśnięciu przycisku zrobić zamiast sumy logicznej (zwanej też alternatywą) OR alternatywę wykluczającą czyli XOR znaczek tej operacji to ^<br /><br />(a ja nie będę pisał Ci kodu bo to nie ma sensu <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=7932">rekon</a> — 26 lut 2015, o 15:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marcin_G]]></name></author>
<updated>2015-02-26T14:56:50+01:00</updated>
<published>2015-02-26T14:56:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121034#p121034</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121034#p121034"/>
<title type="html"><![CDATA[Re: Powrót po długiej przerwie... braki ??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121034#p121034"><![CDATA[
Możesz to zrobić na przykład za pomocą &quot;flagi&quot;. Powołujesz przed pętlą główną, dodatkową zmienną która będzie pełnić rolę flagi, i wykorzystujesz ją w warunku z przyciskiem. <br />[syntax=c]int main(void){<br /> <br /> <br />  DDRB |= (1&lt;&lt;PB2);   // wyjcia<br />  DDRD |= (1&lt;&lt;PD7);   // wyjcia<br /> <br /> <br />  PORTB |= (1&lt;&lt;PB0) | (1&lt;&lt;PB1);  // podciągnięcie vcc<br /> <br />  uint8_t x = 0;   // &quot;flaga&quot;<br /> <br />  while(1){<br /><br />  if (!(PINB &amp; (1&lt;&lt;PB1)) &amp;&amp; x == 0){<br />     _delay_ms(30);<br />     PORTD |= (1&lt;&lt;PD7);<br />     x = 1; <br />  }<br />  <br />  if (!(PINB &amp; (1&lt;&lt;PB1)) &amp;&amp; x == 1 ){<br />     _delay_ms(30);<br />     PORTD &amp;= ~(1&lt;&lt;PD7);<br />     x = 0;<br />  }<br /> }<br />}[/syntax]<br /><br />Tak bym to zrobił ja, początkujący <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />PS.<br />Mam nadzieję że nigdzie się nie walnąłem, piszę na &quot;sucho&quot; <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=758">Marcin_G</a> — 26 lut 2015, o 14:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ghann]]></name></author>
<updated>2015-02-26T14:39:07+01:00</updated>
<published>2015-02-26T14:39:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121032#p121032</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121032#p121032"/>
<title type="html"><![CDATA[Re: Powrót po długiej przerwie... braki ??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=121032#p121032"><![CDATA[
Zapomniałem dodać, że przed przerwą nie byłem zbyt dobrym programistą tylko zwykłym początkującym.<br />Przypomniałem sobie jak obsługiwać przyciski. Napisałem taki program:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/delay.h&gt;<br />#include &quot;lcd44780.h&quot;<br /><br /><br />int main(void){<br /><br /><br />    DDRB |= (1&lt;&lt;PB2);   // wyjcia<br />    DDRD |= (1&lt;&lt;PD7);   // wyjcia<br /><br /><br />    PORTB |= (1&lt;&lt;PB0) | (1&lt;&lt;PB1);  // podciągnięcie vcc<br /><br /><br /><br />    while(1){<br /><br />    {<br />        if (!(PINB &amp; (1&lt;&lt;PB1))){<br />        _delay_ms(30);<br />        PORTD |= (1&lt;&lt;PD7);<br /><br />        }<br />        if (!(PINB &amp; (1&lt;&lt;PB0))){<br />              _delay_ms(30);<br />              PORTB |= (1&lt;&lt;PB2);<br /><br /><br /><br />        }<br />    }<br /><br />    }<br />}[/syntax]<br /><br />Założenie proste, dwa przyciski każdy z nich zapala tą samą diodę. Moje pytanie do Was: Jak zrobić, żeby tym samym przyciskiem wyłączyć daną diodę?? Czyli klikam raz i dioda się zapala, klikam drugi raz i dioda gaśnie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6944">Ghann</a> — 26 lut 2015, o 14:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2015-02-25T14:23:50+01:00</updated>
<published>2015-02-25T14:23:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=120861#p120861</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=120861#p120861"/>
<title type="html"><![CDATA[Re: Powrót po długiej przerwie... braki ??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=120861#p120861"><![CDATA[
Z kodu wynika, że podłączyłeś przycisk do pinu PB0. No i ustawiłeś ten pin jako wyjście w stanie niskim a nie wejście podciągnięte do Vcc.<br /><br />Jeśli już dobrze podłączysz przycisk to program będzie działał w następujący sposób:<br />- bez wciśniętego przycisku dioda będzie migać co 100ms<br />- z wciśniętym przyciskiem jedno mignięcie będzie co 100ms a drugie co 10ms, następne znowu co 100ms itd.<br /><br />Jeśli program miał działać tak, że bez wciśniętego przycisku dioda miała migać co 100ms a z wciśniętym co 10ms to powinieneś zainteresować się instrukcją <strong>else</strong>.<br /><br />Musi sobie kolega dużo podstaw poprzypominać  <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=204">jacekk232</a> — 25 lut 2015, o 14:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-02-25T11:46:16+01:00</updated>
<published>2015-02-25T11:46:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=120842#p120842</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=120842#p120842"/>
<title type="html"><![CDATA[Re: Powrót po długiej przerwie... braki ??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=120842#p120842"><![CDATA[
<div class="quotetitle">Ghann napisał(a):</div><div class="quotecontent"><br />(!(PORTB &amp; (1&lt;PB0)))<br /></div><br />A to jest &quot;najciekawszy&quot; stwór w tym programie - w jednej linii aż kilka błędów ....<br /><br />Posiada kolega Bluebooka?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 lut 2015, o 11:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matw]]></name></author>
<updated>2015-02-25T11:39:33+01:00</updated>
<published>2015-02-25T11:39:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=120839#p120839</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=120839#p120839"/>
<title type="html"><![CDATA[Re: Powrót po długiej przerwie... braki ??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=120839#p120839"><![CDATA[
Co do czasów i rozbieżności w tym zakresie to sprawdź jakie taktowanie ustawiasz w projekcie i porównaj je z rzeczywistym taktowaniem uC.<br /><br />W kwestii obsługi przycisku to nie zastosowałeś żadnej obsługi drgań styków. Polecam lekturę: <!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/10/drgania-stykow-to-bajki-wiec-jak-to.html" >http://mirekk36.blogspot.com/2012/10/dr ... ak-to.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2394">matw</a> — 25 lut 2015, o 11:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ghann]]></name></author>
<updated>2015-02-25T11:33:12+01:00</updated>
<published>2015-02-25T11:33:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=120836#p120836</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=120836#p120836"/>
<title type="html"><![CDATA[Powrót po długiej przerwie... braki ??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10812&amp;p=120836#p120836"><![CDATA[
Witam serdecznie  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Po dość długiej przerwie z uC postanowiłem wrócić gdyż mogę już przeznaczyć na to więcej czasu.<br />Postanowiłem przypomnieć sobie podstawy. Zaczołem od prostej diody LED: <br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/delay.h&gt;<br /><br />int main(void){<br /><br /><br />    DDRB |= (1&lt;&lt;PB1);<br />    DDRB |= (1&lt;&lt;PB0);<br /><br />    while(1){<br /><br /><br />        PORTB |= (1&lt;&lt;PB1);<br />        _delay_ms(100);<br />        PORTB &amp;= ~(1&lt;&lt;PB1);<br />        _delay_ms(100);<br /><br />        if (!(PORTB &amp; (1&lt;PB0))){<br /><br />        PORTB |= (1&lt;&lt;PB1);<br />        _delay_ms(10);<br />        PORTB &amp;= ~(1&lt;&lt;PB1);<br />        _delay_ms(10);<br /><br />        }<br /><br /><br /><br />    }<br />}[/syntax]<br /><br /><br />Na płytce stykowej wszystko dobrze podpięte. Mam pytania i wątpliwości do tego kodu, który napisałem.<br /><br />1. Ustawiłem czas zwłoki między włączeniem a wyłączeniem diody 100ms czyli 0,1 sekundy w rzeczywistośći dioda miga co 1s. Nie spotkałem się z czymś takim jeszcze dlatego tutaj o tym piszę.<br />2. Procedura obsługi klawisza chyba ma jakieś nie dociągnięcie, mianowicie w zasadzie to jest brak reakcji a dioda miga raz o wartość 100 ms a raz o 10 ms i tak w kółko. Gdzie popełniłem błąd?? <br /><br /><br />Jestem pewny, że popełniłem jakieś trywialne błędy których nie potrafię się doszukać. Z góry dziękuję za wskazówki ale i przepraszam za takie błędy. Postanowiłem napisać gdyż męcze się z tym od jakiegoś czasu (od wczoraj). Swój zasób pomysłów co może być źle wykorzystałem.<br /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6944">Ghann</a> — 25 lut 2015, o 11:33</p><hr />
]]></content>
</entry>
</feed>