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 

Bascom manjkajoči ukaz

 
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
programming
Član
Član



Pridružen-a: Sre 09 Jan 2013 19:58
Prispevkov: 33
Aktiv.: 0.24

PrispevekObjavljeno: Čet Maj 23, 2013 8:46 pm    Naslov sporočila:  Bascom manjkajoči ukaz Odgovori s citatom

Živijo!

Imam problem pri pisanju programa v bascomu. Imam dva mikro stikala in en relejski izhod.

Mikro stikalo 1 je vezano na Pa_5
Mikro stikalo 2 je vezano na Pa_4
Rele je vezan na Portc.0

Program naj bi deloval nekako tako:

Ko se aktivira prvo mikro stikalo (vendar je aktivno samo za kratek čas približno 0,6s) se prižge rele ki ostane aktiven tako dolgo dokler se ne aktivira drugo mikro stikalo vendar je tudi drugo mikro stikalo aktivno samo za kratek čas približno 0.6s.

Za zdaj imam napisano takole

If Pa_5 = 1 Then Set Portc.0
If Pa_4 = 1 Then Reset Portc.0

nujno potrebujem pomoč (manjkajoče ukaze) Hvala in lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5327
Aktiv.: 24.78
Kraj: Domzale

PrispevekObjavljeno: Čet Maj 23, 2013 9:14 pm    Naslov sporočila:   Odgovori s citatom

Kot prvo:
Zaradi preglednosti v prihodnje (pa tudi zaradi tega, če kasneje spremeniš npr. pin, da ne rabiš popravljati po kodi) uporabljaj ALIAS ukaze ...

Torej:

Koda:
 
config pina.5 = input : tipka1 alias pina.5
config pina.4 = input : tipka2 alias pina.4
config portc.0 = output : rele alias portc.0 : reset rele
'Dvopičje v vrstici pomeni, kot da bi šel v novo vrsto (a zaradi preglednosti ostajaš v isti)


Dalje delaš v neskončni (do-loop) zanki.
Predpostavljam, da sta stikali vezani v pull-down vezavi (10k proti masi, tipko skleneš proti vcc) in da je rele krmiljen direktno oz. preko NPN/NFET.

Koda:

Do
   If tipka1 = 1 and rele = 0 then
      set rele
   endif
'alternativa v eni vrstici (jo uporabljaš za enostavne ukaze):
'If tipka1= 0 and rele = 0 then set rele

   If tipka2 = 1 and rele = 1 then
      reset rele
   endif
Loop


Namesto direktnega čitanja (if tipka = 1) rajši uporabi ukaz "debounce", ki.

LP, Gregor

p.s. Tole bo eno pivo na jesenskem pikniku ... Smile

_________________
...lahko pa se tudi motim ...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
programming
Član
Član



Pridružen-a: Sre 09 Jan 2013 19:58
Prispevkov: 33
Aktiv.: 0.24

PrispevekObjavljeno: Čet Maj 23, 2013 10:14 pm    Naslov sporočila:   Odgovori s citatom

Zahvaljujem se vam za vašo pomoč ampak program še vedno ne deluje kot bi želel. Ko pritisnem tipko 1 se rele vklopi a ko spustim tipko 1 se rele izklopi čeprav bi moral ostati prižgan vse dokler ni pritisnjena tipka 2
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5327
Aktiv.: 24.78
Kraj: Domzale

PrispevekObjavljeno: Čet Maj 23, 2013 10:16 pm    Naslov sporočila:   Odgovori s citatom

Se ne bi smel. Prilepi prosim tvojo kodo.

Lp, g

_________________
...lahko pa se tudi motim ...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
programming
Član
Član



Pridružen-a: Sre 09 Jan 2013 19:58
Prispevkov: 33
Aktiv.: 0.24

PrispevekObjavljeno: Ned Maj 26, 2013 4:46 pm    Naslov sporočila:   Odgovori s citatom

Sedaj ko sem uporabil ukaz debounce zadeva dela pojavil pa se mi je nov problem, ko hočem rele aktivirat z obratne smeri se pravi z tipko2 se rele aktivira z tipko1 se izklopi. A prejšna ukaza morata ostati.

