Te confirmo que usé el 18F2455.
Lo del cristal si que es curioso y estuve un tiempo dandole vueltas porque habia visto varios esquemas distintos (20 y 24MHz) pero en todos el programa PICBasic usaba DEFINE OSC 48. Era la primera vez que usaba un PIC con PLL.
Antes de nada indicar que por lo que he leido creo que PicBasic predefine el uso de un cristal de 20MHz y que a mí me parecio más simple adaptar los parámetros directamente en el WinPic800 a la hora de programar que modficarlos en el PicBasic (al menos por ahora)
Ejecutar el programa a 48 MHz es lo más rápido que se puede, pero hay más opciones, todo depende de como lo configuremos.
A partir de aqui puede que meta la pata en algún punto, pero basicamente es algo así ...Primero tener el DataSheet delante, concretamente página 24 con esquema interno de la etapa de oscilador y páginas 29 & 30 con la tabla de configuracion de registros del oscilador.
El USB se puede hacer trabajar a dos velocidades (48 y 24 MHz), esta parte no la controlo pero bueno, siempre buscamos velocidad no???, je je
. pues eso 48 MHz (como de aqui sale tambien el reloj para la velocidad a la que irá el programa pues sigo).
Para obtener esos 48MHz tenemos dos opciones con las que jugar:
1) usar directamente un cristal de 48MHz
2) utilizar un PLL interno que se encarga de generarlos (basandonos en el cuarzo que coloquemos y unos toques de configuracion) Esto nos puede evitar comprar un cuarzo y usar uno que tengamos (si hay suerte)
si usamos el PLL interno vemos en la parte arriba-centro del esquema de la pag.24 algo que pone
96 MHz PLL. Este es el generador interno, 96 MHz, luego viene un divisor por 2 y de ahí salen los 48MHz para el rollo USB. Justo antes de este divisor por 2 vemos que los 96MHz van tambien a un
PLL Postcaler, (HSPLL, ECPLL, XTPLL, ECPIO), de aqui sale la frecuencia de trabajo del PIC (la de siempre, vamos, la que hay que usar en el programa). En este PLL Postcaler entran 96 MHz y como se ve podemos dividirlos por 2,3,4,6; con lo que podemos obtener frecuencias de 48, 32, 24 ó 16 MHz para el PIC. Este PLL Postcaler es para sacar la frecuencia del PIC a patir de los 96 MHz generados internamente, pero tambien podemos obtener la frecuencia de reloj usando el valor que nos da el cuarzo y el bloque que vemos a la izquierda del PLL Postcaler, el
Oscillator Postcaler, que nos permite obtener otras frecuencias diferentes a las anteriores.
Ahora el cuarzo:Volviendo al generador interno de 96MHz, vemos que sobre el pone
(4 MHz input only). Esto indica que para generar los 96MHz debemos tener en la entrada 4MHz. Para eso tenemos justo antes otro divisor,
PLL Prescaler, que divide la frecuencia del cuarzo que coloquemos por 12,10, 6, 5, 4, 3, 2 ó 1. Sabiendo que a la salida de estos divisores hay que tener 4MHz, pues multiplicamos y vemos que podemos usar cristales de 48, 40, 24, 20, 16, 12, 8 ó 4 MHz. Y con cualquiera de ellos podremos usar el generador interno a 96MHz que nos dará los 48MHz para el USB y el máximo de 48MHz para el reloj del programa.
Siguiendo las lineas en el esquema del oscilador vemos que registros hay que configurar para seguir un camino u otro; para eso nos vamos a la tabla de las páginas 29 y 30 (que nos indican que valores poner en los registros para obtener USB a 48MHz y la Frecuencia de reloj de la columna de la derecha a partir del cuarzo indicado en la columna 1)
Perdón por el rollo, pero cogiendo el esquema de circuiteria del reloj es facil de entender.
Un saludo.