3. El Circuito de Reloj 3 EL CIRCUITO DE RELOJ La Figura 3-1 muestra el complejo circuito de reloj de los PIC32MX. Todos los microcontroladores PIC desde el primero, el PIC16C54, tienen un circuito de oscilador flexible que ha ido evolucionando gradualmente hasta la forma presenta ofrecida por el PIC32MX [13] . A continuación se explicarán las opciones de reloj que nos proporciona este módulo y el uso de cada una de estas. Figura 3-1. Circuito de Reloj [9] De la Figura 3-1 vemos que existen 5 osciladores, o fuentes de reloj. Dos de estas usan osciladores internos y las otras 3 usan cristal externo o circuito oscilador. Para lograr mayores frecuencias, dentro del circuito de reloj existen circuitos PLL (Phase Locked Loops) que permiten multiplicar la frecuencia de la fuente de reloj, y también se tienen divisores de frecuencia para reducir la frecuencia de reloj. Ing. Juan Ramon Terven Salinas 26 3. El Circuito de Reloj Del lado derecho de la Figura 3-1 vemos que existen 3 relojes principales dentro del PIC32: 1. El reloj del sistema (SYSCLK) usado por el CPU y algunos periféricos. 2. El reloj de periféricos (PBCLK) usado por la mayoría de los periféricos. 3. El reloj del USB (USBCLK) usado por el USB. Tal vez el circuito de reloj de la Figura 3-1 parezca intimidante, sin embargo existen dos razones por las cuales los microcontroladores PIC ofrecen tantas opciones de reloj: Rendimiento y Consumo de energía. Rendimiento vs Consumo de Energía En los circuitos embebidos, ya sea que el dispositivo sea alimentado con baterías o tenga una fuente de alimentación dedicada; se tienen 2 parámetros importantes que tomar en cuenta: • El Rendimiento se refiere a cuanto trabajo puede realizar el microcontrolador por unidad de tiempo. Este parámetro es muy importante en aplicaciones de tiempo real. • El Consumo de Energía define el tamaño y el costo de la fuente de alimentación. Además si el dispositivo es alimentado con baterías, el consumo de energía define la duración de la batería. El detalle aquí es que estos dos parámetros están directamente relacionados. Ya que si aumentamos el rendimiento del procesadores por medio del incremento de la frecuencia del reloj, también aumenta el consumo de energía. Esta relación esta dada por la fórmula de Potencia Dinámica, la cual es la potencia consumida por el chip en funcionamiento [15] . De acuerdo a la hoja de datos [9] , el PIC32MX534F064H consume un máximo de 39 mA funcionando a su máximo de 80 MHz. Sin embargo si bajamos el reloj a 4 MHz el PIC32 sólo consume 6 mA. Si nos vamos al extremo y usamos el oscilador interno de baja velocidad (31 kHz), el PIC32 consume solo 100µA. Ing. Juan Ramon Terven Salinas 27 3. El Circuito de Reloj A continuación analizaremos la generación de los 3 relojes principales del PIC32MX. Generación del System Clock (SYSCLK) El reloj del sistema o SYSCLK puede ser generado por cualquiera de las 5 fuentes de reloj mostradas con rojo en la Figura 3-1. A partir de estas fuentes se pueden generar diversas combinaciones de reloj, ya sea agregando PLL y/o divisores de frecuencia. La Tabla 3-1 muestra las diferentes fuentes de reloj y los valores de los bits de configuración (POSCMD y FNOSC). Tabla 3-1. Diferentes fuentes de reloj [7] Notas: 1. El pin OSCO puede sacar un pulso con frecuencia igual a PBCLK por medio del bit de configuración OSCIOFNC (OSCIOFNC = ON). 2. Es el modo de reloj predeterminado para el dispositivo no programado. 3. Cuando se usa PLL, el divisor de entrada del PLL debe seleccionarse de tal modo que resulte en una frecuencia de 4 MHz a 5 MHz. La frecuencia de SYSCLK máxima soportada por los PIC32MX es de 80MHz. A continuación se describen las fuentes de reloj para generar el SYSCLK: Ing. Juan Ramon Terven Salinas 28 3. El Circuito de Reloj Oscilador Externo Primario (POSC) Esta fuente de oscilador se usa cuando se requiere un alto rendimiento (alta velocidad) y alta precisión de reloj. Se usan los pines OSC1 y OSC2 en los cuales se puede conectar un cristal de cuarzo de hasta 20 MHz o un circuito de oscilador externo (modo EC). Se usan 2 ajustes de ganancia: XT para cristales por debajo de 10 MHz y HS para cristales por encima de 10 MHz. La Figura 3-2 muestra la conexión del oscilador de cristal externo. El cristal debe ser del tipo paralelo y los valores de C1 y C2 deben estar en el rango de 22 pF a 33 pF. Figura 3-2. Oscilador de Cristal La Tabla 3-2 muestra los distintos modos en los que se puede configurar el oscilador primario. Tabla 3-2. Modos del Oscilador Primario El modo EC se usa cuando queremos reemplazar el oscilador de cristal por un circuito de oscilador externo. Cuando usamos este modo, el tren de pulsos generado por el oscilador externo se conecta en el pin OSCI y el pin OSCO se puede usar como un pin de E/S o se puede configurar para generar un pulso de salida con frecuencia igual a PBCLK (bit de configuración OSCIOFNC = ON). Vea la Figura 3-3. Ing. Juan Ramon Terven Salinas 29 3. El Circuito de Reloj Figura 3-3. Modos de oscilador EC Phase Locked Loop (PLL) El PLL del circuito de reloj es un complejo circuito que nos permite modificar la frecuencia de entrada del oscilador externo primario y del oscilador interno FRC que veremos mas adelante. Dentro del circuito de reloj se tiene un divisor de frecuencia de entrada, PLL (multiplicador de frecuencia) y divisor de frecuencia de salida. Cuando se usa el PLL, el divisor de entrada del PLL debe seleccionarse de tal modo que resulte en una frecuencia de 4 MHz a 5 MHz; luego configuramos el valor del multiplicador y el valor del divisor de salida. Por ejemplo si conectamos un cristal de 8 MHz al oscilador principal y queremos un SYSCLK de 80 MHz hacemos lo siguiente (vea la Figura 3-4) 1. Divisor de entrada de 1:2 para introducir 4 MHz al PLL. 2. Multiplicador 1 x 20 para lograr 80 MHz 3. Divisor de salida de 1:1. Ing. Juan Ramon Terven Salinas 30 3. El Circuito de Reloj Figura 3-4. Configuración para 80 MHz con cristal de 8 MHz [13] En el primer programa desarrollado en el capítulo anterior se configuró para un SYSCLK de 80 MHz con la configuración de la Figura 3-4 usando los Bits de Configuración. A continuación se muestran los bits de configuración usados para configurar el Oscilador Primario: #pragma config POSCMOD = HS, FNOSC = PRIPLL, FPLLMUL = MUL_20 #pragma config FPLLIDIV = DIV_2, FPLLODIV = DIV_1 POSCMOD = HS –Indica oscilador de cristal mayor a 4 MHz. En nuestro caso 8 MHz. FNOSC = PRIPLL –Indica Oscilador Primario (XT, HS o EC) con PLL. FPLLMUL = MUL_20 –Indica multiplicador de frecuencia x 20. FPLLIDIV = DIV_2 –Indica Divisor de entrada 1:2. FPLLODIV = DIV_1 –Indica Divisor de salida 1:1. Ing. Juan Ramon Terven Salinas 31 3. El Circuito de Reloj Oscilador Externo Secundario (SOSC) El oscilador externo secundario o SOSC está diseñado específicamente para 2 funciones: 1. Como fuente de oscilador principal para aplicaciones de muy baja potencia (bajo consumo de energía). 2. Como fuente de reloj para el Timer1 o el módulo RTCC (Reloj de tiempo real y calendario) para aplicaciones de reloj en tiempo real. Se usan los pines SOSCO y SOSCI para conectar un cristal de 32.768 kHz. Para seleccionar el Oscilador Externo Secundario como fuente de oscilador del chip activamos el siguiente bit de configuración: #pragma config FNOSC = SOSC Para activar el Oscilador Externo Secundario para fuente de reloj de Timer1 o RTCC activamos el siguiente bit de configuración: #pragma config FSOSCEN = ON De la Figura 3-1 vemos que esta fuente de reloj no cuenta con PLL para multiplicar la frecuencia. Oscilador Interno de Alta Velocidad (FRC) Este Oscilador está diseñado para aplicaciones de alto rendimiento pero sin precisión de reloj a diferencia del Oscilador Externo Primario. Esta fuente de oscilador consiste de un oscilador interno de 8 MHz con un error de ±2% en la frecuencia. La ventaja de esta fuente de reloj es que no requiere componentes externos, además que cuenta con los mismos mecanismos que el reloj externo primario para aumentar la frecuencia. Con este oscilador podemos trabajar a la frecuencia máxima del PIC32 sin tener que agregar ningún cristal externo. La Figura 3-5 muestra una porción del circuito de reloj del PIC32 encerrando con rojo las opciones que provee el oscilador FRC. Ing. Juan Ramon Terven Salinas 32 3. El Circuito de Reloj Figura 3-5. Opciones de FRC [13] Cualquier de estas opciones las escogemos con los bits de configuración mostrados en la Tabla 3-3. Tabla 3-3. Opciones de reloj FRC en bits de configuración [12] Por ejemplo si queremos usar el oscilador FRC con PLL para obtener un SYSCLK de 80 MHz, definimos los bits de configuración de la siguiente manera: #pragma #pragma #pragma #pragma #pragma config config config config config POSCMOD = OFF //Oscilador Primario desactivado FNOSC =FRCPLL //Fuente de oscilador FRC con PLL FPLLIDIV = DIV_2 //Divisor de entrada FRC/2 FPLLMUL = MUL_20 //PLL x 20 FPLLODIV = DIV_1 //Sin divisor de salida Ing. Juan Ramon Terven Salinas 33 3. El Circuito de Reloj Oscilador Interno de Baja Potencia (LPRC) Esta fuente de reloj se usa para aplicaciones de baja velocidad (bajo consumo de energía). A diferencia del oscilador externo secundario, esta fuente de reloj no se recomienda para sincronizar un reloj de tiempo real (RTC), ya que la precisión de la frecuencia no es tan buena como el uso de un cristal externo. Este oscilador además poder ser usado como fuente de oscilador principal, se usa para el Power-up Timer (PWRT), Watchdog Timer (WDT), Fail Safe Clock Monitor (FSCM). En este curso no usaremos esta fuente de reloj como reloj principal. Generación del Peripheral Bus Clock (PBCLK) El PBCLK se deriva del reloj del sistema SYSCLK. La Tabla 3-4 muestra los bits de configuración usados para configurar el PBCLK. Tabla 3-4. Bits de configuración para PBCLK [12] Por ejemplo para configurar un PBCLK igual a SYSCLK en los bits de configuración: #pragma config FPBDIV = DIV_1 Generación del USB Clock (USBCLK) El módulo USB requiere 48 MHz para su correcto funcionamiento; dicho reloj es llamado USBCLK. El USBCLK puede ser generado a partir del FRC o del POSC como se muestra en la Figura 3-6. Ing. Juan Ramon Terven Salinas 34 3. El Circuito de Reloj Sin embargo el reloj del USB debe ser preciso y no se puede usar a partir del FRC para su funcionamiento normal, sólo para detectar actividad y regresar al módulo USB del modo suspendido. Figura 3-6. Circuito para generación de USBCLK [7] En la Tabla 3-5 se muestran los bits de configuración para activar el PLL del circuito de reloj del USB y el divisor de frecuencia de entrada del PLL. Tabla 3-5. Bits de configuración para USBCLK [12] Ing. Juan Ramon Terven Salinas 35