Bits de Configuración

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:
 
  •      Oscillator Selection
  •      Resets:
  •         - Power-on Reset (POR)
  •         - Power-up Timer (PWRT)
  •         - Oscillator Start-up Timer (OST)
  •         - Brown-out Reset (BOR)
  •      Interrupts
  •      Watchdog Timer (WDT) and On-chip Regulator
  •      Fail-Safe Clock Monitor
  •      Two-Speed Start-up
  •      Code Protection
  •      ID Locations
  •      In-Circuit Serial Programming™ (ICSP™)



Para nuestro proyecto configuraremos los siguientes: 
  • Oscilador: Utilizaremos el oscilador interno del micro 
  • Reset: Configuramos el puerto RG5 como MCRL
  • WDT: Utilizaremos el Watchdog Timer para crear una base de tiempo de un minuto  que despierte al micro y lo saque del modo Sleep
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.


  • IESO (Two-Speed Start-up): Permite encender el micro con el oscilador interno hasta que el externo esté estable.
  • FCMEN (Fail-Safe Clock Monitor): Cambia al oscilador interno en caso de fallo del externo.
  • PLLCFG (Oscillator is multiplied by 4): Habilita el PLL del micro y multiplica la velocidad por 4.
  • FOSC<3:0>(Oscillator Selection bits): Permite seleccionar el tipo de oscilador que vamos a utilizar entre: 

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:
  • Apagado
  • Encendido
  • Encendido en modo Activo y desconectado en modo Sleep
  • Encendido y controlado por software por bit control SWDTEN
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.
Comments