Jak działa eliminacja drgań styków przy wciskaniu klawisza w praktyce?
Debouncing
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Debouncing
Date: Tue, 9 Sep 2003 12:54:12 +0200
Witam,
na czym dokladnie polega eliminowanie drgan stykow?
Czy w chwili pierwszego wykrycia wcisniecia klawisza
sterownik czeka ustalony czas po czym dopiero bada
stan klawisza, czy tez pierwsze wykrycie oznacza wcisniecie
klawisza, a nastepnie odpowednia linia jest "glucha" przez
ustalony czas, czy robi sie to jeszcze jakos inaczej?
Pozdrawiam
Piotr Wyderski
========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: jerry1111 <_stop_this_spam_jerry1111_remove_at_nospam_remove.wp.pl>
Subject: Re: Debouncing
Date: Tue, 09 Sep 2003 13:48:58 +0200
na czym dokladnie polega eliminowanie drgan stykow?
Zeby klawisz zostal uznany jako wcisniety, to sygnal wcisniecia
musi trwac bez_przerwy przez jakis okreslony czas. Jak trwal
krocej - znaczy wystapilo drganie stykow i liczymy czas od nowa.
Potem, jak juz uznamy klawisz za wcisniety, to musimy poczekac
na odpowiednio dlugi sygnal puszczenia klawisza (poniewaz podczas
puszczania tez moga byc drgania stykow - zle napisany program
moglby to zinterpretowac jako szybkie wciskanie).
Rzeczy typu powtarzanie itp. to zaleza juz od "fantazji" programisty.
--
Jerry
========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!wsisiz.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: Debouncing
Date: Tue, 9 Sep 2003 16:24:35 +0200
jerry1111 wrote:
Zeby klawisz zostal uznany jako wcisniety, to sygnal wcisniecia
musi trwac bez_przerwy przez jakis okreslony czas. Jak trwal
krocej - znaczy wystapilo drganie stykow i liczymy czas od nowa.
Ciekawe rozwiazanie: prosciutkie i musi dzialac poprawnie.
BTW, ile dac timeoutu, 10--16 milisekund wystarczy?
Rzeczy typu powtarzanie itp. to zaleza juz od "fantazji" programisty.
A to juz jest jedna warstwa wyzej, dzialajaca na "dobrych" danych.
Pozdrawiam
Piotr Wyderski
========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!not-for-mai
From: Ireneusz Niemczyk <i.niemczyk_at_nospam_multispedytor.com.pl>
Subject: Re: Debouncing
Date: Tue, 09 Sep 2003 19:05:39 +0200
Ciekawe rozwiazanie: prosciutkie i musi dzialac poprawnie.
BTW, ile dac timeoutu, 10--16 milisekund wystarczy?
Powinno*, kiedyś sprawdzałem mikroswitche (jakie zwykłem używać) i wychszło
na to, że nie ma jak sprowokowac dłuższe niż 5-6ms drgania.
Co do dekodowania klawiszy - staram się reagować na naciśniecie klawisza -
nawet jeżeli nie został on jeszcze puszczony. Przecież jeśli pobudzenie
trwa wystarczająco długo - to mamy pewność że akcje należy podjąć, nie ma
więc sensu czekać. Natomiast zabezpieczenie się przed niechcianą repetycją
czasem martwym po puszczeniu klawisza - to już jak gdyby dodatek.
Miłego dnia Piotrze.
__
Pd, Irek.N.
- nie wiem o jakich stykach rozmawiamy - zakładam że zwykłe, małe
mikroswtche.
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!feed.news.interia.pl!newsfeed.gazeta.pl!wsisiz.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: Debouncing
Date: Tue, 9 Sep 2003 19:27:54 +0200
Ireneusz Niemczyk wrote:
Powinno*, kiedyś sprawdzałem mikroswitche (jakie zwykłem używać) i
wychszło
na to, że nie ma jak sprowokowac dłuższe niż 5-6ms drgania.
Tak, chodzi o zwyczane microswitche -- dam wiec 16 ms dla swietego
spokoju, tym bardziej, ze to steruje dziesiatkami kilowoltow*, wiec
nie chce ryzykowac porazenia przypadkowym wlaczeniem -- niegrozne,
ale bardzo nieprzyjemne. :-( Wielkie dzieki za rzeczywiste dane!
Co do dekodowania klawiszy - staram się reagować na naciśniecie klawisza -
nawet jeżeli nie został on jeszcze puszczony. Przecież jeśli pobudzenie
trwa wystarczająco długo - to mamy pewność że akcje należy podjąć, nie ma
więc sensu czekać.
Oczywiscie, rowniez nie zamiezam czekac do puszczenia. Po
prostu mialem za duzo pomyslow rozwiazania problemu, ale
akurat propozycja Jerrego nie przyszla mi do glowy, choc moje
rozwiazanie z czasem martwym jest mu w zasadzie rownowazne.
Coz, klawiaturki jeszcze w zyciu nie oprogramowywalem.
Miłego dnia Piotrze.
Dziekuje, wzajemnie. :-)
Pozdrawiam
Piotr Wyderski
(*) Koncze stabilizowany zasilacz WN do doswiadczen.
=======
From: "Marek Dzwonnik" <mdz_at_nospam_message.pl>
Subject: Re: Debouncing
Date: Tue, 9 Sep 2003 19:37:41 +0200
Użytkownik "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl> napisał w
wiadomości news:bjl2kh$j8b$1_at_nospam_nemesis.news.tpi.pl
Oczywiscie, rowniez nie zamiezam czekac do puszczenia. Po
prostu mialem za duzo pomyslow rozwiazania problemu, ale
akurat propozycja Jerrego nie przyszla mi do glowy, choc moje
rozwiazanie z czasem martwym jest mu w zasadzie rownowazne.
Coz, klawiaturki jeszcze w zyciu nie oprogramowywalem.
Kiedyś opisałem swój sposób klawiszowania - może Ci się przyda:
http://www.google.pl/groups?selm=3cd83d32%40news.home.net.pl
--
Marek Dzwonnik, GG: #2061027 (zwykle jako 'niewidoczny')
P.S. O jasny gwint... Piotrze od paru tygodni trzymam w kolejce do odpisania
Twój list zostawiony na "wolną chwilę". Odezwę się (oczywiście jeśli
jeszcze potrzebujesz tych informacji ;-).
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: Debouncing
Date: Tue, 9 Sep 2003 20:54:04 +0200
Marek Dzwonnik wrote:
Kiedyś opisałem swój sposób klawiszowania - może Ci się przyda:
http://www.google.pl/groups?selm=3cd83d32%40news.home.net.pl
Chetnie sobie popatrze.
Odezwę się (oczywiście jeśli jeszcze potrzebujesz tych informacji ;-).
Owszem, jeszcze moga sie przydac. :-) Tylko uzyj
[to samo, smierc spamerom]_at_nospam_wp.pl, bo Hoga
zdecydowala sie zamknac darmowe konta i za 4 dni
strace obecne, a adresu e-mail ze studiow magisterskich
od paru lat nie sprawdzam ze wzgledu na gigantyczne
ilosci spamu, a "sluzbowy" od studiow doktoranckich
obecnie nie dziala. :-(
Pozdrawiam
Piotr Wyderski
========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!not-for-mai
From: Ireneusz Niemczyk <i.niemczyk_at_nospam_multispedytor.com.pl>
Subject: Re: Debouncing
Date: Tue, 09 Sep 2003 20:23:45 +0200
(*) Koncze stabilizowany zasilacz WN do doswiadczen.
Auć, co dobrego robisz?
__
Pzd, Irek.N.
========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news2.icm.edu.pl!opal.futuro.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: Debouncing
Date: Tue, 9 Sep 2003 20:45:42 +0200
Ireneusz Niemczyk wrote:
Auć, co dobrego robisz?
Miala byc zabawka do doswiadczen fizycznych z WN (0--30 kV, o niskiej
wydajnosci pradowej, rzedu 1 mA), ale cierpialem na nadmiar wolnego czasu
i troche mnie ponioslo przy konstruowaniu i oprogramowywaniu tego :-)))
Zostala mi wlasnie klawiaturka, ale drgania stykow bardzo przeszkadzaja.
Pozdrawiam
Piotr Wyderski
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!lublin.pl!uw.edu.pl!news.pw.edu.pl!not-for-mai
From: BLE_Maciek <i80c586_at_nospam_cyberspace_NO_SPAM_.org>
Subject: Re: Debouncing
Date: Wed, 10 Sep 2003 10:47:59 +0200
Tue, 9 Sep 2003 20:45:42 +0200 jednostka biologiczna o nazwie "Piotr
Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl> wyslala do portu 119
jednego z serwerow news nastepujace dane:
Miala byc zabawka do doswiadczen fizycznych z WN (0--30 kV, o niskiej
wydajnosci pradowej, rzedu 1 mA)
Pewnie na trafopowielaczu od TV ?
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!news.man.poznan.pl!pwr.wroc.pl!panorama.wcss.wroc.pl!not-for-mai
From: "Piotr Wyderski" <piotr.wyderski_at_nospam_ii.uni.wroc.pl>
Subject: Re: Debouncing
Date: Wed, 10 Sep 2003 13:51:43 +0200
BLE_Maciek wrote:
Pewnie na trafopowielaczu od TV ?
W wersji pierwotnej rzeczywiscie tak bylo, ale powielacz
jest dosc niewygodny (trudno siego rozbudowywuje), wiec
zrobilem wlasny. :-)
Pozdrawiam
Piotr Wyderski
========
Message-ID: <3F5F03BB.607_at_nospam_badworm.pl>
Date: Wed, 10 Sep 2003 12:58:03 +020
From: badworm <nospam_at_nospam_post.pl>
Subject: Re: Debouncing
Osoba podająca się za: Ireneusz Niemczyk przyczyniła się do uszczuplenia
moich skromnych zasobów dyskowych ;-) wraz z kolejną wiadomością wysłaną
03-09-09 20:23:
__
Pzd, Irek.N.
Irek, mógłbyś poprawić delimiter?
--
Pozdrawiam Bad Worm badworm{m-a-ł-p-a}post[K_R_O_P_K_A]pl
http://www.gusnet.prv.pl GG# 2400455
"All in all you're just another brick in the wall"
Tnijcie cytaty i sygnaturki!
========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!not-for-mai
From: Ireneusz Niemczyk <i.niemczyk_at_nospam_multispedytor.com.pl>
Subject: Re: Debouncing
Date: Wed, 10 Sep 2003 23:02:29 +0200
Irek, mógłbyś poprawić delimiter?
Ależ oczywiście, jaki sobie życzysz?
Miłej nocki.
__
Pzd, Irek.N.
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsgate.onet.pl!newsgate.p
From: zielpro_at_nospam_poczta.onet.pl (ziel)
Subject: RE: Debouncing
Date: 11 Sep 2003 01:34:45 +0200
On Behalf Of Ireneusz Niemczyk
Irek, mógłbyś poprawić delimiter?
Ależ oczywiście, jaki sobie życzysz?
ja to bym chciał w serduszka i koniecznie
na koniec kratkę w stylu tartan klanu Stuard
;-)
pzdr
Artur
--
Archiwum grupy: http://niusy.onet.pl/pl.misc.elektronika
========
Message-ID: <3F60F8DF.5010901_at_nospam_badworm.pl>
Date: Fri, 12 Sep 2003 00:36:15 +020
From: badworm <nospam_at_nospam_post.pl>
Subject: Re: Debouncing
Osoba podająca się za: Ireneusz Niemczyk przyczyniła się do uszczuplenia
moich skromnych zasobów dyskowych ;-) wraz z kolejną wiadomością wysłaną
03-09-10 23:02:
Ależ oczywiście, jaki sobie życzysz?
Jako PCRE(Perl Compatible Regular Expressions): \n-- \r ;-P
Doczytałem w innym wątku dlaczego masz taki a nie inny delimiter i uszanuję to.
--
Pozdrawiam Bad Worm badworm{m-a-ł-p-a}post[K_R_O_P_K_A]pl
http://www.gusnet.prv.pl GG# 2400455
"All in all you're just another brick in the wall"
Tnijcie cytaty i sygnaturki!
========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!not-for-mai
From: Ireneusz Niemczyk <i.niemczyk_at_nospam_multispedytor.com.pl>
Subject: Re: Debouncing
Date: Fri, 12 Sep 2003 23:09:02 +0200
Jako PCRE(Perl Compatible Regular Expressions): \n-- \r ;-P
Doczytałem w innym wątku dlaczego masz taki a nie inny delimiter i uszanuję to.
THX. Miłej nocki :-)
__
Pzd, Irek.N.
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai
From: "GrzesieG" <gayos_at_nospam_USUN.interia.pl>
Subject: Re: Debouncing
Date: Tue, 9 Sep 2003 21:40:57 +0200
"Piotr Wyderski" napisał:
Tak, chodzi o zwyczane microswitche -- dam wiec 16 ms dla swietego
spokoju, tym bardziej, ze to steruje dziesiatkami kilowoltow*, wiec
nie chce ryzykowac porazenia przypadkowym wlaczeniem -- niegrozne,
ale bardzo nieprzyjemne. :-( Wielkie dzieki za rzeczywiste dane!
Inne rozwiązanie to sprzętowe tłumienie za pomocą stałej RC, co w przypadku
AVR'ów jest proste i pewne, bo każde wejście ma "shmita".
--
GrzesieG
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: Debouncing
Date: Wed, 10 Sep 2003 03:12:10 +0200
On Tue, 9 Sep 2003 16:24:35 +0200, Piotr Wyderski wrote:
jerry1111 wrote:
Zeby klawisz zostal uznany jako wcisniety, to sygnal wcisniecia
musi trwac bez_przerwy przez jakis okreslony czas. Jak trwal
krocej - znaczy wystapilo drganie stykow i liczymy czas od nowa.
Ciekawe rozwiazanie: prosciutkie i musi dzialac poprawnie.
Jesli sie nie boimy jakis latajacych zaklocen od np transformatorowki,
to wcale nie trzeba sprawdzac powyzszego - pojawienie sie choc jednego
impulsu swiadczy o tym ze uzytkownik naprawde klawisz nacisnal.
Problem sie robi jak uniknac zeby kolejne drgania zarowno przy
wciskaniu jak i przy puszczaniu nie zostaly odebrane jako kolejne
nacisniecia klawisza. No i jak tu zrobic zeby nacisniecie klawisza
wprowadzilo jeden znak, a nie jeden co ms :-)
Innymi slowy - czekac trzeba na "solidne" puszczenie klawisza.
Problem w tym kiedy to zrobic ?
- sprawdac klawisze w przerwaniach powiedzmy co 50ms, nie przejmowac
sie drganiami - nie przeszkadzaja przy tak wolnym pollingu.
- bezczelnie wydluzyc procedure obslugi zdarzenia wybranego klawiszem
do powiedzmy 1s - przy okazji zyskujemy autorepeat i zadnym
deboucingiem sie nie przejmujemy.
- w procedurze odczytu klawisza poczekac az do jego zwolnienia.
Skuteczne, choc troche nienaturalne. Nie ma AR, no chyba ze
zaprogramujemy powrot jesli nie ma zwolnienia przez zadany czas.
- w procedurze odczytu klawisza poczekac najpierw na zwolnienie
wszystkich klawiszy. Uniemozliwia niestety sterowanie "z
wyprzedzeniem", fifo klawiatury sie czasem przydaje.
- siegnac do listingu spektrum .. skanning leci w przerwaniach,
musi sie pare razy ten sam odczyt powtorzyc, ladujemy wtedy
znak do bufora, sledzimy zwalnienie klawisza - tez musi byc pare
razy pod rzad, mozna szybko pisac, repeata zaprogramowac,
J.
========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!news.man.poznan.pl!pwr.wroc.pl!panorama.wcss.wroc.pl!not-for-mai
From: "Piotr Wyderski" <piotr.wyderski_at_nospam_ii.uni.wroc.pl>
Subject: Re: Debouncing
Date: Wed, 10 Sep 2003 14:09:34 +0200
J.F. wrote:
Jesli sie nie boimy jakis latajacych zaklocen od np transformatorowki,
Oj, czego jak czego, ale zaklocen tam nie brakuje, choc dotychczas
nie powodowaly one jakichkolwiek problemow -- nieodpornosc AVR
na zaklocenia jest przegadana. :-) W razie czego i tak jest watchdog
ustawiony na 15 ms, a po resecie urzadenie przechodzi w standby.
to wcale nie trzeba sprawdzac powyzszego - pojawienie sie choc jednego
impulsu swiadczy o tym ze uzytkownik naprawde klawisz nacisnal.
Tak, tylko ulotow, iskrzen itp. mam pod dostatkiem. Jak mam
w tej sytuacji rozpoznac, ze to klawisz zostal nacisniety, a nie
sciezka oberwala szybkim jonem? :-)
Problem sie robi jak uniknac zeby kolejne drgania zarowno przy
wciskaniu jak i przy puszczaniu nie zostaly odebrane jako kolejne
nacisniecia klawisza. No i jak tu zrobic zeby nacisniecie klawisza
wprowadzilo jeden znak, a nie jeden co ms :-)
Mam petle glowna wykonujaca sie dokladnie 1000 razy na
sekunde (synchronizwoana przez polling timera 0), wiec
z mierzeniem czasu nie ma problemow. Jak bede mial
stabilne odczyty z klawiszy, to zrobienie czasu martwego
o ktorym piszesz powyzej oraz autorepetycji to banal. Tylko
mam jeszcze "problem" z nacisnieciem wielu klawiszy
jednoczesnie, bo sam nie wiem jak powinno zachowac sie
wowczas urzadzenie. :-)
- bezczelnie wydluzyc procedure obslugi zdarzenia wybranego klawiszem
do powiedzmy 1s - przy okazji zyskujemy autorepeat i zadnym
deboucingiem sie nie przejmujemy.
Ale ja chce miec dynamiczny autorepeat: przez, powiedzmy,
pierwsze 0,5 sekundy nic, pozniej powolna repetycja, pozniej
szybka. W tym wariancie rozwiazania dosc trudno to bedzie
zrealizowac.
- w procedurze odczytu klawisza poczekac az do jego zwolnienia.
Skuteczne, choc troche nienaturalne.
To se ne da, mam ADC na komparatorze oraz wyswietlacze LED
w multipleksie, wiec jakby nie patrzec system czasu rzeczywistego. :-)
Pozdrawiam
Piotr Wyderski
========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!not-for-mai
From: Marcin Stanisz <mstanisz_at_nospam_poczta.onet.pl>
Subject: Re: Debouncing
Date: 10 Sep 2003 14:03:06 GMT
W artykule <bjn4a9$k7f$1_at_nospam_panorama.wcss.wroc.pl> Piotr Wyderski napisal(a):
- w procedurze odczytu klawisza poczekac az do jego zwolnienia.
Skuteczne, choc troche nienaturalne.
To se ne da, mam ADC na komparatorze oraz wyswietlacze LED
w multipleksie, wiec jakby nie patrzec system czasu rzeczywistego. :-)
A mnie się udało :-) Co prawda aplikacja mało czasowymagająca
(cóż za piękne słowo ;-)). Odświeżanie i ADC na komparatorze
chodzą w przerwaniach, asynchronicznie do pętli głównej, w której
są sprawdzane przyciski.
Marcin Stanisz
--
"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai
From: "Fish" <n.o.s.p.a.m.apf_jf_at_nospam_poczta.onet.pl>
Subject: Re: Debouncing
Date: Wed, 10 Sep 2003 21:28:59 +0200
Użytkownik "Marcin Stanisz" <mstanisz_at_nospam_poczta.onet.pl> napisał w wiadomości
news:slrn.pl.bluboq.14c.mstanisz_at_nospam_COS13.ilf.com...
W artykule <bjn4a9$k7f$1_at_nospam_panorama.wcss.wroc.pl> Piotr Wyderski napisal(a):
- w procedurze odczytu klawisza poczekac az do jego zwolnienia.
Skuteczne, choc troche nienaturalne.
To se ne da, mam ADC na komparatorze oraz wyswietlacze LED
w multipleksie, wiec jakby nie patrzec system czasu rzeczywistego. :-)
A mnie się udało :-) Co prawda aplikacja mało czasowymagająca
(cóż za piękne słowo ;-)). Odświeżanie i ADC na komparatorze
chodzą w przerwaniach, asynchronicznie do pętli głównej, w której
są sprawdzane przyciski.
A ja mam bardzo złe wspomnienia po programie w którym przyciski
rozpoznawałem w głównej pętli. Dlatego teraz zawsze robię to w przerwaniach
od timera.
Najczęściej ustawiam przerwanie co 4 ms a klawisz rozpoznawany jest po 2
jednakowych odczytach klawiatury. Tylko ostatnio musiałem dać 4 odczyty
ponieważ użyta była klawiaturka membranowa. Przy okazji takiego rozwiązania
bardzo łatwo robi się autopowtarzanie - nawet dynamiczne o zmiennej
prędkości, wykrywanie długich wciśnięć klawiszy i pomiar wszystkich
potrzebnych w programie czasów.
--
Janusz
========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!not-for-mai
From: Ireneusz Niemczyk <i.niemczyk_at_nospam_multispedytor.com.pl>
Subject: Re: Debouncing
Date: Wed, 10 Sep 2003 21:38:55 +0200
A ja mam bardzo złe wspomnienia po programie w którym przyciski
rozpoznawałem w głównej pętli. Dlatego teraz zawsze robię to w przerwaniach
od timera.
O!, co się działo? Ja często dekoduję je w głownej pętli, czasami nawet robię to
prymitywnie i tylko sprawdzam czy po jakims czasie jest puszczony. Nie mialem z
tym jeszcze problemow. Zresztą jak przycisków jest kilka (4?) to nie ma co się
pachać w przerwania.
Najczęściej ustawiam przerwanie co 4 ms a klawisz rozpoznawany jest po 2
jednakowych odczytach klawiatury. Tylko ostatnio musiałem dać 4 odczyty
ponieważ użyta była klawiaturka membranowa.
W przerwaniu robię jak mam matrycową, dobrze się sprawuje. Zazwyczaj przerwanie
pcha wynik przeszukania klawiszy w semafory ;-)
a dalej program traktuje semafory jak klawisze.
__
Pzd, Irek.N.
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai
From: "Fish" <n.o.s.p.a.m.apf_jf_at_nospam_poczta.onet.pl>
Subject: Re: Debouncing
Date: Wed, 10 Sep 2003 22:08:57 +0200
Użytkownik "Ireneusz Niemczyk" <i.niemczyk_at_nospam_multispedytor.com.pl> napisał w
wiadomości news:3F5F7DCE.CF4E8607_at_nospam_multispedytor.com.pl...
A ja mam bardzo złe wspomnienia po programie w którym przyciski
rozpoznawałem w głównej pętli. Dlatego teraz zawsze robię to w
przerwaniach
od timera.
O!, co się działo?
A po prostu szybko mi się bałagan zrobił z tym dekodowaniem, szczególnie że
w wielu miejscach musiałem reagować na długie naciskanie klawisza co
dodatkowo komplikowało mi robotę.
W pewnym momencie stwierdziłem że już nie panuję nad tym co się w programie
dzieje. Ale o dziwo jednak działało i działa poprawnie do dzisiaj :-)
Powód tego, ze zdecydowałem się na takie rozwiązanie był taki, że to miał
być prosty programik do napisania w godzinę. I własnie tak do niego
podeszłem ale zaraz się okazało że potrzebna jest jeszcze taka funkcja,
potem jeszcze inna....
I tak w krótkim czasie prawie 2kB kodu się zrobiło ;-)
Ja często dekoduję je w głownej pętli, czasami nawet robię to
prymitywnie i tylko sprawdzam czy po jakims czasie jest puszczony. Nie
mialem z
tym jeszcze problemow. Zresztą jak przycisków jest kilka (4?) to nie ma co
się
pachać w przerwania.
A czemu nie?
Szczególnie jak można włożyć cały gotowy i sprawdzony moduł?
Przy okazji jak wcześniej pisałem mam taktowanie całego programu i flagi
sygnalizujące upływ różnych odcinków czasu.
--
Janusz
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: Debouncing
Date: Thu, 11 Sep 2003 00:31:08 +0200
Fish wrote:
A po prostu szybko mi się bałagan zrobił z tym dekodowaniem, szczególnie
że
w wielu miejscach musiałem reagować na długie naciskanie klawisza co
dodatkowo komplikowało mi robotę. W pewnym momencie stwierdziłem
że już nie panuję nad tym co się w programie dzieje.
A bo program to sie projektuje zanim sie go zacznie pisac. :-)
Na etapie analizy przypadkow uzycia wychodzi wiekszosc zaleznosci,
dzieki czemu podczas fazy projektowania mozna latwo wyeliminowac
wspolne podgrafy, nadac im szumna nazwe modulow itp. Ty najpierw
zaczales pisac, a dopiero pozniej przemyslales sprawe, wiec nie ma
co sie dziwic, ze pojawily sie problemy. :-)
zaraz się okazało że potrzebna jest jeszcze taka funkcja,
potem jeszcze inna....
I jestes sam sobie winien. :o))) Najpierw przypadki uzycia,
a _dopiero pozniej_ myslenie, czy w ogole napisac program
(nie wspominajac nawet o tym jak napisac ten program).
W chwili obecnej elementy inzynierii oprogramowania moga
bardzo przydac sie elektronikom, wiec naprawde warto sie
z nimi zapoznac. W prawie kazdej dziedzinie najpierw powstaje
analiza, pozniej projekt, a dopiero na koncu jego implementacja,
lecz nie wiedziec czemu w informatyce i programowaniu wielu
ludzi wklada sporo energii w odwrocenie tej kolejnosci. :-)))
A czemu nie?
A po co? Tzn. jesli petla glowna robi cos istotnego o blizej
nieznanym czasie trwania, to oczywiscie warto, ale jesli
budujemy system czasu rzeczywistego i zostalo troche wolnych
cykli, to nie ma potrzeby pchac sie w przerwania.
Pozdrawiam
Piotr Wyderski
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai
From: "Fish" <n.o.s.p.a.m.apf_jf_at_nospam_poczta.onet.pl>
Subject: Re: Debouncing
Date: Thu, 11 Sep 2003 10:45:47 +0200
Użytkownik "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl> napisał w
wiadomości news:bjo8qf$d9r$2_at_nospam_nemesis.news.tpi.pl...
A bo program to sie projektuje zanim sie go zacznie pisac. :-)
No jasne. Wszystko pięknie dopóki poruszamy się w sferze teorii.
W praktyce przychodzi potencjalny klient i mówi że chce to i tamto.
Na podstawie tych wymagań projektuje się sprzęt, robi prototyp, pisze
program.
A jak klient zobaczy działający prototyp to wpadają mu do głowy rózne psie
myśli ;-)
I zaczyna się dokładanie a cała wstępna analiza programu nadaje sie do
przeróbki na rolki szarego papieru :-)
z nimi zapoznac. W prawie kazdej dziedzinie najpierw powstaje
analiza, pozniej projekt, a dopiero na koncu jego implementacja,
lecz nie wiedziec czemu w informatyce i programowaniu wielu
ludzi wklada sporo energii w odwrocenie tej kolejnosci. :-)))
W tym problem że ci ludzie to są klienci który nie mają zielonego pojęcia o
konstruowaniu czegokolwiek a w szczególności układów mikroprocesorami.
--
Janusz
========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: Jarek Andrzejewski <jareka_at_nospam_dawid.com.pl>
Subject: Re: Debouncing
Date: Fri, 10 Oct 2003 13:19:51 +0200
On Thu, 11 Sep 2003 00:31:08 +0200, "Piotr Wyderski"
<piotr.wyderskiREMOVE_at_nospam_hoga.pl> wrote:
A bo program to sie projektuje zanim sie go zacznie pisac. :-)
Na etapie analizy przypadkow uzycia wychodzi wiekszosc zaleznosci,
dzieki czemu podczas fazy projektowania mozna latwo wyeliminowac
wspolne podgrafy, nadac im szumna nazwe modulow itp. Ty najpierw
zaczales pisac, a dopiero pozniej przemyslales sprawe, wiec nie ma
co sie dziwic, ze pojawily sie problemy. :-)
W chwili obecnej elementy inzynierii oprogramowania moga
bardzo przydac sie elektronikom, wiec naprawde warto sie
z nimi zapoznac. W prawie kazdej dziedzinie najpierw powstaje
analiza, pozniej projekt, a dopiero na koncu jego implementacja,
lecz nie wiedziec czemu w informatyce i programowaniu wielu
ludzi wklada sporo energii w odwrocenie tej kolejnosci. :-)))
BTW: bardzo fajna książka dla programistów:
http://www.ltandp.com.pl/programista_info/
To nie reklama - po prostu naprawdę niezła książka...
--
pozdrawiam,
Jarek Andrzejewski
========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!lublin.pl!uw.edu.pl!news.pw.edu.pl!news.itl.waw.pl!not-for-mai
From: "Jacek R. Radzikowski" <jacek_at_nospam_piranet.org>
Subject: Re: Debouncing
Date: Fri, 10 Oct 2003 18:22:49 +0000 (UTC)
Jarek Andrzejewski <jareka_at_nospam_dawid.com.pl> wrote:
On Thu, 11 Sep 2003 00:31:08 +0200, "Piotr Wyderski"
<piotr.wyderskiREMOVE_at_nospam_hoga.pl> wrote:
A bo program to sie projektuje zanim sie go zacznie pisac. :-)
Na etapie analizy przypadkow uzycia wychodzi wiekszosc zaleznosci,
dzieki czemu podczas fazy projektowania mozna latwo wyeliminowac
wspolne podgrafy, nadac im szumna nazwe modulow itp. Ty najpierw
zaczales pisac, a dopiero pozniej przemyslales sprawe, wiec nie ma
co sie dziwic, ze pojawily sie problemy. :-)
W chwili obecnej elementy inzynierii oprogramowania moga
bardzo przydac sie elektronikom, wiec naprawde warto sie
z nimi zapoznac. W prawie kazdej dziedzinie najpierw powstaje
analiza, pozniej projekt, a dopiero na koncu jego implementacja,
lecz nie wiedziec czemu w informatyce i programowaniu wielu
ludzi wklada sporo energii w odwrocenie tej kolejnosci. :-)))
BTW: bardzo fajna książka dla programistów:
http://www.ltandp.com.pl/programista_info/
To nie reklama - po prostu naprawdę niezła książka...
To ja jeszcze pozwole sobie polecic "The Art of Unix Programming"
autorstwa ESR. Co prawda slowko Unix moze przerazic co bardziej bojazliwe
osoby, ale nie ma sie czego bac. Poza oczywista dawka wiedzy czysto
unixowoprogramistycznej, zawiera bardzo duzo wiedzy z zakresu inzynierii
oprogramowania, ktora powinna byc znana kazdej osbie, ktora ma zamiar
brac sie za pisanie czegokolwiek bardziej skomplikowanego niz "hello world".
Ksiazka jest dostepna online pod adresem
http://catb.org/~esr/writings/taoup/html/
pzdr.
j.
--
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai
From: Marek Lewandowski <nospamabuse_at_nospam_poczta.onet.pl>
Subject: Re: Debouncing
Date: Wed, 10 Sep 2003 22:18:57 +0200
Ireneusz Niemczyk wrote:
W przerwaniu robię jak mam matrycową, dobrze się sprawuje. Zazwyczaj przerwanie
pcha wynik przeszukania klawiszy w semafory ;-)
a dalej program traktuje semafory jak klawisze.
A ja koduję klawisze i pcham w bufor klawiatury...
Dzięki czemu dodanie obsługi np. klawiaturki od PC czy pilota IR jest
banalne
--
Marek Lewandowski ICQ# 10139051/GG# 154441
locustXpoczta|onet|pl
http://locust.republika.pl
[! Odpowiadaj pod cytatem. Tnij cytaty. Podpisuj posty. !]
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed.silweb.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: Debouncing
Date: Thu, 11 Sep 2003 00:09:50 +0200
Fish wrote:
A ja mam bardzo złe wspomnienia po programie w którym przyciski
rozpoznawałem w głównej pętli.
Dlaczego? Ja nie przetwarzam klawiszy natychmiast po wcisnieciu,
tylko -- standardowo -- wstawiam znaki do buforu z ktorego czyta
reszta programu. Dodatkowo w razie potrzeby podsystem obslugi
buforu realizuje autorepeat, potwierdzanie dzwiekowe na piezo itd.
Stad fizyczne wcisniecie klawisza i jego obsluga niekoniecznie
odbywaja sie w tej samej iteracji petli glownej -- moj program jest
zaprojektowany w oparciu o architekture sterowana zdarzeniami
(event driven), a nie przeplywem sterowania (control flow driven).
Dzieki temu jego struktura jest bardzo przejrzysta i nie ma komplikacji
podczas rozbudowy, o ktorych wspomniales.
Dlatego teraz zawsze robię to w przerwaniach od timera.
Jeden timer mam zajety przez PWM, a drugi sluzy do synchronizowania
petli glownej, wiec w sumie odpowiada to Twojemu rozwiazaniu, ale
dzieki pollingowi mam potrzebna odpornosc na niewielkie przekroczenia
timeoutu. ADC na komparatorze wykorzystuje zegar taktujacy procka,
a nie timer i wyglada tak:
; wlaczenie zrodla pradowego i przerwan komparatora
measure_voltage:
adiw xl,0x02
rjmp measure_voltage
; wylaczenie przerwan komparatora, rozladowanie kondensatora
dzieki czemu mam rozdzielczosc 2 cykli zamiast 8, jak w propozycji
Atmela. Przerwanie komparatora, wlaczane tylko na te specjalna
okazje przerywa petle oraz dokonuje korekcji wyniku (w zaleznosci
od tego w ktorym wierzcholku grafu przeplywu sterowania wystapilo).
Przy okazji takiego rozwiązania bardzo łatwo robi się autopowtarzanie
- nawet dynamiczne o zmiennej prędkości, wykrywanie długich wciśnięć
klawiszy i pomiar wszystkich potrzebnych w programie czasów.
U mnie tak samo prosto, bo petla glowna wykonuje sie 1000 razy na
sekunde. Przerwan do tego celu nie uzywam, bo rzadkie przekroczenie
timeoutu jest dopuszczalne, a nie ma potrzeby bawic sie albo
z maskowaniem przerwan timera, albo z przerwaniami zagniezdzonymi.
Poza tym dla mnie odswiezanie i obsluga klawiatury to zdecydowanie
zbyt ciezka rzecz, by ja umiescic w procedurze obslugi przerwania.
Pozdrawiam
Piotr Wyderski
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai
From: "Fish" <n.o.s.p.a.m.apf_jf_at_nospam_poczta.onet.pl>
Subject: Re: Debouncing
Date: Thu, 11 Sep 2003 11:00:45 +0200
Użytkownik "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl> napisał w
wiadomości news:bjo8ra$d9r$3_at_nospam_nemesis.news.tpi.pl...
Jeden timer mam zajety przez PWM, a drugi sluzy do synchronizowania
petli glownej, wiec w sumie odpowiada to Twojemu rozwiazaniu, ale
Straszne marnotrawstwo!!!
Można przecież wykorzystać jednocześnie timer do generowania PWM a
przerwania z niego do liczenia czau,klawiatury i wielu innych nikomu nie
potrzebnych rzeczy ;-)
dzieki pollingowi mam potrzebna odpornosc na niewielkie przekroczenia
timeoutu. ADC na komparatorze wykorzystuje zegar taktujacy procka,
a nie timer i wyglada tak:
; wlaczenie zrodla pradowego i przerwan komparatora
measure_voltage:
adiw xl,0x02
rjmp measure_voltage
; wylaczenie przerwan komparatora, rozladowanie kondensatora
dzieki czemu mam rozdzielczosc 2 cykli zamiast 8, jak w propozycji
Atmela.
No to ciekawy pomysł. Będę musiał przy najbliższej okazji wypróbowac :-)
Poza tym dla mnie odswiezanie i obsluga klawiatury to zdecydowanie
zbyt ciezka rzecz, by ja umiescic w procedurze obslugi przerwania.
Parę flag i po bólu. Wtedy kolejne przerwania wiedzą co zdarzyło się w
poprzednich i wykonują odpowiednie czynności i ewentualnie ustawiają kolejne
flagi. Jednocześnie za każdym razem tylko kilkanaście instrukcji jest do
wykonania dzięki czemu procesor nie przesiaduje wieki w przerwaniu.
W podobny sposób zrobiłem kiedyś na '51 odbiór IR w kodzie RC5. Zajmował
tylko 7% czasu procesora (oczywiście tylko w trakcie transmisji z pilota)
--
Janusz
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!feed.news.interia.pl!newsfeed.gazeta.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: Debouncing
Date: Thu, 11 Sep 2003 16:44:46 +0200
Fish wrote:
Jeden timer mam zajety przez PWM, a drugi sluzy do synchronizowania
petli glownej, wiec w sumie odpowiada to Twojemu rozwiazaniu, ale
Straszne marnotrawstwo!!!
Dla niego i tak nie ma innego zastosowania, wiec co najwyzej moge go
wylaczyc. :-)
Można przecież wykorzystać jednocześnie timer do generowania PWM a
przerwania z niego do liczenia czau,klawiatury i wielu innych nikomu nie
potrzebnych rzeczy ;-)
16600 przerwan na sekunde? Dziekuje, postoje. ;-)
Parę flag i po bólu. Wtedy kolejne przerwania wiedzą co zdarzyło się w
poprzednich i wykonują odpowiednie czynności i ewentualnie ustawiają
kolejne
flagi.
To oczywiste, ale obsluga "pustych" przerwan albo ich maskowanie
w zaleznosci od potrzeby sporo kosztuje. Poza tym przy takiej
czestotliwosci ich wystepowania przerwania beda wypadaly w cyklu
pomiarowym ADC, bardzo wplywajac na wynik pomiaru (przeciez
ja licze cykle w procedurze konwersji). Jesli je na ten czas wylacze,
to nie bede mial precyzyjnego ustalania czasu obiegu petli glownej.
Slowem: timer i jego polling zostaja. :-)
Jednocześnie za każdym razem tylko kilkanaście instrukcji jest do
wykonania dzięki czemu procesor nie przesiaduje wieki w przerwaniu.
Czyli kilka procent mocy obliczeniowej sie marnuje. :-)
Pozdrawiam
Piotr Wyderski
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai
From: "Fish" <n.o.s.p.a.m.apf_jf_at_nospam_poczta.onet.pl>
Subject: Re: Debouncing
Date: Thu, 11 Sep 2003 23:12:16 +0200
Użytkownik "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl> napisał w
wiadomości news:bjqma7$4ne$1_at_nospam_nemesis.news.tpi.pl...
16600 przerwan na sekunde? Dziekuje, postoje. ;-)
Zaraz zaraz.
Myślałem o przypadku wykorzystania PWM-a 10bitowego który ma okres
powtarzania nędzne 2kHz (AT90S8535 _at_nospam_ 4MHz)
Przy 16kHz takie operacje nie mają oczywiście sensu chyba że czasu procek ma
za dużo a timera już zabrakło :-)
Poza tym przy takiej
czestotliwosci ich wystepowania przerwania beda wypadaly w cyklu
pomiarowym ADC, bardzo wplywajac na wynik pomiaru (przeciez
ja licze cykle w procedurze konwersji). Jesli je na ten czas wylacze,
to nie bede mial precyzyjnego ustalania czasu obiegu petli glownej.
Slowem: timer i jego polling zostaja. :-)
Zawsze można spróbować zmieścić pomiar pomiędzy przerwaniami timera.
W końcu jeżeli mówisz o 2 cyklach zegara na "działkę" w ADC to pomiar
powinien skończyć się na max 1000 cyklach bo większej dokładności taki ADC i
tak nie osiągnie. Nawet przy zegarze 1MHz prawie mieścimy się w dziurze
pomiędzy przerwaniami timera co 1ms. A przy moich 4ms pomiędzy przerwaniami
to jeszcze 2 pełne pomiary spokojnie zrobisz ;-)
Czyli kilka procent mocy obliczeniowej sie marnuje. :-)
Ależ skąd.Bardzo pożytecznie ten czas jest zużyty :-)
--
Janusz
========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!news.man.poznan.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: Debouncing
Date: Fri, 12 Sep 2003 10:48:50 +0200
Fish wrote:
Myślałem o przypadku wykorzystania PWM-a 10bitowego który ma okres
powtarzania nędzne 2kHz (AT90S8535 _at_nospam_ 4MHz)
Ja mam 8-bitowy (AT90S2313 _at_nospam_ 8,4672 MHz), wystarcza
z zapasem, a glownie potrzeba mi bylo wysokiej czestotliwosci.
Zawsze można spróbować zmieścić pomiar pomiędzy przerwaniami timera.
W końcu jeżeli mówisz o 2 cyklach zegara na "działkę" w ADC to pomiar
powinien skończyć się na max 1000 cyklach bo większej dokładności taki
ADC i tak nie osiągnie.
2 cykle na dzialke to rozdzielczosc licznika cykli, ale moga wystapic
przeciez drobne fluktuacje w procesie ladowania kondensatora itp.,
co nie pozwoli traktowac powaznie LSB. Dlatego pomiary robie
4 razy dluzsze i dodatkowo usredniam wyniki 4 ostatnich, co daje
bardzo przyzwoity efekt, na oko rozdzielczosc jest znacznie lepsza
niz zakladane 8 bitow, ale nie wiem ile. BTW, wlasnie skonczylem
implementowanie obslugi klawiaturki metoda Jerrego i calosc ruszyla
od pierwszego wlaczenia -- bardzo dziekuje wszystkim za cenne rady
i chyba wypada zamknac watek. :-)
Pozdrawiam
Piotr Wyderski
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: Debouncing
Date: Fri, 12 Sep 2003 23:04:02 +0200
On Thu, 11 Sep 2003 16:44:46 +0200, Piotr Wyderski wrote:
Można przecież wykorzystać jednocześnie timer do generowania PWM a
przerwania z niego do liczenia czau,klawiatury i wielu innych nikomu nie
potrzebnych rzeczy ;-)
16600 przerwan na sekunde? Dziekuje, postoje. ;-)
Why not ? Tak ci zalezy zeby procek jak najwiecej czasu spedzal
w pustej petli ? :-)
J.
========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!not-for-mai
From: Ireneusz Niemczyk <i.niemczyk_at_nospam_multispedytor.com.pl>
Subject: Re: Debouncing
Date: Fri, 12 Sep 2003 23:28:44 +0200
Why not ? Tak ci zalezy zeby procek jak najwiecej czasu spedzal
w pustej petli ? :-)
Dobre przyzwyczajenie programisty?
Wiesz - zawsze mozna rozbudowac program, a jak sie przegnie z przerwaniami, to
pozniej juz ciezko wyszkrobac czas procesorka pod nowe zadania ;-)
Miłej nocki.
__
Pzd, Irek.N.
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: Debouncing
Date: Fri, 12 Sep 2003 23:59:34 +0200
J.F. wrote:
Why not ?
Powody opisalem w innym poscie -- konwerter ADC mi siadzie,
albo kod obslugi przerwan zostanie niepotrzebnie rozbudowany.
A tak wszystko (obsluga ADC, klawiatury, bzyczka, wyswietlacza,
wzorce znakow, inicjalizacja ukladu i watchdog) zajmuje 148 slow
pamieci. :-)
Tak ci zalezy zeby procek jak najwiecej czasu spedzal
w pustej petli ? :-)
Ona nie jest pusta, tzn. zawiera wszystko, co procek ma zrobic.
A jesli zostalo czasu do nastepnego cyklu przetwarzania, to i tak
procek nie nic do zrobienia, wiec trudno wymyslic cos bardziej
rozsadnego niz czekanie. Takie nowe wcielenie zasady brzytwy
Ockhama: nie wykorzystuj zasobow ponad potrzebe. :-) Skoro
da sie to doskonale zrobic bez przerwan, to po co mialbym ich
uzywac?
Pozdrawiam
Piotr Wyderski
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsgate.onet.pl!newsgate.p
From: zielpro_at_nospam_poczta.onet.pl (ziel)
Subject: RE: Debouncing
Date: 11 Sep 2003 12:08:51 +0200
On Behalf Of Piotr Wyderski
U mnie tak samo prosto, bo petla glowna wykonuje sie 1000 razy na
sekunde. Przerwan do tego celu nie uzywam, bo rzadkie przekroczenie
timeoutu jest dopuszczalne, a nie ma potrzeby bawic sie albo
z maskowaniem przerwan timera, albo z przerwaniami zagniezdzonymi.
Poza tym dla mnie odswiezanie i obsluga klawiatury to zdecydowanie
zbyt ciezka rzecz, by ja umiescic w procedurze obslugi przerwania.
Nie naprawiaj tego co dobrze pracuje.
Ale jeśli : cierpisz na nadmiar wolnego czasu, nie możesz spać,
a na widok piwa nabierasz światłowstrętu - to połącz jedno z drugim ;-).
Mam klawiaturę (matrycową) podpiętą pod wyświetlacz
LED i odświeżając LED jednocześnie badam klawisze.
A dzieki temu, że odbywa się to w przerwaniu timer1, nie ma miejsca
na "pływanie" wyświetlanych cyfr oraz moge precyzyjnie określić
timeout klawiszy. Źródło oczywiście w BASCOM :-D
pzdr
Artur
--
Archiwum grupy: http://niusy.onet.pl/pl.misc.elektronika
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: Debouncing
Date: Thu, 11 Sep 2003 16:34:54 +0200
ziel wrote:
Nie naprawiaj tego co dobrze pracuje.
Ale jeśli : cierpisz na nadmiar wolnego czasu, nie możesz spać,
a na widok piwa nabierasz światłowstrętu - to połącz jedno z drugim ;-).
Mam klawiaturę (matrycową) podpiętą pod wyświetlacz
LED i odświeżając LED jednocześnie badam klawisze.
Ja robie dokladnie tak samo.
A dzieki temu, że odbywa się to w przerwaniu timer1, nie ma miejsca
na "pływanie" wyświetlanych cyfr oraz moge precyzyjnie określić
timeout klawiszy.
U mnie tez nie ma problemu. Petla glowna wyglada w przyblizeniu tak:
for(;;) {
reset_timer();
obsluga_klawiatury();
obsluga_wyswietlacza();
ADC();
obsluga_PWM_oraz_pozostalych_dziwnych_rzeczy();
while(!timer_overflow);
}
Timer jest ustawiony na 1 ms, wiec timeouty mierzy sie bardzo prosto.
Źródło oczywiście w BASCOM :-D
A ja wole w asemblerze. :-P
Pozdrawiam
Piotr Wyderski
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsgate.onet.pl!newsgate.p
From: zielpro_at_nospam_poczta.onet.pl (ziel)
Subject: RE: Debouncing
Date: 10 Sep 2003 22:10:57 +0200
On Behalf Of Marcin Stanisz
A mnie się udało :-) Co prawda aplikacja mało czasowymagająca
(cóż za piękne słowo ;-)). Odświeżanie i ADC na komparatorze
chodzą w przerwaniach, asynchronicznie do pętli głównej, w której
są sprawdzane przyciski.
To i ja dołoże swoje.
Mega128.
Przerwanie na Timer0 z preskalerem na 1024
Przerwanie Timer1 z preskalerem 8.
Tim0 zmniejsza licznik (danego przycisku)do zera.
Oczywiście tylko jeśli jego wartość jest <>0.
Tim1 sprawdza stan klawisza jeśli jego licznik jest =0.
Obowiązuje dla stanu klawisza 0 oraz dla stanu 1.
Zmiana stanu zostaje zapisana jako aktualna i wpisywana
jest liczba do jego licznika.
Pętla główna uznaje za klawisz wciśnięty dopiero kiedy
jego wartość jest 1 (zwierają do masy) i licznik jest równy 0,
a poprzednio uznany stan klawisza był 0, czyli licznik
zliczył do zera, w czasie kiedy przy każdym przerwaniu Tim1
na wyprowadzeniu podłączonym do klawisza było 0.
W ten sposób reaguje tylko na zwolnienie klawisza, pozwala to
na np. wciśnięcie jednocześnie drugiego klawisza aby spokojnie
wycofać się z zamiaru czegoś tam. Podobnie jak wciśnięcie przycisku
myszy nad np."klawiszem Anuluj" i trzymając wciśnięty przesunięciu
nad inny obszar.
Klawisze kursora mają jeszcze dodatkowo licznik zwłoki,
żeby w przypadku dłuższego przyciśnięcia, po zmniejszeniu licznika
zwłoki do zera (w przerwaniu timer0) następowała "automatyczna"
inkrementacja lub dekrementacja.
Zainteresowanym udostępnię oryginał.
W BASCOM :-P
pzdr
Artur
PS1
Trzeci timer steruje jasnością podświetlenia i kontrastem.
mega128 jest piękna ;-)
PS2 do Miłosza.
Jak się spotkamy to pokażę Ci jak za pomocą BASCOMa
można przerobić program "mało czasochłonny" na
"czasożerny" ;-)
PS3 do Wszystkich.
ale BASCOM i tak jest OK.
Można się dużo nauczyć, szczególnie przy pisaniu
procedur w asm. ;-)
PS4 do mnie
Zaślęczyłbym się na śmierć gdyby nie BASCOM ;-)
--
Archiwum grupy: http://niusy.onet.pl/pl.misc.elektronika
========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!not-for-mai
From: Marcin Stanisz <mstanisz_at_nospam_poczta.onet.pl>
Subject: Re: Debouncing
Date: 11 Sep 2003 07:00:08 GMT
W artykule <GCEELCNNHEGDKMODCEPBEENAFCAA.zielpro_at_nospam_poczta.onet.pl>
ziel napisal(a):
PS4 do mnie
Zaślęczyłbym się na śmierć gdyby nie BASCOM ;-)
PS5. do mnie ;-)
Zaślęczyłbym się na śmierć, gdyby nie gcc ;-))
Choć na początku myślałem, że gcc zaślęczy mnie na śmierć.
Pozdrawiam
Marcin Stanisz
--
"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"
========
Message-ID: <3F618548.2070707_at_nospam_badworm.pl>
Date: Fri, 12 Sep 2003 10:35:20 +020
From: badworm <nospam_at_nospam_post.pl>
Subject: Re: Debouncing
Osoba podająca się za: ziel przyczyniła się do uszczuplenia moich
skromnych zasobów dyskowych ;-) wraz z kolejną wiadomością wysłaną
03-09-10 22:10:
<ciach opis programu>
Zainteresowanym udostępnię oryginał.
W BASCOM :-P
Mogę prosić? Jakby mozna było to razem z tym fragmentem sterującym
trzecim timerem :-)
--
Pozdrawiam Bad Worm badworm{m-a-ł-p-a}post[K_R_O_P_K_A]pl
http://www.gusnet.prv.pl GG# 2400455
"All in all you're just another brick in the wall"
Tnijcie cytaty i sygnaturki!
========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: =?iso-8859-2?Q?Pawe=B3_Ko=B3odziej?= <pawelk_at_nospam_pld.org.pl>
Subject: Re: Debouncing
Date: Tue, 9 Sep 2003 16:51:57 +0200
W artykule <bjkbhr$7dm$1_at_nospam_atlantis.news.tpi.pl> Piotr Wyderski napisał(a):
Witam,
na czym dokladnie polega eliminowanie drgan stykow?
Czy w chwili pierwszego wykrycia wcisniecia klawisza
sterownik czeka ustalony czas po czym dopiero bada
stan klawisza, czy tez pierwsze wykrycie oznacza wcisniecie
klawisza, a nastepnie odpowednia linia jest "glucha" przez
ustalony czas, czy robi sie to jeszcze jakos inaczej?
Jesli jest taka mozliwosc, mozesz zastosowac przelacznik typu isostat.
Tzn. w jednej pozycji zwiera styki 1 z 2 w drugiej 2 z 3. Wtedy dajesz
na 2 stan aktywny, 1 i 3 ,,pul up/down'' do niaktywnego oraz 1 i 3
podlaczasz na wejscia R i S przerzutnika RS.
Jak niemozesz isostata to tak jak Ci ktos ju napisal - musi byc przez
jakis czas nieprzerwanie dany sygnal. My na laborkach z mikroprocesorow
robilismy 0.2s i dzialalo w sposob pewny. Ale czas pewnie zalezy od
tego jakie masz styki.
Pozdrawiam,
Paweł
========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!news.astercity.net!not-for-mai