Está en la página 1de 4

Distintas configuraciones del Oscilador con el PIC

Vamos a ver las distintas configuraciones del oscilador que puede tener el PIC

?
1
2 /*
3 * File: system.h
4 */
5 #define _XTAL_FREQ 8000000
6
7 /**
* File: configuration_bits.c
8 */
9
10 __CONFIG(MCLRE_ON & CP_OFF & CPD_OFF & LVP_OFF & BOREN_OFF &
11 WDTE_OFF & FOSC_INTOSCIO & PWRTE_OFF);
12 __CONFIG(IESO_OFF & FCMEN_OFF);
13
/**
14 * File: system.c
15 */
16 void ConfigureOscillator(void) {
17 // Configura el Oscilador interno a 8Mhz
18 OSCCONbits.IRCF = 0b111;
}
19
20

Con los mismos bits de configuración del código anterior, para cambiar la frecuencia del
oscilador interno lo que debemos hacer es cambiar el valor de OSCCONbits.IRCF (Internal RC
Oscillator Frequency) por uno de los siguientes:

0b000 = 31.25 kHz


0b001 = 125 kHz
0b010 = 250 kHz
0b011 = 500 kHz
0b100 = 1 MHz
0b101 = 2 MHz
0b110 = 4 MHz
0b111 = 8 MHz

El "0b" que aparece adelante de cada valor le indica al compilador que lo que le estamos
pasando es un número binario. También podríamos pasarle el valor en hexadecimal pero
queda más claro de esta manera. IRCF ocupa 3 bits del registro OSCCON (bits 6,5 y 4).

Por ejemplo, si al programa del Post anterior le queremos cambiar la frecuencia del oscilador
interno a 4 Mhz, debemos setear en IRCF el valor 0b110 y actualizar el macro _XTAL_FREQ
para que la rutina de delay funcione correctamente:

?
1 /*
* File: system.h
2 */
3 #define _XTAL_FREQ 4000000 // Necesario para la rutina de
4 Delay
5
6
7 /**
8 * File: system.c
*/
9 void ConfigureOscillator(void) {
10 // Configura el Oscilador interno a 4Mhz
11 OSCCONbits.IRCF = 0b110;
12 }
13
Una de las ventajas que trae el seteo del oscilador interno es que podemos disponer de 2 pines
más para utilizarlos como Entrada/Salida, pero trae como desventaja que no es del todo
preciso.

Utilización de un Cristal externo

Si utilizamos un cristal externo, vamos a tener mucha más precisión que si utilizásemos el
oscilador interno. Aparte de esto, podemos llegar a frecuencias mayores lo que permite que
nuestro pic realice muchas más acciones en la misma cantidad de tiempo.

Por ejemplo, si queremos utilizar un cristal externo de 20 MHz debemos hacer los siguientes
cambios en el código:

1
2 /*
3 * File: system.h
*/
4 #define _XTAL_FREQ 20000000 // Necesario para la rutina de
5 Delay
6
7 /**
8 * File: configuration_bits.c
*/
9
10
__CONFIG(MCLRE_ON & CP_OFF & CPD_OFF & LVP_OFF & BOREN_OFF &
11 WDTE_OFF & FOSC_HS & PWRTE_OFF);
12 __CONFIG(IESO_OFF & FCMEN_OFF);
13
14 /**
15 * File: system.c
*/
16 void ConfigureOscillator(void) {
17 // No se setea ninguna configuración
18 }
19

Ahora el circuito nos quedará de la siguiente manera:

Circuito agregando el cristal externo de 20 Mhz y 2 capacitores de 0,15pF:


Imagen 1 - Cristal externo

El valor de los capacitores va a depender del cristal como podemos leerlo en la ficha técnica
del PIC16F88:

Imagen 2

Se pueden agregar capacitores de más tamaño para aumentar la estabilidad del clock con la
contra de que se retrasa unos milisegundos más el inicio. En mi caso utilicé 2 capacitores de
22pF.

Hay que tener en cuenta que tanto el cristal como los capacitores deben estar lo más cerca
posible del PIC para evitar interferencias.

Cómo queda el circuito en mi protoboard:


Imagen 3

Imagen 4

Hasta la próxima!

También podría gustarte