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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-09-28T23:11:36+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=55&amp;t=1603&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-28T23:11:36+01:00</updated>
<published>2012-09-28T23:11:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16141#p16141</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16141#p16141"/>
<title type="html"><![CDATA[Re: Debouncing - jak to wygląda]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16141#p16141"><![CDATA[
<div class="quotetitle">Stanley napisał(a):</div><div class="quotecontent"><br />Będę w takim razie pisał w tamtym temacie, żeby nie było bałaganu.<br /></div><br /><br />Ok, spróbuj tam napisać coś na nowo ale co ważne opisać dokładnie i w komentarzach też - jak to wg ciebie ma działać linia po linii - wtedy będzie można coś pomóc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 28 wrz 2012, o 23:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Stanley]]></name></author>
<updated>2012-09-28T23:07:09+01:00</updated>
<published>2012-09-28T23:07:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16140#p16140</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16140#p16140"/>
<title type="html"><![CDATA[Re: Debouncing - jak to wygląda]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16140#p16140"><![CDATA[
Będę w takim razie pisał w tamtym temacie, żeby nie było bałaganu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=305">Stanley</a> — 28 wrz 2012, o 23:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-28T23:02:58+01:00</updated>
<published>2012-09-28T23:02:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16139#p16139</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16139#p16139"/>
<title type="html"><![CDATA[Re: Debouncing - jak to wygląda]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16139#p16139"><![CDATA[
jeszcze raz powtarzam ten &quot;licznik&quot; nie jest i nie wykorzystasz go do tego o czym myślisz czyli opóźnienia <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... zapomnij o tym.<br /><br />Z timerem to po prostu zrobiłeś tak cyrkową sztuczkę że mi nawet trudno powiedzieć co źle zrobiłeś bo nie wiem co chciałeś zrobić ?<br /><br />A jeśli na to pytanie miałbyś odpowiedzieć, że chciałeś uzyskać w ten sposób jakieś opóźnienie 2s to - niestety KOSMOS - spróbuj sam to przeanalizować na głos - to się też zapętlisz jak i kompilator. W ogóle nie tędy droga.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 28 wrz 2012, o 23:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Stanley]]></name></author>
<updated>2012-09-28T22:35:01+01:00</updated>
<published>2012-09-28T22:35:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16136#p16136</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16136#p16136"/>
<title type="html"><![CDATA[Re: Debouncing - jak to wygląda]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16136#p16136"><![CDATA[
Aaaaa już rozumiem! Chodziło o ten moment &quot;odbicia przycisku&quot;. Wduszamy -&gt; wbijamy przycisk, później puszczamy -&gt; czyli odbijamy. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Analizowałem funkcję z książki, ale to jest &quot;level-up&quot; moich umiejętności. Może jak przerobię jeszcze parę ćwiczeń warsztatowych, to ją w końcu pojmę.. <br />Czekam, czekam na artykuł na blogu! <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />A jeszcze 2 sprawy pozostały, z tym czasem podczas inkrementowania zmiennej licznik jak to jest? <br />I co ja źle robiłem w tym programie z Timerem1?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=305">Stanley</a> — 28 wrz 2012, o 22:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-28T22:33:15+01:00</updated>
<published>2012-09-28T22:33:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16135#p16135</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16135#p16135"/>
<title type="html"><![CDATA[Re: Debouncing - jak to wygląda]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16135#p16135"><![CDATA[
a to okej <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> — 28 wrz 2012, o 22:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2012-09-28T22:13:45+01:00</updated>
<published>2012-09-28T22:13:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16134#p16134</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16134#p16134"/>
<title type="html"><![CDATA[Re: Debouncing - jak to wygląda]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16134#p16134"><![CDATA[
Nie no dobrze zrozumiałem ....... jest to opóźnienie związane z potrzebą opóźnienia wykonania się funcji ( ja to nie opatrznie określiłem jako drgania styków )<br /><br />Bardzo podobną funkcję sam wykorzystuje tylko że ja akurat zamiast licznika używam &quot;trójstanu&quot; zmiennej ........ <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=225">Malutki_27</a> — 28 wrz 2012, o 22:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-28T21:55:55+01:00</updated>
<published>2012-09-28T21:55:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16132#p16132</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16132#p16132"/>
<title type="html"><![CDATA[Re: Debouncing - jak to wygląda]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16132#p16132"><![CDATA[
A mnie się ten sposób nie podoba bo przez niego kod programu się rozbudowuje jak kaszanka <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> i pisałem że jest mało przydatny<br /><br />odnośnie licznika cnt - to jeszcze raz sobie rozważ przykłady po kolei - czy nie widzisz że mowa o reakcji na PRESS albo na PUSH ???? rozróżniasz te stany ? (cnt jest odpowiedzialny za puszczenie ... jeśli z tego nie korzystasz to możesz pominąć cnt a jeśli nie korzystasz z PRESS to możesz pominąć zmienną licznik.<br /><br />Wiesz przy okazji co to AutoREPEAT dla klawisza ? <br /><br />Analizowałeś funkcję SuperDebounce() ???<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br /><div class="quotetitle">Malutki_27 napisał(a):</div><div class="quotecontent"><br />A zauważyłeś że nie ma tam _delay , Jest to funkcja nie blokująca i dlatego jest tam zmienna licznik , powinieneś ją potraktować jak swego rodzaju opóźnienie które eliminuje drgania styków <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br /><br />Nie nie Malutki - to wcale nie jest do eliminacji drgań styków - przeczytaj ten post z linku który podałem wyżej i zobacz jaki zadaję CIOS bajkom na temat drgań styków <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... tzn jakie ja herezje tam opowiadam <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Niedługo wrzucę cały opis na Bloga bo widzę że tego posta mało kto czyta<br /><br />&quot;drgania styków to bajki&quot; dla niegrzecznych dzieci <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> — 28 wrz 2012, o 21:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2012-09-28T21:52:53+01:00</updated>
<published>2012-09-28T21:52:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16131#p16131</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16131#p16131"/>
<title type="html"><![CDATA[Re: Debouncing - jak to wygląda]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16131#p16131"><![CDATA[
A zauważyłeś że nie ma tam _delay , Jest to funkcja nie blokująca i dlatego jest tam zmienna licznik , powinieneś ją potraktować jak swego rodzaju opóźnienie które eliminuje drgania stykó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=225">Malutki_27</a> — 28 wrz 2012, o 21:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Stanley]]></name></author>
<updated>2012-09-28T21:27:42+01:00</updated>
<published>2012-09-28T21:27:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16129#p16129</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16129#p16129"/>
<title type="html"><![CDATA[Re: Debouncing - jak to wygląda]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16129#p16129"><![CDATA[
Naprawdę ciągle analizuję Twój post od mojego ostatniego wpisu i wciąż nie rozumiem bytu zmiennej <strong>cnt</strong>. <br />[syntax=c]<br />while(1) <br />{<br />    if ( !(PINB &amp; KEY1) ) <br />    {<br />       licznik++;<br />       if ( licznik&gt;20000 &amp;&amp; Pressed == 0) <br />       {<br />       PORTB ^= LED; // REAKCJA NA  P R E S S  !!!!<br />       Pressed = 1;<br />       licznik=0;<br />       }<br />    }<br />    <br />else <br />{<br />            // gdy klawisz nie jest wciśnięty<br />            if( Pressed )   // REAKCJA NA  P U S H !!!!!!<br />              {<br />                Pressed = 0;<br />                licznik=0;<br />              }<br />}<br />                     <br /><br />}<br />}<br />[/syntax]<br /><br />Kod w takiej postaci jest dla mnie zrozumiały (bez zmiennej <strong>cnt</strong>) i wszystko działa tak jak razem ze zmienną <strong>cnt</strong>. Tzn ja żadnych zmian w działaniu nie zauważyłem, w czym tkwi sęk?<br />Każde kolejne kliknięcie zmienia stan diody na przeciwny, czyli zgodnie z założeniem programu. <br />Serio nie rozumiem po co tam wyżej była użyta zmienna. <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />A jeżeli chodzi o czas inkrementowania zmiennej w tym przypadku - zmiennej <strong>licznik</strong>, to po prostu chciałbym wiedzieć ile czasu trwa cała inkrementacja od zera do tych 20000 z pierwszego warunku.<br />Podoba mi się to rozwiązanie, a nawet bardzo, bo brak tutaj jakichkolwiek delay'ów. <br />Po drugie chciałbym wykorzystać ten pomysł do zrobienia przycisku z reakcją na krótkie/długie zwarcie do masy, stąd też chciałbym wiedzieć do jakiej wartości musi być inkrementowana zmienna licznik żeby trwało to np 2 sekundy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=305">Stanley</a> — 28 wrz 2012, o 21:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-28T19:37:25+01:00</updated>
<published>2012-09-28T19:37:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16120#p16120</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16120#p16120"/>
<title type="html"><![CDATA[Re: Debouncing - jak to wygląda]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16120#p16120"><![CDATA[
a po co ci sprawdzać szybkość inkrementowania cnt ?<br /><br />widzę że nie przeczytałeś tego uważnie - czyli nie przeanalizowałeś i nie określiłeś wyraźnie celów jakie chcesz osiągnąć ? jeśli tak to najpierw je opisz - bo twój przykładowy kod nie działa właśnie dlatego że piszesz go na gorąco bez przemyślenia .... ot tak żeby coś przypasowało <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />z chęcią więc wytłumaczę ale odpowiedz na powyższe najpierw.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 28 wrz 2012, o 19:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Stanley]]></name></author>
<updated>2012-09-28T18:32:41+01:00</updated>
<published>2012-09-28T18:32:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16115#p16115</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16115#p16115"/>
<title type="html"><![CDATA[Re: Debouncing - jak to wygląda]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16115#p16115"><![CDATA[
Jak sprawdzić szybkość inkrementowania zmiennej licznik i cnt? <br />Skąd wiadomo ile wynosi okres &quot;zwiększenia o jeden&quot; każdej z tych zmiennych? <br />Nie rozumiem też po co jest w tym programie zmienna cnt. Do czego została wprowadzona i jak ona tutaj działa?  <br />Proszę o wytłumaczenie i z góry dzięki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=305">Stanley</a> — 28 wrz 2012, o 18:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-27T20:52:20+01:00</updated>
<published>2012-09-27T20:52:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16079#p16079</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16079#p16079"/>
<title type="html"><![CDATA[Re: Debouncing - jak to wygląda]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16079#p16079"><![CDATA[
Nie ma co usuwać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... jednak sam wciąż przymierzam się do stworzenia podobnego poradnika tyle że takiego zadającego niestety KŁAM - tym nieszczęsnym &quot;drganiom styków&quot;<br /><br />wiem, wiem... ktoś zaraz powie, że przecież sam poświęciłem drganiom styków sporo miejsca w swojej pierwszej książce <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ale już tłumaczę o co chodzi ... tzn o co mi teraz chodzi<br /><br />Naturalnie &quot;drgania styków&quot; to nie jest żaden MIT. Ale ich rzekomy wpływ i to jeszcze tak tragiczny wpływ na działanie naszych programów to już jest MEGA MIT ....<br /><br />A jak do tego dodać jeszcze tak durne pomysły jak prezentuje pewien gościu na swoim blogu, gdzie wciska początkującym chore pomysły iż jeśli stosujemy np kondensator 100nF jak na tych filmikach to jeszcze trzeba KONIECZNIE NIBY dodać rezystor w szereg ponieważ może dochodzić .... ba... na pewno dochodzi do WYPALANIA biednych styków <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> .... ogniem piekielnym to już tworzy się ballada o zabarwieniu folklorystycznym z dorzecza amazonki <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> (nie będę tu podawał linku do tego bloga - na elektrodzie można znaleźć go w co drugim poście <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ) ... żeby nie szerzyć tych bzdur<br /><br />ale ok - przejdźmy do rzeczy bo jak widzę taki temat i takie filmiki to aż się prosi aby napisać poradnik o co tu chodzi <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> W zasadzie to ten człowiek na tych filmikach zrobił już kawał dobrej roboty w zasadzie udowadniając sam sobie - że drgania styków są w ogóle nie szkodliwe i to nie one przeszkadzają mu w tym programie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> z tymi dwoma migającymi diodkami LED ..... dlaczego ?<br /><br />Ano dlatego że zdecydowana większość ludzi w tego typu poradnikach szerzy niestety herezje <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> .....<br /><br />1. Popatrzcie sobie na te kolejne klikania i rozpaczliwe próby zaobserwowania drgań styków <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... ileż się facet musi naklikać żeby COŚ tam się pojawiło. A co się pojawia ? otóż pojawiają się takie przebiegi które w żaden sposób nie wpłynęłyby na te szybkie mignięcia diodami LED<br /><br />2. facet programowo stara się udowadniać przez długi czas jak ciężko je wyeliminować żeby na końcu podać hmmm przepraszam ale koszmarny przykład jak je niby eliminować programowo. Bo hyhyhy najlepsze jest to że z użyciem kondensatora udowodnił tylko że zbocza się lekko wygładzają i rzeczywiście mniej tam troszkę tych zakłóceń<br /><br />3. zakłócenia te są jednak w zdecydowanej większości przypadków (chociaż to też zależy od rodzaju przełączników) ... mizerne i nie mają wystarczających poziomów logicznych aby wyzwolić jakieś tam durne przełączanie diodek LED. Tym bardziej, że zwróćcie uwagę na podstawę czasu na końcu gdy poszerza ją na maxa (chyba są ze 2us) - co to ma do rzeczy ??? to wygląda tak jakby ktoś chciał nam wmówić że drgania styków pojawiają się same nawet gdy nie dotykamy klawiszy albo gdy je delikatnie muskamy palcem hahaha <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> sorki ale to bzdura .... takie nawet microswitche trzeba nieźle doginać żeby w ogóle wcisnąć - jak na takie maleństwa<br /><br /><br />...... no dobra - to gdzie jest problem ??? ktoś zapyta! ... przecież widać na filmiku że diodki LED czasem przekakują (zapalają się) niezgodnie z naszym oczekiwaniem<br /><br />taaaaak oczywiście ale jeszcze raz podkreślam to nie WINA tych całych kocich drgań styków w zdecydowanej większości przypadków.<br /><br />Przyczyną jest niezrozumienie (niestety) jak powinien działać klawisz w naszej aplikacji, jak zapewnić niezależne jego działanie od obsługi innych rzeczy w pętli głównej a także innych pojedynczych klawiszy.<br /><br />podam prosty przykład na początek, który chyba każdy zna jako podstawę tej eliminacji drgań<br /><br />[syntax=c]if( !(PINC &amp; (1&lt;&lt;PC2) ) { // sprawdź czy wciśnięty klawisz<br />   _delay_ms(20);       // odczekaj aż ustaną drgania styków 20ms wg tych wykresów to i tak za dużo<br />   if( !(PINC &amp; (1&lt;&lt;PC2) ) {  // sprawdź czy nadal jest wciśnięty<br />      // jeśli wciśnięty to zmień stan diody LED<br />      PORTD ^= (1&lt;&lt;PD3); // zmień stan diody LED<br />   }<br />}[/syntax]<br /><br />No niech ktoś mi powie, że to nie wyeliminuje skutecznie drgań styków ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... no kto ? ktoś tak powie ??? (nie zważamy na razie że użyta jest tu funkcja _delay_ms() - nie w tym rzecz - skupmy się na istocie rzeczy)<br /><br />więc proszę sobie ten kod wklepać - i spróbować kliknąć klawisz żeby dioda się zapaliła, potem kliknąć drugi raz żeby się zgasiła i tak dalej.....<br /><br />a tu co ???? ZONK !!!<br /><br />rzadko udaje się trafić żeby zapalić diodę albo ją zgasić - ona jak ta niesforna pchła wciąż się wymyka naszej kontroli. Gorzej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> a co się stanie gdy wciśniemy paluch i go trzymamy wciąż ???? OOOO jej <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> .... dioda zaczyna migać jak porąbana i robi nam się nagle z obsługi klawisza ułomny PWM <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />no więc jak ??? jak to zrobić żeby jednokrotne naciśnięcie klawisza niezależnie jak długo czy krótko kliknę to żeby WYRAŹNIE zmieniło stan tej diody hmmm ??? no jak ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />oczywiście rzadko komu się chce dogłębnie przeanalizować zagadnienie obsługi klawisza - bo każdy zresztą szybko myśli &quot;a co tu analizować w ogóle?&quot; .....<br /><br />i ciach - wzbogaca nasz program o dodatkową jedną linijkę:<br /><br />[syntax=c]if( !(PINC &amp; (1&lt;&lt;PC2) ) { // sprawdź czy wciśnięty klawisz<br />   _delay_ms(20);       // odczekaj aż ustaną drgania styków  20ms wg tych wykresów to i tak za dużo<br />   if( !(PINC &amp; (1&lt;&lt;PC2) ) {  // sprawdź czy nadal jest wciśnięty<br />      // jeśli wciśnięty to zmień stan diody LED<br />      PORTD ^= (1&lt;&lt;PD3); // zmień stan diody LED<br />     _delay_ms(250);  // poczekaj 250ms<br />   }<br />}[/syntax]<br /><br /><br />oooo <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> teraz jakby się coś poprawiło. Klikam krótko i ładnie dioda zmienia stan, klikam krótko drugi raz i znowu ładnie .... mniaaam <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... po co dalej myśleć - to wystarczy no nie ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />a tu za chwilę znowu ZONK - bo przyszedł kolega, który ma duże paluchy i jest powolny i nie potrafi tak krótko jak my tego maleństwa kliknąć - więc gdy go wdusza do dioda znowu zachowuje się nieprzewidywalnie. Hmmm szybkim krakowskim targiem z uwagi na kolegę zwiększamy czas 250ms do np 500ms (pół sekundy) .... no i teraz koledze się udaje .... ale znowu nam to zaczyna przeszkadzać <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> Nie mówiąc o tym, że znowu gdy wciśniemy długo klawisz to miga dioda co pół sekundy czy tam co 250ms a nam nie o to chodziło!!! Przecież niezależnie ile czasu go wduszę tego niesfornego klawisza to powinien się TYLKO RAZ zmienić stan diody LED !!!!! kurka wodna !!!<br /><br />cóż to ? czyżby aż taaaaaaaaaak długie drgania tych styków ???? NIE, NIE - zdecydowanie NIE ....<br /><br />po prostu trzeba to jakoś dalej i inaczej oprogramować - ŻADEN kondensator tu nie pomoże <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> chyba zaczynacie to dostrzegać prawda ???? (nie wspominam już o tych nieszczęsnych _delayach <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> )<br /><br />dlatego pierwsza podpowiedź.<br /><br />1. trzeba nauczyć się programowo rozróżniać i to wyraźnie dwa stany: PRESS (wciśnięcie) oraz PUSH (zwolnienie klawisza) i reagować uwaga! TYLKO na jedno z tych zdarzeń !!!! zgadza się ???<br /><br />przecież gdy zareagujemy na PRESS to gdy nadejdzie PUSH nie może się już powtarzać nasza akcja czyli miganie diody LED <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> I tak samo - jeśli zareagujemy na PUSH to reakcja nie może się powtórzyć podczas PRESS<br /><br />i tu leży klucz do zrozumienia obsługi klawisza !!!! a nie tam durne drgania styków.<br /><br />Na tych filmikach gościu pokazał pewien hmm dość standardowy sposób i to bez _delay'ów .... który DOKŁADNIUŚKO realizuje tę zasadę. A nieumiejętne początki pisania tej procedury przypisywał nadal z uporem maniaka drganiom styków. <br /><br />proszę tu macie taki przykład:<br /><br />[syntax=c]uint8_t Pressed;<br />uint8_t cnt;<br /><br />int main(void) {<br /><br />DDRC |= (1&lt;&lt;PC4)|(1&lt;&lt;PC2);<br />PORTC |= (1&lt;&lt;PC2);<br />PORTD |= (1&lt;&lt;PD3);<br /><br />while(1) {<br />if ( !(PIND &amp; (1&lt;&lt;PD3)) ) {<br /><br />if (Pressed == 0) {<br />PORTC ^= (1&lt;&lt;PC4); // REAKCJA NA  P R E S S  !!!!<br />Pressed = 1;<br />cnt=255;<br />}<br />}<br />else {<br />// gdy klawisz nie jest wciśnięty<br />if(cnt) cnt--;<br />if( !cnt ) {<br />if( Pressed ) PORTC ^= (1&lt;&lt;PC2);  // REAKCJA NA  P U S H !!!!!!<br />Pressed = 0;<br /><br />}<br />}<br />}<br /><br />}[/syntax]<br /><br />Powołane są tu dwie zmienne Press oraz cnt, które tworzą taką mini maszynę stanów. Sprawdźcie to niby działa - ale też jeszcze nie tak do końca - czasem się zdarzy że jeszcze coś nie tak przeskoczy. Ale jeśli dodamy jeszcze jeden licznik i napiszemy to tak:<br /><br />[syntax=c]uint8_t Pressed;<br />uint8_t cnt;<br />uint16_t licznik;<br /><br />int main(void) {<br /><br />DDRC |= (1&lt;&lt;PC4)|(1&lt;&lt;PC2);<br />PORTC |= (1&lt;&lt;PC2);<br />PORTD |= (1&lt;&lt;PD3);<br /><br />while(1) {<br />if ( !(PIND &amp; (1&lt;&lt;PD3)) ) {<br />                        licznik++;<br />if ( licznik&gt;20000 &amp;&amp; Pressed == 0) {<br />PORTC ^= (1&lt;&lt;PC4); // REAKCJA NA  P R E S S  !!!!<br />Pressed = 1;<br />cnt=255;<br />                                licznik=0;<br />}<br />}<br />else {<br />// gdy klawisz nie jest wciśnięty<br />if(cnt) cnt--;<br />if( !cnt ) {<br />if( Pressed ) PORTC ^= (1&lt;&lt;PC2);  // REAKCJA NA  P U S H !!!!!!<br />Pressed = 0;<br />                                licznik=0;<br />}<br />}<br />}<br /><br />}[/syntax]<br /><br /><br />to nagle okazuje się że zaczyna to już działać niby IDEALNIE. Tzn spróbujcie sami - zapraszam. W sumie niby proste prawda ? - sprawdźcie działa ślicznie teraz. I co więcej nie ma nawet żadnego _delay'a !!!!!! zauważyliście to ??? więc ogromny postęp jakby nie patrzeć. Ale ten dodatkowy licznik wcale nie został dodany w związku z rzekomymi drganiami styków <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... chodzi o to, żeby nasz ludzki ułomny paluch nie trafił akurat na moment gdy cnt jest już PRAWIE = 0 !!!! bo wtedy kilka us dłuższego wciśnięcia i CIACH znowu KLOPS stan diod się zmieni ....<br /><br />żeby jednak nie było zbyt różowo - jak bym miał w swoim projekcie wykorzystywać TYLKO jeden klawisz to pewnie bym użył może i takiego sposobu.<br /><br />Ale jeśli miałbym tych klawiszy np PIĘĆ !!!! albo SIEDEM ??? To SZOK - ile trzeba byłoby zmiennych powołać do każdego z nich!, ile IF'ów !!!! <br /><br />a co gorsze spróbujcie to tzn ten sposób wyprowadzić do jakiejś funkcji <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... jak zaczniecie to robić to....<br /><br />.... to wbrew pozorom będą dwa pozytywne skutki jeśli się nie poddacie. Bo jeśli stworzycie to:<br /><br />1. satysfakcja że się udało we własnym zakresie<br />2. zdobycie sporego (skill'a) doświadczenia - bez wątpliwości<br />3. gdyby wam jeszcze przyszło dodanie obsługi krótkiego kliknięcia i dłuższego a nie daj co jeszcze opcji AUTOREPEAT (która wg mnie bardzo często jest potrzebna) .....<br /><br />to na końcu zrozumiecie funkcję <br /><br />SuperDebounce() opisaną w mojej pierwszej książce - a dalej to już będzie o tyle fajnie, że będziecie sobie radzić luzikiem w każdej takiej sytuacji nawet bez SuperDebounce() .... tylko sami lekką ręką będziecie pisać takie nieblokujące i własne funkcje<br /><br />reasumując - zobaczcie ile można napisać o takim &quot;głupim&quot; małym klawiszu <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: 2 minutach ]</span></strong><br /><br /><div class="quotetitle">MichalXY napisał(a):</div><div class="quotecontent"><br />W ogóle ten facet fajne filmy ma, chociażby konstruowanie własnej maszyny CNC od podstaw... ;D<br /></div><br /><br />Tylko żeby mnie ktoś źle nie zrozumiał - i tak super że gościu pokazuje takie fajne poradniki bo jak pisze MichalXY na prawdę ma ich wiele i fajnych sam oglądałem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />jedyne z czym się nie zgadzam - a to chyba drobiazg - to fakt, że nie tłumaczy on eliminacji drgań styków bo one w tym o czym opowiada odgrywają super marginalną rolę a omawia to jak powinno się podejść do obsługi durnego klawisza <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i żeby zrozumieć podstawy to bardzo dobry przykład podaje - więc od strony dydaktycznej (jak zwał tak zwał) - przykład jest OK bo na pewno pozwoli wielu początkującym poradzić sobie w prostych swoich pierwszych programach z taką obsługą.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 wrz 2012, o 20:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MichalXY]]></name></author>
<updated>2012-09-27T19:52:09+01:00</updated>
<published>2012-09-27T19:52:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16074#p16074</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16074#p16074"/>
<title type="html"><![CDATA[Re: Debouncing - jak to wygląda]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16074#p16074"><![CDATA[
W ogóle ten facet fajne filmy ma, chociażby konstruowanie własnej maszyny CNC od podstaw... ;D<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=226">MichalXY</a> — 27 wrz 2012, o 19:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2012-09-27T19:08:07+01:00</updated>
<published>2012-09-27T19:08:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16072#p16072</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16072#p16072"/>
<title type="html"><![CDATA[Re: Debouncing - jak to wygląda]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16072#p16072"><![CDATA[
Fajne filmy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez Gość — 27 wrz 2012, o 19:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[developer85]]></name></author>
<updated>2012-09-27T18:02:22+01:00</updated>
<published>2012-09-27T18:02:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16069#p16069</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16069#p16069"/>
<title type="html"><![CDATA[Debouncing - jak to wygląda]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1603&amp;p=16069#p16069"><![CDATA[
Znalazłem dość ciekawe filmiki na temat eliminacji drgań styków (metoda hardware (very simple way), i metoda software -też proste).<br />Można pozbyć się w fajny sposób funkcji blokujących _delay_.<br />Na pierwszym pokazane jest na oscyloskopie jak w rzeczywistości wyglądają drgania styków:<br /><br /><!-- m --><a class="postlink" href="http://www.youtube.com/watch?v=Iby888ZXpZ8" >http://www.youtube.com/watch?v=Iby888ZXpZ8</a><!-- m --><br /><br />na drugim jak temu kolo zaradza w prosty sposób<br /><br /><!-- m --><a class="postlink" href="http://www.youtube.com/watch?v=sSOz1QcYnB0" >http://www.youtube.com/watch?v=sSOz1QcYnB0</a><!-- m --><br /><br />Jeśli nasi moderatorzy uznają że jest to shit i nie przyda się nikomu lub jest w złym dziale - niech usuną<br /><br />Pozdrawiam Arek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=390">developer85</a> — 27 wrz 2012, o 18:02</p><hr />
]]></content>
</entry>
</feed>