|
|
View previous topic :: View next topic |
Author |
Message |
newby
Joined: 26 Sep 2004 Posts: 32
|
How to use PLL mode and internal osc on 18F26x0 ? |
Posted: Fri Dec 30, 2005 4:26 am |
|
|
I would like to use the internal 8 MHz osc and to multiply it with the PLL to 32 MHz, but i donīt know how to set the fuses
is the following configuration correct (only concerning the osc):
Code: |
#include <18F2620.h>
#device *=16
#fuses INTRC_IO, NOIESO,NOBROWNOUT,NOWDT,NOPUT,STVREN,NOLVP,NOFCMEN,NOXINST,NOPBADEN,NOMCLR
#use delay (clock=32000000)
|
Does the compiler know how to activate the PLL to achieve the 32 MHz ?
Or should i use:
Code: | setup_oscillator(OSC_32MHZ | OSC_INTRC | OSC_PLL_ON); |
|
|
|
Ttelmah Guest
|
|
Posted: Fri Dec 30, 2005 4:55 am |
|
|
Looking at the chips data sheet.
Oscillator configurations:
LP
XT
HS
HSPLL
RC
RCIO
INTIO1
INTIO2
EC
ECIO
The chip itself, does not support using the PLL, with the internal oscillator, _on the setup fuses_.
If you then read on, you find that in INT OSC mode, the PLL, is enabled instead, by the control bit 'PLLEN', which has to be setup after boot. If you then look at the include file for the chip, under the section for 'setup_oscillator', you find the entry 'OSC_PLL_ON'.
So if you use:
setup_oscillator(OSC_8MHZ | OSC_PLL_ON);
or
setup_oscillator(OSC_32MHZ);
Which has the two constants already 'ored' together, then the chip will enable the PLL.
The compiler may be 'smart' enough to do this automatically, with the configuration you give, but I'd not rely on it....
Best Wishes |
|
|
newby
Joined: 26 Sep 2004 Posts: 32
|
another CCS bug... |
Posted: Fri Dec 30, 2005 10:06 am |
|
|
fixed it and got another problem:
my problem has "nothing" to do with the osc settings
try the following code - it wonīt work, then comment //#zero_ram and it works !!!
I tried to put in the #zero_ram on different positions, as long as it is inside, it doesnīt work....
Code: | #zero_ram
#include <18F2620.h>
#device *=16
#fuses INTRC_IO, NOIESO,NOBROWNOUT,NOWDT,NOPUT,STVREN,NOLVP,NOFCMEN,NOXINST,NOPBADEN,MCLR
#use delay(clock=32000000)
void main() {
While (TRUE) {
output_toggle(PIN_A0);
}
}
|
|
|
|
Ttelmah Guest
|
|
Posted: Fri Dec 30, 2005 10:41 am |
|
|
#ZERO_RAM, has caused a lot of problems, for a lot of people. Why use it? If I want variables to contain 0, just declare them to contain this value. ZERO_RAM, on larger chips, takes a long time, and (though it does not apply in your case, since the WDT is disabled), is almost unuseable with the watchdog timer enabled since it takes too long to complete on bootup.
As a minor comment, get rid of the #device *=16 declaration as well. This is _not needed_on the 18 chips. It only applies to the 12/14/16 family chips. It should not be doing anything, but why ask for problems.
I wonder if the #zero_ram, really is stopping it working. Try leaving it for a minute or two. I may be that the oscillator configuration, is not being set, till _after_ the execution of this instruction. The default bootup oscillator is 32KHz. With 3968 bytes of data memory, and assuming that it may well take about ten instructions per byte to select, clear, and loop, at 32K, it'll take about 5 seconds to clear the memory.
Best Wishes |
|
|
Guest
|
|
Posted: Fri Dec 30, 2005 12:04 pm |
|
|
thanks a lot for this very interesting comments, i will follow them !
I will wait for several minutes to clearify if zero_ram does what it should do ! |
|
|
|
|
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
|