|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
programming Član
Pridružen-a: Sre 09 Jan 2013 19:58 Prispevkov: 33 Aktiv.: 0.24
|
Objavljeno: Čet Maj 23, 2013 8:46 pm Naslov sporočila: Bascom manjkajoči ukaz |
|
|
Ž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 |
|
|
mucek Član
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5334 Aktiv.: 24.73 Kraj: Domzale
|
Objavljeno: Čet Maj 23, 2013 9:14 pm Naslov sporočila: |
|
|
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 ... _________________ ...lahko pa se tudi motim ... |
|
Nazaj na vrh |
|
|
programming Član
Pridružen-a: Sre 09 Jan 2013 19:58 Prispevkov: 33 Aktiv.: 0.24
|
Objavljeno: Čet Maj 23, 2013 10:14 pm Naslov sporočila: |
|
|
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 |
|
|
mucek Član
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5334 Aktiv.: 24.73 Kraj: Domzale
|
Objavljeno: Čet Maj 23, 2013 10:16 pm Naslov sporočila: |
|
|
Se ne bi smel. Prilepi prosim tvojo kodo.
Lp, g _________________ ...lahko pa se tudi motim ... |
|
Nazaj na vrh |
|
|
programming Član
Pridružen-a: Sre 09 Jan 2013 19:58 Prispevkov: 33 Aktiv.: 0.24
|
Objavljeno: Ned Maj 26, 2013 4:46 pm Naslov sporočila: |
|
|
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 |
|
|
mucek Član
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5334 Aktiv.: 24.73 Kraj: Domzale
|
Objavljeno: Ned Maj 26, 2013 4:53 pm Naslov sporočila: |
|
|
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 |
|
|
programming Član
Pridružen-a: Sre 09 Jan 2013 19:58 Prispevkov: 33 Aktiv.: 0.24
|
Objavljeno: Ned Maj 26, 2013 5:31 pm Naslov sporočila: |
|
|
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
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 |
|
|
mucek Član
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5334 Aktiv.: 24.73 Kraj: Domzale
|
Objavljeno: Ned Maj 26, 2013 5:43 pm Naslov sporočila: |
|
|
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 |
|
|
|
|
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: 70 dni
Powered by phpBB © 2001, 2005 phpBB Group
|