Tlačítko – Mikrokontroléry – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Tlačítko – Mikrokontroléry – Fórum – Programujte.comTlačítko – Mikrokontroléry – Fórum – Programujte.com

 

12dawe340
Newbie
28. 10. 2010   #1
-
0
-

Zdravim
Potřeboval bych poradit. Potřebuji nějak udělat aby mi tlačítko reagovalo kdykoliv a nevím jak na to. Dělám v Bascomu, pokud se najde někdo kdo by mi pomohl, byl bych moc rád. Jde mě o to, že chcu po stisku tlačítka přeskočit na další podprogram, jenže nevím jak udělat abych se nemusel trefovat přesně v tu dobu kdy mam napsaný příkaz na kontrolu tlačítka. Nějak udělat to jít musí ne? Třeba nějakej blikač, ledky běží doprava a to se mě nelibi, tak stisknu tlačítko a ledky hned začnou běžet doprava, např..

Nahlásit jako SPAM
IP: 89.203.143.–
xhans690
Návštěvník
28. 10. 2010   #2
-
0
-

Nejak nechapu ten priklad cos uved, ale asi jsi mel na mysli ze pobezi doleva, kdyz bezi doprava
Na toto se pouziva tzv externi preruseni. Muzes si na nem, u avr, nastavit reakci na nabeznou nebo sestupnou hranu.
Jak je tomu u PICu, ARMu, aj. netusim. Koukni do datasheetu k MCU, ktery chces pouzit

Nahlásit jako SPAM
IP: 81.30.248.–
12dawe340
Newbie
28. 10. 2010   #3
-
0
-

No to bude asi ono :-). Zkusim na to mrknout a kdyžtak se znovu ozvu. Diky za popostrčení :-)

Nahlásit jako SPAM
IP: 89.203.143.–
12dawe340
Newbie
29. 10. 2010   #4
-
0
-

Tak jsem to zkoušel, ale mám další problém. Když vyvolám přerušení tak mě stejně vždy dokončí ten rozjetej proces. Ale já bych potřeboval aby mi to hned přeskočilo. Příklad, mám instrukci na 60 řádcích a ve třetině stisknu tlačítko, s tím že nechcu čekat než to dokončí. Jde to njak udělat?

Nahlásit jako SPAM
IP: 89.203.143.–
KIIV
~ Moderátor
+43
God of flame
29. 10. 2010   #5
-
0
-

to jde prave dost tezko .. leda bys dokazal prepsat navratovou adresu na jine misto..
nebo zalezi na tom jak vypada ten kod.. jestli nenahodit jen nejaky flag ktery by to prerusil

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
xhans690
Návštěvník
29. 10. 2010   #6
-
0
-

da se to udela relativne jednoduse, ale bude to vypadat desne
v preruseni si nastav nejaky priznak
treba sepnuto = 1
pote v probihajicim procesu musis tento priznak kontrolovat, pokud je nahozen, proces ukoncit, priznak vymazat a zacit proces druhy

Nahlásit jako SPAM
IP: 81.30.248.–
12dawe340
Newbie
29. 10. 2010   #7
-
0
-

To xhans69 : Mohl by jsi mě to trochu rozepsat :-D

Nahlásit jako SPAM
IP: 89.203.143.–
KIIV
~ Moderátor
+43
God of flame
29. 10. 2010   #8
-
0
-

To 12dawe34 : vic rozepsat je uz snad jen kompletni kod :)

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
xhans690
Návštěvník
29. 10. 2010   #9
-
0
-

@dawe

dej priklad co delas, jestli ty ledky tak tam je to jednoduche
jestli neco jineho tak nevim co presne napsat

pro zmenu smeru blikani ledek (viz tvuj priklad) treba tohle, jenom velice hruby nastrel



obsluha_ext_preruseni ()
{
if smer==vlevo
smer = vpravo
else smer = vlevo
}

hlavni_cyklus()
{
if smer==vlevo
port=hodnota_pro_levy_smer
else
port=hodnota_pro_pravy_smer
}

tohle si pred kazdym zapisem na port zkoukne hodnotu vlajky smer a podle toho se zaridi, vlajka smer se zmeni pri stisku tlacitka ve funkci obsluhy ext preruseni

Nahlásit jako SPAM
IP: 81.30.248.–
AB
~ Anonymní uživatel
41 příspěvků
31. 10. 2010   #10
-
0
-

