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 

Zacetek
Pojdi na stran Prejšnja  1, 2
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
bungee
Član
Član



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.66
Kraj: Ljubljana

PrispevekObjavljeno: Čet Mar 04, 2010 8:53 pm    Naslov sporočila:   Odgovori s citatom

Ti bom namignil ... 256-7 --> Interrupt se bo zgodil po 250 taktih timerja.
Timer ima nastavljen še prescaler 16

Torej če je kristal 4MHz ----> urni takt je 1us (+) prescaler --> 16us en takt timerja
Interrupt se zgodi vsakih 250*16us= 4ms in ker v tem timer interruptu šteješ še do 250 .... dobiš 1s interval
Wink

Bo dovolj natančno?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pingi
Član
Član



Pridružen-a: Tor 13 Okt 2009 12:44
Prispevkov: 123
Aktiv.: 0.70
Kraj: Selnica ob Dravi - Maribor

PrispevekObjavljeno: Pon Mar 15, 2010 2:33 pm    Naslov sporočila:   Odgovori s citatom

Hvala.

lp, Domen
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Alex17
Član
Član



Pridružen-a: Ned 28 Feb 2010 21:46
Prispevkov: 476
Aktiv.: 2.78
Kraj: Ljutomer

PrispevekObjavljeno: Pon Mar 15, 2010 5:30 pm    Naslov sporočila:   Odgovori s citatom

@Pingi

Zato, ker je timerju nastavljen preddelilnik 1:16, kar pomeni, da za 1s rabimo 62500 impulzov, kar je ravno 250x250. Spremenljivka stevec se ob vsaki prekinitvi zmanjsa z začetne vrednosti 250 za 1, zato moramo prekinitev dobiti točno vsakih 250 impulzov. To bi dosegli tako, da bi v TMR0 vpisali 6 (timer šteje navzgor, v tem primeru je 8-bitni in torej do 255, pri 256 pa sproži prekinitev) in ko bi timer preštel do konca bi sprožil prekinitev. PIC pa ima to lastnost, da timer začne šteti šele 2 strojna cikla po tem, ko mu vpišemo vrednost, zato je treba to prišteti k času, ki ga mikrokontroler porabi za shranjevanja registrov in vhod v prekintev, torej vse ukaze, ki pretečejo od sprožitve prekinitve pa do ponovnega zagona timerja, kar znese okrog 10 strojnih ciklov. Pri 1:16 delilniku, ko se TMR0 povečuje le vsakih 16 strojnih ciklov (1 strojni cikel - 1 mis pri 4MHz kristalu), je potrebno začetno vrednsot timerja že na začetki povečati za 1, da nadoknadimo čas, ki ga je mikrokontroler porabil, ki timer ni štel. Za še večjo natančnost bi bilo potrebno dodati še nekaj nop ukazov v prekinitev pred ponovnim zagonom timerja, tako da bi se timer ponovno zagnal res po 16 strojnih ciklih, za kokikor smo ga "skrajšali".

Če ima kdo boljšo razlago naj me prosim popravi.

Edit: nisem videl 2. strani Smile
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pingi
Član
Član



Pridružen-a: Tor 13 Okt 2009 12:44
Prispevkov: 123
Aktiv.: 0.70
Kraj: Selnica ob Dravi - Maribor

PrispevekObjavljeno: Sre Mar 17, 2010 4:00 pm    Naslov sporočila:   Odgovori s citatom

Hvala še enkrat za odgovore.
Sicer sta malce zakomplicirala, bom poizkusil bolj enostavno razložit, če bi še kak tak "mutec" kot sem sam kdaj potreboval.

Torej 7 zato ker kot je že zgoraj napisano imamo nastavljen prescaler 1:16 in tako timer povečamo za 1 vsakih 16us, kar nam ob 250 ciklih da točno 4ms (16us*250=4000 us=4ms).
Zaradi tega ker potrebujemo samo 250 ciklov in ne 255 kolikor jih maksimalno naredi 8 bitni timer, moramo odšteti 5 ciklov od 255 da dobimo 250. Ob upoštevanju da pri PIC-u timer začne šteti šele po 2 ciklih po nastavitvi jih v tem primeru potrebujemo samo 248 za 4ms interupt. Od tod tudi izhaja da je potrebno timer nastaviti na začetno vrednost 7 (7+248=255).

@Alex17:
Kolikor sem računal v tem primeru ni potrebnega nobenega nop ali kakega drugega ukaza, saj se interupt proži natančno na 4ms, kar nam pri vrednosti števca 250 da natančno 1s (4ms*250=1000ms=1s). Ali se mogoče motim ?

Hvala še enkrat, ker brez vajine razlage verjetno ne bi razumel primera.

lp, Domen
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Alex17
Član
Član



Pridružen-a: Ned 28 Feb 2010 21:46
Prispevkov: 476
Aktiv.: 2.78
Kraj: Ljutomer

PrispevekObjavljeno: Čet Mar 18, 2010 6:25 pm    Naslov sporočila:   Odgovori s citatom

Mogoče si se malo zmotil pri računanju, ker sem sedaj izmeril s Stopwatch in se prekinitev dejansko zgodi 5 us prej kot v 4ms. Zato sem dodal še 5 nop ukazov pred vnos nove vrednosti V TMR0 in sedaj pride naokrog (do naslednje nastavitve TMR0 na 7) v točno 4ms.
Moraš upoštevati, da se timer povečuje s taktom 1/16 glede na kristal, zato tista 2 cikla po nastavitvi vrednosti nista 2 vrednosti v timerju ampak le 2 urina cikla od prvih 16, ki bodo povečale timer za 1.

