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 

Skok v podprogram!

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
marko11
Član
Član



Pridružen-a: Ned 14 Dec 2003 17:47
Prispevkov: 893
Aktiv.: 3.77
Kraj: Dobrepolje

PrispevekObjavljeno: Sob Jun 06, 2009 5:23 pm    Naslov sporočila:  Skok v podprogram! Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1714
Aktiv.: 7.24
Kraj: Ig

PrispevekObjavljeno: Sob Jun 06, 2009 6:41 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1714
Aktiv.: 7.24
Kraj: Ig

PrispevekObjavljeno: Sob Jun 06, 2009 6:47 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
marko11
Član
Član



Pridružen-a: Ned 14 Dec 2003 17:47
Prispevkov: 893
Aktiv.: 3.77
Kraj: Dobrepolje

PrispevekObjavljeno: Sob Jun 06, 2009 8:11 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1714
Aktiv.: 7.24
Kraj: Ig

PrispevekObjavljeno: Sob Jun 06, 2009 8:39 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Č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: 492 dni


Powered by phpBB © 2001, 2005 phpBB Group