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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-02-14T20:52:23+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=6005&amp;mode</id>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-02-14T20:52:23+01:00</updated>
<published>2014-02-14T20:52:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6005&amp;p=70493#p70493</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6005&amp;p=70493#p70493"/>
<title type="html"><![CDATA[Re: Kolejna zagwozdka z przyciskami...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6005&amp;p=70493#p70493"><![CDATA[
Klkłem już wcześniej pomógł, ale coś z forum się dziwnego czasem dzieje i wyskoczył mi jakiś błąd bazy danych czy coś... Od rana siedziałem nad algorytmami nowego sterownika (akurat nie miały nic wspólnego z tym tematem - to wyszło przez przypadek jak jedną z funkcji chciałem przetestować <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ) i chyba glaca mi się przegrzała <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Taki powiew informacji od kogoś z zewnątrz troszkę naprowadził lokomotywę na właściwe tory, a to znak, że na dziś trza kończyć i napić się piwa <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 14 lut 2014, o 20:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-02-14T20:25:41+01:00</updated>
<published>2014-02-14T20:25:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6005&amp;p=70491#p70491</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6005&amp;p=70491#p70491"/>
<title type="html"><![CDATA[Re: Kolejna zagwozdka z przyciskami...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6005&amp;p=70491#p70491"><![CDATA[
Faktycznie mój przykład nie zadziała. Pisałem go na szybkiego i do końca wszystkiego nie przemyślałem.<br /><br />Ale cieszę się, że mój post choć w małym stopniu przyczynił się do rozwiązania problemu <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> — 14 lut 2014, o 20:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-02-14T18:59:20+01:00</updated>
<published>2014-02-14T18:59:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6005&amp;p=70477#p70477</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6005&amp;p=70477#p70477"/>
<title type="html"><![CDATA[Re: Kolejna zagwozdka z przyciskami...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6005&amp;p=70477#p70477"><![CDATA[
Niestety taki zapis nic nie poprawi i drugi warunek nigdy nie będzie spełniony, bo t2 ciągle jest odświeżane linijkę wcześniej. To, że reaguje od razu jak piszesz, to mi w sumie nie przeszkadza choć warto na to zwrócić uwagę, bo takie rozwiązanie jest bardziej podatne na zewnętrzne czynniki, zakłócenia, itp.). Dałeś mi jednak do myślenia co do samego algorytmu... coś sobie muszę jeszcze przetestować <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 22 minutach ]</span></strong><br /><br />Aż zajrzałem w swe bascomowe zbiory do programu pozycjonera gdzie badałem krańcówki i okazało się, że licznik odpowiedzialny za opóźnienie odświeżałem kiedy nie było sygnału z zewnątrz (czyli wciśniętego przycisku w tym przypadku) <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><br />[syntax=c]if (!(PINB&amp;(1&lt;&lt;PB1))){<br />if (!(PINB&amp;(1&lt;&lt;PB1)) &amp;&amp; !t2){<br />if(z_key){<br />z_key=0;<br />kier^=1;<br />}<br />}<br />}else{<br />z_key=1;<br />t2=200;<br />}[/syntax]<br /><br />No i w powyższej wersji oczywiście wszystko działa czyli po wciśnięciu klawisza docelowe instrukcje wykonają się tylko raz. Podejrzewam, że właśnie drgania styków były brane pod uwagę i pierwsze wciśnięcie natychmiast robiło XOR mojej zmiennej, a po 20 ms jeśli klawisz nadal wciśnięty to XOR wykonywał się drugi raz. Zmienna blokująca z_key w takim razie musiała dostać jedynkę przy jakimś drganiu praktycznie już w drugim obiegu, bo inaczej nie pozwoliła by na ponowne spełnienie warunku. Cała tajemnica... <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 14 lut 2014, o 18:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-02-14T19:01:56+01:00</updated>
<published>2014-02-14T18:21:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6005&amp;p=70476#p70476</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6005&amp;p=70476#p70476"/>
<title type="html"><![CDATA[Re: Kolejna zagwozdka z przyciskami...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6005&amp;p=70476#p70476"><![CDATA[
W twoim przypadku oby dwa warunki sprawdzające stan pinu będą sprawdzone od razu.<br />Jeśli przycisk będzie wciśnięty to wykona się warunek w linii nr 1.<br />Następnie warunek w linii nr 2 bo zmienna t2 będzie równa zeru.<br />Do t2 zostanie wpisana wartość 200.<br />Następnie program przejdzie do sprawdzenia warunku w linii nr 4, który też się wykona bo przycisk nadal jest wciśnięty. I cała reszta też się wykona.<br />Aby drugie sprawdzenie przycisku nastąpiło dopiero po 20ms spróbuj może zrobić tak<br />[syntax=c]if (!(PINB &amp; (1&lt;&lt;PB1)))<br />{<br />t2=200;     //20ms<br />if ( !(PINB &amp; (1&lt;&lt;PB1)) &amp;&amp; !t2 )<br />{<br />if(z_key)<br />{<br />z_key=0;<br />kier^=1;<br />}<br />}<br />  <br />}else<br />{<br />    z_key=1;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 14 lut 2014, o 18:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-02-14T17:29:30+01:00</updated>
<published>2014-02-14T17:29:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6005&amp;p=70470#p70470</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6005&amp;p=70470#p70470"/>
<title type="html"><![CDATA[Kolejna zagwozdka z przyciskami...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6005&amp;p=70470#p70470"><![CDATA[
I znowu natknąłem się przez przypadek na coś co mi spokoju nie daje, a mam już ciemnicę i kompletnie nie wiem o co biega. Oto fragment programu odpowiedzialny za zwykłe (jedno z popularniejszych tyle, że zamiast delay użyty jest timer programowy) badanie przycisku. Generalnie to nie będzie przycisk i przygotowywałem się do zupełnie czegoś innego, ale o co chodzi... ?? A no o to, że kiedy wciskam przycisk i trzymam go to zmienna <strong>kier</strong> zmieni swój stan na przeciwny ale po 20ms wróci z powrotem do stanu przed wciśnięciem wciskadełka(!) Jeśli się wstrzelę w czas między badaniem pinu (czyli muśnięcie krótsze niż 20ms) to wtedy zmienna <strong>kier</strong> zmieni stan na przeciwny tak jak powinna i pozostanie w tym stanie do następnego... muśnięcia, bo przyciśnięcie co prawda blokuje powtórne wykonanie operacji XOR (odpowiada za to zmienna <strong>z_key</strong>), ale przytrzymanie guzika daje efekt opisany już wyżej.<br />Fragment pętli głównej:<br /><br />[syntax=c]if (!(PINB&amp;(1&lt;&lt;PB1))){<br />if (!t2){<br />t2=200; //20ms<br />if (!(PINB&amp;(1&lt;&lt;PB1))){<br />if(z_key){<br />z_key=0;<br />kier^=1;<br />}<br />}<br />}<br />}else{<br />z_key=1;<br />}<br /><br /><br />PORTD=kier?0x80:0;[/syntax]<br /><br />(kier i z_key to globalne uint8_t)<br /><br />Natomiast kiedy użyłem mojego ulubionego sposobu badania klawisza, który stosuję od czasów bascoma wszystko jest w najlepszym porządku:<br />[syntax=c]if (!(PINB&amp;(1&lt;&lt;PB1))){<br />if (!t2){<br />t2=200; //20ms<br />if (lk&lt;255) lk++;<br />if (lk==2){<br />kier^=1;<br />}<br />}<br /><br />}else{<br />lk=0;<br />}<br />PORTD=kier?0x80:0;[/syntax]<br /><br />No i niech mi ktoś wyjaśni gdzie się walnąłem w programie...<br />I proszę nie piszcie mi &quot;<em>dlaczego nie użyjesz drugiego rozwiązania?</em>&quot;, bo inne rozwiązanie praktycznie każdego problemu to ja zawsze znajdę. Ja chcę zrozumieć filozofię C, żebym w większym projekcie nagle nie zawiesił się na jakimś teoretycznie oczywistym rozwiązaniu jak to, które tu opisuję.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 14 lut 2014, o 17:29</p><hr />
]]></content>
</entry>
</feed>