tmr2 interrupt problem


Closed Thread
Results 1 to 28 of 28

Hybrid View

  1. #1
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    Well the prescaler was already 1:16 at the first post.. hence why you didn't had any better results
    Now what you need to do is to use the POSTscaller. if you set the postscaller to 1:2 you'll have a 2mSec*Prescaller int. 8mSec, postscaller 1:4 and so on
    Code:
            T2CON = %00011010
                    'X------- Unimplemented
                    '-0011--- postscale 1:4
                    '-----0-- Timer2 off
                    '------10 prescaler 1:16
    seems to work with the second suggestion
    Code:
    // Snip
            ON INTERRUPT GOTO ISR
            PR2 = 124   ' load period register for 2mSec 
            PEIE = 1    ' Enable peripheral interupt
            GIE = 1     ' enable Global interrupt
            TMR2ON = 1  ' TMR2 ON
            GOTO LOOP                
    
            disable
    ISR:
            TOGGLE PORTB.0
            TMR2IF = 0  ' Clear interrupt flag
            resume
            enable
    // end snip
    Last edited by mister_e; - 30th December 2007 at 22:26.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  2. #2
    Join Date
    Dec 2007
    Location
    The Netherlands, Groningen
    Posts
    16


    Did you find this post helpful? Yes | No

    Default

    thanks, i just found it myself.

    4000000/4/256/16/2=122
    osc/4/8bit/precaler/postprescaler=period
    1/122=0,008S

    4000000/4/256/16/4=61
    1/61=0,016S

    now try at the code..

  3. #3
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    or... easier way... PICMultiCalc, Timer Helper.
    http://www.mister-e.org/pages/utilitiespag.html

    255-Value listed in the list, and you're in business

    Raise your hand those using it.. at least for timer!!!

    OK Darrel
    Last edited by mister_e; - 30th December 2007 at 23:50.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  4. #4
    Join Date
    Dec 2007
    Location
    The Netherlands, Groningen
    Posts
    16


    Did you find this post helpful? Yes | No

    Default

    Well, I can use the timer now.
    I even added a postscale of 1:16 and a prescale of 1:16 so it's interrupt-frequency was about 15Hz. The segments were blinkin visibly. Even then, when I changed 'resume loop' to 'resume' I had no changing data to my display. Only the var's he already had.

    So, somehow there is something wrong with the resume command. And I really don't know what it is...

  5. #5
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    Nah there's no issue with RESUME... i'm trying to analyze the whole program here. yeah i TRY.

    Try something... comment out the whole none-ISR code, assign a value to the var used in your ISR, and see if there's any problem. You main loop could be anything like a LED blink. Careful with your delays... you're using ON INTERRUPT...

    EDIT:
    found 2 X 74HC595 on a really old board here, need to test them first...
    Last edited by mister_e; - 31st December 2007 at 01:06.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  6. #6
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    EDIT2: Thought i saw that before...

    One thing i discover in your code...
    Code:
    LOOP:
            I2CRead DS_SDA,DS_SCL,$D0,$00, [sec,MINs,hr,day,date,mon,yr] ' Read Ds1307 
            	If sec.7=1 then goto coldstart	
                If setbutton = 0 then       'if setbutton is pressed
                    _hr=hr
                    _min=MINs
                    _sec=sec
                 gosub SetButtonRelease    
                 Gosub SetTimeAndDate 'after release    
               endif
            counter3=0
            repeat     'show the segments for 5 times.
                pauseus 10    
                until counter3 > 5
            GoTo Loop
    You don't increment Counter3 variable.. so it will never jump to Loop... hence maybe why it works when you're using RESUME LOOP...

    Same thing in PauseLoop
    Code:
    Pauseloop: 'some timedelay
            counter3=0
            repeat
                pauseus 10
            until counter3 > 50
            return
    and
    Code:
    '------------------------------------
    SetButtonRelease: 'delay for button
    	counter3=0
        while setbutton=0
            pauseus 10
        Wend
    	if counter3=>29 then
            repeat
                pauseus 10
            until counter3 > 70
        else 
            goto loop    
        endif
        Return
    I'll wait before building it
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  7. #7
    Join Date
    Dec 2007
    Location
    The Netherlands, Groningen
    Posts
    16


    Did you find this post helpful? Yes | No

    Default

    hi, the counter3 has not to be the problem. It is incremended everytime it go's to the ISR. If you look at the top of the ISR you see:
    Code:
    if counter3=>200 then 'number of shiftouts
    counter3=0
    else 
    counter3=counter3+1
    endif
    So it stays in stat loop until the ISR is called for 'counter3' time's.
    So it's a kind of delayloop.

    Is there an other wat to go to the ISR at the timerinterrupt then ON INTERRUPT?

    I go to try comment the code to a minimize is left and use 'return' at th end of the ISR.

    To make clear that there are no mistakes: I tried to make the program work in loops and every time the timerinterrupt sets it's flag jumps it to the ISR to shiftout the displayvalues, afther that it go's back to twere it was en finish the loop so it can start again waiting for a buttonpress.

    I'm sorry, I thing it will be tomorrow that this is finished. It's buzy over here...
    Last edited by ADCON; - 31st December 2007 at 17:18.

Similar Threads

  1. Problem with Interrupt on PIC18F4620 PORTB
    By rookie in forum Off Topic
    Replies: 1
    Last Post: - 22nd March 2007, 02:34
  2. Problem with PBP interrupt and Serin, please help
    By rgregor in forum mel PIC BASIC
    Replies: 0
    Last Post: - 22nd August 2006, 20:02
  3. Interrupt Problem
    By Kamikaze47 in forum mel PIC BASIC Pro
    Replies: 15
    Last Post: - 16th November 2005, 21:58
  4. Interrupt stack overflow problem with Resume {label}
    By Yuantu Huang in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 3rd May 2005, 02:17
  5. USART interrupt not interrupting right
    By Morpheus in forum mel PIC BASIC Pro
    Replies: 12
    Last Post: - 6th March 2005, 02:07

Members who have read this thread : 0

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

Posting Permissions

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