Pomoc oko TMR2 i PR2 regidtra

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
MIKI73
Napredujem
Napredujem
Posts: 107
Joined: 01-11-2014, 16:57

Pomoc oko TMR2 i PR2 regidtra

Post by MIKI73 »

Pozdrav svima.Pokusao sam nesto za probu da napisem sa upotrebom tmr2 registra ali nekapiram kako se odredjuje pr2 registrar.Dosta sam nalazio na internetu ali nekapirem pa ako moze neko makar kratko objasnjenje.Evo jernog programa i kad se menja vrednost PR2 menja se naravno i vreme blinkanja led ali kako izracunati vrednost pr2 i odrediti tm2 da bih mogao nesto preciznije da uradim.Evo jednog primera koji imam gde led blicka na jednu sekundu sto znaci da je prekid na jednu uS koji se kasnije pretvara u sekunde

Symbol Led = PORTB.0

uSek Var Word
mSek Var Word
Sek Var byte

TMR2_uS Var byte
TMR2_us = 200 'Postavi period za TMR2

PORTB = 0 'PORTB je izlazni

ON INTERRUPT goto Int_Sub

Inicijalizacija:

PIE1.1 = 0 'Onemoguci sve periferijske prekide

INTCON.6 = 1 'Omoguci periferijske prekide

T2CON.0 = 0 '00 = Preskaler je 1
T2CON.1 = 0 '01 = Preskaler je 4
'1x = Preskaler je 16
PR2 = 199 'TMR2 Period
T2CON.3 = 0 '0000 = 1:1 postskaler
T2CON.4 = 0 '0001 = 1:2 postskaler
T2CON.5 = 0 '0010 = 1:3 postskaler
T2CON.6 = 0 '1111 = 1:16 postskaler
TMR2 = 0 'Reset TMR2 vrednosti

PIE1.1 = 1 'Omoguci TMR2 prekid kada je PR2 = TMR2
T2CON.2 = 1 'Omoguci Tajmer2

INTCON.7 = 1 'Omoguci sve nemaskirane interapte

Pocetak:

Repeat 'Ciklus

Until Sek = 1 'Sve dok Sek ne bude 60

Toggle Led

Sek = 0 'Ponisti Sek

Goto Pocetak 'Vrati se na pocetak
Disable

'-------------Podprogram obrade prekida--------------------------------
Int_Sub:
INTCON.7 = 0 'Onemoguci prekide

If PIR1.1 Then 'Ako je prekid od Tajmera2 uvecaj
PIR1.1 = 0
uSek = uSek + TMR2_uS
If uSek >= 1000 Then
uSek = uSek - 1000
mSek = mSek + 1
If mSek >= 1000 Then
mSek = mSek - 1000
Sek = Sek + 1
EndIf
EndIf
EndIf

INTCON.7 = 1 'Omoguci prekide

Resume 'Vrati se iz rutine prekida

End
User avatar
trax
Administrator sajta
Administrator sajta
Posts: 3509
Joined: 08-01-2005, 18:04
Location: 75k, BA
Contact:

Re: Pomoc oko TMR2 i PR2 regidtra

Post by trax »

Posto sam na telefonu, evo ti na brzaka ovaj link. Mozda iz njega skontas kroz primjer.

http://eng-serve.com/pic/pic_timer.html
MIKI73
Napredujem
Napredujem
Posts: 107
Joined: 01-11-2014, 16:57

Re: Pomoc oko TMR2 i PR2 regidtra

Post by MIKI73 »

Pozdrav.Vec sam video ali nekapiram.U primeru imam PR2 199 a TMR2 200 i tu se uklapa ako je prekoracenje 1uSek ali kad stavim PR2 9 a TMR2 10 onda isto prekoracenje je 1uSek a led blinka na 7 sekundi.Onda sam iz programa obrisao sekunde i ostavio program do mSek=mSek+1 a ogre prepravio da blinka na jednu mili sekudu i sad ocekujem neki pwm sa + periodom od 1mSek i - periodom od 1mSek ali to se nedogadja.Jedino mi ovaj tajmer nije jasan.
User avatar
trax
Administrator sajta
Administrator sajta
Posts: 3509
Joined: 08-01-2005, 18:04
Location: 75k, BA
Contact:

Re: Pomoc oko TMR2 i PR2 regidtra

Post by trax »

Koji si kristal stavio na PIC? Ako je 4MHz ond nemoj se igrati sa rezolucijom od 1uS, to je prekratko za njega. Ako koristis 4MHz moraces staviti brzi kristal.
The Timer2 increments from 00h until it matches PR2 and then resets to 00h on the next increment cycle.
Interrupt ce se desiti kada vrijednost TMR2 brojaca dodje do vrijednosti koja je podesena u PR2 registar. Znaci ako si namjestio PR2=199 onda timer TMR2 nikad nece preci tu vrijednost nego ce se vratiti na 0. Ako ti je kristal ipak od 4MHz to znaci da je takt PIC-a 1MHz a to znaci da ce se interrupt na PR2=199 desavati svake 199uS.
Dakle, koji kristal koristis?
MIKI73
Napredujem
Napredujem
Posts: 107
Joined: 01-11-2014, 16:57

Re: Pomoc oko TMR2 i PR2 regidtra

Post by MIKI73 »

Koristim kristal 4mhz ali sve to isprobavam u proteusu.Naprimer stvaim u programu iznad da je PR2 9 a TMR2 10 i onda led blinka na svakih 7 sekundi a pomovo je razlika iznadju PR2 i TMR2 1 kao u prvom primeru 199 i 200. E to mi nije jasno kako se racuna tj gleda,menjao sam razne vrednosti da bih dosao do zakljucka ali neide.
User avatar
trax
Administrator sajta
Administrator sajta
Posts: 3509
Joined: 08-01-2005, 18:04
Location: 75k, BA
Contact:

Re: Pomoc oko TMR2 i PR2 regidtra

Post by trax »

Ne znam sta si ovdje sve pisao:

Code: Select all

If PIR1.1 Then 'Ako je prekid od Tajmera2 uvecaj
PIR1.1 = 0
uSek = uSek + TMR2_uS
If uSek >= 1000 Then
uSek = uSek - 1000
mSek = mSek + 1
If mSek >= 1000 Then
mSek = mSek - 1000
Sek = Sek + 1
EndIf
EndIf
EndIf
-----

Ali mozda da probas ovako nekako (ovo je napamet pisano, ispravi greske po potrebi):

Code: Select all

uSek100 Var Byte
mSek Var Word
Sek Var Byte
Min Var Byte
PrevSek Var Byte

PR2 = 100 ' Nastimamo ga da okida svakih 100uS

uSek100 = 1
mSek = 1
Sek = 1
Min = 1
a onda u ISR:

Code: Select all

If PIR1.1 Then 'Ako je prekid od Tajmera2 uvecaj
  PIR1.1 = 0
  uSek100 = uSek100 + 1
  If uSek100 >= 10 Then
    uSek100 = 0
    mSek = mSek +1
    If mSek >= 1000 Then
      mSek = 0
      Sek = Sek + 1
      if Sek >= 60 Then
         Sek = 0
         Min = Min + 1
      EndIf
    EndIf
  EndIf
EndIf
A u svom Main programu kad ocekujes da prodje sekunda da bi blinkao ovako:

Code: Select all

PrevSek = 1
Sek = 1
Pocetak:
   ' Cekaj da prodje sekunda
   While PrevSek = Sek
   Whend
   ' Prosla je, blink
   Toggle Led
   PrevSek = Sek
Goto Pocetak
MIKI73
Napredujem
Napredujem
Posts: 107
Joined: 01-11-2014, 16:57

Re: Pomoc oko TMR2 i PR2 regidtra

Post by MIKI73 »

" Ne znam sta si ovdje sve pisao:
CODE: SELECT ALL
If PIR1.1 Then 'Ako je prekid od Tajmera2 uvecaj
PIR1.1 = 0
uSek = uSek + TMR2_uS
If uSek >= 1000 Then
uSek = uSek - 1000
mSek = mSek + 1
If mSek >= 1000 Then
mSek = mSek - 1000
Sek = Sek + 1
EndIf
EndIf
EndIf "

E to je samo iskopirano iz knjige Vije Milanovica.I meni se cini da nebi trebalo tako ali ipak blinka tacno za jednu sekundu,mozda zato sto tmr2 200 i odmah pravi prekid jer je za 1 veci od pr2 i kad se sve izmnozi ispada da radi kako treba.Probacu ovako kako si mi napisao pa javljam.
MIKI73
Napredujem
Napredujem
Posts: 107
Joined: 01-11-2014, 16:57

Re: Pomoc oko TMR2 i PR2 regidtra

Post by MIKI73 »

Evo sad ovako.izbacio sam sekunde da bih gledao na osciloskopu dok menjam PR2

' Primer upotrebe Tajmera2
' Stanje na RB) pinu menjatic ce sa svake minute

Symbol Led = PORTB.0

uSek Var Word
mSek Var Word
Sek Var byte

TMR2_uS Var byte
TMR2_us = 1 'Postavi period za TMR2

PORTB = 0 'PORTB je izlazni

