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

Enabling PLL on 16F1847 - SOLVED
Goto page 1, 2  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
gjs_rsdi



Joined: 06 Feb 2006
Posts: 468
Location: Bali

View user's profile Send private message Send e-mail

Enabling PLL on 16F1847 - SOLVED
PostPosted: Mon Apr 25, 2016 8:34 pm     Reply with quote

Hi

Trying to enable PLL on 16F1847 but in the configuration PLL not enabled.
The MPLAB is in the RELEASE mode (learned to do that).
I suppose I am doing something wrong, can't realize what.
I have set as below, tried many other options, no one get enabled:
Code:

#FUSES INTRC_IO,PLL   
#use delay(clock=32000000,internal=8000000,restart_wdt)

in the main:
Code:
setup_oscillator(OSC_8MHZ|OSC_PLL_ON);


Best wishes
Joe


Last edited by gjs_rsdi on Tue Apr 26, 2016 8:35 pm; edited 1 time in total
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Mon Apr 25, 2016 9:29 pm     Reply with quote

Actually you do it as simply as possible. Just tell the compiler you want
an internal clock of 32 MHz in the #use delay() statement:
Code:

#include <16F1847.h>
#fuses NOWDT   
#use delay(internal=32M)

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

while(TRUE);   
}
gjs_rsdi



Joined: 06 Feb 2006
Posts: 468
Location: Bali

View user's profile Send private message Send e-mail

PostPosted: Mon Apr 25, 2016 10:17 pm     Reply with quote

Hi PCM programmer, thank you for the answer

I changed the line to:
Code:
#use delay(internal=32M)
//#use delay(clock=32000000,internal=8000000,restart_wdt)
//#FUSES INTRC_IO


main
// setup_oscillator(OSC_8MHZ|OSC_PLL_ON);
Still 4x PLL disabled

Best wishes
Joe
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Mon Apr 25, 2016 10:20 pm     Reply with quote

What's your compiler version ? I'll check it in hardware.
gjs_rsdi



Joined: 06 Feb 2006
Posts: 468
Location: Bali

View user's profile Send private message Send e-mail

PostPosted: Mon Apr 25, 2016 10:29 pm     Reply with quote

It is the demo version:
CCS PCM C Compiler, Version 5.056d, 1
26-Apr-16 12:09
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Mon Apr 25, 2016 11:12 pm     Reply with quote

I installed vs. 5.056 (not the demo, the command line compiler).
I compiled the file (with MPLAB vs. 8.92) and programmed it with
a Pickit 3.

I'm using an 16LF1847, running at 3.3v. I couldn't find my non-LF
16F1847, but I think it's going to behave the same, in terms of making
a blinking LED program work.

Anyway, the following program blinks an LED once per second.
Change the LF to an F for your test. It should work. If it doesn't work,
what does it do ?

You said this:
Quote:
Still 4x PLL disabled

How do you know it's disabled ?
Code:
#include <16LF1847.h>
#fuses NOWDT   
#use delay(internal=32M)

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

while(TRUE)
  {
   output_toggle(PIN_B0);
   delay_ms(500);
  }
   
}
gjs_rsdi



Joined: 06 Feb 2006
Posts: 468
Location: Bali

View user's profile Send private message Send e-mail

PostPosted: Tue Apr 26, 2016 12:15 am     Reply with quote

Thank you PCM programmer

After compiling (MPLAB in RELEASE) I am checking the Configuration Bits, all as I want except:
PLLEN - PLL Enable - 4x PLL disabled

I will make a led to blink then will implement in my program.
I still want to ask if no need in main the:

Code:
setup_oscillator(OSC_8MHZ|OSC_PLL_ON);


and the line:
Code:
#FUSES INTRC_IO//using RA6 as IO
#FUSES PLL


Will be back with the results
Ttelmah



Joined: 11 Mar 2010
Posts: 19513

View user's profile Send private message

PostPosted: Tue Apr 26, 2016 1:01 am     Reply with quote

Take a deep breath!....

Use the code as PCM_programmer posts.

This will _not_ enable the PLL fuse. It instead turns on the PLL just after the chip boots.

