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

How to drop down the oscillator frequency?

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



Joined: 20 Jul 2011
Posts: 375

View user's profile Send private message

How to drop down the oscillator frequency?
PostPosted: Mon Jul 16, 2012 11:35 pm     Reply with quote

Greetings! I'm using PIC18F4431 at 40MHz (10MHz crystal and PLL). I want to drop down this frequency to let`s say 5-10kHz. Is there a way to do this without exchanging the crystal??
Thanks!
bkamen



Joined: 07 Jan 2004
Posts: 1612
Location: Central Illinois, USA

View user's profile Send private message

PostPosted: Mon Jul 16, 2012 11:47 pm     Reply with quote

Unless you build in circuitry to switch down the crystal -- not really.

Now, some PIC's (not sure if the 18F4431 supports this) will allow you to turn on/off the PLL in software.

This results in a speed switch (and thus a power reduction).

Those same PIC's also usually allow the ability to switch to the internal RC oscillator (or TIMER1) -- which run at like 32KHz.

Which further really cranks down the speed/power.

Keep in mind, timing delays get all messed up if you don't code to cope with the speed change...

As for switching out crystals, it could be done -- but you'd need extra hardware to switch out the crystals to do it.

-Ben
_________________
Dazed and confused? I don't think so. Just "plain lost" will do. :D
Ttelmah



Joined: 11 Mar 2010
Posts: 19485

View user's profile Send private message

PostPosted: Tue Jul 17, 2012 1:13 am     Reply with quote

On this chip, you can switch to the internal oscillator at 31KHz, under software control:
Code:

setup_oscillatator(OSC_31KHz|OSC_INTRC); ///To switch down

setup_oscillator(OSC_NORMAL); //To switch back up to the default oscillator

Seriously though, there are a lot of things to consider:

1) Obviously, things like serial ports etc., will no longer work, unless you reprogram the baud rates to match, and only quite slow rates can be used with such a slow clock.
2) It takes significant _time_ to switch back to the master oscillator an let it stabilise. The setup_oscillator call returns 'OSC_STATE_STABLE', and this should be tested, before you use _anything_ involving times.
3) Power saving, may be less than you expect. The biggest savings on the PIC, are ensuring that pins are not allowed to float, the external regulator (ir is typical to find people complaining that the chip draws more than they expect, then find out it is the regulator....). 1MHz, typically only draws under 0.5mA, while 33Khz, is still over 1/3rd of this. There is a law of 'diminishing returns' as you go slower. If you want low power consider if you can put the chip to sleep for some time instead?.
4) Remember the internal oscillator is not terribly accurate, but has the advantage of drawing less power than the external crystal. Typically draws about 1/4 what an external crystal requires. If great accuracy is not needed, and you can handle the code you want at a slightly slower rate, then using the internal oscillator at 8MHz, and not switching, may be the 'better' route.

Best Wishes
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