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 -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
clownfish
Član
Član



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

PrispevekObjavljeno: Čet Jan 17, 2008 11:15 am    Naslov sporočila:  branje tipk Odgovori s citatom

Na nekem kontrolerju imam LCd in 4 tipke.
tipke so esc, gor/+, dol/- in ENT.

Osnovno branje tipk deluje tako, da preberem tipko in štejem čas koliko časa je pritisnjena. Če je pritisnjena več kot nek nastavljen čas je tipka veljavna.
Potem čakam, da je tipka spuščena, da nadaljujem.

Želel bi pa, da če tipko držim, da mi čez čas začne ponavljati.. torej podobno kot na Pc tipkovnici kjer imaš za nastaviti čas do ponavljanja in čas ponavljanja.
Torej da odpade dodatno preverjanje če je tipka spuščena.


Ima kdo že kaj takega sprogramiranega???
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rajko
Član
Član



Pridružen-a: Čet 29 Jun 2006 20:09
Prispevkov: 98
Aktiv.: 0.42
Kraj: Trbovlje

PrispevekObjavljeno: Čet Jan 17, 2008 2:12 pm    Naslov sporočila:   Odgovori s citatom

Tipko beri določen čas, če je po tem času še vedno pritisnjena jo enostavno ignoriraj in izvedi željeni program. Razen seveda, če za eno tipko ne potrbuješ dve različni dolžini preverjanja pritisnjenosti, kar pa je glede na 4 tipke malo verjetno.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.01

PrispevekObjavljeno: Čet Jan 17, 2008 2:22 pm    Naslov sporočila:   Odgovori s citatom

Če šteješ čas držanja tipke, imaš že vse napravljeno.
Ti samo zaznavaj dogodek, ko števec pride naokrog ( "overflow" števca) in to upoštevaj kot ponoven pritisk na tipko. Držanje tipke bo učinkovalo enako kot zelo hitro pritiskanje. V PIC zbirniku bi bilo takole:
Koda:

  btfss Tipka1 ; je tipka pritisnjena?
  goto Ven1 ; Ne
  ; Da
  incfsz StevcT1,f ; Povečaj StevcT1. Je ze okrog?
  return ; NE
  ; Da
  bsf Tipka1P ; Vklopi Tipka1 Pritisnjena - V programu sedaj veš, da je bila tipka uspešno pritisnjena, zato lahko izvedeš tisto, kar se mora takrat zgoditi.
Naslednjic bo zaznalo pritisnjeno tipko, ko bo StevcT1 spet prišel iz 256 na 0.
  ....
  movlw .111 ; Ce je cakanje na 256 povecanj StevcT1 predolgo,
  movf StevcT1 ; naj StevcT1 prileze naokrog cez naprimer 256-111=145 povecanj
  return ;
Ven1
  clrf StevcT1
  bcf Tipka1P ; Izklopi Tipka1 Pritisnjena
  return
Sedaj pa to "vstavi" v svoj program.
LP,
Igor

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
clownfish
Član
Član



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

PrispevekObjavljeno: Čet Jan 17, 2008 4:02 pm    Naslov sporočila:   Odgovori s citatom

Sedaj imam narejeno takole..

tipke berem z v timer interuptu, ki teče z 64Hz.
Če je tipka <> 0 (torej je nekaj pritisnjeno)jo shranim v stara_tipka in poženem timer_tipka.
ob naslednjem interuptu pogledam če je pritisnjena še vedno ista tipka in povečam števec. Če je bila spuščena ali je pritisnjena druga tipka restiram števec na 0 in spremenim vrednost v stara_tipka.

v glavni funkciji kjer preverjam tipke pa imam..

Citiram:
if ((tipka==1)&&(timer_tipka>10))
- funkcija 1

else if ((tipka==2)&&(timer_tipka>10))
- funkcija 2

else if ((tipka==3)&&(timer_tipka>10))
- funkcija 3


v bistvu pa bi rabil še en parameter..
torej:

če je tipka pritisnjena stalno več kot 1s in še vedno pritisnjena vsake 1/5 sekunde vrnem kot, da je tipka na novo pritisnjena...

podobno deluje vnos na napravah... pritisneš se parameter poveča, držiš in čez čas se parameter povečuje avtomatsko brez, da bi tipko spustil..
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.01

PrispevekObjavljeno: Čet Jan 17, 2008 4:26 pm    Naslov sporočila:   Odgovori s citatom

Ne kompliciraj z novimi spremenljivkami.
Koda:

if ((tipka==1)&&(timer_tipka>10)) //  Ali je timer_tipka>10 ?
 - timer_tipka=5 // V stevec timer_tipka vstavimo konstanto 5 , za naslednjic.
 - funkcija 1 // Izvede se funkcija 1 , naslednjic se bo izvedla, ko bo timer_tipka prilezla iz =5 na >10 . Torej čez polovico krajši čas, kot je bil potreben, da je iz =0 prilezel do >10 .
 
else if ((tipka==2)&&(timer_tipka>10)) //  Ali je timer_tipka>10 ?
 - timer_tipka=3 // V stevec timer_tipka vstavimo konstanto 3 , za naslednjic.
 - funkcija 2 // Izvede se funkcija 2 , naslednjic se bo izvedla, ko bo timer_tipka prilezla iz =3 na >10 . Torej čez tretjino krajši čas, kot je bil potreben, da je iz =0 prilezel do >10 .

else if ((tipka==3)&&(timer_tipka>10)) //  Ali je timer_tipka>10 ?
 - timer_tipka=7 // V stevec timer_tipka vstavimo konstanto 7 , za naslednjic.
 - funkcija 3 // Izvede se funkcija 3 , naslednjic se bo izvedla, ko bo timer_tipka prilezla iz =7 na >10 . Torej čez dve tretjini krajši čas, kot je bil potreben, da je iz =0 prilezel do >10 .
Če spremenljivki tipka_timer prednastaviš večjo vrednost (npr. 7), se bo funkcija izvajala pogosteje (krajši čas od 7 do 10), če pa ji prednastaviš nižjo vrednost (npr. 3), se bo izvajala redkeje.
Za bolj fino nastavljanje naj prekinitev pogosteje povečuje tipka_timer, da boš lahko preverjal z npr. >100 za enak čas kot sedaj z >10 .
LP,
Igor

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
clownfish
Član
Član



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

PrispevekObjavljeno: Čet Jan 17, 2008 4:49 pm    Naslov sporočila:   Odgovori s citatom

igo je napisal/a:
Ne kompliciraj z novimi spremenljivkami.


IGO

ZVITA in odlična rešitev... točno to kar sem potreboval!

Bom sprobal na konkretnem primeru in javim kako se obnese!

HVALA!
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