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.
Y que te suscríbas al canal de YouTube para seguir aprendiendo como programar microcontroladores:
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.
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.
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 Tabla en Hexadecimal
A continuación te dejo la tabla del Display 7 Segmentos Hexadecimal para Cátodo y Ánodo común:
Cátodo 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:
Byte CONST display[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
La conexión a cátodo común se realiza a través de transistores NPN llevando el común del display a tierra como se observa en la siguiente ilustración:
Ánodo Común
Para Ánodo Común adicionar el siguiente arreglo:
Byte CONST display[10]= {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18};
El número 10 indica la cantidad de posiciones de la estructura, los códigos 7 segmentos están en hexadecimal.
La conexión a ánodo común se realiza a través de transistores PNP llevando el común del display a VCC como se observa en la siguiente ilustración:
Es importante destacar que para la construcción de nuestros proyectos electrónicos con microcontroladores podemos comprarlos también desde la comodidad de nuestra casa en Amazon que tiene envios para cualquier lugar de latinoamerica y para europa:
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:
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.
El código de implementación del temporizador PIC usando la instrucción de retardo o delay se muestra a continuación.
#INCLUDE <16F887.H> //#USE DELAY(CLOCK=4000000) //Cristal interno 4MHz #USE DELAY(CLOCK=4000000,CRYSTAL) //Cristal externo 4MHz #FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP BYTE CONST DISPLAY[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67}; #BYTE PORTB=6 INT TEMPORIZADOR; MAIN() { SET_TRIS_B(0B00000000); //Configura el puerto B WHILE(TRUE) // Haga por siempre { TEMPORIZADOR = 0; // Inicializa temporizador en cero WHILE(TEMPORIZADOR <10) // Mientras contador < 10 { PORTB= DISPLAY[TEMPORIZADOR ]; // Muestre el valor en el display TEMPORIZADOR ++; //Incrementa TEMPORIZADOR DELAY_MS(1000); // Retardo de 1 segundo } } }
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.
Multiplexación Display de 7 Segmentos con PIC
Multiplexar Display 7 Segmentos con Arduino
Display 7 Segmentos – Antirebote – PullUP con Arduino
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.
(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.
#INCLUDE <16F887.H> #USE DELAY(CLOCK=4000000) #FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP BYTE CONST DISPLAY[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67}; #BYTE PORTB=6 #BYTE PORTC=7 #DEFINE SW1 PORTC,0 #DEFINE SW2 PORTC,1 #DEFINE LED PORTC,2 INT CONTADOR; MAIN() { SET_TRIS_B(0B00000000); //Configura el puerto B SET_TRIS_C(0B00000011); //Configura el puerto B CONTADOR = 0; // Inicializa contador en cero WHILE(TRUE) // Haga por siempre { PORTB= DISPLAY[CONTADOR]; BIT_CLEAR(LED); IF (BIT_TEST(SW1)) { DELAY_MS(200); // Antirrebote while (BIT_TEST(SW1)); CONTADOR++; PORTB= DISPLAY[CONTADOR]; IF(CONTADOR==10) { CONTADOR=0; } } IF (BIT_TEST(SW2)) { DELAY_MS(200); //Antirrebote BIT_SET(LED); WHILE (CONTADOR>0) { PORTB= DISPLAY[CONTADOR]; DELAY_MS(1000); CONTADOR--; } BIT_CLEAR(LED); } } }
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.
Mi nombre es Sergio Andres Castaño Giraldo, y en este sitio web voy a compartir una de las cosas que mas me gusta en la vida y es sobre la Ingeniería de Control y Automatización. El sitio web estará en constante crecimiento, voy a ir publicando material sobre el asunto desde temas básicos hasta temas un poco más complejos. Suscríbete al sitio web, dale me gusta a la página en Facebook y únete al canal de youtube. Espero de corazón que la información que comparto en este sitio, te pueda ser de utilidad. Y nuevamente te doy las gracias y la bienvenida a control automático educación.