www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Branje tipk!

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
dgregor
Član
Član



Pridružen-a: Čet 06 Jan 2005 13:55
Prispevkov: 32
Aktiv.: 0.14
Kraj: Celje

PrispevekObjavljeno: Čet Apr 20, 2006 7:09 am    Naslov sporočila:  Branje tipk! Odgovori s citatom

Pozdravljeni!

Imam majhen problem pri branju tipk z PIC-em. Saj ne da ne dela vendar pritisk na tipko včasih preskoči ali pa "prime" dvakrat.
Program imam napisan z MikroBasicom in izgleda takole:

-testiram stanje tipke če je stanje na vhodu 1,
-čakam 200ms (uporabim zakasnitev),
-še enkrat testiram stanje tipke in če je še vedno na vhodu stanje 1 potem je
tipka sklenjena.

Zanima me ali ima kdo kakšen boljši predlog glede branja tipk oziroma občutek imam da je ta čas zakasnitve malo velik (kar pa še nisem stestiral, saj je ideja padla pred kratkim).

LP!, Gregor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2752
Aktiv.: 11.62
Kraj: Trzic

PrispevekObjavljeno: Čet Apr 20, 2006 7:31 am    Naslov sporočila:   Odgovori s citatom

Temu problemu se 'strokovno' reče debouncing (preprečevanje odskakovanja) kontakta/tipke. Jaz problem rešim tako, da zakasnim preverjanje za 20ms, preverjam pa sicer precej bolj nagosto.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Slemi
Član
Član



Pridružen-a: Pet 29 Okt 2004 13:29
Prispevkov: 386
Aktiv.: 1.63
Kraj: Hrastnik

PrispevekObjavljeno: Čet Apr 20, 2006 8:29 am    Naslov sporočila:   Odgovori s citatom

Če se ti program dovolj hitro izvaja, lahko preverjaš stanje tipke (t.i. polling), in je ne uporabljaš s prekinitvijo.
_________________
slemi.info - en
slemi.si - slo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo AIM - AOL Instant - naslov MSN Messenger - naslov
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Čet Apr 20, 2006 10:53 am    Naslov sporočila:   Odgovori s citatom

Namesto da tistih 20 (200 ali kolikor pac ze) ms cakas v zanki in ne delas nic, preverjaj stanje tipke in vsakic, ko je stanje 1, pristej 1 dolocenemu stevcu. V izbranem casu bo taka zanka sla skozi N iteracij, vrednost stevca bo torej 1 .. N (najbrz si zacel steti sele takrat, ko je bila tipka pritisnjena). Nastavi treshold (recimo N / 2), nad katerim privzames, da je bila tipka pritisnjena, pod njim pa je slo samo za motnjo.

Prakticen primer:

Ce se zanka izvede 200x, koncno stanje stevca pa je 158 (kar je vec od N / 2, ki je izbrana meja, a manj od N, kar je maksimum, saj je najbrz tipka odskakovala ob vklopu ...), potem bi to interpretiral kot pritisk. Mejo nastavis po izkusnjah in glede na dolzino intervala v katerem preverjas.

Preverjanje tipek (debounce) sprozi samo v primeru spremembe stanja iz enega izbranega v drugo (tipka) ali v primeru spremembe stanja iz kateregakoli v drugega (stikalo), da se znebis ponovnih (laznih) vklopov ob enem samem pritisku.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.71
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Čet Apr 20, 2006 4:07 pm    Naslov sporočila:   Odgovori s citatom

Glede na primere raznih (delujočih) debounce procedur je 200 ms precej velik čas. Poizkusi skrajšati za deset ali večkrat. 200 ms je že tak čas, da je v njem pri hitrem tipkanju tipka pritisnjena in spuščena. Procedura kontakta tako sploh ne bo zaznala.

Jur
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
snoopy
Član
Član



Pridružen-a: Ned 11 Maj 2003 1:17
Prispevkov: 230
Aktiv.: 0.97
Kraj: Radovljica

PrispevekObjavljeno: Sre Avg 02, 2006 5:43 pm    Naslov sporočila:   Odgovori s citatom

Bi kar tukaj nadaljeval z mojim vprašanjem.

Kako se v preaksi realizira večfunkcionalnost ene tipke.

Ko pritisnem tipko naredi nekaj. Če tipko držim po 5 sec naredi nekaj drugega.

Z uporabo timerja , ki šteje. Vendar sem zbegan kaj dati v glavni program ,kaj v
timer.

Prosim za pomoč

Lp
Snoopy
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Slemi
Član
Član



Pridružen-a: Pet 29 Okt 2004 13:29
Prispevkov: 386
Aktiv.: 1.63
Kraj: Hrastnik

PrispevekObjavljeno: Sre Avg 02, 2006 6:02 pm    Naslov sporočila:   Odgovori s citatom

Snoopy v timer daj eno spremenljivko, ki jo povečuješ za 1. V glavnem programu pa preverjaj če je recimo tista spremenljivka = 1, potem to pomeni, da je bila ravnokar pritisnjena, če pa ima npr. vrednost = 50 potem je to 5 sekund. To je primer, sam si moraš preračunati da ti bo točno. Pazi pa na to, da dodaš ukaz, da če je spremenljivka večja od 250 potem je spremenljivka 250 (if spremenljivka > 250 then spremenljivka = 250), v nasprotnem primeru se ti lahko zgodi da ti bo ukaz ponavljalo ker bo spremenljivka naredila "overflow" in bo spet štela od 0.