This is done, because there is an erratum on a couple of other closely related chips, which will not boot in RC mode if the PLL fuse is enabled. Though this has not (apparently yet) given problems in the 47, CCS decided (wisely) to automatically apply the same fix.

So the code will always set the PLL to 'PLL_SW' (software controlled PLL), and enable it as soon as the code starts.

Test the speed. The code does run at 32MHz.

If it doesn't with your compiler, moan to CCS. The full 5.056 version does it correctly, and the d version should be using the same code.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Apr 26, 2016 1:04 am     Reply with quote

That doesn't mean anything. We're using software PLL enable.
The hardware PLL fuse isn't used. It's disabled.


The 16F1847 data sheet says the following:
Quote:
5.2.1.4 4xPLL

The 4xPLL may be enabled for use by one of two methods:

1. Program the PLLEN bit in Configuration Words
to a ‘1’.

2. Write the SPLLEN bit in the OSCCON register to
a ‘1’.
If the PLLEN bit in Configuration Words is
programmed to a ‘1’, then the value of SPLLEN
is ignored.

We are doing method #2.
Ttelmah



Joined: 11 Mar 2010
Posts: 19513

View user's profile Send private message

PostPosted: Tue Apr 26, 2016 1:09 am     Reply with quote

I know PCM.

The point is I think he wants to see the fuse set.

Look at what he says:

"I am checking the Configuration Bits, all as I want except:
PLLEN - PLL Enable - 4x PLL disabled ".

That's why I told him to:

"Test the speed. The code does run at 32MHz."
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Apr 26, 2016 2:08 am     Reply with quote

I wasn't posting to you. I was posting to him. Mr. Green
I didn't see your post until just now.
Ttelmah



Joined: 11 Mar 2010
Posts: 19513

View user's profile Send private message

PostPosted: Tue Apr 26, 2016 2:28 am     Reply with quote

Ah ha!.... Very Happy

Makes total sense then. It looked so like a reply to my post.

It's also worth emphasising the 'why'. This is the only one I've seen of these recent chips that either doesn't say in the data sheet 'not' to enable the PLL fuse when using the internal RC, or doesn't have an erratum about it.
It may well be that it does work OK, but 'why risk it'?....
gjs_rsdi



Joined: 06 Feb 2006
Posts: 468
Location: Bali

View user's profile Send private message Send e-mail

PostPosted: Tue Apr 26, 2016 7:03 am     Reply with quote

Like always, PCM programmer is right Very Happy
As an old man, used to assembler, it is weird not to have the things as should be (theoretically)
I am still struggling to understand why, but all all my program works as it should work Smile
Trying to test the serial communication but I have some problem with the hardware, testing with 16F648A that was working already.
I was suspicious also that don't have any "ERATA" yet for this chip.
Any how, enjoying very much the new compiler, maybe don't need to keep my old Version 3.249

Thank you again PCM programmer and Ttelmah
Appreciate very much your help
Joe
Ttelmah



Joined: 11 Mar 2010
Posts: 19513

View user's profile Send private message

PostPosted: Tue Apr 26, 2016 9:19 am     Reply with quote

The 'why' is simple. When you select Internal=32MHz, the compiler 'knows' this means 8MHz + PLL.
It sets the internal oscillator up to give 8MHz, and then at the very start of the code it adds the line to enable the SWPLL bit.

Fifty or more compiler versions ago, when this was selected, they instead enabled the hardware PLL bit in the fuses. There were then about three chips launched that all had problems when this was done. So now CCS treats the software enable as the 'better' way to do things.

Very Happy
gjs_rsdi



Joined: 06 Feb 2006
Posts: 468
Location: Bali

View user's profile Send private message Send e-mail

PostPosted: Tue Apr 26, 2016 3:51 pm     Reply with quote

Thanks for the answer Ttelmah

Still I would like that:
"PLLEN - PLL Enable - 4x PLL disabled"
will be:
"PLLEN - PLL Enable - 4x PLL enabled"
Smile

Best wishes
Joe

Edited
PS: How can add to the topic name "SOLVED"?
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Goto page 1, 2  Next
Page 1 of 2

 
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