Jump to content
ELFORUM - Forumul electronistilor

TMR1 overflow


MirceaM

Recommended Posts

Folosesc 16F877 pentru o aplicatie oarecare si vreau sa masor timpul cat un semnal digital care vine din exterior este in 1 logic. Semnalul misca cel mai des posibil la 1 ms si cel mai rar posibil la cateva secunde. Acest semnal il aduc pe PORTB bit 7 iar orice schimbare a lui va genera intrerupere. Atunci cand am schimbare 0->1 fac TMR1H=TMR1L=0x00 si pornesc TMR1 iar cand am schimbare 1->0 opresc TMR1 si am TMR1H*256+TMR1L numarul de microsec in care semnalul a fost in 1. Asta merge, vad pe simulator ca totul este bine. Problema este ca, in acest fel, pot sa contorizez max 65535 us = 65 ms ceea ce este nemultumitor, pentru ca durata de contorizat trebuie sa poata fi mult mai mare. Am citit ca atunci cand "TMR1 overflows" poate sa apara intrerupere. In tratarea acesteia mi-as incrementa o variabila a programului, de 16 biti, urmand ca numarul de microsecunde dorit sa il am in MyVar<<16 +TMR1H<<8 + TMR1Ldeci pe 32 de biti, deci pana la 4 miliarde de us, deci suficient. Desi am observat o similitudine cu bitii pentru TMR0 (pe care il folosesc cu succes, inclusiv evenimentul "TMR0 overflow"), in cazul lui TMR1 nu pot sa captez intreruperea cand se da peste cap. Folosesc HT-PIC.As aprecia ajutorul vostru. Multumesc.

Link to comment
  • Replies 3
  • Created
  • Last Reply

Top Posters In This Topic

  • MirceaM

    2

  • CristianC

    1

  • cirip

    1

Top Posters In This Topic

nu pot sa captez intreruperea

Prin asta se intelege ca nu accepta cererea de intrerupere? Adica nu sare la adresa 4?As verifica bitii GIE, PEIE si TMR1IE. Toti trebuie sa fie setati (1) ca sa accepti intreruperea la overflow. Apoi, TMR1IF trebuie resetat prin software, ca sa nu intri in intrerupere indefinit.Cirip
Link to comment
  • 3 weeks later...

Multumesc, Cirip.

S-a rezolvat si merge. Imi luasem singur masura ca, la 50000 microsec, sa citesc valoarea TMR1H:TMR1L in alta variabila si sa resetez valoarea timer-ului dar am uitat ca am facut asta. Deci imi dadeam cu stangul in dreptul. -:)

Acesta era motivul pt care TMR1 nu ajungea niciodata la 0xFFFF.

Link to comment

Daca vrei sa contorizezi perioade mai lungi si nu ai nevoie de o rezolutie mai mare de 16biti poti sa folosesti prescaler-ul timer-ului si/sau un oscilator cu frecventa mai mica.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines