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

PIC12F683 problem with WDT and Timer0?

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



Joined: 09 Jul 2004
Posts: 70

View user's profile Send private message

PIC12F683 problem with WDT and Timer0?
PostPosted: Thu Dec 20, 2007 12:38 pm     Reply with quote

I am trying to run a simple program that fires a output after a set time interval. I am using int_rtcc to count seconds, which is code that i have used else where inother pics with good succes. For some reaston it seems that if the Wdt is enabled, the timer0 does not work. if i turn it off, it times but not correctly. It has to be something in the set up, but i can not find what it is. Does anyone have suggestions? Thanks
V4.062
Code:

#include <12F683.h>
#device adc=10
#use delay(clock=2000000,RESTART_WDT)
#fuses WDT,INTRC_IO, PUT, MCLR, NOBROWNOUT, NOCPD, NOPROTECT
#include <math.h>

#use fast_io(A)
#define  GPIO1    PIN_A0
#define  LED2     PIN_A1           
#define  time_in  PIN_A2
//#define  time_in  PIN_A3             
#define  trn      PIN_A4             
#define  lbo      PIN_A5
#define INTS_PER_SECOND  976
////////////////////////////////////////////////////////////////////////////////


char  int_count,loop;
long  time1,time2,time3,seconds,voltage,hour,day,minute;

////////////////////////////////////////////////////////////////////////////////
#int_rtcc
void clock_isr(void)
{
   if(--int_count==0)                     //decrement counter until 0
   {
      ++seconds;                          //count up seconds
      int_count=INTS_PER_SECOND;          //reset counter
      if (seconds>=65000)
         seconds=65000;
   }
}
////////////////////////////////////////////////////////////////////////////////

 //////////////////////////////////////////////////////////////////////////////
void main()
{
   

   setup_oscillator(osc_2mhz);
   //setup_adc_ports(sAN2);
   //setup_adc(ADC_CLOCK_DIV_16);
   setup_wdt(WDT_ON);
   //setup_wdt(WDT_72MS | WDT_ON);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
   set_rtcc(0);
   enable_interrupts(INT_RTCC);
   enable_interrupts(GLOBAL);
   //setup_timer_1(T1_DISABLED);
   
   set_tris_a(0b00101111);
   output_low(trn);                    //shut off solenoid
   int_count=INTS_PER_SECOND;          //used for timer
   seconds=0;                          //clear out variable
   hour=0;                             //clear low volage counter for seconds
   day=0;                              //clear out day counter
   minute=0;
   time1=20;                            //counter for time
   loop=1;
   voltage=0;
   //set_adc_channel(2);
   //delay_ms(1000);
     

   while (TRUE)
   {
      //voltage=read_adc();
      while(loop=1)
      {
      /*if(voltage>=1010)
      {
         output_high(trn);
         delay_ms(100);
         output_low(trn);
      }*/
      if(seconds>=time1)
      {
         output_high(trn);
         delay_ms(100);
         restart_wdt();
         output_low(trn);
         loop=0;
         //seconds=0;
      }
      }
      while (loop==0)
         {
         delay_ms(100);
         output_low(trn);
         }
   }
}
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Thu Dec 20, 2007 12:46 pm     Reply with quote

Quote:
#define INTS_PER_SECOND 976

char int_count, loop;

int_count = INTS_PER_SECOND

You're loading a 'char' with a value greater than 255.
nmeyer



Joined: 09 Jul 2004
Posts: 70

View user's profile Send private message

PostPosted: Thu Dec 20, 2007 1:08 pm     Reply with quote

Thanks for catching that. Still something seems to be conflicting with the wdt. if it is off, i seem to be able to run close to where i want. with it on, it does not work at all.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Thu Dec 20, 2007 1:24 pm     Reply with quote

The WDT has a 16-bit prescaler. In addition to that, there is another
divider that can optionally be assigned as a WDT post-scaler or as
a pre-scaler for Timer0.

I don't have time to figure out the correct setup right now. I have to
do things at work. Maybe later.
nmeyer



Joined: 09 Jul 2004
Posts: 70

View user's profile Send private message

PostPosted: Thu Dec 20, 2007 2:00 pm     Reply with quote

Yes, that is what i was pursuing. I have not found the correct set up yet, but i am testing with the wdt off now and it seems to be running ok. I will look into it some more. Thanks
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Dec 23, 2007 4:18 pm     Reply with quote

I had some more time to work on this today. I made a test program
that does RTCC interrupts at 976 Hz, and it also runs the Watchdog timer
at a period of 69 ms. I didn't put in any code to restart the WDT because
I wanted it to do a reset, so I could measure the rate.
Code:

#include <12F683.h>
#fuses INTRC_IO, NOWDT, MCLR, PUT, BROWNOUT
#use delay(clock=2000000)

#int_rtcc
void rtcc_isr(void)
{
// Create a short pulse so we can see the RTCC
// interrupt frequency on Pin A2 on a scope.
output_high(PIN_A2);   
delay_us(10);
output_low(PIN_A2);
}

//=============================
void main()
{
// Create a short pulse so we can see the WDT
// restart frequency on Pin A5, on a scope.
output_high(PIN_A5);
delay_ms(1);
output_low(PIN_A5);

setup_wdt(WDT_ON | WDT_TIMES_4);

setup_timer_0(RTCC_INTERNAL | RTCC_DIV_2);

enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
   
while(1);
}
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