Do

Debounce Pina.4 , 1 , Pogoj_1
Debounce Pina.5 , 1 , Pogoj_2

Loop
End

Pogoj_1:
Set Portc.0
Return

Pogoj_2:
Reset Portc.0
Return
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5327
Aktiv.: 24.78
Kraj: Domzale

PrispevekObjavljeno: Ned Maj 26, 2013 4:53 pm    Naslov sporočila:   Odgovori s citatom

Ja tako, kot imaš napisano zdaj, dela točno tako, kot je napisano: torej s prvo tipko rele aktivira, z drugo deaktivira. Če želiš s tipko spreminjati stanje, uporabi ukaz "toggle" (v SUB torej namesto set/reset napiši toggle portc.0. Ta ukaz ti bo ob vsakem pritisku zamenjal stanje (torej, če je rele vklopljen, ga bo izklopil in obratno)

LP, g

_________________
...lahko pa se tudi motim ...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
programming
Član
Član



Pridružen-a: Sre 09 Jan 2013 19:58
Prispevkov: 33
Aktiv.: 0.24

PrispevekObjavljeno: Ned Maj 26, 2013 5:31 pm    Naslov sporočila:   Odgovori s citatom

Zadeva deluje. Manjši roblem je samo ker moraš pri debounce ukazih nastavit čas po katerem je pritisk tipke veljaven in če potem malo dlje držiš tipko ti rele večkrat preklopi zato je treba biti zelo natančen.

imam še eno vprašanje, v program želim vnesti tudi števec ki mi bo štel pritiske tipke1 in ta rezultat izpisat na 2*16 LCD zaslonu

Nekaj že imam napisano a mi med delovanjem napis utripa in sploh noče seštevati

Think

Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portd.5
Config Lcd = 16 * 2

Dim stevec As Byte

Do

Cls
Lcd "število pritiskov"
Lowerline
Lcd "stevec"

Debounce Pina.4 , 1 , Pogoj_1
Debounce Pina.5 , 1 , Pogoj_2

Loop
End

Pogoj_1:
Set Portc.0
Incr stevec
Return

Pogoj_2:
Reset Portc.0
Return

Prosim za pomoč. hvala
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5327
Aktiv.: 24.78
Kraj: Domzale

PrispevekObjavljeno: Ned Maj 26, 2013 5:43 pm    Naslov sporočila:   Odgovori s citatom

Nak - spet ne bo držalo.
Ravno "lepota" debounca je v tem, da moraš tipko vmes spustiti, da ti gre drugič v podprogram (če tipko stisneš in držiš, se bo podprogram izvedel le 1x!) Tisti čas, ki ga nastavljaš, je namenjen preprečevanja odskakovanja kontaktov, ne pa čas držanja tipke. Tam nekje okrog 25-50 ms je ponavadi vse ok.

Če prikazuješ spremenljivko, ne sme biti v narekovaju (v narekovaju so fiksni izpisi)!

Display ti utripa zaradi CLS rutine v main-u. V bistvu dela, ampak se tako hitro piše-briše, da ti tega niti ne vidiš. Tega se ne dela. Hiter "workaround" je, da daš v Do-Loop med prikaz in brisanje npr. 500 ms premora (waitms 500) - a v tem premoru tudi tipka ne bo delala, pa tudi display bo še vedno grdo utripal.

Raje uporabi ukaz Locate, da točno spozicioniraš tekst (pišeš vedno na isto mesto), da pa pobrišeš odvečne znake (npr. če prikažeš 123, nato pa 99, ti bo izpisal 993, ker bo trojka ostala od prej) pa za spremenljivko "napiši" še dva presledka:

Koda:

Locate 1 , 1 : Lcd "Fiksno besedilo" 'V narekovaje le to, kar je fiksnih izpisov!
Locate 2 , 1 : Lcd stevec ; "  " 's podpičjem v Print in LCD nadaljuješ pisanje

LP, g

_________________
...lahko pa se tudi motim ...
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: 49 dni


Powered by phpBB © 2001, 2005 phpBB Group