ON INTERRUPT goto Int_Sub

Inicijalizacija:

PIE1.1 = 0 'Onemoguci sve periferijske prekide

INTCON.6 = 1 'Omoguci periferijske prekide

T2CON.0 = 0 '00 = Preskaler je 1
T2CON.1 = 0 '01 = Preskaler je 4
'1x = Preskaler je 16
PR2 = 250 'TMR2 Period


T2CON.3 = 0 '0000 = 1:1 postskaler
T2CON.4 = 0 '0001 = 1:2 postskaler
T2CON.5 = 0 '0010 = 1:3 postskaler
T2CON.6 = 0 '1111 = 1:16 postskaler
TMR2 = 0 'Reset TMR2 vrednosti

PIE1.1 = 1 'Omoguci TMR2 prekid kada je PR2 = TMR2
T2CON.2 = 1 'Omoguci Tajmer2

INTCON.7 = 1 'Omoguci sve nemaskirane interapte

Pocetak:

Repeat 'Ciklus

Until mSek = 1 'Sve dok Sek ne bude 60

Toggle Led

mSek = 0 'Ponisti Sek

Goto Pocetak 'Vrati se na pocetak
Disable

'-------------Podprogram obrade prekida--------------------------------
Int_Sub:
INTCON.7 = 0 'Onemoguci prekide

If PIR1.1 Then 'Ako je prekid od Tajmera2 uvecaj
PIR1.1 = 0
uSek = uSek + TMR2_uS
If uSek >= 1000 Then
uSek = uSek - 1000
mSek = mSek + 1

EndIf
EndIf


INTCON.7 = 1 'Omoguci prekide

Resume 'Vrati se iz rutine prekida

End

Sad dobijam milisekude koliki je pr2 , radi lakseg pregleda.Sa PR2 250 imam prekid na 250mSek , sa PR2 200 imam prekid 200 mSek ali na nizim vrednostima PR2 kao na primer PR2 50 ja umesto na 50 mSek imam prekid na 100 mSek , isto kao kad stavim PR2 100. Kao da na nizim vrednostima nece da radi ili ja gresim.Kapiram da PR2 odredjuje vreme tmr2 tj dokle tmr2 broji ali zasto nece na nizim vrednostima kad je PR2 50 , zasto opet 100 nilisekunde ?
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pomoc oko TMR2 i PR2 regidtra

Post by pedja089 »

To je ogranicenje pbp-a i koriscenje on interrupt. Druga stvar 4MHz je presporo.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pomoc oko TMR2 i PR2 regidtra

Post by pedja089 »

Sa tako malim vremenima MCU je stalno u interaptu i glavni deo programa se nece izvrsavati...
Za tako velike brzine moja preporuka je pic na 64MHz, interapt kompletan u asembleru i pic sa automatskim cuvanjem i vracanjem registara procesora.

A mozda je bolje pitanje sta pokusavas da napravis. Moguce je da postoji i drugi pristup problemu.
MIKI73
Napredujem
Napredujem
Posts: 107
Joined: 01-11-2014, 16:57

Re: Pomoc oko TMR2 i PR2 regidtra

Post by MIKI73 »

Nepravim nista namenski,samo hocu da proucim nacin rada tmr2.Koristio sam ga u generisanju PWM ali samo tmr2 nisam nikad a mislim da bi mi bio koristan za neke stvari zbo postkalera.Kristal od 4mhz sam stavio zbog okruglih vrednosti radi lakseg razumevanja pa kad se shvati nacin rada ostalo nece biti problem.Evo do kog zakljucka sam dosao menjajuci razne vrednosti tmr2 i pr2.

Ako je PR2 250 a TMR2 50 pa sad tmr2 raste za jednu mikrosekundu 50,za dve mikrosekunde 100 ... i za
5 mikrosekunde dostigne 250. 5 x 50 = 250. U podprogramu uSek = uSek + TMR2_uS
uSek se uvecava za 1 na svake 5 mikrosekunde do 1000 ,znaci 5000 mikrosekunde ukupno da bi se izgenerisale 5 milisekunde.

Koliko sam shvatio PR2/TMR2 250/50=5 i uvecanje za jedan na svakih 5uS.I kad izmenjam vrednosti to se uklapa.

Neznam da li sam u pravu ali tako se uklapa kad gledam na osciloskop,jedino me buni uSek = uSek + TMR2_uS jer se sabira sa +TMR2_uS a u programu stoji TMR2_us = 50 'Postavi period za TMR2
Neuci se lako u mojim godinama ali volim to pa pokusavam koliko je moguce.Sa tmr0 i tmr1 mi je bilo lako ali ovo teze ide.
Post Reply