Hola kidpic. Te paso un mini tutorial que fui armando. Con ayuda de un tutorial que encontré aquí en el foro del usuario Redpic. Y buscando en el datasheet. No es ninguna verdad absoluta. Sólo una auto ayuda que hice cuando estudié ese tema. Lo que hice está en c18. pero te va a ser útil si es que usás otro c. Cualquier cosa que se te complique avisame por este medio.
Aquí podés encontrar más información:
http://picmania.garcia-cuervo.net/conceptos.php#USB4Mhzhttp://usuarios.multimania.es/electronicapic/manual/primeros_pasos_con_el_18F4550.pdf Saludos.
Jukinch
El pic 18f4550 se puede usar únicamente con los cristales de los siguientes valores para sacar con el pll distintas frecuencias:
4 MHz
8 MHz
12 MHz
16 MHz
20 MHz
24 MHz
40 MHz
48 MHz
Con dichos cristales se pueden obtener los 48 mhz que se necesitan para trabajar con USB y hacer trabajar al programa del pic a una velocidad igual a los 48mhz o a frecuencias diferentes.
Por ejemplo: con un cristal de 4mhz logramos los 48mhz para el usb y podríamos hacer trabajar al programa del pic con una velocidad de 24mhz, o de 2 mhz o de 32mhz, etc.
Para ello se usa un prescaler con el que se pueden lograr los 48mhz que necesita el usb y configurar distintas velocidades de trabajo para el pic.
Por ejemplo: podemos usar un cristal de 4mhz para lograr los 48mhz para el usb y tener una frecuencia de trabajo desde 1 a 48mhz dependiendo de las configuración que elijamos.
Explicación:
Al pic se le conecta un cristal de una velocidad de 4mhz a 48mhz
Sea la velocidad que fuere que hayamos elegido, desde 4 a 48mhz, dicha velocidad deberá reducirse a 4 mhz para poder hacer funcionar el pll.
Para ello se utiliza un divisor
4 MHz por 1 =4
8 MHz por 2 =4
12 MHz por 3 =4
16 MHz por 4 =4
20 MHz por 5 =4
24 MHz por 6 =4
40 MHz por 10 =4
48 MHz por 12 =4
Una vez que se logran los 4 mhz el pic mediante un pll genera 96mhz
Esos 96 mhz se dividen por 2 y se obtienen los 48mhz que se necesitan para hacer funcionar al usb
Para ejecutar el programa se pueden elegir dos tipos de configuraciones
La frecuencia directa del cristal
La frecuencia obtenida del pll
Las cuales a su vez se pueden usar divididas:
para el caso de la frecuencia directa del cristal se la puede usar dividida por 2, 3 o 4
para el caso de la frecuencia obtenida del pll se la puede usar dividida por 2, 3, 4 o 6
ver las tablas de la página 29 y 30 del datasheet del pic18f4550 para ver todos los ejemplos
//~~~ EJEMPLO EN C18 CON CRISTAL DE 4MHZ TRABAJANDO A 48MHZ~~~//
#pragma config FOSC = XTPLL_XT,FCMEN = OFF,IESO = OFF,PLLDIV = 1, CPUDIV = OSC1_PLL2
ver pagina 29-30 del datasheet del 4550 para más ejemplos con otros cristales
//~~~ EJEMPLO EN C18 CON CRISTAL DE 4MHZ TRABAJANDO A 1MHZ~~~//
#pragma config PLLDIV = 1 // 4 MHz crystal on board
#pragma config FOSC = XT_XT // using an external, normal speed crystal, PLL module is disabled
#pragma config CPUDIV = OSC3_PLL4 // DIVIDE LA FRECUENCIA DE TRABAJO DEL MCU POR 4 = 1MHZ
#pragma config USBDIV = 2 // full speed USB gets its 48 MHz signal from PLL module (the PLL's 96 MHz output is divided by 2)
//~~~ EJEMPLO EN C18 CON CRISTAL DE 4MHZ TRABAJANDO A 4MHZ~~~//
#pragma config PLLDIV = 1 // 4 MHz crystal on board
#pragma config FOSC = XT_XT // using an external, normal speed crystal, PLL module is disabled
//no ponemos la línea #pragma config CPUDIV = OSC3_PLL4 para que no divida el postcaler y quede en 4 mhz
//~~~ EJEMPLO EN C18 CON CRISTAL DE 20MHZ TRABAJANDO A 20MHZ~~~//
#pragma config PLLDIV = 5 // 20 MHz crystal on board
#pragma config FOSC = HS // using an external, high speed crystal, PLL module is disabled
//no ponemos la línea #pragma config CPUDIV = OSC3_PLL4 para que no divida el postcaler y quede en 20mhz
//~~~ EJEMPLO EN C18 CON CRISTAL DE 20MHZ TRABAJANDO A 48MHZ~~~//
#pragma config FOSC = HSPLL,FCMEN = OFF,IESO = OFF,PLLDIV = 5, CPUDIV = OSC1_PLL2