Upam da si razumel, tukaj še "dokaz" Smile

LP



4ms.jpg
 Opis:
Zakasnitev 4ms s timerjem
 Velikost datoteke:  99.67 KB
 Pogledana:  24 krat

4ms.jpg


Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pingi
Član
Član



Pridružen-a: Tor 13 Okt 2009 12:44
Prispevkov: 123
Aktiv.: 0.70
Kraj: Selnica ob Dravi - Maribor

PrispevekObjavljeno: Pet Mar 19, 2010 12:48 pm    Naslov sporočila:   Odgovori s citatom

Ne vem sicer kje bi se naj zmotil pri računanju.
V teoriji je po moje tako kot sem zgoraj napisal.
Torej:

prescaler 1:16, kristal 4MHz (urni cikel 1us)-> TMR0 interupt vsake 16uS

iz tega sledi:

4ms = 4000us = 250 (interuptov) * 16us

1s = 250 (stevec) * 4ms = 1s

Taka je vsaj teorija, ni ravno neka raketna znanost.

Breakpoint si postavil takoj na začetku ? Ker prvič interupt nastavimo na 0 (clrf TMR0) in bi prvič moral stopwatch pokazati 4080 us.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pingi
Član
Član



Pridružen-a: Tor 13 Okt 2009 12:44
Prispevkov: 123
Aktiv.: 0.70
Kraj: Selnica ob Dravi - Maribor

PrispevekObjavljeno: Pet Mar 19, 2010 4:01 pm    Naslov sporočila:   Odgovori s citatom

Imaš pa prav ja da MPLAB v simulaciji nameri 3995us. Seveda imaš prav tudi da 2 cikla po katerih začne šteti TMR0 ni enako 2*16us, ampak samo 2us.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Alex17
Član
Član



Pridružen-a: Ned 28 Feb 2010 21:46
Prispevkov: 476
Aktiv.: 2.78
Kraj: Ljutomer

PrispevekObjavljeno: Pet Mar 19, 2010 4:36 pm    Naslov sporočila:   Odgovori s citatom

Breakpoint je samo eden, in sicer je lahko kjerkoli na začetku prekinitve, saj tako ugotovimo čas, po katerem se sproži prekinitvena rutina in znaša v mojem primeru točno 4ms.
Sicer pa nima veze, brez problemov bi delovalu tudi brez tistih 5 nop ukazov, samo sem moral preveriti, če imam prav, ker mi stvar ni dala miru Very Happy
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pingi
Član
Član



Pridružen-a: Tor 13 Okt 2009 12:44
Prispevkov: 123
Aktiv.: 0.70
Kraj: Selnica ob Dravi - Maribor

PrispevekObjavljeno: Sob Mar 20, 2010 6:00 pm    Naslov sporočila:   Odgovori s citatom

Mogoče preveč kompliciram, ampak ni mi čisto jasno zakaj mora biti ravno 5 nop ukazov da je točno 4ms.
Pri utripanju LED diode se seveda teh 5 ciklov sploh ne opazi, bi pa bil problem v kolikor bi hotel uporabiti takšno štetje sekund za izdelavo ure.
Ali je za uro sploh primeren tak način štetja časa ?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 6.08
Kraj: Koroška-Mežica

PrispevekObjavljeno: Ned Mar 21, 2010 12:05 am    Naslov sporočila:   Odgovori s citatom

Kalkulator
_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pingi
Član
Član



Pridružen-a: Tor 13 Okt 2009 12:44
Prispevkov: 123
Aktiv.: 0.70
Kraj: Selnica ob Dravi - Maribor

PrispevekObjavljeno: Ned Mar 21, 2010 2:42 pm    Naslov sporočila:   Odgovori s citatom

To je za delay in ne za interupt !
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 6.08
Kraj: Koroška-Mežica

PrispevekObjavljeno: Ned Mar 21, 2010 4:13 pm    Naslov sporočila:   Odgovori s citatom

Ja kolikor sem videl, je tam tudi nek delay v programu. S temle lahko preprosto zgeneriraš pavzo..
_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pingi
Član
Član



Pridružen-a: Tor 13 Okt 2009 12:44
Prispevkov: 123
Aktiv.: 0.70
Kraj: Selnica ob Dravi - Maribor

PrispevekObjavljeno: Ned Mar 21, 2010 11:24 pm    Naslov sporočila:   Odgovori s citatom

To poznam !
Govora je bilo o interrupt-u in ne pavzi !
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
bungee
Član
Član



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.66
Kraj: Ljubljana

PrispevekObjavljeno: Pon Mar 22, 2010 1:37 am    Naslov sporočila:   Odgovori s citatom

Pingi je napisal/a:
Ali je za uro sploh primeren tak način štetja časa ?
Za generiranje ure se na splošno uporablja raje HW RTC ali dodatni čip ali pa interna RTC logika uC-ja. In ob tem se uporabi 32768Hz kristal, ki je ravno prava številka za dvojiško deljenje Wink (2^16)
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2
Stran 2 od 2

 
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: 47 dni


Powered by phpBB © 2001, 2005 phpBB Group