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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-11-30T00:32:59+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=56&amp;t=1633&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-11-30T00:32:59+01:00</updated>
<published>2012-11-30T00:32:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=19786#p19786</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=19786#p19786"/>
<title type="html"><![CDATA[Re: Drgania styków ? - to BAJKI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=19786#p19786"><![CDATA[
ta funkcja hmm działa tak:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">if( !key_lock &amp;&amp; !(PINC &amp; KEY1 ) ) key_lock=1;</div><br /><br />jak już ktoś wciśnie klawisz a zmienna key_lock akurat jest = 0, nawet jeśli nastąpi pierwsze drganie styku, to od razu następuje zmiana key_lock na 1, więc w kolejnym obiegu pętli już ten warunek nie może być spełniony prawda ?<br /><br />więc teraz wykona się<br /><br />[syntax=c]  else if( key_lock &amp;&amp; (PINC &amp; KEY1 ) ) {<br />   if( !++key_lock ) {<br /> <br />    // reakcja na PUSH_UP (zwolnienie przycisku)<br />    PORTC ^= LED;<br />   }<br />  }[/syntax]<br /><br />czyli key_lock już jest JEDEN , i sprawdzamy czy klawisz zwolniony. Jeśli NIE zwolniony (cały czas trzymamy paluch) to ta część się nie wykona ale pierwsza też nie - więc - pętla będzie zapierniczać jak motorek - żadnego opóźnienia, aż nagle paluch do góry, wtedy w kolejnym tysięcznym obiegu pętli w końcu spełni się warunek powyżej po ELSE ... ale co teraz ?<br /><br />w środku kolejny warunek, który sprawdza czy keylock = 0, a przecież nie jest równe zero tylko DWA, bo przy okazji ++ zwiększy key_lock na 2 (PRZED SPRAWDZENIEM!!!) i nastąpi kolejny obieg pętli, i znowu ta część po ELSE będzie spełniona bo key_lock = TRUE czyli większy od zera ale w środku nadal badamy czy równy zero po uprzednim zwiększeniu na 3, potem na 4,5,6........ aż w końcu dojdzie do 254,255 i nareszcie ZERO <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... ale pomyśl zero pojawi się dopiero po 255 obiegach pętli !!! <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> więc to jest ten czas, gdy czekamy aż skończą się drgania styków przy zwalnianiu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... taki jakby trick ... i dopiero wtedy key_lock znowu jest = 0, dzięki czemu gdy znowu wciśniemy kiedyś paluchem klawisz to ten cały cykl się rozpocznie od nowa.<br /><br />spróbuj poczytać to jeszcze raz na blogu. Tam piszę że jeśli ten czas 255 obiegów pętli np przy kwarcu 20MHz okaże się za wolny to można zmienić typ zmiennej key_lock z uint8_t na uint16_t i zamiast ustawiać ją na 1 po wciśnięciu klawisza to ustawić ją np na 50000. Wtedy po zwolnieniu klawisza , pętla wykona 65536-50000 = 15536 obiegów przeczekując spokojnie drgania przy zwolnieniu klawisza. Taki mechanizm chroni nas także niechcący - gdy proces jest bardzo krótki a zmiana stanu pinu to bardzo krótki proces - także przed drganiami na wejściu gdybyśmy korzystali z jakichś klawiszy które generowałyby np aż kilku ms drgania.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 30 lis 2012, o 00:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-11-29T23:16:56+01:00</updated>
<published>2012-11-29T23:16:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=19781#p19781</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=19781#p19781"/>
<title type="html"><![CDATA[Re: Drgania styków ? - to BAJKI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=19781#p19781"><![CDATA[
Anty - posłuchaj (tzn mówię teraz o tym uwzględnianiu drgań a nawet może nie tyle drgań co efektu drgań podczas powolnie narastającego zbocza (szczególnie z kondensatorem równoległym 100nF) .... )<br /><br />po pierwsze, żebym nie został źle zrozumiany - to nie jest obligatoryjne i jak zwykle zależy od sytuacji, ale ...<br /><br />pomyśl teraz o opcji wykrywania nie tylko przyciśnięcia ale i zwalniania przycisku. Skupmy się na ZWALNIANIU<br /><br />to jest istotne - bo pomyśl sobie skoro tu także są drgania styków to:<br /><br />pierwszy stan wysoki zostanie uznany za zwolnienie przycisku.... jeśli nie odczekamy teraz czasu, w którym te drgania trwają, to .... co ? .... IF() zostanie opuszczony i pętla główna while(1) .... nagle wykona obieg tak szybko, że już w kolejnym przelocie może trafić na następne drganie - i niechcący okaże się że cały IF znowu zacznie działać bo właśnie wykrył niby wciśnięcie ....<br /><br />a przecież tego chcemy uniknąć tak ?<br /><br />i właśnie tu na blogu pokazuję taki przypadek:<br /><br />[syntax=c] while(1) {<br /> <br />  if( !key_lock &amp;&amp; !(PINC &amp; KEY1 ) ) key_lock=1;<br />  else if( key_lock &amp;&amp; (PINC &amp; KEY1 ) ) {<br />   if( !++key_lock ) {<br /> <br />    // reakcja na PUSH_UP (zwolnienie przycisku)<br />    PORTC ^= LED;<br />   }<br />  }<br /> <br /> }[/syntax]<br /><br />a chodzi dokładnie o pozbycie się tego - co dostrzegam nie tylko przecież ja - ale także o czym mówią twórcy fajnych analizatorów IkLogic<br /><br /><img src="http://forum.atnel.pl/_obrazki/o/54_09a35ee1d24a6ba53a162fa511fecd79.png" alt="Obrazek" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 29 minutach ]</span></strong><br /><br />gdy ja w pewnym momencie zauważyłem, że tak powiem to zjawisko (drgań przy zwalnianiu klawisza) w końcu udało mi się do końca zapanować nad obsługą klawisza w każdej sytuacji, co ważne jak widać z rysunku nie chodzi nawet o typowe drgania ale o pewien dłuższy czas utrzymywania się stanu nieustalonego - który przecież może robić takie samo brykanie stanów jak Hi-Z o którym pisałeś na wejściu przy odłączeniu linii od VCC<br /><br />i długo szukałem w necie czy to tylko jakaś moja dziwna obserwacja, szukałem czy ktoś to samo zauważył - i proszę bardzo właśnie IkLogic wręcz przepięknie to zaprezentował na tym rysunku na swoich stronach i podobnie o tym piszą. A więc nie jest to tylko jakiś mój szalony pomysł <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> — 29 lis 2012, o 23:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-11-29T16:32:58+01:00</updated>
<published>2012-11-29T16:32:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=19746#p19746</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=19746#p19746"/>
<title type="html"><![CDATA[Re: Drgania styków ? - to BAJKI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=19746#p19746"><![CDATA[
<div class="quotetitle">GwynBleidD napisał(a):</div><div class="quotecontent"><br />Mirku, nikt się nie ściga <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Twoja funkcja jest bardzo dobra, ja po prostu potrzebowałem czegoś, co umożliwi mi większą elastyczność (różne akcje przy przytrzymaniu przez 3s, 5s, 10s, 15s przycisku) i trochę też wielowarstwową.<br /></div><br />No to super i o to mi chodziło.<br /><br /><div class="quotetitle">GwynBleidD napisał(a):</div><div class="quotecontent"><br />I też nie do końca zrozumiałeś o co mi chodzi. Wiem dobrze, że ta metoda to mydlenie oczu. Ściślej to tam eliminacja drgań jakaś jest, ale problem nie leży w tych drganiach tylko w tym, że kod nie reaguje na zbocze, a na poziom. Przez co przełącza przy każdym przejściu pętli, gdy mamy wciśnięty przycisk.<br /></div><br />Niezmiernie się cieszę - bo też DOKŁADNIE o TO mi chodziło.<br /><br /><br /><div class="quotetitle">GwynBleidD napisał(a):</div><div class="quotecontent"><br />A ja po prostu wyłożyłem antystatycznemu dlaczego w Twoim SuperDebounce NIE MA (na pierwszy rzut oka) eliminacji drgań styków przy puszczaniu przycisku <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> I dlaczego w mojej funkcji (którą na forum prezentowałem) ta eliminacja drgań się znalazła (funkcje działają podobnie i gdybym jej nie umieścił to drgania styków przy puszczaniu byłyby obsłużone tak, jak u Ciebie) mimo, że jest nadmiarowa...<br /></div><br />teraz rozumiem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 lis 2012, o 16:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-11-29T10:34:59+01:00</updated>
<published>2012-11-29T10:34:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=19739#p19739</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=19739#p19739"/>
<title type="html"><![CDATA[Re: Drgania styków ? - to BAJKI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=19739#p19739"><![CDATA[
Gwyn, bo widzę, że też nie zrozumiałeś tego o czym piszę na blogu, więc jeszcze raz ale w dużym skrócie:<br /><br />[syntax=c]     if( !(PINC &amp; (1&lt;&lt;PC2)) ) {<br />         _delay_ms(20);  // rzekoma eliminacja drgań styków<br />         if( !(PINC &amp; (1&lt;&lt;PC2)) ) {<br />              LED_TOG;<br />         }<br />     }[/syntax]<br /><br />to nie jest ŻADEN przepis na obsługę drgań styków. O TO GŁÓWNIE MI CHODZI a nie o to że NIE MA DRGAŃ STYKÓW albo że nigdy nie trzeba ich brać pod uwagę.<br /><br />Ta metoda to mydlenie oczu i nie przynosi nikomu oczekiwanych skutków bo po prostu algorytm obsługi jest zły. Natomiast w tych bardziej rozbudowanych algorytmach jak SuperDebounce oczywiście że jest moment gdzie wręcz trzeba uwzględnić te drgania przy wciśnięciu....<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 27 lis 2012, o 22:46 ]</span></strong><br /><br /><div class="quotetitle">GwynBleidD napisał(a):</div><div class="quotecontent"><br />i czasem lekko poluźnimy palec i przez moment styku nie będzie... a program to wyłapie i dojdzie do wniosku, że przycisk został puszczony i wciśnięty ponownie... ten debouncing u mnie zapobiega właśnie takim szpilkom, dzięki czemu mam jedno dłuższe wciśnięcie, a nie 2 krótsze omyłkowo <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br /><br />aha - widzisz i o tym piszę przecież także wyżej. Poza tym nie zamierzam z nikim ścigać się na najlepszą funkcję typu SuperDebounce ponieważ w książce wskazałem tylko kierunek po to aby każdy mógł już tworzyć wg własnego uznania jeśli dojdzie do wniosku że takim sposobem warto obsługiwać klawisze i drgania a nie takim jak podałem wyżej w kodzie w tym poście.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 lis 2012, o 10:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-11-29T02:08:10+01:00</updated>
<published>2012-11-29T02:08:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=19727#p19727</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=19727#p19727"/>
<title type="html"><![CDATA[Re: Drgania styków ? - to BAJKI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=19727#p19727"><![CDATA[
<div class="quotetitle">Antystatyczny napisał(a):</div><div class="quotecontent"><br />Zastanówmy się, co się dzieje, gdy wciskamy przycisk, który początkowo  ma pull up do VCC. w momencie odłaczenia się od VCC   stan styku odbiorczego  bryka sobie swawolnie  w stanie HI-Z, prawda? To trwa tylko chwilkę, ale... <br /><br />No własnie, to drobne ALE.  W tym czasie proc może setki razy  sprawdzic stan tego  pinu i odczytac głupotę! <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />.<br /></div><br /><br />Anty SUPER że zadałeś to pytanie jako fachowiec od elektroniki i na pewno 100x lepszy fachowiec ode mnie w dziedzinie elektroniki analogowej. Bardzo chętnie o tym podyskutuję, szczególnie o tym momencie i czekałem wręcz na tak precyzyjne pytanie. Troszkę się rozpiszę - ale muszę <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> do rzeczy:<br /><br />1. w trakcie gdy klawisza nie ruszamy na linii jest cały czas VCC - <span style="color: #0040FF">drgania styków się samoistnie nie pojawią</span> - zgadza się?<br /><br />2. nadlatuje nasz paluch i mizia przycisk klawisza zwalniając linię od VCC, i w tym momencie jak słusznie zauważyłeś &quot;bryka sobie swawolnie stan Hi-Z , ale nie tylko bo przy większych prądach (jakieś styczniki) nawet wystąpić jakieś iskrzenia, przepięcia, mechaniczne drgania czyli zwieranie do GND i VCC ... no generalnie dzieje się burza - oczywiście jakość tej burzy zależna jest od rodzaju klawisza i prądów - zgadzamy się prawda ?<br /><br />3. i teraz HEREZJA, która wciskana jest przez setki tysięcy blogów, wpisów na przeróżnych stronach a nawet książkach .... bo wszystkie one podają zgodnie zresztą z tym co ty powiedziałeś - że &quot;<span style="color: #0040FF">W tym czasie proc może setki razy  sprawdzic stan tego  pinu i odczytac głupotę!</span>&quot;<br /><br />- najpierw zastanówmy się co to dokładnie oznacza - że proc może odczytać głupotę ? hmm? - może to wygląda jakbym się czepiał słówek ale uwierz nie o to mi tu chodzi - tylko o precyzyjne wyjaśnienie tego co chciałem przekazać na blogu. A więc - moim zdaniem &quot;proc sam nic nie zrobi, proc sam nic nie odczyta - proc sam nic nie zdziała&quot; - to nasz program .... na prawdę nie chodzi mi o czepianie się słówek - ale to ważne. No i teraz .... zakładając nawet, że te drgania to będzie przykładowy ciąg stanów wysokich i niskich jak jest w niebieskiej książce .... to ile ten ciąg może trwać ??? no załóżmy że nawet niech będzie 5ms (co uważam za ogromną przesadę dla typowych microswitchów i pokazałem te czasy na oscylu - że są o wiele krótsze a wachania stanów bardzo niewielkie. No ale ok - zgadzam się że nawet rodzajów microswitchów mogą być tysiące i niech sobie to występuje te całe 5ms<br /><br />KULMINACJA! .... gdyby napisać obsługę klawisza tak:<br /><br />[syntax=c]while(1) {<br />     if( !(PINC &amp; (1&lt;&lt;PC2)) ) LED_TOG;<br />}[/syntax]<br /><br />to powiedz mi - jesteś w stanie odróżnić ile razy ta dioda LED się przełączy od tych drgań styków a ILE RAZY dioda LED zmieni stan z uwagi na to że w pętli głównej ten warunek będzie wykonywany setki tysięcy razy na sekundę. Zgodzisz się chyba, że nawet gdyby na świecie nie było drgań styków - hipotetycznie - to powyższy kod i tak byłby TOTO - lotkiem zgadza się ????? czy może przypadkiem nie jest tak, że jak ktoś na jakimś forum zobaczy taki kod to krzyczy wyeliminuj drgania bo dioda będzie migać i nieregularnie się zapali. Więc widzisz tu pewną nieścisłość chyba albo niejednoznaczność takiej sytuacji ale PROGRAMISTYCZNEJ.<br /><br />więc teraz dwa inne kody:<br /><br /><strong><span style="font-size: 150%; line-height: normal"><span style="color: #0040FF">KOD nr.1</span></span></strong><br />[syntax=c]while(1) {<br />     if( !(PINC &amp; (1&lt;&lt;PC2)) ) {<br />         _delay_ms(20);  // rzekoma eliminacja drgań styków<br />         if( !(PINC &amp; (1&lt;&lt;PC2)) ) {<br />              LED_TOG;<br />         }<br />     }<br />}[/syntax]<br /><br /><br /><strong><span style="font-size: 150%; line-height: normal"><span style="color: #0040FF">KOD nr.2</span></span></strong><br />[syntax=c]while(1) {<br />     if( !(PINC &amp; (1&lt;&lt;PC2)) ) {<br />          LED_TOG;<br />          _delay_ms(20);<br />     }<br />}[/syntax]<br /><br />porównaj je teraz. Kod nr.1 ma rzekomą obsługę drgań styków natomiast kod nr.2 jej nie ma - za to dałem sobie po zmianie stanu diody delay'a<br /><br />i co ?<br /><br />nie okaże się, że nadal obydwa będą REAGOWAĆ IDENTYCZNIE ???? jeśli chodzi o oko człowieka i obserwację efektu końcowego czyli przypadkowego zapalania się bądź gaszenia diody LED. A przecież TAKI WSPANIAŁY najprostszy przepis podają setki tysięcy ludzi - że wystarczy zrobić to co mamy w KODzie nr.1 i jesteśmy URATOWANI. Więc pokazuję że KISZKA, ZONK, MASAKRA - NIEPRAWDA - i chyba na tym etapie się też zgodzisz ze mną ? czy nie ? ale to nie koniec.<br /><br />no to teraz taki kod:<br /><br />[syntax=c]while(1) {<br />     if( !(PINC &amp; (1&lt;&lt;PC2)) ) {<br />          LED_TOG;<br />          _delay_ms(1000);<br />     }<br />}[/syntax]<br /><br />TO BARDZO WAŻNE. BARDZO !!! .... w tym kodzie wyżej NIE MA RZEKOMEJ HEREZJAŃSKIEJ OBSŁUGI DRGAŃ STYKÓW - ale co ? jak wciśniesz klawisz to dioda nie zmieni PRECYZYJNIE STANU na przeciwny ???? pomimo to, że po wciśnięciu klawisza - nastąpiło przez całe 5ms niech ci będzie że nawet przez 20ms stado drgań, burza styków, brykające stany Hi-Z .... a jednak jak to nie prawda co było na początku powiedziane, &quot;<span style="color: #0040FF">że procek odczyta jakąś głupotę</span>&quot; zgadza się ????<br /><br />OWSZEM obsługa klawisza jest daleka od idealnej - no bo stosujemy tragiczny algorytm, ale to inna sprawa. Chodzi mi o to, że z punktu widzenia CZASU procesu, który jest wywoływany nawet w dobrze napisanej obsłudze klawisza - i tak nawet bez tego delaya(1000) upłynie chociaż byś nie chciał KUPA CZASU. Nawet przy kwarcu 20MHz i założeniu że ów proces zużyje na swoje wykonanie tylko 100 cykli zegarowych - to już upłynie 5us !!! (a to też dużo w porównaniu do przebiegów na oscylu jakie pokazywałem z typowych microswitchy. Ale ok czochra nas to na razie. <br /><br />MY JAKO PROGRAMIŚCI MUSIMY stworzyć taki algorytm aby móc zareagować TYLKO na wciśnięcie klawisza i to niezależnie w którym miejscu drgań styków pierwszy raz zadziała ten IF() !!! I teraz biorąc pod uwagę powyższe kody, gdzie czas potrzebny na realizację PROCESU odpalonego przez wciśnięcie klawisza (w tym przypadku zmiana stanu diody LED) .... jest bardzo bardzo krótki, można powiedzieć, że na IF'a i zmianę stanu diody zmarnują się co najwyżej ze 4 do 6-10 cykli zegarowych .... to przy kwarcu 20MHz będzie to powiedzmy 0,2 - 0,5us - rzeczywiście niewiele, ale z uwagi na o wiele dłuższe / pochyłe zbocze narastające przy zwalnianiu klawisza - wg mnie musimy odczekać trochę czasu, dlatego to w przypadku TAK KRÓTKICH procesów - zapewni nam i tak prawidłową reakcję. <br /><br />Tylko zauważ że teraz rozpatrujemy prawie skrajne warunki jak dla procków AVR przynajmniej - taktowanie 20MHz, kto tyle używa na co dzień ? ja powiedziałbym, że średnio używane taktowanie jeśli tak można powiedzieć to ok 10MHz więc te czasy podane wyżej wydłużą się co najmniej dwukrotnie. Tak samo jak czasy potrzebne na realizację zwykle prawdziwych i o wiele dłuższych PROCESÓW niż TYLKO zmiana stanu diody na przeciwny - np skok do jakiejś funkcji i wykonanie szeregu operacji .... tu już czasy się drastycznie wydłużą. Ktoś mógłby powiedzieć, że przecież klawisz poza zmianą stanu diody LED wykorzystamy np często tylko do zmiany stanu jakiejś tam flagi więc też nie stracimy dużo czasu na obsługę procesu .... ale znowu - ZWYKLE gdy obsługujemy klawisze w POOLINGU - ja to uważam za prawie jedynie słuszną metodę w każdej sytuacji - i zresztą zwykle o tym jest mowa przy tych drganiach - to więcej uwagi powinniśmy poświęcić jak już drganiom styków przy zwolnieniu klawisza. Dlaczego ? ano dlatego że właśnie gdy trzymamy go paluchem to czasem ten paluch się trzęsie, a gdy jeszcze styki są zaśniedziałe - to sam przyznasz że nie tylko przy chęci zwolnienia ale i w trakcie trzymania można dostać serią drgań <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> więc TAK CZY TAK na końcu MUSIMY UWZGLĘDNIĆ jakiś czas BYLE NIE BLOKUJĄCY na tą obsługą drgań przy zwolnieniu klawisza.<br /><br />Nieco inaczej jest też jak się pisze już taką bardziej zaawansowaną obsługę jak SuperDebounce - a przecież wiem że kto jak kto ale Ty rozgryzłeś to sam dla siebie i swoim kodem od najmniejszych podstaw - więc wiesz - że TAM rzeczywiście trzeba zwrócić uwagę nawet na te początkowe drgania styków. I ja się z tym zgadzam i to samo zrobiłem i robię w SuperDebounce<br /><br />REASUMUJĄC - artykułem tym nie chciałem zaprzeczyć że NIE MA ZJAWISKA DRGAŃ styków - a raczej pobudzić do takiego przemyślenia i rozważenia jak już budowania przemyślanych procedur obsługi klawisza - gdzie mamy oprogramowane:<br /><br />1. reakcję na przyciśnięcie<br />2. reakcję na zwolnienie (minimum)<br />3. ale też może od razu AutoRepeat<br /><br />itp<br /><br />bo dopiero wtedy możemy mówić dobrze i myśleć kiedy są te drgania ważne a nie (JESZCZE RAZ PODKREŚLAM) w tak DURNYM przykładzie podawanym na populistycznych stronach dla początkujących <br /><br />[syntax=c]while(1) {<br />     if( !(PINC &amp; (1&lt;&lt;PC2)) ) {<br />         _delay_ms(20);  // rzekoma eliminacja drgań styków<br />         if( !(PINC &amp; (1&lt;&lt;PC2)) ) {<br />              LED_TOG;<br />         }<br />     }<br />}[/syntax]<br /><br />BO TO Z TYM starałem się walczyć - NIE ŻE NIE MA DRGAŃ, tylko że przypadkowe miganie tej diody JEST tu spowodowane BZDURNYM algorytmem obsługi klawisza i jak udowodniłem (mam nadzieję) nawet gdyby drgań styków nie było na świecie to i tak ten przykład nadal powodowałby to samo z tą diodą LED. I przez to w wielu pytaniach na forach, blogach - biedni początkujący - którzy posłuchali powyższej &quot;SUPER&quot; porady - za chwilę piszą kolejne pytanie&quot;<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />No zrobiłem obsługę drgań styków a i tak klawisz mi dziwnie reaguje i dioda dziwnie się zapala <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> - jak dobrać te czasy delaya ?? może tu coś źle robię ? POMÓŻCIE .....&quot;<br /></div><br /><br />albo inne super częste pytanie z tym związane<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />a jak zrobić żeby mi klawisz zadziałał na krótki i długi klik ????<br /></div><br /><br />i dopiero tu jak się początkujący zaweźmie to zaczyna odkrywać - że po prostu w końcu trzeba się wziąć na prawdę za porządną procedurę i uniwersalną do obsługi swoich klawiszy a nie w kółko bawić się z tym durnym kodem wyżej i rzekomą eliminacją drgań styków.<br /><br />--------------<br /><br />I jeszcze JEDNO. Taki jeden upierdliwiec na blogu, którego posty kasowałem i skasowałem wszystkie bo po chamsku pisał - napisał mi tak. <br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />&quot;Piszesz że nie ma drgań styków - widzę że nie znasz się na elektronice jesteś taki i owaki .... a wystarczy że sobie zrobisz prosty test - podłącz klawisz pod przerwanie INT0 i wtedy zobacz czy przerwanie nie zostanie wywołane setki razy&quot;<br /></div><br /><br />No ale jak widzisz on ani na chwilę nie pochylił się nad problemem który staram się wyjaśnić, chociaż wielu zarzuca mi że tak błahy problem jak obsługa klawisza nie wymaga wyjaśnień i apiać od nowa - że wystarczy zrobić prostą eleiminację jak wyżej ....<br /><br />no dobra - a w odpowiedzi na to przerwanie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ...... TOŻ tylko tytuł artykułu jest przewrotny i piszę to w pierwszych słowach - nigdy nie twierdzę że nie ma drgań styków, wręcz przecież je pokazuję na oscylu. A i tak - gdyby zamiast po chamsku próbować dyskutować - chciał tą dyskusję przeprowadzić tak jak Ty teraz ze mną - to chętnie bym mu pokazał jak się obsługuje klawisze ba! nawet całe klawiatury matrycowe na przerwaniach - żeby poradzić sobie z drganiami styków. Powiedziałbym nawet że na przerwaniach jest to prostsze niż w POOLINGU, tyle że z uporem maniaka będę twierdził że obsługę pojedynczych klawiszy lepiej robić w POOLINGU a do przerwań sięgać albo w przypadku np klawiatur matrycowych albo jakichś innych nietypowych przypadkach. <br /><br /><br /><br /><br /><div class="quotetitle">Antystatyczny napisał(a):</div><div class="quotecontent"><br />A teraz  sprawa najwazniejsza, która chciałbym   &quot;obgadać&quot; z Mirkiem.  Faza puszczania przycisku tez jest obarczona czasem, w którym  pin procka będzie w HI-Z. W niebieskiej ksiązce jest elegancka  funkcja obsługująca  klawisz, ale.... (już wiadomo, co mnie niepokoi)<br />Mirku, chętnie porozmawiam o tym, bo mam wrażenie, że którys z nas cos pominął... albo czegoś np. nie rozumiem. Jesli się myle, bardzo proszę o jakieś  wytłumaczenie.  Pozdrawiam <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /></div><br /><br />No to sobie porozmawialiśmy co ??? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> tzn na razie ja napisałem hmmm rozpisałem się (sorki) ale ciekaw jestem teraz twojego zdania na ten cały kontrowersyjnie zatytułowany artykuł <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> (przy okazji jeszcze raz dzięki za te wszystkie wpisy i na blogu i na youtube)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 lis 2012, o 02:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-10-06T14:44:20+01:00</updated>
<published>2012-10-06T14:44:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=16508#p16508</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=16508#p16508"/>
<title type="html"><![CDATA[Drgania styków ? - to BAJKI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1633&amp;p=16508#p16508"><![CDATA[
Zobacz jak to jest z tymi drganiami styków albo z niby efektami drgań styków <br /><br /><a href="http://mirekk36.blogspot.com/2012/10/drgania-stykow-to-bajki-wiec-jak-to.html"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/54_ae375654728a6678b7cf273ba8c34fa7.png" alt="Obrazek" /></a><br /><br /><!-- 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=54">mirekk36</a> — 6 paź 2012, o 14:44</p><hr />
]]></content>
</entry>
</feed>