Académique Documents
Professionnel Documents
Culture Documents
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:
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.
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
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.
Imagen 4
Hasta la próxima!