V těchto programech s blikajícími ledkami zaberou nejvíc času čekací smyčky "wait".
Podprogram, i když má šedesát řádků, trvá bez čekacích smyček v řádu mikrosekund.
Proto pokud chceme rychlou reakci na tlačítko, stačí tlačítko testovat v krátkých intervalech uvnitř těchto smyček.
Když zjistíme stisknuté tlačítko, vrátíme se do hlavního programu a tam se rozhodne, který podprogram dál zavolat.

Je to samozřejmě jedno z více možných řešení.
Přikládám stručný příklad

Tlacitko Alias Pind.6

Dim State As Bit
Dim I As Word

Do
If Tlacitko = 0 Then
Toggle State
Waitms 100
End If

If State = 0 Then
Gosub Blik1
Else
Gosub Blik2
End If

While Tlacitko = 0 : Wend
Loop
End
'----------------------------------------------------------

Blik1:
Do
Incr Portb

'čekej 2000 ms a testuj tlačítko
For I = 1 To 2000
Waitms 1
If Tlacitko = 0 Then Exit Do
Next
Loop
Return

Nahlásit jako SPAM
IP: 217.115.249.–
AB
~ Anonymní uživatel
41 příspěvků
31. 10. 2010   #11
-
0
-

Oprava:
Omlouvám se, hlavní smyčka má být

   Do

If Tlacitko = 0 Then
Toggle State
Waitms 100
While Tlacitko = 0 : Wend

If State = 0 Then
Gosub Blik1
Else
Gosub Blik2
End If

End If
Loop

Nahlásit jako SPAM
IP: 217.115.249.–
12dawe340
Newbie
31. 10. 2010   #12
-
0
-

To AB : No to mě taky napadlo, ale nevěděl jsem jak to zrealizovat. Takže teď to zkusím podle tebe a uvidíme, díky za radu :-)

Nahlásit jako SPAM
IP: 89.203.143.–
12dawe340
Newbie
31. 10. 2010   #13
-
0
-

Snažím se udělat následující: Porty A,B,C výstup na LEDky, na každým pinu budou asi dvě přes tranzistor, Port A červený, port B zelený, port C modrý, to se ještě uvidí. ALe k samotnému programu. Chtěl bych asi tohle, zapnu zařízení svítí mi jen signalizační LED zapnuto. Stisknu tlačítko, rozjede se první program - blikají všechny červený (PortA), stisknu podruhé - druhej podprog. blikají všechny zelený (PortB), tlačítko potřetí, třetí podprog - bliká PortC tudíž modrý ledky. No a čtvrtej podprog běhá kruh doprava přes všechny barvy. No a teď řeším problém jak to ovládat tím tlačítkem. Na tohle jsem asi fakt uplnej mauglí, ale co bych chtěl, jsem v tomhle začátečník. Takže nějaké další nápady jak na realizaci? :-). Dělám na ATmega32 a zatím zkousím v Bascomu, už jsem vyzkoušel fůru různejch variant, ale pořád to není ono. Největší problém je v tom čtvrtym podprog. protože to je asi na 100 řádcích i s waitama a neumím se tu vůbec vymotat. Za každou radu budu vděčnej.

Nahlásit jako SPAM
IP: 89.203.143.–
xhans690
Návštěvník
1. 11. 2010   #14
-
0
-

ovladani tlacitkem



obsluha_preruseni
{
//nastal stisk tlacitka, predpoklad je ze mas odfiltrovane zakmity
rezim = rezim+1
if rezim > maximalni_pocet_rezimu pak rezim=prvni_rezim_jaky_chces_mit
}

no a v hlavnim programu pak pred zapisem na port zkontrolujes hodnotu promenne rezim a podle toho se zaridis
treba vypnes ledky na portu a zacnes pracovat s portem b, dtto port c
pro program 4 bych zvolil 4B promennou (long, dword), treba stav_led, nastavil prvni bit na 1, ostatni na 0 a pak jenom shiftoval vlevo (nasobil 2)
potom port a by byl prvnich 8 bitu (port a = stav_led)
port b druhych 8 bitu (port b = stav_led shiftr 8) - nevim jak je to v basicu
port c tretich 8 bitu (port c = stav_led shiftr 16)
jakmile dosahnes hodnoty 16 777 216 nastavis onu promennou stav_led na 1 (zacinas od zacatku)

beru to tak ze nemas barvy na stridacku
pokud ano, resil bych to asi tabulkou

Nahlásit jako SPAM
IP: 81.30.248.–
AB
~ Anonymní uživatel
41 příspěvků
1. 11. 2010   #15
-
0
-
Nahlásit jako SPAM
IP: 217.115.249.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Podobná vlákna

Tlacitko so)t — založil gerry

Tlačítko C — založil Fíkus

Nefunkční tlačítko — založil Jan Grygerek

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý