 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
cupacup Član

Pridružen-a: Tor 20 Jul 2004 21:28 Prispevkov: 68 Aktiv.: 0.29 Kraj: Tam kjer ma mraz mlade
|
Objavljeno: Čet Apr 26, 2007 1:13 am Naslov sporočila: Problem pri branju tipk! |
|
|
POzdravljeni imam sledeč problem. Tipke so multipleksiranje, vendar ko jih berem mi ne vrneho vedno prave vrednosti, oziroma mi pošlje stanje o neki tipki večrat kot bi smelo. Kako naj to rešim programsko! Strojno z kondenzatorji ravno nebi!
koda
Koda: |
PORTB&=~_BV(PB3);//5V
trenutno=bit_is_set(PIND,PIND5);
if (trenutno==32 && KD1S4==0)MIDIS(0x0a, 0x64);//tipka MT(master tempo)
KD1S4=trenutno;
trenutno=bit_is_set(PIND,PIND6);
if (trenutno==64 && KD2S4==0)MIDIS(0x0b, 0x64);//tipka ZIP
KD2S4=trenutno;
trenutno=bit_is_set(PIND,PIND7);
if (trenutno==128 && KD3S4==0)MIDIS(0x0c, 0x64);//tipka SCNB
KD3S4=trenutno;
PORTB|= _BV(PB3);//0V
PORTB&=~_BV(PB4);//5V
trenutno=bit_is_set(PIND,PIND6);
if (trenutno==64 && KD2S5==0)MIDIS(0x0d, 0x64);//tipka WAH
KD2S5=trenutno;
PORTB|= _BV(PB4);//0V |
še shema vezja

Nazadnje urejal/a cupacup Čet Apr 26, 2007 2:53 pm; skupaj popravljeno 2 krat |
|
Nazaj na vrh |
|
 |
BorisP Član

Pridružen-a: Čet 03 Feb 2005 20:52 Prispevkov: 85 Aktiv.: 0.36 Kraj: Celje
|
Objavljeno: Čet Apr 26, 2007 9:26 am Naslov sporočila: |
|
|
Pozdravljen,
predvidevam da je problem, ko tipko spustiš le-ta še malo odskoči in jo ponovno prebere.
Jaz bi na koncu vsake tipke dodal while zanko, da naj počaka da bo tipka spuščena preden se vrneš nazaj na branje tipk, lahko pa dodaš tudi majhno pavzo (npr. 10-20ms), preden greš preverjati ostale tipke, ko si že detektiral je bila ena tipka pritisnjena.
LP
BorisP |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Čet Apr 26, 2007 9:28 am Naslov sporočila: |
|
|
Ena možnost je, da preverjaš večkrat v razmaku nekaj ms.
Npr. za vsako tipko uporabiš neko spremenljivko kot števec, ki se poveča, če je sedanje stanje enako prejšnjemu. Če ni, ga resetiraš, če pa je vrednost večja od npr. 5 ali 10, pa sprožiš neko dejanje.
Koda: |
if (a XOR b)
tipke[0]=0
else
tipke[0]=tipke[0]+1
if (tipke[0]>5)
<< naredimo nekaj >>
endif
endif
|
_________________ Lp,
Matevž |
|
Nazaj na vrh |
|
 |
bostjang Član

Pridružen-a: Tor 03 Jan 2006 15:29 Prispevkov: 3469 Aktiv.: 14.65 Kraj: Postojna
|
Objavljeno: Čet Apr 26, 2007 11:39 am Naslov sporočila: |
|
|
Točno tako, kot sta napisala prejšnja dva. Jaz tipkovnico običajno berem v prekinitvi časovnika, ki mi zagotovi ustrezen časovni razmak. Informacijo o pritisnjeni tipki zapišem v nek register (spremenljivko) in postavim zastavico v drugem. V isti prekinitveni rutini lahko tudi osvežuješ morebiten multipleksirani LED prikazovalnik in povečuješ kakšne števce.
Če pa želiš pravilno prepoznati tudi več hkratnih pritisnjenih tipk pa moraš zaporedno z vsako vezati diodo. |
|
Nazaj na vrh |
|
 |
cupacup Član

Pridružen-a: Tor 20 Jul 2004 21:28 Prispevkov: 68 Aktiv.: 0.29 Kraj: Tam kjer ma mraz mlade
|
Objavljeno: Čet Apr 26, 2007 7:32 pm Naslov sporočila: |
|
|
Hvala za nasvete! |
|
Nazaj na vrh |
|
 |
|
|
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
|