PDA

View Full Version : How to verify HS_PLL clock speed



CocaColaKid
- 22nd August 2005, 15:06
Is there an easy way to check the clock if it is multiplied using the PLL? I want to confirm that I'm running at 16MHz (4MHz x 4). Will the OSC2 output a 16MHz signal?

Bruce
- 22nd August 2005, 16:07
What PIC are you using?

CocaColaKid
- 22nd August 2005, 16:15
I'm using the 18F452 running at 4MHz.

Bruce
- 22nd August 2005, 16:42
The easiest way I know to check would be with an LED & a few pause statements. If HSPLL isn't running it will be obvious on the LED.

Main:
HIGH LED
PAUSE 500
LOW LED
PASE 500
GOTO Main

OSC2 can output the clock/4, but only in EC mode. In other modes, the signal from OSC2 output is so weak you'll load it with a scope probe.

CocaColaKid
- 22nd August 2005, 16:49
Would this not enable the x4 PLL?



@ __CONFIG _CONFIG1H, _OSCS_OFF_1H & _HSPLL_OSC_1H
@ __CONFIG _CONFIG2L, _BOR_ON_2L & _PWRT_ON_2L & _BORV_45_2L
@ __CONFIG _CONFIG2H, _WDT_ON_2H
@ __CONFIG _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L

Bruce
- 22nd August 2005, 17:04
It should, but check this with your programmer before programing that part.

Also, you might want to use the osc resistor shown in the datasheet since this may be over driving your crystal. HS uses a higher drive output on OSC2.

CocaColaKid
- 22nd August 2005, 18:10
I'm actually using a TTL oscillator so this shouldn't be an issues should it?

Bruce
- 22nd August 2005, 18:20
"EDIT"

For OSC2 to output clock/4 with a TTL clock oscillator, you'll need to use EC or ECIO mode.

HSPLL isn't available for EC or ECIO mode. With a 4MHz TTL clock oscillator, you'll have only 4MHz. HSPLL mode works with the TTL clock if you set config fuses for HSPLL, but you can't use the OSC2 pin in HS mode. Only EC or ECIO modes.

CocaColaKid
- 22nd August 2005, 18:23
ah, I'll drop in a crystal then, I have both at my disposable.

Bruce
- 22nd August 2005, 18:41
You know, it's not really 100% clear from the datasheet, but looking at Figure 2-2, it does appear an external clock, I.E. a TTL osc can be input to OSC1, and you can select HS, XT or LP modes, so it "appears" you can use a TTL clock in on OSC1, and still make use of the HSPLL as long as you have HS set in config.

I'll have to experiment with that one.

Darrel Taylor
- 22nd August 2005, 19:36
Just wanted to add that the PLL only starts up properly on Power-Up.

The first time you program a chip with the PLL turned on, it won't actually start working at x4 untill you turn the power off and on again. A simple reset of MCLR wont do it.

<br>

Bruce
- 22nd August 2005, 19:52
And it "does" work with a 4MHz TTL clock input with HSPLL set. Just tested it. __CONFIG _CONFIG1H,_OSCS_OFF_1H & _HSPLL_OSC_1H

You just can't use the OSC2 pin for I/O or clock/4 output without using EC or ECIO mode.

CocaColaKid
- 22nd August 2005, 20:02
On that note then, using this code it should run at 16MHz internally, correct?



@ __CONFIG _CONFIG1H, _OSCS_OFF_1H & _HSPLL_OSC_1H
@ __CONFIG _CONFIG2L, _BOR_ON_2L & _PWRT_ON_2L & _BORV_45_2L
@ __CONFIG _CONFIG2H, _WDT_ON_2H
@ __CONFIG _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L

Main:
HIGH portd.1
PAUSE 500
LOW portd.1
PAUSE 500
GOTO Main


This reminds me of the old 486DX2 and DX4 microprocessors :)

Bruce
- 22nd August 2005, 20:34
I'm using MPASM version 4.02 which complains if I use the old __config options, so I replaced the old options in the .inc file with:
CONFIG OSC=HSPLL,OSCS=OFF,LVP=OFF,PWRT=ON,BOR=ON,WDT=OFF, BORV=25,WDTPS=128,CCP2MUX=OFF,STVR=OFF

DEFINE OSC 16

LOOP:
HIGH 0
PAUSE 500
LOW 0
PAUSE 500
GOTO LOOP

With the 4MHz TTL input to OSC1, it produces .5 S pulses on RB0. So assuming your programmer isn't altering config fuse settings, and you're getting it programmed with HSPLL, then it should definitely be running at 16MHz internally.

CocaColaKid
- 22nd August 2005, 20:42
I added the DEFINE OSC 16 and it only flashes about once every 2 seconds. I have cycled power and still the same thing.

Bruce
- 22nd August 2005, 21:00
If you're programming in-circuit, did you cycle power?

As Darrel mentioned previously, you need to cycle power OFF then back ON when switching to HSPLL mode.

With DEFINE OSC 16 -- a 2 second pause is what you'll see if the PLL isn't locked in. It's running directly from the 4MHz TTL clock input until the PLL circuit locks-in, and kicks in the 4x PLL.

CocaColaKid
- 22nd August 2005, 21:32
I think I just found my problem. The bootloader doesn't seem to be changing the configuration bits properly. I programmed the PIC in the EPIC programmer and it works fine now. Thanks for the help. I'll look further into the other programming method tomorrow.

CocaColaKid
- 23rd August 2005, 12:39
Just discovered the source to my misery. According to the help file that comes with the bootloader, "The microcontroller ID location and configuration fuses are not available to the loader process. Configuration fuses must therefore be set at the time the bootloader software is programmed into the target microcontroller."

This would explain my problems. Like the expression goes, RTFM :(