Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 27 kwi 2024, o 16:37


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 6 paź 2012, o 14:44 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27227
Lokalizacja: Szczecin
Pomógł: 1041

Zobacz jak to jest z tymi drganiami styków albo z niby efektami drgań styków

Obrazek

http://mirekk36.blogspot.com/2012/10/dr ... ak-to.html

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lis 2012, o 02:08 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27227
Lokalizacja: Szczecin
Pomógł: 1041

Antystatyczny napisał(a):
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...

No własnie, to drobne ALE. W tym czasie proc może setki razy sprawdzic stan tego pinu i odczytac głupotę! :D.


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ę ;) do rzeczy:

1. w trakcie gdy klawisza nie ruszamy na linii jest cały czas VCC - drgania styków się samoistnie nie pojawią - zgadza się?

2. nadlatuje nasz paluch i mizia przycisk klawisza zwalniając linię od VCC, i w tym momencie jak słusznie zauważyłeś "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 ?

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 "W tym czasie proc może setki razy sprawdzic stan tego pinu i odczytac głupotę!"

- 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 "proc sam nic nie zrobi, proc sam nic nie odczyta - proc sam nic nie zdziała" - 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

KULMINACJA! .... gdyby napisać obsługę klawisza tak:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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.

więc teraz dwa inne kody:

KOD nr.1
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



KOD nr.2
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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

i co ?

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.

no to teraz taki kod:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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, "że procek odczyta jakąś głupotę" zgadza się ????

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.

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ę.

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ń ;) 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.

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

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:

1. reakcję na przyciśnięcie
2. reakcję na zwolnienie (minimum)
3. ale też może od razu AutoRepeat

itp

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

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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 "SUPER" porady - za chwilę piszą kolejne pytanie"

Cytuj:
No zrobiłem obsługę drgań styków a i tak klawisz mi dziwnie reaguje i dioda dziwnie się zapala :( - jak dobrać te czasy delaya ?? może tu coś źle robię ? POMÓŻCIE ....."


albo inne super częste pytanie z tym związane

Cytuj:
a jak zrobić żeby mi klawisz zadziałał na krótki i długi klik ????


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.

--------------

I jeszcze JEDNO. Taki jeden upierdliwiec na blogu, którego posty kasowałem i skasowałem wszystkie bo po chamsku pisał - napisał mi tak.

Cytuj:
"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"


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 ....

no dobra - a w odpowiedzi na to przerwanie ;) ...... 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.




Antystatyczny napisał(a):
A teraz sprawa najwazniejsza, która chciałbym "obgadać" 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)
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 :)


No to sobie porozmawialiśmy co ??? ;) 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ł ;) (przy okazji jeszcze raz dzięki za te wszystkie wpisy i na blogu i na youtube)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lis 2012, o 10:34 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27227
Lokalizacja: Szczecin
Pomógł: 1041

Gwyn, bo widzę, że też nie zrozumiałeś tego o czym piszę na blogu, więc jeszcze raz ale w dużym skrócie:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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ę.

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....

------------------------ [ Dodano po: 27 lis 2012, o 22:46 ]

GwynBleidD napisał(a):
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 ;)


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.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lis 2012, o 16:32 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27227
Lokalizacja: Szczecin
Pomógł: 1041

GwynBleidD napisał(a):
Mirku, nikt się nie ściga :) 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ą.

No to super i o to mi chodziło.

GwynBleidD napisał(a):
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.

Niezmiernie się cieszę - bo też DOKŁADNIE o TO mi chodziło.


GwynBleidD napisał(a):
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 ;) 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...

teraz rozumiem.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lis 2012, o 23:16 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27227
Lokalizacja: Szczecin
Pomógł: 1041

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) .... )

po pierwsze, żebym nie został źle zrozumiany - to nie jest obligatoryjne i jak zwykle zależy od sytuacji, ale ...

pomyśl teraz o opcji wykrywania nie tylko przyciśnięcia ale i zwalniania przycisku. Skupmy się na ZWALNIANIU

to jest istotne - bo pomyśl sobie skoro tu także są drgania styków to:

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 ....

a przecież tego chcemy uniknąć tak ?

i właśnie tu na blogu pokazuję taki przypadek:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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

Obrazek

------------------------ [ Dodano po: 29 minutach ]

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

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ł ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lis 2012, o 00:32 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27227
Lokalizacja: Szczecin
Pomógł: 1041

ta funkcja hmm działa tak:

Kod:
if( !key_lock && !(PINC & KEY1 ) ) key_lock=1;


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 ?

więc teraz wykona się

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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 ?

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 ;) ... ale pomyśl zero pojawi się dopiero po 255 obiegach pętli !!! ;) więc to jest ten czas, gdy czekamy aż skończą się drgania styków przy zwalnianiu ;) ... 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.

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.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO