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

TMR1 OSC with external 32768KHz XTAL not clocking CPU

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



Joined: 13 Apr 2011
Posts: 417

View user's profile Send private message

TMR1 OSC with external 32768KHz XTAL not clocking CPU
PostPosted: Fri Dec 23, 2011 8:13 am     Reply with quote

I'm working on a low power device that needs to sleep(at main()) and wake up one time per second to flash a LED, from a low priority interrupt routine, until a button is pressed for at least 3 seconds.

The device implements a USB CDC port, so it have a primary 8MHz Xtal and start with that Xtal; the problem appears when I change the main system OSC to the secondary TMR1 low power OSC.

So when the processor start...

OSCTUNE=0b01000000(PLL on)
OSCCON=0b11110100(48MHz from PLL/Idle on SLEEP)

CCPR1=32768
ECCP1CON=0b1011
TIMER1=0b00001011
TIMER3=0b10001010
PIE1=0x00100100

Before the sleep instruction I call a subroutine that shut off some pins and clear some variables and change the clock source to the low power oscillator in order to reduce the power needs, or at least that's the idea.
So I change the OSCCON value

OSCCON=0x81 <-- At this point the processor halts!


If I change OSCCON value to 0xF3(INTRC 8MHZ) It works ok and ; Why?


I already test the low power TMR1 OSC and runs OK. Did I forgot something or can be some bug on the core?I'm working on a low power device that needs to sleep and wake up one time per second to flash a LED, from a low priority interrupt routine, until a button is pressed for at least 3 seconds.
_________________
Electric Blue


Last edited by E_Blue on Fri Dec 23, 2011 8:56 am; edited 1 time in total
Ttelmah



Joined: 11 Mar 2010
Posts: 19504

View user's profile Send private message

PostPosted: Fri Dec 23, 2011 8:54 am     Reply with quote

1) What processor.
2) Use the CCS functions.
E_Blue



Joined: 13 Apr 2011
Posts: 417

View user's profile Send private message

PostPosted: Fri Dec 23, 2011 9:04 am     Reply with quote

The processor its a PIC18F67J50 in TQFP package.

I already tried with CCS functions and simply by defining them as #Byte but none works.

I Also use sleep() and sleep(SLEEP_IDLE), same results.

I don't put the code because is too big more than 150Kbytes of C code, it haves about one year of work on it, so I just tried to summarize the code.
_________________
Electric Blue
temtronic



Joined: 01 Jul 2010
Posts: 9225
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Fri Dec 23, 2011 10:08 am     Reply with quote

Cut a small , compilable program that shows us the problem( <20 lines of code),as well as PIC type and Compiler version.
Ttelmah



Joined: 11 Mar 2010
Posts: 19504

View user's profile Send private message

PostPosted: Fri Dec 23, 2011 10:50 am     Reply with quote

I don't think what you want is possible.
There is a problem with putting a device to sleep with a low speed clock,if it implements USB.
Thing is that a slave device _must_ respond to interrupts from the USB master. The USB master can 'ask' a device to sleep, and it can then sleep, but must re-awaken on the USB 'ACTVIF' interrupt. This requires that the USB circuitry is put into 'suspend' mode (not sleep), and the master clock for USB must still run. Power in this mode is just under 500uA, and is the lowest power mode you can put a USB running device into. The USB master warrants that it can deliver 500uA, to devices that are in suspend mode.
So I'd say it is physically not possible on the chip if you have the USB peripheral enabled.

Best Wishes
E_Blue



Joined: 13 Apr 2011
Posts: 417

View user's profile Send private message

PostPosted: Fri Dec 23, 2011 11:18 am     Reply with quote

Ttelmah I know that, and the program have routines in order to don't allow to go to sleep mode when USB is running; the circuitry have is own dual power supply, battery and external 12VDC, and the idea is to let the user power off the device in order to store the device until it is sold(this is one of the power modes), the second one is IDLE mode, since is operative but no all functions are running, just a couple of software timers and input checks.

When one of the software timers make an overflow the device wake up, start the main OSC and the PLL in order to run more complex tasks.

temtronic, that´s is a complex task at this moment cause I need to show some results to my boss today, so ill keep trying, but if none work I'll be back with the small code.

Thanks.
_________________
Electric Blue
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