Después de 2 entradas hablando de nuestro servidor WEB, para cambiar un poco de tercio vamos a hablar de un elemento que es fundamental en nuestros diseños con microcontroladores, tanto que sin uno de estos, nuestro micro simplemente no funciona. Este elemento tan importante es el oscilador el cual nos va a dictar a la velocidad que que va a ejecutar nuestro microcontrolador las instrucciones, lo que permitirá que nuestro micro pueda realizar o no ciertas tareas.
El bloque del oscilador en todos los micros es muy parecido, y está compuesto por un cristal de cuarzo, que formará nuestro circuito tanque, y una puerta inversora para que se mantenga la oscilación. Si queremos frecuencias muy bajas de oscilación podemos sustituir el cristal de cuarzo por una red RC, aunque es muchísimo menos estable y no recomendable. Una vez tenemos generada nuestra señal de reloj, los microcontroladores nos ofrecen muchas posibilidades para poder modificar esa señal de reloj a nuestro antojo. A continuación tenéis el esquema del circuito oscilador de un PIC24H:
Como veis el bloque del oscilador es bastante complejo, pero sencillo de entender y configurar. En primer lugar tenemos el Bloque oscilador principal, en el que tenemos los dos pines OSC1 y OSC2 que van a la puerta inversora que nos generara la oscilación a la frecuencia del cristal. De la salida de este bloque, tenemos 2 caminos diferentes, podemos utilizar esta frecuencia como frecuencia de oscilación directamente, poniendo el registro NOSC en la posición XT, HS o EC, dependiendo de la velocidad del cristal, o podemos, mediante S3, entrar al PLL, del cual hablaremos más tarde, para modificar esta frecuencia. Una vez tenemos seleccionada la frecuencia de oscilación FOSC, pasamos por un divisor por 2 (recordemos que los PIC24 ejecutan una instrucción por cada 2 ciclos de reloj), y sacamos directamente la frecuencia de oscilación de los periféricos, y mediante el registro DOZE dividimos FOSC para seleccionar una frecuencia para la CPU.
Además de este path (camino) tenemos otros que utilizan los osciladores internos del micro. Por una parte tenemos el oscilador RC de alta velocidad FRC, que mediante el registro FRCDIV podemos dividir para introducir en el multiplexor principal una frecuencia menor a FRC, o igual a FRC. La frecuencia principal de este oscilador la seleccionamos mediante el registro TUN. Además la salida del multiplexor FRCDIVC la podemos introducir en el PLL para modificarla y adecuarla a nuestro propósito.
Los otros dos osciladores que quedan son el RC de baja frecuencia y el oscilador secundario. Estos osciladores, en general serán de baja frecuencia y se utilizarán para los relojes en tiempo real, para temporizaciones grandes mediante el TIMER1 o para el WDT.
Hasta ahora hemos hablado del PLL sin que os haya explicado lo que es realmente, así que de os voy a hablar ahora. Como hemos dicho el PLL es un bloque que nos modifica la frecuencia de oscilación, en la mayoría de los casos aumentándola pero, ¿No basta con utilizar un cristal de mayor frecuencia?, si, hasta cierto punto.
Existen limitaciones debidas a la fabricación de los propios cristales que hacen que sea difícil hacer osciladores de frecuencias muy elevadas, y los que hay a veces tienen precios excesivos, así que para suplir ese costo existen los PLL. Aunque los PLLs originalmente son elementos puramente analógicos, los que montan los micros son PLLs digitales, aunque su funcionamiento es bastante parecido. El esquema que teneis arriba corresponde al PLL de los PIC24h, y como veis tiene varios bloques. En primer lugar tenemos el registro PLLPRE el cual tenemos que seleccionar para que la frecuencia de entrada al bucle PLL esté comprendida entre 0.8 y 8MHz. A continuación tenemos el PLL, el cual es un bucle. Es este bloque el que vamos a utilizar para multiplicar la frecuencia. El factor de multiplicación lo establece el registro PLLDIV. Los valores que puede tener este registro depende del PIC, siendo tan solo de un valor (4), para algunos PIC18, o pudiendo valer hasta 512 valores para los PIC24, por lo que podemos conseguir cualquier frecuencia de oscilación. El ultimo bloque es un divisor de frecuencia. El valor minimo por el que podemos dividir la frecuencia es 2, por lo que la salda del PLL deberá ser del doble de la que queramos. Así pues la frecuencia de oscilación del micro vendrá dad por la siguiente ecuación:
Por ejemplo, si teneos un reloj de 10MHz, PLLDIV = 32, PLLPRE = PLLPOST = 2, tenemos:

Con lo que con un reloj de 10MHz, conseguimos 80MHz, que corresponden a 40MIPS.
Por último decir que la mayoria de las caracteristicas del bloque oscilador se pueden configurar mediante los bits de configuración, por lo que no es necesario trabajar con los registros.
No hay comentarios:
Publicar un comentario