Mplab X IDE XC8 configuración bits


La configuración de bits permiten habilitar características de los microcontroladores PIC para su funcionamiento

Mplab X IDE XC8 configuración bits
oscar Escrito por oscar 30 May 2019 5671 0

Los Configuration Bits son fundamentales porque definen cómo arranca físicamente el microcontrolador: oscilador, Watchdog, protección de código, programación LVP, etc.

Para trabajar con MPLAB X + XC8, te recomiendo primero configurarlos desde la interfaz de MPLAB y luego dejar que MPLAB genere los #pragma config.

Antes de iniciar

Instala Mplab X IDE usando las siguientes guías:

Configurar un proyecto

Para iniciar la configuración de los bits, abrimos el panel de config bit source que se encuentra en la siguiente ruta Window > target memory view > configuration bit o como se muestra en la siguiente imagen.

Ingresar configuración
Ingresar configuración

Se desplegara en la parte inferior la configuración de los bits, donde, dependiendo del microcontrolador aparecerán los bits que necesitan ser configurados, para mas información cada microcontrolador tiene su datasheet con el set de bits propio.

Pantalla configuración
Pantalla configuración

Configuración recomendada para comenzar

Una vez que se modifico los bits que necesitamos damos click en generar en donde nos muestra la siguiente pantalla.

Generar configuración
Generar configuración

Si estás trabajando con un cristal externo de 20 MHz, puedes utilizar:

Configuration Bit Valor Función
FOSC HS Oscilador de alta velocidad
WDTE OFF Deshabilita Watchdog
PWRTE ON Habilita Power-up Timer
BOREN ON Habilita Brown-out Reset
LVP OFF Deshabilita Low Voltage Programming
CPD OFF Sin protección EEPROM
WRT OFF Sin protección de escritura
CP OFF Sin protección del programa

¿Qué significa cada configuración?

FOSC — Oscillator Selection

Este es uno de los más importantes. Para el PICXXXX tenemos:

Son las diferentes configuraciones del oscilador del PIC. Básicamente le indican al microcontrolador de dónde obtiene su reloj y qué tipo de oscilador estás utilizando.

Para un cristal de 20 MHz:

FOSC = HS

Para un cristal típico de 4 MHz también podrías utilizar XT, pero para comenzar con 20 MHz → HS es una buena elección.

WDTE — Watchdog Timer

Configúralo inicialmente como:

WDTE = OFF

El Watchdog permite reiniciar automáticamente el microcontrolador si el programa deja de responder.

Pero mientras estás aprendiendo puede generar confusión.

Por ejemplo, si está habilitado y no limpias el watchdog periódicamente:

Programa
   ▼
ejecutando
   ▼
WDT alcanza timeout
   ▼
RESET
   ▼
programa comienza nuevamente

Más adelante podemos estudiar el WDT correctamente.

PWRTE — Power-up Timer

Configura:

PWRTE = ON

El Power-up Timer introduce un pequeño retraso después de encender el PIC.

Esto permite que la alimentación y el oscilador se estabilicen antes de comenzar la ejecución.

BOREN — Brown-out Reset

Configura:

BOREN = ON

El Brown-out Reset permite que el PIC se reinicie si la tensión de alimentación cae por debajo de cierto nivel.

Por ejemplo:

VDD
 │
5 V ────────────────
 │
 │       caída
 │        ↓
 │      ┌───┐
 │      │   │
 └──────┘   └────────
        │
        ▼
      RESET

Esto es especialmente útil en hardware real.

LVP — Low Voltage Programming

Aquí te recomiendo:

LVP = OFF

Esto es importante.

El PIC16F877A tiene un modo de programación de bajo voltaje. Si no lo estás utilizando, es mejor desactivarlo.

Además, desactivar LVP permite utilizar determinados pines relacionados con este mecanismo como GPIO normal.

Para nuestros proyectos educativos con PICkit/programador convencional, es la opción que recomiendo.

CP — Code Protection

Configura:

CP = OFF

Esto significa que no estamos protegiendo el código del programa contra lectura.

CPD — EEPROM Code Protection

Configura:

CPD = OFF

Deshabilita la protección de la EEPROM de datos.

WRT — Flash Program Memory Write Enable

Configura:

WRT = OFF

Esto está relacionado con la protección de escritura de la memoria de programa.

Guardar la configuración

Para el PIC + XC8, es una buena práctica separar la configuración del microcontrolador de main.c. Así main.c queda limpio y puedes reutilizar la configuración.

La estructura que te recomiendo es:

PIC16F877A_Basico/
│
├── Header Files
│   └── config.h
│
└── Source Files
    └── main.c

Crear config.h

En MPLAB X: Clic derecho → Header Files → New → C Header File

Nombre: config

MPLAB creará: config.h

 

Colocar los Configuration Bits en config.h

Dentro de config.h:

#ifndef CONFIG_H
#define CONFIG_H

#include <xc.h>

#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config BOREN = ON
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF

#endif

¿Qué hace #ifndef?

Esta estructura:

#ifndef CONFIG_H
#define CONFIG_H

...

#endif

es un include guard.

Evita que el contenido de config.h sea incluido más de una vez durante la compilación.

Importar config.h desde main.c

Ahora tu main.c puede quedar mucho más limpio:

#include <xc.h>
#include "config.h"

#define _XTAL_FREQ 20000000

void main(void)
{
    while(1)
    {
    }
}

La diferencia importante es: #include "config.h"

Las comillas: "config.h"

indican que estamos incluyendo un archivo de nuestro propio proyecto.

Mientras que:

#include <xc.h>

incluye un archivo proporcionado por el compilador.

Archivo configuración
Archivo configuración

Comentario

Debe aceptar antes de enviar