TMR0 Confusion


Closed Thread
Results 1 to 16 of 16

Thread: TMR0 Confusion

Hybrid View

  1. #1

    Default TMR0 Confusion

    Just after a bit of help with TMR0

    I have hacked Darrell's SSPWM routine and am now adapting it to use TRM0 instead of TMR1.

    Now I note you cant stop/start TMR0 I dont think that's a major issue in my application which is generating a 2khz pwm.

    I'm confused with the reloading of the prescaler i'm going to use 1/4 with a preload of 6 and 8mhz int clock to generate an interrupt at 2000hz.

    After the interrupt is dealt with and I reload TMR0 with my PWM duty + preload do I have to reassign the prescaler every time?

    My hacked start SSPWM code is below.

    Config

    Code:
    'OPTION_REG = %00000001  'Set Option Reg for TMR0 and prescaler 1/4
    Start SSPWM

    Code:
     
    StartSPWM: 'Set DutyCycle before calling
    'For TMR0 2khz pwm and 8mhz clock Ticks = xxx per cycle 
    GIE = 1
    PEIE = 1
    TMR0_ON_TICKS = DutyCycle '(DutyCycle must be between 25 - 225 (10-90%)
    TMR0_OFF_TICKS = 255 - TMR0_ON_TICKS
    TMR0_ON_VAL = 255 - TMR0_ON_TICKS + 6
    TMR0_OFF_VAL = 255 - TMR0_OFF_TICKS + 6
     
    TMR0IE = 1 'Enable TMR0 interrupt enable bit (1 = enabled) 
    TMR0IF = 0 'Clear TMR0 interrupt flag
    TMR0 = 255 'Load TMR0 with 255 First tick will cause an interrupt 
     
    1/4 Prescaler setup here ?????
     
    return
    My hacked Int routine is below

    Code:
    asm
    INT_CODE
          if (CODE_SIZE <= 2)
            movwf   wsave              ; copy W to wsave register
            swapf   STATUS,W           ; swap status reg to be saved into W
            clrf    STATUS             ; change to bank 0 regardless of current bank
            movwf   ssave              ; save status reg to a bank 0 register
            movf    PCLATH,w           ; move PCLATH reg to be saved into W reg
            movwf   psave       ;6     ; save PCLATH reg to a bank 0 register
           endif
     
            btfss   INTCON, TMR0IF     ; is TMR0IF set?   Timer0 Interrupt Flag
            GOTO  NoTimerInt           ; No.  Bypass timer load
            btfss   _SPWMstate         ; Is Output High?
            GOTO  TurnON      ;9/15    ; No.
    TurnOFF
            bcf     _CmdPwr             ; Set CmdPwr Low
            bcf     _SPWMstate          ;
            MOVF    _TMR0_OFF_VAL,W     ;  1
            ADDWF   TMR0,F              ;  1    ; reload timer with correct value
            GOTO  TimerDone   ;12/27
    TurnON  
            bsf     _CmdPwr             ; Set CmdPwr High
            bsf     _SPWMstate          ;
            MOVF    _TMR0_ON_VAL,W      ;  1
            ADDWF   TMR0,F              ;  1    ; reload timer with correct value
     
    TimerDone        
     
            1/4 Prescaler setup here ?????
     
            bcf     INTCON, TMR0IF  ; 1/28 ; Clear Timer0 Interrupt Flag
     
    NoTimerInt    
            Movf    psave,w             ; Restore the PCLATH reg
            Movwf   PCLATH
            swapf   ssave,w             ; Restore the STATUS reg   
            movwf   STATUS
            swapf   wsave,f
            swapf   wsave,w    ; 6/34   ; Restore W reg
     
        Retfie                          ; Exit the interrupt routine 
    endasm

  2. #2
    Join Date
    Aug 2010
    Location
    Maryland, USA
    Posts
    869


    Did you find this post helpful? Yes | No

    Default Re: TMR0 Confusion

    Prescaler should be set and forget as I understand it
    -Bert

    The glass is not half full or half empty, Its twice as big as needed for the job!

    http://foamcasualty.com/ - Warbird R/C scratch building with foam!

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


    Did you find this post helpful? Yes | No

    Default Re: TMR0 Confusion

    When you use the USART, are you setting the Baudrate after each character sent? Nope!

    When you use the CCP module in PWM mode, do you need to configure the frequency each time you want to play with the duty cycle? Nope!

    Internal hardware are often like so, you set them, you forget them.
    Steve

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

  4. #4


    Did you find this post helpful? Yes | No

    Default Re: TMR0 Confusion

    That's why i'm confused the 12F683 data sheet says that writes to the TMR0 reg clear the prescaler :?

    The prescaler is not readable or writable. When
    assigned to the Timer0 module, all instructions writing to
    the TMR0 register will clear the prescaler.

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


    Did you find this post helpful? Yes | No

    Default Re: TMR0 Confusion

    mm, seems I need to send my crystal ball again for repair... she don't want to tell me the PIC you're using
    Steve

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

  6. #6
    Join Date
    Aug 2010
    Location
    Maryland, USA
    Posts
    869


    Did you find this post helpful? Yes | No

    Default Re: TMR0 Confusion

    That can be a little confusing. the prescaler keeps a count. Say it is set up for 1:8, it will count to 8 then roll over. the roll over is the new tmr count. When you write the tmr0 they are saying the count in pre scale will be reset back to 0. so if it had a count of 5, it will be cleared to zero. But the amount of pre scale will persist, it will still be 1:8

    Steve, she just needs glasses, look above the quote
    -Bert

    The glass is not half full or half empty, Its twice as big as needed for the job!

    http://foamcasualty.com/ - Warbird R/C scratch building with foam!

  7. #7


    Did you find this post helpful? Yes | No

    Default Re: TMR0 Confusion

    Thanks for that CNC! makes sense. I'm using a 12F683 FYI. I'll do some bench testing

Members who have read this thread : 2

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