Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Guia Osciladores Pic18f4550 PDF
Guia Osciladores Pic18f4550 PDF
2.1 Resumen:
La familia de los PIC18F2455/2550/4455/4550 incorporó un sistema diferente de oscilador
frente a sus antecesores PIC18F. Al haberles agregado el módulo USB, el cual tiene como único
requerimiento una fuente estable de reloj, se hizo necesario proveer a estos nuevos microcontroladores de
una fuente separada de reloj, que fuese estable, y que cumpla con las especificaciones técnicas del USB,
para que puedan trabajar tanto en baja como en alta velocidad.
Para cumplir con estos requisitos los PIC18F2455/2550/4455/4550 incluyen una nueva
rama de fuente de reloj que provee la frecuencia necesaria para operar el módulo USB sea a baja (6 MHz) o
alta velocidad (48 MHz).
Desde que el módulo USB toma la frecuencia de trabajo de una fuente primaria de reloj,
para ello se les ha agregado un sistema de prescalers y postscalers, para poder conseguir un amplio
rango de frecuencias de oscilador. Otras características de la estructura de los osciladores de la familia de
los PIC18, como el bloque de reloj interno, o la conmutación de fuentes de reloj (clock switching), siguen
siendo las mismas.
Mas abajo en la Figura 2.1 se exhibe un esquema de la estructura del oscilador.
Básicamente hay tres fuentes de reloj para esta familia de dispositivos:
Oscilador Primario
Oscilador Secundario
Bloque de Oscilador Interno
Los modos XT, HS, EC, y ECIO pueden utilizar el Oscillator Postcaler (CPUDIV) para
dividir la frecuencia de entrada del Oscilador Primario, por 1, por 2, por 3 o por 4.
Los modos INTHS, INTXT, INTIO, e INTCKO pueden utilizar el INTOSC Postcaler para
dividir la frecuencia de salida de la fuente del Oscilador interno de 8mhz, para lograr una
frecuencia de 8Mhz (sin dividir), de 4Mhz, de 2Mhz, de 1Mhz, de 500Khz, de 250 Khz, de
125 Khz, o de 31 Khz, o directamente la de 31Khz si se utiliza como fuente el INTRC.
OSCILADOR PRIMARIO
Mediante el uso de un postscaler interno se puede reducir la frecuencia de reloj que entrega el
cristal para hacer funcionar al CPU a diferentes velocidades dividiendo dicha frecuencia.
Para ello se debe utilizar uno de los modos de oscilador que no utilice el PLL.
La división de la frecuencia estará determinada por los bits de configuración de CPUDIV. Pudiendo
seleccionar mediante el uso del Oscillator Postcaler (CPUDIV) la frecuencia directa de reloj del oscilador o
1/2, o 1/3 o 1/4 de dicha frecuencia,conforme se detalla en la siguiente tabla.
Frecuencia Divisor CPUDIV1:CPUDIV0 Configuración en c18 para los modos: Frecuencia de trabajo del CPU
del Oscilador Oscillator Postcaler FOSC = XT_XT o FOSC = HS
4 Mhz Sin división #pragma config CPUDIV = OSC1_PLL2 4 Mhz
4 Mhz /2 #pragma config CPUDIV = OSC2_PLL3 2 Mhz
4 Mhz /3 #pragma config CPUDIV = OSC3_PLL4 1,33 Mhz
4 Mhz /4 #pragma config CPUDIV = OSC4_PLL6 1 Mhz
En la siguiente figura se indica en amarillo el recorrido que hace la señal desde que sale del
oscilador primario, pasando por el Oscillator Postcaler CPUDIV que divide la frecuencia, hasta llegar al
núcleo del microcontrolador (CPU CLock).
2.2.3 ENTRADA DE CLOCK EXTERNO
En los modos de oscilador EC, ECIO, ECPLL y ECPIO se requiere una fuente de reloj
externa para ser conectada al pin OSC1 (PIN 13 en el 18F4550 de 40pines). No se requiere tiempo de
espera para que el oscilador arranque luego de un Power-on Reset o luego de que el microcontrolador salga
del modo Sleep.
Salida Divisor Configuración en c18 para modos que usan el PLL Frecuencia de
del PLL PLLPostcaler trabajo para el CPU
CPUDIV extraida del PLL
96 Mhz /2 #pragma config CPUDIV = OSC1_PLL2 = 48 Mhz
96 Mhz /3 #pragma config CPUDIV = OSC2_PLL3 = 32 Mhz
96 Mhz /4 #pragma config CPUDIV = OSC3_PLL4 = 24 Mhz
96 Mhz /6 #pragma config CPUDIV = OSC4_PLL6 = 16 Mhz
Los modos de oscilador HSPLL, ECPLL y ECPIO hacen uso del modo de oscilador HS para
frecuencias de hasta 48 MHz.
Para ello el PLLprescaler divide la frecuencia de entrada del oscilador hasta por 12 para
producir los 4MHz que se necesitan para hacer funcionar el PLL.
El modo XTPLL sólo puede usar una entrada de frecuencia de 4 MHz la cual hará funcionar
directamente al PLL, sin hacer divisiones.
En la siguiente figura se indica en amarillo el recorrido que hace la señal desde que sale del
oscilador primario, pasando por el PLL Prescaler que divide la frecuencia para lograr los 4Mhz que requiere
el PLL para generar 96Mhz. Luego la señal de 96Mhz generada por el PLL tomará 2 caminos. Una rama
seguirá hacia el módulo USB, siendo dividida por 2 para alcanzar 48Mhz necesarios para el USB Clock y la
otra rama se dirigirá hacia el PLL Postcaler que nos permite elegir la frecuencia de trabajo del CPU hasta
llegar al núcleo del microcontrolador (CPU Clock).
La salida principal de frecuencia del oscilador interno es una fuente de reloj de 8MHz
llamada INTOSC que se puede utilizar como fuente de señal de reloj directa para el CPU del
microcontrolador.
Esta señal de 8Mhz gobierna el INTOSC Postscaler, el cual puede proporcionar un rango de
frecuencias de 31kHz a 4MHz.
La otra frecuencia que genera el oscilador interno es la llamada INTRC que brinda una
salida nominal de 31kHz. INTRC estará activa si se la selecciona como fuente de reloj para el CPU del
microcontrolador. Además también se activará automáticamente cuando alguno de los siguientes módulos
esté activo:
La fuente de frecuencia de reloj (Frecuencia INTOSC directa, INTRC directa, o INTOSC con
postcaler) se elige configurando el bit IRCF del registro OSCCON.
2.2.5.1 MODOS DE CONFIGURACIÓN DEL OSCILADOR INTERNO
Cuando se utilice el módulo USB y el oscilador interno se active como fuente de frecuencia
de reloj para el CPU del microcontrolador, al menos alguno de los otros modos (Señal de reloj externa o
Cristal/Resonador externo) deberá utilizarse como fuente de frecuencia de reloj para brindarle señal al USB
Clock. La elección de la fuente de reloj para dicho módulo USB estará determinada por el modo de oscilador
interno seleccionado.
Hay disponibles 4 modos de configuración del oscilador interno los cuales se pueden seleccionar
mediante las directivas de preprocesado #pragma o mediante la modificación de los registros de
configuración config1L y config1H. :
IRCF2:IRCF0: Internal Oscillator Frequency Select bits (Bits de selección de Frecuencia del
Oscilador Interno )
111 = 8 MHz (INTOSC drives clock directly)
110 = 4 MHz
101 = 2 MHz
100 = 1 Mhz (3) this is the default. Valor por defecto.
011 = 500 kHz
010 = 250 kHz
001 = 125 kHz
000 = 31 kHz (from either INTOSC/256 or INTRC directly)
/*
programa: prueba oscilador interno
pic: 18f4550
crystal: NO CPU: 1Mhz (valor por defecto)
CONEXIONES:
1 led en port D1 con una resistencia en serie de 470ohms
*/
/*Includes globales*/
#include <p18f4550.h>
#include <delays.h>
/*Includes locales*/
/* Bits de configuración*/
#pragma config FOSC = INTOSCIO_EC // Oscilador interno, uso de pin RA6 activado, El USB usa Clock Externo.
#pragma config WDT = OFF //desactivamos watchdog timer
#pragma config PWRT = ON // activamos power up timer
/*declaración de funciones*/
//////////////////////////////////////////////////////////////////////////////////////////////////
// Programa Principal //
//////////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
ADCON0 = 0X00,ADCON1 = 0X0F,CMCON = 0X07; //puerto A con todos los pines digitales
TRISA = 0X00; // puertos A B y C como salida. Recordar Tip: el 0 es una o de ouput y el 1 una I de input!!!
TRISB = 0X00;
TRISC = 0X00;
LATA = 0X00; // ponemos los puertos en cero
LATB = 0X00;
LATC = 0X00;
while(1)
{
LATDbits.LATD0 = ~LATDbits.LATD0; // Intercambiamos el estado del pin del led (Toggle LED)
LATDbits.LATD1 = ~LATDbits.LATD1; // Intercambiamos el estado del pin del led (Toggle LED)
Delay10KTCYx(25); //Delay de 250K ciclos (1 segundo a 1MHz. Ya que cada instrucción toma 4 ciclos)
}
TABLA 2-3 OPCIONES DE CONFIGURACION DEL OSCILADOR PARA UTILIZAR EL MODULO USB
INPUT PLL DIVISION Clock Mode MCU CLOCK Oscillator Microcontroller
OSCILLATOR PLLDIV2:DIV0) FOSC3:FOSC0 DIVISION Postcaler Clock
FREQUENCY PLL-Prescaler CPUDIV1:CPUDIV0 or PLL - Frequency
Postcaler
48 MHz PLL-Prescaler EC, ECIO 48 ÷ None(00) Osc. Postcaler 48 Mhz
N/A(1) 48 ÷ 2 (01) Osc. Postcaler 24 Mhz
48 ÷ 3 (10) Osc. Postcaler 16 Mhz
48 ÷ 4 (11) Osc. Postcaler 12 Mhz
48 Mhz PLL-Prescaler EC, ECIO 48 ÷ None (00) Osc. Postcaler 48 Mhz
+12(111) 48 ÷ 2 (01) Osc. Postcaler 24 Mhz
48 ÷ 3 (10) Osc. Postcaler 16 Mhz
48/12=4 48 ÷ 4 (11) Osc. Postcaler 12 Mhz
ECPLL, ECPIO 96 ÷ 2 (00) PLL postcaler 48 Mhz
96 ÷ 3 (01) PLL postcaler 32 Mhz
96 ÷ 4 (10) PLL postcaler 24 Mhz
96 ÷ 6 (11) PLL postcaler 16 Mhz
40 Mhz PLL-Prescaler EC, ECIO 40 ÷ None (00) Osc. Postcaler 40 Mhz
+10(110) 40 ÷ 2 (01) Osc. Postcaler 20 Mhz
40 ÷ 3 (10) Osc. Postcaler 13.33 Mhz
40/10=4 40 ÷ 4 (11) Osc. Postcaler 10 Mhz
ECPLL, ECPIO 96 ÷ 2 (00) PLL postcaler 48 Mhz
96 ÷ 3 (01) PLL postcaler 32 Mhz
96 ÷ 4 (10) PLL postcaler 24 Mhz
96 ÷ 6 (11) PLL postcaler 16 Mhz
24 Mhz PLL-Prescaler HS, EC, ECIO 24 ÷ None (00) Osc. Postcaler 24 Mhz
+6(101) 24 ÷ 2 (01) Osc. Postcaler 12 Mhz
24 ÷ 3 (10) Osc. Postcaler 8 Mhz
24/6=4 24 ÷ 4 (11) Osc. Postcaler 6 Mhz
HSPLL, ECPLL, ECPIO 96 ÷ 2 (00) PLL postcaler 48 Mhz
96 ÷ 3 (01) PLL postcaler 32 Mhz
96 ÷ 4 (10) PLL postcaler 24 Mhz
96 ÷ 6 (11) PLL postcaler 16 Mhz
20 Mhz PLL-Prescaler HS, EC, ECIO 20 ÷ None (00) Osc. Postcaler 20 Mhz
+5(100) 20 ÷ 2 (01) Osc. Postcaler 10 Mhz
20 ÷ 3 (10) Osc. Postcaler 6,67 Mhz
20 ÷ 4 (11) Osc. Postcaler 5 Mhz
HSPLL, ECPLL, ECPIO 96 ÷ 2 (00) PLL postcaler 48 Mhz
96 ÷ 3 (01) PLL postcaler 32 Mhz
96 ÷ 4 (10) PLL postcaler 24 Mhz
96 ÷ 6 (11) PLL postcaler 16 Mhz
16 Mhz PLL-Prescaler HS, EC, ECIO 16 ÷ None (00) Osc. Postcaler 16 Mhz
+4(011) 16 ÷ 2 (01) Osc. Postcaler 8 Mhz
16 ÷ 3 (10) Osc. Postcaler 5,33 Mhz
16/4+4 16 ÷ 4 (11) Osc. Postcaler 4 Mhz
HSPLL, ECPLL, ECPIO 96 ÷ 2 (00) PLL postcaler 48 Mhz
96 ÷ 3 (01) PLL postcaler 32 Mhz
96 ÷ 4 (10) PLL postcaler 24 Mhz
96 ÷ 6 (11) PLL postcaler 16 Mhz
12 Mhz PLL-Prescaler HS, EC, ECIO 12 ÷ None (00) Osc. Postcaler 12 Mhz
+3(010) 12 ÷ 2 (01) Osc. Postcaler 6 Mhz
12 ÷ 3 (10) Osc. Postcaler 4 Mhz
12/3=4 12 ÷ 4 (11) Osc. Postcaler 3 Mhz
HSPLL, ECPLL, ECPIO 96 ÷ 2 (00) PLL postcaler 48 Mhz
96 ÷ 3 (01) PLL postcaler 32 Mhz
96 ÷ 4 (10) PLL postcaler 24 Mhz
96 ÷ 6 (11) PLL postcaler 16 Mhz
8 Mhz PLL-Prescaler HS, EC, ECIO 8 ÷ None (00) Osc. Postcaler 8 Mhz
+2(001) 8 ÷ 2 (01) Osc. Postcaler 4 Mhz
8 ÷ 3 (10) Osc. Postcaler 2.67 Mhz
8/2=4 8 ÷ 4 (11) Osc. Postcaler 2 Mhz
HSPLL, ECPLL, ECPIO 96 ÷ 2 (00) PLL postcaler 48 Mhz
96 ÷ 3 (01) PLL postcaler 32 Mhz
96 ÷ 4 (10) PLL postcaler 24 Mhz
96 ÷ 6 (11) PLL postcaler 16 Mhz
4 Mhz PLL-Prescaler HS, EC, ECIO 4 ÷ None (00) Osc. Postcaler 4 Mhz
+1(000) 4 ÷ 2 (01) Osc. Postcaler 2 Mhz
4 ÷ 3 (10) Osc. Postcaler 1.33 Mhz
4/1=4 4 ÷ 4 (11) Osc. Postcaler 1 Mhz
HSPLL, ECPLL, ECPIO 96 ÷ 2 (00) PLL postcaler 48 Mhz
96 ÷ 3 (01) PLL postcaler 32 Mhz
96 ÷ 4 (10) PLL postcaler 24 Mhz
96 ÷ 6 (11) PLL postcaler 16 Mhz
NOTA: todas las frecuencias de salida excepto la de 24Mhz son asociadas con el funcionamiento del módulo USB en modo Alta-
Velocidad (Fulll-Speed) USB clock 48Mhz.
En azul se remarcan los modos compatibles con el modo Baja-Velocidad (Low-Speed) System clock 24Mhz. Usb Clock 6 Mhz.
NOTA 1: El oscilador Timer1 debe ser activado para poder seleccionar la fuente secundaria de reloj. El
oscilador del Timer1 se activa seteando el bit en T1OSCEN en el registro Timer1 Control register
(T1CON<3>). Si el oscilador Timer1 no está activo, cualquier intento de seleccionar la fuente secundaria de
reloj será ignorado.
NOTA 2: Es recomendable que el oscilador Timer1 se encuentre operativo antes de seleccionarlo como
fuente de reloj principal; de lo contrario un muy largo delay podrá ocurrir mientras el oscilador Timer1
oscillator arranque.