PDA

View Full Version : How to set the internal CPU speed?



Ramius
- 19th April 2011, 23:14
Hi All!
The fastest crystal I have seen for PIC's is 20 MHz and the spec sheets say that a PIC's internal CPU Speed can be 40 or 48, or 64 MHz! What does the code look like to change the internal CPU Speed?

Thanks, Ed

mackrackit
- 20th April 2011, 00:05
What chip are you using?

The register is OSCCON. And on some you can set the PLL in the configs.

Ramius
- 20th April 2011, 01:09
Thanks Dave and so I will learn, what in the spec sheet do you look for or is in in the spec sheet? Target is an 18F4685 and 18F1320.

Best, Ed

mackrackit
- 20th April 2011, 01:22
Might be a bit of confusion here.

The 18F1320 for example has an internal OSC that can run up to 8MHz.
If you use an external OSC then you can set HSPLL in the configs and then the chip will run four times the external speed.

In the data sheet look at section 2.0 Oscillator Configurations. Then to see all of the config options goto your MPASM directory and find the *.inc file for the chip. Near the EOF the possible configs are listed.

Then look at this thread to get a handle on coding the configs.
http://www.picbasic.co.uk/forum/showthread.php?t=543

Ramius
- 21st April 2011, 00:21
Hi Dave!
You are correct it can be confusing. There are things being done that seem to make no sense such as what appears to be using XT for the crystal when I am used to using HS for a 20 MHz crystal. Some expressions are not so difficult to understand such as HSPLL (High Speed Phase Locked Loop). If is not asking too much it would be interesting and educational to know step by step what code you would use and why say for the 1320.

Thnaks, Ed

mackrackit
- 21st April 2011, 11:21
First, go to the 18F1320.inc file in the PBP directory and comment the comment the config lines so it looks like this. Now the configs can be played with in code space.


NOLIST
ifdef PM_USED
LIST
"Error: PM does not support this device. Use MPASM."
NOLIST
else
LIST
LIST p = 18F1320, r = dec, w = -311, w = -230, f = inhx32
INCLUDE "P18F1320.INC" ; MPASM Header
; __CONFIG _CONFIG1H, _XT_OSC_1H
; __CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H
; __CONFIG _CONFIG4L, _LVP_OFF_4L
NOLIST
endif
LIST
EEPROM_START EQU 0F00000h
BLOCK_SIZE EQU 8

Now go to the MPASM directory and open the P18F1320.inc and near the EOF you will find all of the possible config options and in this one there is even a sample. Copy the sample to the top of your code.
For now change the CONFIG1H and CONFIG3H to match below. You can do other changes as needed.


'18F1320 INTERNAL OSC RUNNING AT 8MHZ - MCLR AS INPUT AND OSC PINS AS INPUTS
@ __CONFIG _CONFIG1H, _INTIO2_OSC_1H & _FSCM_OFF_1H & _RC_OSC_1H
@ __CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_OFF_2L & _BORV_27_2L
@ __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_32K_2H
@ __CONFIG _CONFIG3H, _MCLRE_OFF_3H
@ __CONFIG _CONFIG4L, _DEBUG_OFF_4L & _LVP_ON_4L & _STVR_ON_4L
@ __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L
@ __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
@ __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L
@ __CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
@ __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L
@ __CONFIG _CONFIG7H, _EBTRB_OFF_7H

OSCCON=%01110000
DEFINE OSC 8

Now if you want to run at 40MHz you will need an external crystal or resonator running at 10MHz.
Changing the first line of the configs.


'18F1320 EXTERNAL OSC RUNNING AT 10MHZ PLL TO 40MHZ - MCLR AS INPUT AND OSC PINS AS INPUTS
@ __CONFIG _CONFIG1H, _HSPLL_OSC_1H & _FSCM_OFF_1H & _RC_OSC_1H
@ __CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_OFF_2L & _BORV_27_2L
@ __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_32K_2H
@ __CONFIG _CONFIG3H, _MCLRE_OFF_3H
@ __CONFIG _CONFIG4L, _DEBUG_OFF_4L & _LVP_ON_4L & _STVR_ON_4L
@ __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L
@ __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
@ __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L
@ __CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
@ __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L
@ __CONFIG _CONFIG7H, _EBTRB_OFF_7H

DEFINE OSC 40

That should do it if I did not screw something up ....

Ramius
- 21st April 2011, 12:41
Thanks Dave! :D
Now it makes a lot more sense!
I noticed you did not use "OSCCON=%01110000"?
Second does anything change if you are using a 20 MHz Resonator?
Just seems like you should be putting in a multipication factor some place?

Thanks, Ed

mackrackit
- 21st April 2011, 13:03
I used "OSCCON=%01110000" in the first code, the one for the internal setup. It is not needed when using the external.

When using a 20MHz external the first config line will look like this
@ __CONFIG _CONFIG1H, _HS_OSC_1H & _FSCM_OFF_1H & _RC_OSC_1H

The HSPLL_OSC_1H is the multiplier. All this chip can do is multiply by four.

Now you will want to try over-clocking. Water cooled PICs :eek:

Ramius
- 21st April 2011, 15:27
Thanks Dave!
Very interesting! So if I understand correctly, a 20 MHz external crystal with your line of code (thank you for this) will give an internal CPU speed of 40 MHz? By the way I like your idea of a "water cooled" PIC! ;)

Just curious since I have been away from all this for so long, in the past when you programmed your PIC you would have to specify either XT or HS depending upon what frequency resonator you used. It appears this is now "built-in" with a default of XT? (__CONFIG _CONFIG1H, _XT_OSC_1H).

It is correct to assume with HSPLL the multiplier is always X4?


Best, Ed

mackrackit
- 21st April 2011, 23:40
When using a 20MHz external the first config line will look like this

@ __CONFIG _CONFIG1H, _HS_OSC_1H & _FSCM_OFF_1H & _RC_OSC_1H
And then this
DEFINE OSC 20

"HSPLL" would try to make the running speed 80MHz... I have my doubts if it would work. I have heard some folks tell of these running at 64MHz (and they did not use water...) but the data sheet claims 40MHz is the limit....


It is correct to assume with HSPLL the multiplier is always X4?
With this chip, yes.

From the data sheet

2. XT Crystal/Resonator
3. HS High-Speed Crystal/ResonatorTable 2-1 and table 2-2 are also worth looking at. 2-1 is for resonators without built in capacitors and 2-2 is for crystals. If resonators that have built in capacitors are used, even if they are 4MHz use "HS".

Archangel
- 24th April 2011, 04:33
If resonators that have built in capacitors are used, even if they are 4MHz use "HS".Hi Dave,
I never heard about that one, where did you ferret out that little tidbit ?
Is it because the resonators exhibit lower impedance, and thus require more power ? I seldom use the low freq resonators, but I will put that away in my memory bank for the future.
Thanks

mackrackit
- 24th April 2011, 14:29
Well...
I have always used the 3 pin resonators with built in capacitors and way back when I knew less than I do now.....

Making the transition from the Stamp, I was using a 20MHz with the 887, wanted to go with a little less power so I popped in a 4MHz and did not even think about changing the config. It worked fine.

Then stuff like this from the data sheets

When operating below 3V VDD, or when
using certain ceramic resonators at any
voltage, it may be necessary to use the
HS mode or switch to a crystal oscillator.

Archangel
- 26th April 2011, 20:04
RTFDS,
Still never saw that, probably never read beyond what I already knew :) inside the box. It makes perfect sense, esp. as it pertains to 3v operation. Anyway, thanks for pointing that out.