|
|
View previous topic :: View next topic |
Author |
Message |
tatokash
Joined: 08 Aug 2007 Posts: 6
|
PIC18F2550 USB and clock configuration |
Posted: Tue Aug 28, 2007 12:22 pm |
|
|
One more time... with feeling.
Why does this not work with a 12MHz crystal:
Code: | #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN,NOBROWNOUT,MCLR
|
But this works with a 20MHz crystal:
Code: | #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOBROWNOUT,MCLR
|
Been banging my head against a wall. The 12MHz crystal would not work with any combination of CPUDIVx or PLLx. I foraged and found a 20MHz crystal and it works fine (of course with the config reg change). Can anyone tell me why? _________________ Don't ever stop learning... |
|
|
Douglas Kennedy
Joined: 07 Sep 2003 Posts: 755 Location: Florida
|
|
Posted: Tue Aug 28, 2007 1:56 pm |
|
|
Here is what I know
At 20Mhz
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOBROWNOUT,MCLR
The 20 mhz external crystal is pre scalled by div 5 (PLL5) to 4mhz
PLL multiplies by 16 to 96Mhz USBDIV post scales with div by 2 to 48MHZ
CPU clock is post scaled with
CPUDIV1 by with div by 2 for 48 MHZ
#use delay(clock=48000000)
At 12Mhz
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN,NOBROWNOUT,MCLR
The 12 mhz external crystal is pre scalled by div 3 (PLL3) to 4mhz
PLL multiplies by 16 to 96Mhz USBDIV post scales with div by 2 to 48MHZ
CPU clock is post scaled with
CPUDIV1 by with div by 2 for 48 MHZ
#use delay(clock=48000000)
The exact same result so both should work. I have had issues with certain chips running the CPU stage at 48Mhz...I know 32Mhz ( CPUDIV2) works every time. Try 32Mhz and see if that works |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Aug 28, 2007 5:52 pm |
|
|
I tested this on a PicDem2-Plus with a 12 MHz crystal, with PCH vs. 4.053
and it puts out a 1 KHz squarewave on Pin B0.
Code: | #include <18F4550.h>
#fuses HSPLL, PLL3, CPUDIV1, NOWDT, PUT, BROWNOUT, NOLVP
#use delay(clock=48000000)
//====================================
void main()
{
while(1)
{
output_high(PIN_B0);
delay_us(500);
output_low(PIN_B0);
delay_us(500);
}
} |
|
|
|
|
|
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
|