 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
marko11 Član



Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 893 Aktiv.: 3.77 Kraj: Dobrepolje
|
Objavljeno: Sob Jun 06, 2009 5:23 pm Naslov sporočila: Skok v podprogram! |
|
|
Pozdravljeni!
Kako v Bascom AVR napisati program, ko bi pritisnil Tipko_1, da bi zapustil spodnji program, ampak, da se izvajanje programa ne ustavi, da bi med delovanjem programa lahko spreminjal Pauzo_1, Pauzo_2 in Pauzo_3.
Prosim za nasvet.
Koda: |
Do
Porta.1 = 0
Wait Pauza_1 'pauza_1 = 10 sekund
Porta.1 = 1
Wait Pauza_2 'pauza_2 = 15 sekund
Porta.2 = 0
Wait Pauza_3 'pauza_3 = 20 sekund
Loop
|
LP,marko |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.24 Kraj: Ig
|
Objavljeno: Sob Jun 06, 2009 6:41 pm Naslov sporočila: |
|
|
Sicer nisem čisto razumel tvojega problema, lahko pa ti povem, da če delaš pavzo z Wait ukazom, v tem času (Wait 15) ne bo mikrokontroler čisto nič drugega delal, kot čakal 15s (to neredi makro ukaza wait) podobno lahko narediš sam z uporabo enega izmed notranjih timerjev, s to razliko, da bo timer izvajal vsakih nekaj ms prekinitev, a v tem času (med dvema prekinitvama) bo lahko naredil še kaj vmes. Poglej si help od Bascoma za TIMER0 ali TIMER1, nauči se ga uporabljati. in boš videl o čem ti govorim. _________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.24 Kraj: Ig
|
Objavljeno: Sob Jun 06, 2009 6:47 pm Naslov sporočila: |
|
|
Aja, še to. Za delovanje tipke uporabi ukaz Debounce, poglej si, kako se ga uporablja.
Če bi rad z eno tipko počel več stvari hkrati, potem je pa tako (stresem iz rokava)
glavni:
do
Debounce P1.0, 0,Stanje
loop
Stanje:
If stevec = 1 then
naredi to pa to
else if stebvec = 2
naredi nekaj drugega
else if stevec = 3
stevec = 0
end if
stevec = stevec+1
goto glavni
Glavna zanka se ti bo vrtela v neskoncni zanki, vse dokler ne bos stisnil tipke, nati ti bo skočil program v podprogram Stanje, kjer bo preveri stanje števca (koliko krat je bila tipka že zaporedoma pritisnjena, če je bila 3x se stanje števca pobriše ter na koncu poveča za ena.
Ta program ima najbrž hrošča. odkrila ga boš sam, če boš delal na tem.
LP G _________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
marko11 Član



Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 893 Aktiv.: 3.77 Kraj: Dobrepolje
|
Objavljeno: Sob Jun 06, 2009 8:11 pm Naslov sporočila: |
|
|
Torej nekako tako sem razumel.
-namesto Wait ukaza moram uporabiti timer, ki bo za Spremenljivko Pauza_1 štel do 15, za Pauzo_2 do 20, za Pauzo_3 pa do 25, recimo po 250 milisekund.
-tako bi lahko med tem časom delal kaj drugega, naprimer povečeval spremenljivko Pauza_1...
-torej, namesto ukaza Wait naj uporabim Start timer?
LP,marko |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.24 Kraj: Ig
|
Objavljeno: Sob Jun 06, 2009 8:39 pm Naslov sporočila: |
|
|
Ja, ampak pazi! Timer teče zelo hitro, hitreje kot misliš.
Če uporabiš preskaler (delilnik) 1 za timer, potem bo timer0 (8bitni) tekel z enako hitrostjo, kot teče sam mikrokontroler (4,8,12MHz, odvisno kateri kristal uporabljaš ali pa notranji oscilator). Pa vzemiva, da ti mikrokontroler teče na notranjem oscilatorju, frekvenca je 1MHz. 8 bitni timer generira overflow vsakih 256 ciklov, se pravi se bo overflow zgodil 1000000/256=3906x v sekundi. Vsakič, ko se zgodi overflow (timer doseže vrednost 255 oz. &hff in potem preskoči nazaj na &h00) generira prekinitev. Če bi v prekinitvi vsakič povečal vrednost spremenljivke za 1 in preverjal če je dosegla 3906, bi imel en dogodek, ki bi se zgodil vsako sekundo. 39060 vsakih 10 sekund itd.
Lahko pa tudi določiš, da se overflow zgodi ob vrednosti timerja 100. Lahko pa tudi vklopiš preskaler (prescale). To ti vhodno frekvenco deli z delilnikom. Poglej v bascom help koliko so lahko vrednosti za prescale.
LP G _________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
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: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|