Pic c compiler display 7 segmentos cátodo común
El proyecto pic c compiler display 7 segmentos cátodo común usamos un pic16f628a para mostrar los numeros en el display
Acerca del proyecto
Una de las prácticas que podemos utilizar para poder entender las entradas y salidas de un microcontrolador pic es trabajar con un display de 7 segmentos cátodo común, donde conectamos los fines correspondientes a cada uno de los segmentos a un puerto del pic y escribimos en ese puerto el valor hexadecimal correspondiente al carácter que queremos visualizar en el display. En este post vamos a el paso a paso de como trabajar con este display utilizando el microcontrolador pic16F628a utilizando como lenguaje de programación pic C compiler.
Conocimiento previo
Para realizar este proyecto se requiere conocimiento previo de los siguientes temas, si aun no has trabajado con lo que se menciona en la siguiente tabla, allí están los links a los post para que puedas dar un repaso adicional o puedas recordar el conocimiento necesario para poder realizar este proyecto.
Proyecto | Descripción |
---|---|
Display 7 segmentos cátodo común | En este post explicamos y definimos el display de 7 segmentos cátodo común su conexión e identificamos los pines con los segmentos. |
Conectar display 7 segmentos cátodo común | En este post explicamos la conexión del display de 7 segmentos cátodo común el cual tiene las mismas características de conexión que la no solamente que esté para poder encender el dígito necesitamos inyectarle un uno lógico, en el post explicamos a detalle como es el funcionamiento. |
Introducción al compilador pic c compiler | En este proceso encontrará la introducción a pic c compiler, además de encontrar a los links a los proyectos que hemos realizado con este compilador |
PIC16F628A | Aquí encontrará la hoja de datos del pic 16F628a y los diagramas de conexión |
Display 7 segmentos cátodo común
Display de 7 segmentos cátodo común básicamente es un arreglo de diodos leds conectados en común hacia el cátodo y éste va a ir conectado hacia el positivo, cada una de los leds se va a convertir en un segmento el cual está organizado de una forma que podamos visualizar un número o un dígito del 0 al 9, cada uno de los segmentos está organizado desde la hasta A a la G, para visualizar algún número tenemos que pasar encender y apagar el led que corresponda al segmento. Como tenemos en la última imagen, la tabla de la secuencia de bits que que debemos encender y apagar para cada uno de los pines, estos se conectan al segmento, de tal forma que visualice el número correspondiente. Debemos tener en cuenta que para para encender un dígito se setea un 1 lógico y para apagarlo seteamos un 0 lógico, esta es la característica de este display cátodo común
Materiales
A continuación vamos a listar los materiales que vamos a utilizar para este proyecto y describimos la funcionalidad qué va a hacer sobre el circuito.
Materia | Cantidad | Descripción |
---|---|---|
Display 7 segmentos cátodo común | 1 | Visualizaremos los digitos del 0 al 9 |
PIC16f628a | 1 | Controlador para el display. |
Resistencia | 7 | Resistencia de 1kΩ |
Cristal de 4Mhz | 1 | Reloj externo del microcontrolador. |
Cables macho a macho | 7 | Los usaremos para la conexión. |
Conexión del circuito
La conexión que vamos a hacer es del pic16F628a hacia el display va a ser directa por el purto b, lo único que intermedio son las resistencias de protección de un kilo ohmio esto con el fin para que no se vaya a dañar el segmento del display. En la siguiente tabla tenemos referenciado el segmento del display con el pin del arduino que estamos utilizando para encender el dígito. Cabe aclarar hasta este paso que display de 7 segmentos de cátodo común es decir que el común va conectado a positivo, teniendo en cuenta este dato para encender el segmento desde el arduino tenemos que enviarle un 0 lógico para que se encienda y 1 lógico para que se apague pero esto lo vamos a ver en el código con más detalle.
Pin pic | Segmento display cátodo común |
---|---|
6 | a |
7 | b |
8 | c |
9 | d |
10 | e |
11 | f |
12 | g |
Tabla de codificación
La siguiente tabla muestra cual es el valor hexadecimal que se le tiene que pasar para poder visualizar cada dígito, este valor hexadecimal se calcula por medio del byte que le vamos a pasar al puerto directamente, también podemos pasarla bit por bit a cada uno de los fines pero ya que tenemos la facilidad de pasarla el hexadecimal completo entonces utilizamos este formato.
Number | A B C D E F G | PORT_X (Hex) |
---|---|---|
0 | 0 0 1 1 1 1 1 1 | 0x3F |
1 | 0 0 0 0 0 1 1 0 | 0x06 |
2 | 0 1 0 1 1 0 1 1 | 0x5B |
3 | 0 1 0 0 1 1 1 1 | 0x4F |
4 | 0 1 1 0 0 1 1 0 | 0x66 |
5 | 0 1 1 0 1 1 0 1 | 0x6D |
6 | 0 1 1 1 1 1 0 1 | 0x7D |
7 | 0 0 0 0 0 1 1 1 | 0x07 |
8 | 0 1 1 1 1 1 1 1 | 0x7F |
9 | 0 1 1 0 1 1 1 1 | 0x6F |
Código
Para la compilación de este proyecto les recomiendo que vean el post de instalar pic c compiler si aún no lo tienen y posteriormente cómo crear un proyecto para este entorno de trabajo, esto por si nunca han trabajado con este compilador.
El código lo tenemos en el repositorio de github en la sección pic c compiler code.
// Paso 1
#include <16F628A.h>
// Paso 2
#fuses XT, NOWDT, NOMCLR
#use delay(clock=4M)
// Paso 3
// 0 1 2 3 4 5 6 7 8 9
BYTE CONST DISPLAY[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
// Paso 4
#byte port_b = 0x06
// Paso 5
void main()
{
// Paso 6
set_tris_b(0x00);
// Paso 7
while(TRUE) {
// Paso 8
for(int i = 0; i < 10; i++) {
port_b = DISPLAY[i];
delay_ms(1000);
}
}
}
A continuación, explicamos cada uno de los pasos que se esta realizando.
- Vamos a incluir todas las características del pic 16F628a con la siguiente instrucción esto permitirá utilizar sus puertos y sus pines.
- Vamos a incluir las siguientes instrucciones para poder utilizar el cristal externo en este caso del pic, cristal de 4Mhz y le vamos a indicar en los fusibles la palabra xt que es el cristal de esa frecuencia externo.
- Ahora vamos a crear un array constante de bytes en donde vamos a pasarla cada uno de los valores que necesitamos para poder encender el display, aunque en las raíces de bits nosotros podemos indicarle con el formato hexadecimal e internamente el compilador se encarga de transformarlo en bytes.
- Ahora vamos a indicarle en el puerto B que vamos a dejar como salida para poder encender los leds y en este caso de los segmentos del display.
- Ahora vamos a crear la instrucción principal Main la cual baje nuestro código y nuestro programa principal.
- Ahora vamos indicarle con una instrucción set_tris_b vamos a colocar todo el puerto B como salida.
- Ahora vamos a crear un bucle infinito al cual vamos a ver qué programa corre indeterminadamente para poder ver el funcionamiento del display.
- Por último creamos un bucle que cuente hasta 10 el cual lo que vamos a hacer es primero obtener de nuestra variable array el valor correspondiente del byte según el número contador que se encuentre en ese bucle, y ese valor obtenido del byte o en este caso del hexadecimal se lo vamos a pasar directamente al puerto b, por último generamos un delay de un segundo para ver el efecto del número en el display.