Lp

_________________
slemi.info - en
slemi.si - slo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo AIM - AOL Instant - naslov MSN Messenger - naslov
snoopy
Član
Član



Pridružen-a: Ned 11 Maj 2003 1:17
Prispevkov: 230
Aktiv.: 0.97
Kraj: Radovljica

PrispevekObjavljeno: Pet Avg 04, 2006 10:09 am    Naslov sporočila:   Odgovori s citatom

Slemi hvala za namig. Sem dodal kot si priporočal in dela.

Za eno tipko je hitro rešljivo , kaj pa če imam 16 takšnih tipk.
Kako potem rešim problem?

Lp
Snoopy
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
clownfish
Član
Član



Pridružen-a: Pet 05 Avg 2005 13:05
Prispevkov: 765
Aktiv.: 3.23
Kraj: Povir / Ljubljana

PrispevekObjavljeno: Sre Mar 21, 2007 6:24 pm    Naslov sporočila:   Odgovori s citatom

snoopy je napisal/a:
Za eno tipko je hitro rešljivo , kaj pa če imam 16 takšnih tipk.
Kako potem rešim problem?


Sam berem tipke in vračam vrednosti. Če je koda tipke 0 potem tipka ni pritisnjena.
Če pa je različna od 0 vračam nejno kodo oziroma skupno kodo vseh tipk pri čemer je vsaka tipka en bit, poleg tega pa vračam še čas koliko časa je tipka oziroma več tipk pritisnjenih.
rutina za branje tipk je v RTC rutini in se kliče vsako 1/32sec. čas pa je toliko 1/32sekunde.

Tako potem ob vsaki spremebi vrednosti tipke ki je daljša od 1/32 sekunde rečem da je tipka ali več tipk veljavna hkrati vračam tudi čas.

V meniju kjer obdelujem tipke pa imam potem možnost preverjati katera tipka in koliko časa je pritisnjena.

Tako lahko eno tipko glede na čas pritiska uporabiš za več funkcij..
Sicer sem pa zadevo pokopiral iz podobnega sisetma uporabljenega pri raznih priročnih zadevah.. ročnih urah,mobitelih in podobno..
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
IR ELECTRONIC(ARROW)
Član
Član



Pridružen-a: Sre 06 Dec 2006 10:08
Prispevkov: 47
Aktiv.: 0.21
Kraj: Ljubljana

PrispevekObjavljeno: Sre Apr 04, 2007 10:37 pm    Naslov sporočila:   Odgovori s citatom

snoopy je napisal/a:
Bi kar tukaj nadaljeval z mojim vprašanjem.

Kako se v preaksi realizira večfunkcionalnost ene tipke.

Ko pritisnem tipko naredi nekaj. Če tipko držim po 5 sec naredi nekaj drugega.

Z uporabo timerja , ki šteje. Vendar sem zbegan kaj dati v glavni program ,kaj v
timer.

Prosim za pomoč

Lp
Snoopy


Ziv!
V podobnem primeru sem za štetje tistih 5sek uporabil timer1, in sicer s prekinitvijo.In seveda odsteval vrednost konstante seveda z uporabljenim prescalerjem
Tipko pa sem bral s "polling-om"
Pomagal sem si na ta način , da sem v tistih 5sek gledal najprej ali je bila tipka pritisnjena, potem pa če je bila spuščena. Če je bila spuščena v času 5sek je avtomatsko obveljal prvi način uporabe tipke. Če pa ni bila spuščena v času 5sek, pa potem drugi način.

Armin

_________________
ARMIN ČATAK DFAE
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
IR ELECTRONIC(ARROW)
Član
Član



Pridružen-a: Sre 06 Dec 2006 10:08
Prispevkov: 47
Aktiv.: 0.21
Kraj: Ljubljana

PrispevekObjavljeno: Sre Apr 04, 2007 10:49 pm    Naslov sporočila:   Odgovori s citatom

snoopy je napisal/a:
Slemi hvala za namig. Sem dodal kot si priporočal in dela.

Za eno tipko je hitro rešljivo , kaj pa če imam 16 takšnih tipk.
Kako potem rešim problem?

Lp
Snoopy


16 tipk lahko gledaš na več načinov:
- matrica 4x4, kjer uporabis "Change on port" prekinitveno rutino.
Največkrat je uporabljen PORTB. Se pravi 4 linije na PORTB, 4 pa recimo na PORTA. In potem gledas kateri pin je pritisnjen ( ponavadi "0") tako na PORTB kot na PORTA.Seveda potrebuješ vsaj 14pinski uC ( ta ima PORTA in PORTC)
-Lahko uporabis uporovni delilnik s tipkami in delaš AD pretvorbo.Ter nato look-up tabelo kjer glede na digitalno vrednost določiš katera tipka je bila prekinjena
- Uporovni delilnik kjer je vhod peljan na komparator. Spreminjaša lahko Vref ( interno) ter ugotavljaš kje komparator preskoči.Glede na znano vrednost Vref lahko ugotoviš katera tipka je bila pritisnjena.To metodo še nisem preizkusil tako da ne morem garantirati za pravilno delovanje.

Armin

_________________
ARMIN ČATAK DFAE
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group