CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

dspic30f4011 set_timer2() does't work

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
juandres



Joined: 23 Jun 2011
Posts: 5
Location: Ecuador

View user's profile Send private message MSN Messenger

dspic30f4011 set_timer2() does't work
PostPosted: Tue Apr 09, 2013 6:36 pm     Reply with quote

I still programing dspic (tmr2) with this function and doesn't work!!! I think it is a bug because I treat tmr1 with set_timer1() and work perfectly.
Ttelmah



Joined: 11 Mar 2010
Posts: 19516

View user's profile Send private message

PostPosted: Wed Apr 10, 2013 12:32 am     Reply with quote

Timer1, is different from all the other timers on the DSPIC's.

The timers above this, can be used individually, or 'paired' to form 32bit timers.
Unlike the PIC16/18 16bit timers, where the timer counts to 0xFFFF, then resets to zero, these timers can be programmed to reset themselves at a specific count, so setting a timer 'to' a value should never really be needed.
Setting 'to' a value won't work at all if you are above the reset point.

So what you can do, depends on how you have the timer configured.

Post a tiny (half dozen line) program showing what you are trying to do, and your compiler version number.

Best Wishes
juandres



Joined: 23 Jun 2011
Posts: 5
Location: Ecuador

View user's profile Send private message MSN Messenger

PostPosted: Wed Apr 10, 2013 2:30 am     Reply with quote

I want to program a fastest embedded application, this is the reason that I need to reprogrammed the timer2 each interrupt. I cannot post all the code but this has the same result for the purpose.

The fuses and configurations are:

Code:

#include <30F4011.h>

#device adc=10

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES FRC_PLL16                //Internal Fast RC oscillator with 16X PLL
#FUSES NOCKSFSM                 //Clock Switching is disabled, fail Safe clock monitor is disabled
#FUSES NOPUT                    //No Power Up Timer

#FUSES BORV27                  //
#FUSES BROWNOUT               //brownout reset

#use delay(clock=117920000) //7.37Mhz x16


Ttelmah wrote:
Timer1, is different from all the other timers on the DSPIC's.

The timers above this, can be used individually, or 'paired' to form 32bit timers.


Yes, this explain in the datasheet.

This is the code for the timers

Code:

setup_timer1(TMR_INTERNAL|TMR_DIV_BY_8,65535);//87.4 ms overflow
setup_timer2(TMR_INTERNAL|TMR_DIV_BY_256,2046);//

enable_interrupts(int_timer1);
enable_interrupts(int_timer2);


This is the code for the interrupts

Code:

#int_TIMER1
void  TIMER1_isr(void){
   set_timer1(30000);
   output_toggle(iny_out);
}

#int_TIMER2
void  TIMER2_isr(void){
   set_timer2(1000);
   output_toggle(bob_out);
}


The code works OK in TMR1.
The TMR2 I think that is configure correctly because I do not use the "TMR_32_BIT". The TMR2 and TMR 3 does not concatenate.
Ttelmah



Joined: 11 Mar 2010
Posts: 19516

View user's profile Send private message

PostPosted: Wed Apr 10, 2013 2:56 am     Reply with quote

What I can't see is 'why' you'd want to do this. Just reduce the reset count point by 1000, and let the counter run.....
However, what makes you think it isn't working?. TMR2 is at address 0x106, and this line merrily generates the code:
Code:

....................    set_timer2(1000);
0020E:  MOV     #3E8,W4
00210:  MOV     W4,106


Putting 1000, into address 106 correctly.
Have tried the last half dozen compilers and they all generate the correct code.
juandres



Joined: 23 Jun 2011
Posts: 5
Location: Ecuador

View user's profile Send private message MSN Messenger

PostPosted: Wed Apr 10, 2013 3:04 am     Reply with quote

Ttelmah wrote:
What I can't see is 'why' you'd want to do this. Just reduce the reset count point by 1000, and let the counter run.....
However, what makes you think it isn't working?. TMR2 is at address 0x106, and this line merrily generates the code:
Code:

....................    set_timer2(1000);
0020E:  MOV     #3E8,W4
00210:  MOV     W4,106


Putting 1000, into address 106 correctly.
Have tried the last half dozen compilers and they all generate the correct code.


I did this code in 4.104 and 4.141. Doesn't work.

Yes, I know that. I do this too

Code:

#word TMR2 = 0x0106


And in the interrupt I prove this:

Code:

TMR2=1000;


It is not work too.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group