Mplab xc8 display 7 segmentos
En este post conectaremos un display de 7 segmentos a un pic y usaremos mplab xc8 como compilador.
En un post pasado conectamos un display de ánodo común y visualizamos los números de 0 al 9, esto con la ayuda del circuito 7447, el cual es un decodificador de 4 bits. Lo que vamos a hacer el usar el display 7 segmentos con un microcontrolador pic, realizaremos la conexión directa y programaremos cada uno de los dígitos correspondientes.
Vídeo
A continuación, encontrará el vídeo en donde se explica el funcionamiento del circuito.
Instalación de mplabx y xc8
Antes de empezar a trabajar necesitamos los entornos de trabajo los cuales son el mplabx y el compilador xc8[1], para ello se ha preparado un par de post en donde se realiza la explicación de como instalar los programas en Windows e Linux.
Display 7 segmentos
Es un elemento para visualización de números y letras en electrónica, cada segmento esta hecho de un material que emite luz, los segmentos se organizan o se designan como se muestra en la siguiente imagen.
Existen dos tipos de display de 7 segmentos, su principal diferencia es la conexión de los pines que están asociados a los segmentos, estos dos tipos se conocen como ánodo común y cátodo común.
Display de cátodo común
El display cátodo común es aquel que tiene el pin común conectado a los negativos de los LED’s (cátodo). Esto significa que este tipo de display se “controla” con ‘1’ lógico o con voltaje positivo.
Display de ánodo común
El display ánodo común es aquel cuyos ánodos están conectados al mismo punto. Este tipo de display es controlado por ceros (0).
Materiales
Los materiales a usar los describimos en la siguiente tabla.
Material | Cantidad | Descripción |
---|---|---|
PIC16F877A | 1 | Microcontrolador de la marca microchip |
Cristal de 4Mhz | 1 | Reloj externo del microcontrolador |
Resistencias de 1KΩ | 8 | Resistencia de proteccion del led y de MCLR |
Display 7 segmentos ánodo común | 1 | Indicador visual |
Pulsador tipo botton | 1 | Se usa para el reset de MCLR |
Conexión
Para trabajar con un microcontrolador pic hay que tener en cuenta dos cosas importantes, la conexión a positivo del pin MCLR con una resistencia de protección y la conexión del cristal externo en este caso de 4Mhz con un par de condensadores de 22uf. A continuación encontrara los planos y el circuito.
Puede que en el circuito este usando resistencias de 220Ω, pero es aconsejable usar de 1KΩ para protección de los leds.
Código
Vamos a explicar el código paso por paso, aunque como se puede observar no es tan complicado este ejemplo.
También se ha dejado en el repositorio de la pagina el código por si desea clonarlo, lo encontraras como ejemplo display 7 segmentos.
//Paso 1
#pragma config FOSC = XT
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = ON
#pragma config LVP = ON
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF
//Paso 2
#include <xc.h>
#include <PIC16f877A.h>
//Paso 3
#define _XTAL_FREQ 4000000
//Paso 4
void main(void) {
TRISD = 0;
//Paso 5
unsigned char digits[] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F, // 9
};
while(1) {
//Paso 6
for(int i = 0; i <= 9; i++) {
//Paso 7
PORTD = ~digits[i];
__delay_ms(1000);
}
}
}
- Declaramos la configuración de los fuses que necesita el pic para su funcionamiento, el mas importante por el momento es el
FOSC
enXT
, donde le indicamos que usamos un cristal externo. - Incluimos las librerías de xc y del pic, que contienen las configuraciones de los pines e instrucciones básicas de funcionamiento.
- Definimos la frecuencia del cristal a 4Mh, el cual estamos trabajando, para ello usamos
_XTAL_FREQ
. - Inicializamos la función principal que el
main
donde correrá el programa. - Inicializamos una variable char de tipo array como digits, en donde esta el orden en formato hexadecimal configurado para cada dígito.
- Creamos un bucle con un contador de hasta 10, para recorrer el array de digits y poder obtener en la posición del arreglo el valor numérico del display.
- Por ultimo podemos hacer lo siguiente, con PORTD son los 8 pines del puerto d, podemos pesarla un binario como 0b00000000 o un hexadecimal como 0x6F y lo que va a hacer es encender cada uno de los pines correspondientes del puerto. Ahora como estamos trabajando con un display de ánodo común y el arreglo de digits es para uno de cátodo común, debemos de negar o invertir los valores de los bits, para ello solo usamos la virgulilla (~), que en programación significa negar, con esto podemos visualizar los números en el display.
Referencias
[1] Microchip http://ww1.microchip.com/downloads/en/devicedoc/50002053g.pdf, Consultado mayo 2019