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

Internal Oscillator not working at 64mhz

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



Joined: 09 Nov 2010
Posts: 7
Location: UK

View user's profile Send private message

Internal Oscillator not working at 64mhz
PostPosted: Mon Nov 25, 2013 10:18 am     Reply with quote

Hi there,
I have been playing with this for the last 6 hours now trying to get it to work and it's driving me over the edge.

I want to run a PIC18F13k22 at its 64mhz internal oscillator (16mhz 4xPLL).

I've tried using setup_oscillator() with various attempts and each failed.
I treid using just fuses and #use delay (internal=16000000) or (clock=64000000) which all failed.
I even tried setting OSCCON and OSCTUNE manually using this:

Code:

#byte OSCCON = 0xFD3
#byte OSCTUNE = 0xF9B
   OSCCON = 0b11110010;
   OSCTUNE =0b11000000;



Code:
#FUSES INTRC_IO
#FUSES PLLEN
#use delay(clock=64000000)


Code:
#FUSES INTRC_IO
#FUSES PLLEN
#use delay(internal=16000000)


I appear to keep getting the default 4mhz according to my calcs from timer0. I think the best I have managed is 8mhz.

Please help, any advice would be much appreciated.

Jason
Ttelmah



Joined: 11 Mar 2010
Posts: 19505

View user's profile Send private message

PostPosted: Mon Nov 25, 2013 10:36 am     Reply with quote

Code:

#FUSES INTRC_IO
#use delay(internal=64MHz)

//Then add at the start of main
   setup_oscillator(OSC_INTRC|OSC_64MHz);


Some compiler versions get it all 'right', but some leave you running in the 'failsafe' with just the fuses. The setup_oscillator, then switches to the correct oscillator. The clock statement must use 64Mhz, or timings will all be wrong once the oscillator is running at 64MHz.

Best Wishes
doctorprox



Joined: 09 Nov 2010
Posts: 7
Location: UK

View user's profile Send private message

PostPosted: Mon Nov 25, 2013 11:39 am     Reply with quote

Thank you for the suggestion, I tried adding the code but unfortunately it appears to run at 8mhz. I'm wondering if there is a compiler problem with the k22 pic? Surely though if osccon is right it has to work?
Ttelmah



Joined: 11 Mar 2010
Posts: 19505

View user's profile Send private message

PostPosted: Mon Nov 25, 2013 11:49 am     Reply with quote

I've had the chip working with the settings given, at 64MHz.

What compiler version?....

Best Wishes
doctorprox



Joined: 09 Nov 2010
Posts: 7
Location: UK

View user's profile Send private message

PostPosted: Mon Nov 25, 2013 12:18 pm     Reply with quote

Version 5.007.

I had a play with those settings, by removing the setup_oscillator from main() and just having this:

Code:

#FUSES INTRC_IO
#FUSES PLLEN
#use delay(internal=64MHz)


It runs about 4 times faster than I have ever been able to get it going. I don't believe it is 64Mhz because my timers are way out and if I run the code in ISIS with a simulated crystal of 64mhz it is about 4 times quicker still (my timed pulses are 4 times shorter).

I 'think' that with setup_oscillator(OSC_INTRC|OSC_64MHz); in the main() as well as the fuses it runs at 4mhz, without it it runs at 16mhz.

I'll do some calculations tomorrow to confirm this, the way I have been doing it is pulse width / number of timer0 counts multiplied by 4 to give speed.[/code]
Ttelmah



Joined: 11 Mar 2010
Posts: 19505

View user's profile Send private message

PostPosted: Mon Nov 25, 2013 12:23 pm     Reply with quote

I consider 5.007, to still be a 'beta' for the V5 compilers, so not too surprised if it has problems. As I said the setup oscillator is only needed on compilers that don't do it correctly from the fuses/clock option given.

Best Wishes
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Mon Nov 25, 2013 9:35 pm     Reply with quote

I tested this program with vs. 5.007 and it runs OK. This test is with an
18F14K22 on a Microchip Low Pin Count board at +5v. The LED on pin C0
blinks once per second. I don't have an 18F13K22, but I then compiled
the program for that PIC and the .LST file code looks the same. So your
PIC should work with this program. I used a Microchip ICD2. The
program was compiled and run in "Release" mode.
Code:

#include <18F14K22.h>
#fuses INTRC_IO, BORV27, NOMCLR
#use delay(clock=64M)

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

while(1)
  {
   output_high(PIN_C0);
   delay_ms(500);
   output_low(PIN_C0);
   delay_ms(500);
  }

}


Code:

CCS PCH C Compiler, Version 5.007, xxxx       25-Nov-13 19:31

Filename:   C:\Program Files\PICC\Projects\18F14K22\18F14K22.lst

               ROM used:   114 bytes (1%)
                           Largest free fragment is 16270
               RAM used:   5 (1%) at main() level
                           6 (1%) worst case
               Stack used: 0 locations
               Stack size: 31



Quote:
if I run the code in ISIS with a simulated crystal of 64mhz

Run the program in hardware, like I did.
doctorprox



Joined: 09 Nov 2010
Posts: 7
Location: UK

View user's profile Send private message

PostPosted: Tue Nov 26, 2013 5:42 am     Reply with quote

Thank you for the help, that does appear to work correctly. It seems that the compiler gets confused with the setup_oscillator function.
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