Arduino Nano: Control de display de 7 segmentos de cátodo común - Contador de 0 a 9 (Opción 2)


En esta pequeña entrada veremos una forma de controlar un display de 7 segmentos de cátodo común, por el momento solo realizaremos un conteo de 0 a 9, pero posteriormente iré incrementando el numero de dígitos. La teoría sobre display de 7 segmentos puedes checarlo en la red, acá simplemente veremos una forma de darle vida.

Circuito:
Con lo que respecta al circuito he decidido usar un modulo ya mostrado en el blog, es el de 7 segmentos que había desarrollado para la PIC Trainer v2.0, esto simplemente para no armar todo en protoboard, aunque para este ejemplo solo utilizaremos un solo digito, pero les dejo el circuito que estaremos usando en este y otro ejemplos.


Firmware:
Con respecto al código, tenemos dos funciones importantes pero la encargada de mostrar o actualizar los segmentos del display es display7SEG_Show() este recibe la información de los pines que se requieren encender para formar un determinado numero, la función display7SEG_Update() recibe el numero a mostrar y le pasa los parámetros a displya7seg_Show(), en el loop() simplemente tenemos incrementando el contador cada medio segundo.

/*******************************************************************************
*
* Control de display de 7 segmentos de catodo comun - Contador de 0 a 9 (Op.2)
*
*******************************************************************************
* FileName: NANO_Ctrl7seg_0to9CC_op2.ino
* Processor: ATmega328
* Complier: Arduino v1.8.42
* Author: Pedro Sánchez (MrChunckuee)
* Blog: http://mrchunckuee.blogspot.com/
* Email: mrchunckuee.psr@gmail.com
* Description: Control de un display de 7 segmentos de catodo comun (opcion
* dos), utilizo el modulo de 7 segmentos antes mostrado en el blog.
*******************************************************************************
* Rev. Date Comment
* v1.0.0 08/04/2021 Creación del firmware
******************************************************************************/
#define displaySegmentoA 2
#define displaySegmentoB 3
#define displaySegmentoC 4
#define displaySegmentoD 5
#define displaySegmentoE 6
#define displaySegmentoF 7
#define displaySegmentoG 8
#define displayTransistorUnidad 9
#define maxNumCounter 9 //Valor maximo ce cuenta
int contador;
void setup() {
pinMode(displaySegmentoA, OUTPUT);
pinMode(displaySegmentoB, OUTPUT);
pinMode(displaySegmentoC, OUTPUT);
pinMode(displaySegmentoD, OUTPUT);
pinMode(displaySegmentoE, OUTPUT);
pinMode(displaySegmentoF, OUTPUT);
pinMode(displaySegmentoG, OUTPUT);
pinMode(displayTransistorUnidad, OUTPUT);
contador = 0;
digitalWrite(displayTransistorUnidad, 0);
}
void loop() {
contador++;
if( contador>maxNumCounter)
contador = 0;
display7SEG_Update(contador);
delay(500);
}
/*******************************************************************************
* Function: void display7SEG_Update(char numero)
* Description: Esta función toma el parametro numero y lo pone en display7SEG_Show
* Envia estados (1 y 0) al display dependiendo del numero a mostrar
* Precondition: None
* Parameters: byte numero: Dato/Numero a mostrar
* Return Values: None
* Remarks: None
* *****************************************************************************/
void display7SEG_Update(char numero){
switch (numero){
case 0:
display7SEG_Show(1, 1, 1, 1, 1, 1, 0);
break;
case 1:
display7SEG_Show(0, 1, 1, 0, 0, 0, 0);
break;
case 2:
display7SEG_Show(1, 1, 0, 1, 1, 0, 1);
break;
case 3:
display7SEG_Show(1, 1, 1, 1, 0, 0, 1);
break;
case 4:
display7SEG_Show(0, 1, 1, 0, 0, 1, 1);
break;
case 5:
display7SEG_Show(1, 0, 1, 1, 0, 1, 1);
break;
case 6:
display7SEG_Show(1, 0, 1, 1, 1, 1, 1);
break;
case 7:
display7SEG_Show(1, 1, 1, 0, 0, 0, 0);
break;
case 8:
display7SEG_Show(1, 1, 1, 1, 1, 1, 1);
break;
case 9:
display7SEG_Show(1, 1, 1, 0, 0, 1, 1);
break;
default:
break;
}
}
/*******************************************************************************
* Function: void display7SEG_Show(int valueSegA, int valueSegB, int valueSegC,
int valueSegD, int valueSegE, int valueSegF,
int valueSegG)
* Description: Esta función actualiza los pines de cada segmento.
* Precondition: None
* Parameters: int valueSeg A-F: Valor de cada segmento
* Return Values: None
* Remarks: None
* *****************************************************************************/
void display7SEG_Show(int valueSegA, int valueSegB, int valueSegC,
int valueSegD, int valueSegE, int valueSegF,
int valueSegG){
digitalWrite(displayTransistorUnidad, HIGH);
digitalWrite(displaySegmentoA, valueSegA);
digitalWrite(displaySegmentoB, valueSegB);
digitalWrite(displaySegmentoC, valueSegC);
digitalWrite(displaySegmentoD, valueSegD);
digitalWrite(displaySegmentoE, valueSegE);
digitalWrite(displaySegmentoF, valueSegF);
digitalWrite(displaySegmentoG, valueSegG);
}
Descargas:
Aquí el enlace directo para DESCARGAR los archivos disponibles, también puedes revisar o descargar la información desde mi repositorio en GitHub, si no sabes como descargarlo puedes checar aquí, bueno por el momento es todo si tienes dudas, comentarios, sugerencias, inquietudes, traumas, etc. dejarlas y tratare de responder lo mas pronto posible.


Donaciones:
Si te gusta el contenido o si los recursos te son de utilidad, comparte el enlace en tus redes sociales o sitios donde creas que puede ser de interés y la otra puedes ayudarme con una donación para seguir realizando publicaciones y mejorar el contenido del sitio. También puedes hacer donaciones en especie, ya sea con componentes, tarjetas de desarrollo o herramientas. Ponte en contacto para platicar, o puedes volverte uno de nuestros sponsors.


Pido una retroalimentación avisando cada que un enlace no sirva o tenga errores al momento de abrirlo, así también si una imagen no se ve o no carga, para corregirlo en el menor tiempo posible.

Publicar un comentario

0 Comentarios