1ms Elapsed Timer Demo with DT's Instant Interrupts


Closed Thread
Results 1 to 22 of 22

Hybrid View

  1. #1
    Join Date
    Aug 2003
    Posts
    985


    Did you find this post helpful? Yes | No

    Default Re: 1ms Elapsed Timer Demo with DT's Instant Interrupts

    Ok thanks for confirming, I figured as much.
    Dt’s original timer, or a bastardised version of it, because I know for the project it will always be clocked at 10 MHz,
    and I also know I will only ever be interested in 100 Hz interrupt form the timer. The portb.0 interrupt is simpler, and I’ve done that manually.

    To answer your other question.. It’s still about synchronising the timer to a GPS PPS pulse, but I want to go better than simply resetting Ticks,
    and load the timer correctly for that situation as well... So when the program decides to sync, it enables portb.0 int, resets the flag for portb.0 int,
    and then the next rising edge interrupt should call the same timer where it is loaded and then the portb.0 interrupt turned straight back off
    unless the program decides to do the sync again at some later time.

    Dealing with the timer ISR.. it seems I could save myself some instruction counting, and deal with the timer value the same way the reload code does
    by just making sure the next Tick will occur correct time, rather than dealing with the current portb.0 int Tick that called the ISR.

    This is my first play.. not sure about it and haven’t thought about it too much.. it’s my first play in a compiler since I started talking to you.
    I disable ext int just a little later when the time values are being incremented and timing isn’t as critical.
    For this version the constant needs another 6 added to it.

    For most of the time ext int is disabled it’s supposed to act as it normally would, but take a little longer to execute.

    Code:
    ; -----------------  ADD TimerConst to TMR1H:TMR1L
    ADD2_TIMER   macro
        CHK?RP  T1CON
    
         BCF     T1CON,TMR1ON       ; 1 Turn off timer
         MOVLW   LOW(TimerConst)    ; 1
    
         BTFSC   INTCON,INTE	; 1/2
         MOVWF   TMR1L		; 1/0
    
         BTFSS   INTCON,INTE	; 1/2
         ADDWF   TMR1L,F            ; 1/0
    
         BTFSC   STATUS,C           ; 1/2
         INCF    TMR1H,F            ; 1/0
         MOVLW   HIGH(TimerConst)   ; 1
    
         BTFSC   INTCON,INTE	; 1/2
         MOVWF   TMR1H    		; 1/0
    
         BTFSS   INTCON,INTE	; 1/2
         ADDWF   TMR1H,F            ; 1/0
    
         endm

  2. #2
    Join Date
    Jan 2013
    Location
    Texas USA
    Posts
    229


    Did you find this post helpful? Yes | No

    Default Re: 1ms Elapsed Timer Demo with DT's Instant Interrupts

    Two initial questions.

    1. Are you using DT's Instant Interrupts to handle the Timer1 Interrupt?
    2. Is the code snippet below used for both interrupt instances you mentioned?
    A. Timer1 100Hz Interrupt
    B. PORTB.0 Interrupt to re-synch
    Regards,
    TABSoft

  3. #3
    Join Date
    Aug 2003
    Posts
    985


    Did you find this post helpful? Yes | No

    Default Re: 1ms Elapsed Timer Demo with DT's Instant Interrupts

    1.. Yes.
    There is a little more in the main program to handle the ext interrupt, but essentially yes (for question 2).

    The main program turns external int off and clears it’s trigger flag as well at initialise time.
    Then when the sync wants to happen for whatever reason (like the GPS has been locked for a minute),
    the main program turns ext int on. Then I figure the next time the ISR is called by ext interrupt,
    the timer should be loaded rather than added to... but added to every other time, because
    the ISR turns ext int off just a little after this.

    ps.. So far the time is still correct, but I can’t test lag or error of the sync to the pulse.
    Last edited by Art; - 20th May 2015 at 16:04.

  4. #4
    Join Date
    Aug 2003
    Posts
    985


    Did you find this post helpful? Yes | No

    Default Re: 1ms Elapsed Timer Demo with DT's Instant Interrupts

    It just occurred to me I’d have to comment out anything instant interrupts does with other interrupts
    just in case activity on portb.0 changes the time that takes to execute (prior to the timer reload routine being called),
    and also add it's instruction time in the value loaded to the timer if portb.0 was the source of the interrupt.

  5. #5
    Join Date
    Jan 2013
    Location
    Texas USA
    Posts
    229


    Did you find this post helpful? Yes | No

    Default Re: 1ms Elapsed Timer Demo with DT's Instant Interrupts

    I think we may be beginning to cloud up this thread.
    Do you want to start another?
    Regards,
    TABSoft

  6. #6
    Join Date
    Aug 2003
    Posts
    985


    Did you find this post helpful? Yes | No

    Default Re: 1ms Elapsed Timer Demo with DT's Instant Interrupts

    There might not be a need to if I fix the second channel on my scope, and do what you did,
    except look at the generated pulse on one ch, and the GPS pulse on the other.
    Then if I can’t sort it out I’ll start another one.
    Cheers, Brek.

  7. #7
    Join Date
    Jan 2013
    Location
    Texas USA
    Posts
    229


    Did you find this post helpful? Yes | No

    Default Re: 1ms Elapsed Timer Demo with DT's Instant Interrupts

    Art,

    Just curious if you got this to work.
    I would think that you would have to define a DT interrupt source for the EXT int and set the handler label.
    Regards,
    TABSoft

Similar Threads

  1. DT's Instant Interrupts
    By andywpg in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 1st June 2014, 18:01
  2. Elapsed Timer Demo
    By Darrel Taylor in forum Code Examples
    Replies: 111
    Last Post: - 29th October 2012, 17:39
  3. DT's Instant Interrupts trouble
    By Tomexx in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 24th November 2008, 20:48
  4. Elapsed Timer Demo in a PIC12F675
    By Leonardo in forum mel PIC BASIC Pro
    Replies: 16
    Last Post: - 21st November 2008, 00:01

Members who have read this thread : 2

You do not have permission to view the list of names.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts