Los bits de configuración del micro son unos registros que nos permiten configurar diferentes características especiales de la CPU, las llamadas “SPECIAL FEATURES OF THE CPU”. Estos bits se configuran y se graban al principio de la programación del microcontrolador y no se pueden modificar durante la ejecución del programa. Nos permiten configurar diferentes características especiales del micro como los osciladores internos, el reset del micro, Watchdog Timer (WDT) o protección de la EEPROM. El micro PIC18F87K22 permite configurar las siguientes características:
Para nuestro proyecto configuraremos los siguientes:
Para editar los bits de configuración del micro utilizaremos la herramienta 'Set Configuration Bits' del MPLAB X. Está disponible en la pestaña Run->Set Configuration Bits. Esta herramienta nos permite modificar los bits de configuración fácilmente además de generar el código necesario para nuestro programa. El código lo podemos añadir al principio de nuestro programa o crear un header y añadirlo al proyecto. En el editor iremos seleccionando la configuración de cada uno de los registros según nuestras necesidades. Configuración del oscilador: La configuración del oscilador se encuentra en le registro 'CONFIG1H' en la dirección de memoria '300001h'. Se trata de un registro de 8 bits en el que podemos configurar que tipo de oscilador es el que vamos a utilizar en nuestro microcontrolador.
Seleccionamos la siguiente configuración: FOSC: INTIO2. Oscilador RC interno PLLCFG: OFF. Sin PLL FCMEN: OFF. Sin cambio de oscilador en caso de fallo del externo IESO: OFF. Two-Speed Start-up deshabilitado Configuración del reset: Para habilitar el reset por el puerto RG5 del micro hay que habilitar el bit 'MCLRE' del registro 'CONFIG3H'. Seleccionamos la siguiente configuración: MCLRE: ON. MCLR habilitado, puerto RG5 deshabilitado. Configuración del WDT: La principal función del WDT es resetear el microcontrolador una vez ha transcurrido un tiempo predeterminado. Esto es útil cuando tenemos un fallo de software o hardware que bloquea el micro e impide el correcto funcionamiento del sistema. Para cancelar el reset hay que ejecutar la instrucción CLRWDT antes de que finalice el período asignado, de lo contrario se producirá el reset del micro y la ejecución del programa se reiniciará sin completarse. Otra de las características que nos ofrece el WDT es la posibilidad de crear una interrupción que despierte al microcontrolador del modo sleep y el programa vuelva a ejecutarse desde el siguiente punto donde se ejecuto la función sleep() sin producir un reset. EL WDT utiliza el oscilador LF-INTOSC de 31 KHz de frecuencia y tiene un tiempo mínimo de 4ms que mediante un postscaler de 16-bits podemos conseguir un tiempo de hasta unos 70 minutos. Para obtener el tiempo del WDT utilizamos la fórmula: tiempo WDT = (128/31Khz) * Postscaler Para 1 minuto el postscaler será 1:16384, entonces 1 min=(128/31Khz) * 16384 El WDT tiene 4 modos de funcionamiento:
Para utilizar el WDT como reloj para despertar al micro del modo Sleep tenemos que utilizar el último modo de funcionamiento, el modo controlado por software mediante el bit de control SWDTEN nos permite poner en marcha y detener el WDT en el lugar que más nos interese de nuestro código. Para habilitarlo tenemos que seleccionar la siguiente configuración en el registro CONFIG2H WDTEN: ON. WDT controlado por bit de control SWDTEN WDTPS: 16384. Postscaler del WDT 16384. Aproximadamente 1 minuto de tiempo Crear el código con bits de configuración: Una vez seleccionada la configuración de los bits pulsamos sobre el botón 'Generate Source Code to Output' que nos genera automáticamente el código necesario para la configuración del microcontrolador. Lo podemos poner al inicio de la función main o crear un archivo header y añadirlo. En nuetro caso hemos creado una función Init_system() donde incluiremos también la configuración de los puertos y otras configuraciones necesarias del microcontrolador. Esta función solo hay que ejecutarla una vez al inicio del sistema. |