Saltar al contenido
Control Automático Educación

Display 7 segmentos y Antirebote con PIC

En este post aprenderás que es y como evitar el antirebote o anti-rebote con PIC provocado por sistemas mecánicos en circuitos electrónicos y también vamos a aprender paso a paso como usar un Display de 7 Segmentos con PIC. Y con estos dos conceptos, vamos a hacer un ejemplo práctico usando un microcontrolador PIC.

Antes que nada te hago la invitación para que veas todo el curso completo y gratuito de Microcontroladores PIC.

Display de 7 Segmentos con PIC

El display led de 7 segmentos es un componente electrónico que me permite visualizar un valor numerico para una determinada aplicación. Cuando se quiere mostrar datos en el display, existen dos opciones para hacerlo, una utilizar un decodificador BCD a 7 segmentos después del microcontrolador, y otra es generar con el mismo microcontrolador el código 7 segmentos equivalente a cada número de 0 a 9.

Para que el microcontrolador maneje el display de 7 segmentos es necesario hacer la siguiente conexión (Para un display 7 segmentos de cátodo común). La misma conexión puede hacerse para un display led 7 segmentos de anodo común, la diferencia es que el común va a positivo y en la tabla de abajo intercambiar 1 por 0 y 0 por 1.

Display 7 Segmentos
6. Manejo de display 7 segmentos y antirebote

En el siguiente diagrama se muestra como conectar un display de 7 segmentos a un PIC 16F877a o 16F887, pero que sirve como base para conectar un display 7 segmentos en cualquier microcontrolador PIC del mercado.

Conexion display catodo comun con pic

Para lograr este objetivo se necesita entender el manejo de estructuras en C, que funcionan como una tabla donde el programa puede consultar el contenido de cada posición. Lógicamente en cada posición se encuentra el código 7 segmentos de cada número de 0 a 9.

Con esto vamos a programar un Display de 7 Segmentos con CCS C.

Display 7 Segmentos Hexadecimal

A continuación te dejo la tabla del Display 7 Segmentos Hexadecimal para Cátodo y Ánodo común:

Display 7 Segmentos Catodo Común
Display 7 Segmentos Anodo Común

Para manejar una estructura en C, lo único que se debe hacer es añadir la estructura al encabezado.

Para Cátodo Común adicionar el siguiente arreglo:

Para Ánodo Común adicionar el siguiente arreglo:

El número 10 indica la cantidad de posiciones de la estructura, los códigos 7 segmentos están en hexadecimal.

ANTIREBOTE PIC o ANTI-REBOTE con PIC

Cuando se trabaja con pulsadores o suiches o elementos mecánicos parecidos, en el momento en que estos cambian de estado se genera una señal conocida como REBOTE como la que se muestra en la figura:

Antirebote PIC Microcontrolador

Es decir, el suiche o pulsador genera unos y ceros (ruído) hasta que finalmente se estabiliza.

El microcontrolador con su velocidad de trabajo (la cual es muy rápida) se da cuenta de estas variaciones provocadas por los dispositivos electromecánicos y puede pensar, por ejemplo, que el pulsador fue presionado várias veces, cuando en realidad no fue asi.

Para evitar errores en la detección de pulsadores y suiches al momento de programar los microcontroladores PIC, se utiliza un código conocido como el ANTIREBOTE PIC.

El antirebote pic es simplemente la utilización de retardos de 150 a 200ms aproximadamente, en el momento en que se detecta que un pulsador o suiche cambió de estado. Este tiempo es suficiente para que se estabilice la señal proveniente del sistema mecánico para posteriormente preguntar por el estado del suiche o pulsador.

Vamos a ver los siguientes ejemplos, con sus respectivos códigos, para que aprendas a programar el display 7 segmentos y el anti rebote en un microcontrolador PIC.

Como Usar Display led 7 Segmentos y el AntiRebote con PIC

Para aprender a usar todo lo que vimos en este post, vamos a hacer un Ejemplo poderoso que coloque en práctica todo lo aprendido hoy y de esa manera conseguir que tus habilidades aumenten:

Temporizador con PIC usando CCS C Compiler

Realizar un temporizador con PIC de 0 a 9 utilizando un display de 7 segmentos que incremente cada segundo.

Display 7 segmentos + PIC

 El código de implementación del temporizador PIC usando la instrucción de retardo o delay se muestra a continuación.

