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 

Problem pri branju tipk!

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
cupacup
Član
Član



Pridružen-a: Tor 20 Jul 2004 21:28
Prispevkov: 68
Aktiv.: 0.29
Kraj: Tam kjer ma mraz mlade

PrispevekObjavljeno: Čet Apr 26, 2007 1:13 am    Naslov sporočila:  Problem pri branju tipk! Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
BorisP
Član
Član



Pridružen-a: Čet 03 Feb 2005 20:52
Prispevkov: 85
Aktiv.: 0.36
Kraj: Celje

PrispevekObjavljeno: Čet Apr 26, 2007 9:26 am    Naslov sporočila:   Odgovori s citatom

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
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 26, 2007 9:28 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
bostjang
Član
Član



Pridružen-a: Tor 03 Jan 2006 15:29
Prispevkov: 3469
Aktiv.: 14.65
Kraj: Postojna

PrispevekObjavljeno: Čet Apr 26, 2007 11:39 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
cupacup
Član
Član



Pridružen-a: Tor 20 Jul 2004 21:28
Prispevkov: 68
Aktiv.: 0.29
Kraj: Tam kjer ma mraz mlade

PrispevekObjavljeno: Čet Apr 26, 2007 7:32 pm    Naslov sporočila:   Odgovori s citatom

Hvala za nasvete!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Č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