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

PIC10F206 loses data after sleep?

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



Joined: 07 Sep 2003
Posts: 46
Location: Manchester, UK

View user's profile Send private message

PIC10F206 loses data after sleep?
PostPosted: Thu Mar 10, 2005 3:10 pm     Reply with quote

I have a problem where I put the PIC to sleep, but only want it to do anything one third of the time. With the 12F629 this is no problem, so I'm beginning to suspect the 10F...
Code:

#include <10F206.h>
#Fuses NOMCLR,NOPROTECT,WDT
#use delay(clock=4000000)


#use fast_io(B)

void shortbeep(void);
void initialise(void);

#byte GPIO = 6

#bit GP0= GPIO.0
#bit GP1= GPIO.1
#bit GP2= GPIO.2
#bit GP3= GPIO.3

#byte CMCON0 = 0x07
#bit CMPOUT = CMCON0.7

int8 count;

void main() {
   initialise();


   While(1){

      if (CMPOUT){            // Outside apparently...
         if (count > 2) {
         shortbeep();   //beep if required.
         count = 0;
         }
      }
   sleep();
   initialise();
   count++;
   }

} //end main


//******************************* end main program *************************************
void initialise(void) {
   GPIO = 0x00;
#asm
   movlw 0x09  //Bits 0 & 3 inputs
   TRIS GPIO
// Disable wake-up on pin change, enable weak pull-ups,
// Timer0 source internal, L to H
// Prescaler to WDT, max division 2304mS
   movlw 0x8F
   OPTION
#endasm
// no comparator output,
   CMCON0 = 0x7B;
}

// Piezo element on GPIO bits 0 and 1
void shortbeep(void)
{
int8 t, j;
t = GPIO & 0x09;
for(j=0; j<=250;j++)
   {
   GPIO = t | 0x02;
   Delay_Us(120);
   GPIO = t | 0x04;
   Delay_Us(110);
   }
GPIO = t;
}


Now if I remove the
Code:

         if (count > 2) {

All is well, suggesting a loss of data from sleep period to sleep period. The supply is fairly heavily decoupled with a 1uF ceramic right under the PIC, along with a 100uF Al electrolitic.

Am I doing something particularly stupid that one of you can spot?
FWIW the compiler is version 3.206

Steve
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Thu Mar 10, 2005 3:52 pm     Reply with quote

The "wake-up from sleep" behavior is different between the two devices.
Compare the data sheets in that area.
mcafzap



Joined: 07 Sep 2003
Posts: 46
Location: Manchester, UK

View user's profile Send private message

PostPosted: Thu Mar 10, 2005 4:49 pm     Reply with quote

Good thinking PCM, thank-you.
For anyone's interest, the 10F series generates a standard reset on watchdog timeout whether or not it is in sleep mode, this means that the line

Code:

   count++;

will never be executed.

In fact because of this behaviour the code can be simplified: remove the while(1) loop because the of the hidden 'SLEEP' instruction, initialise() need only be in line since it too would not be reached.

Steve
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