De esa forma podremos implementar un temporizador PIC usando el CCS C PIC C Compiler, sin embargo también podríamos hacer temporizadores con PIC usando los Timers del microcontrolador, como el TIMER1 o el TIMER0, eso lo detallamos en la entrada de TIMER CON PIC.

Contador + Temporizador con PIC usando Display 7 Segementos y AntiRebote

Diseñar un temporizador con PIC decremental cada segundo. Pero vamos a combinar esta práctica también con un contador con PIC.

Vamos realizar un contador con PIC usando el pulsador conectado a RC0 (contador ascendente con push button pic), con el cual vamos a contar el número inicial con el que queremos que comience el temporizador decremental.

Usaremos otro pulsador en RC1 para darle la orden al microcontrolador de iniciar la temporizacion.

(Tratar el problema de antirrebote con PIC generado por ambos pulsadores).

Por ultimo colocar un Led en el pin RC2 que se active en el momento que el temporizador decremental está funcionando.

Microcontrolador con display 7 segmentos

(De forma similar puede hacerse un contador de display de 7 segmentos. Con lo aprendido en esta entrada, tú mismo estás en la capacidad de programar tu propio contador de 0 a 9 usando el display led de 7 segmentos)

A continuación se presenta el código del temporizador + contador con PIC para que lo copies y lo pegues en tu compilador y puedas reproducirlo. Recuerda que para ver el código debes compartir el contenido de este blog para que más personas se beneficien de esta información.

Eso es todo por el día de hoy queridos controleros y controleras, espero hayan aprendido como programar un display 7 segmentos utilizando un microcontrolador PIC y que hayan aprendido a lidiar con el problema del REBOTE generado por los componentes mecánicos.

Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.

Summary
Display 7 Segmentos y AntiRebote
Article Name
Display 7 Segmentos y AntiRebote
Description
Dispositivo electrónico que permite adicionar a nuestros proyectos una indicación visual numérica sobre diferentes tipos de información útil. Existen los displays de anodo y catodo común. Adicionalmente el AntiRebote es un mecanismo usado en microcontroladores para evitar leer ruido eléctrico provocado por dispositivos mecánicos como pulsadores o switches.
Author
Publisher Name
Control Automático Educación
Publisher Logo

Entradas relacionadas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Comentarios (9)

Buenas Tardes, estoy iniciando en programacion en C para Pic, y me gustaria si me puedes ayudar a adaptar este programa de display 7 segmentos en un PIC 16f628a

Responder

estaba realizando una simulacion en proteus con un display de catodo comun, y al poner los hexadecimales para los numeros de 0 al 9 que hay en tu pagina me di cuenta que los segmentos estaban al revez, se veia el numero con los segmentos apagados, cuando coloque los otros ex que pones para anodo me funciono bien

Responder

Que extraño. Lo importante es que te funcionó. Em mi caso me funciona bien con el arreglo que tengo ahi en la pagina y nadie relató tener problema con ello.

Responder

Hola que fortuna encontrar esta pagina.
De un Colombiano a otro.
Gracias y lo felicito, por su labor

Cesar Alvarez

Responder

Gracias Cesar, que bueno que te ha ayudado. Saludos.

Responder

Hola sergio, no entiendo esta parte:
IF (BIT_TEST(SW1))
{
DELAY_MS(200); // Antirrebote
while (BIT_TEST(SW1)); <<<<<<<<<< porque se queda en "stop" el programa y cuando se suelta sube un digito el display?

Responder

Daniel, esa linea esta puesta ahi, justamente para hacer eso, para esperar hasta que el usuario deje de pulsar el botón para poder subir un digito. Simplemente se hace un while y se pregunta si el boton esta presionado. Si esto es verdad (es decir si el botón esta presionado) la instrucción BIT_TEST(SW1) siempre entregará un 1, entonces será como tener while(1); osea se quedara en esa instrucción quieto hasta que sea falsa, cuando sueltes el boton la instrucción BIT_TEST(SW1) entregara un 0, entonces será como tener while(0); y puede continuar haciendo su rutina.

Responder

muchas gracias sergio, fue muy clara la respuesta ! seguire con el siguiente tutorial

Responder

[…] 6. Manejo de display 7 segmentos y antirebote […]

Responder