Display de 7 segmentos y 4 dígitos con interface

Objetivos

  • Display numérico de 4 digitos.
  • Multiplexando los dígitos.
  • Aprendiendo a programar: Dividiendo el problema en funciones.
  • Operaciones con enteros

Material requerido

 arduino
  • Arduino Uno o similar. Esta sesión acepta cualquier otro modelo de Arduino.
 Img_3_4
  •  Una Protoboard.
 Img_3_6-300x185
  • Algunos cables de Protoboard.
  • Un display de 7 segmentos y 4 dígitos.

LOS DISPLAYS LED DE 4 DÍGITOS.

Existen un display de 4 dígitos en el que nosotros tendríamos que montar toda la electrónica.

Funcionaba bastante bien, y no se notaba el truco de multiplexar los dígitos, porque en general los Arduinos son lo suficientemente rápidos para que no lo percibamos.

Pero es muy pesado montar el circuito en una protoboard, por la cantidad de cables que supone conectar y por lo fácil que es equivocarse o soltar uno inadvertidamente.

En la práctica es mucho mejor utilizar un display con sistema anexo de control, que son un poco más caros, pero mucho más fáciles de montar.

En realidad son tan sencillos que no suelen tener más de 4 pines y se controlan por software directamente.

Vamos a ver un display de Catalex, un fabricante chino, de 4 dígitos que se gobierna con 4 pones, dos son Vcc y GND, tiene una librería muy simple y funciona tanto a 5V como a 3,3V.

DIAGRAMA DE CONEXIÓN.

El cableado de uno de estos displays es insultantemente sencillo. Conectamos tensión y Ground y solo nos quedan 2 hilos: DIO o Data y Clock, que conectamos a los pinos 2 y 3 respectivamente. Y eso es todo.

Img_32_2-1024x743

EL PROGRAMA DE CONTROL.

El fabricante del display nos proporciona una librería para que poder simplificar su utilización: DigitalTube.

En otras entradas ya hemos visto como descargar e instalar una librería externa: seleccionad Programa – Incluir librería – Añadir librería e indicadle el fichero que acabáis e descargar y se instalará.

Si vuelves a Programa y ves la lista de librerías que sale en el desplegable elige DigitalTube . Verás que se incluye una línea como esta:

#include <TM1637.h>

Para usarla, definimos un par de pines para la señal CLK y DIO:

#define CLK 3
#define DIO 2

Ahora tenemos que crear una instancia del tipo TM1637 que llamaremos display1 y le pasamos los pines que controlan la comunicación:

TM1637 display1(CLK,DIO);

Y ahora el fabricante nos pide que le pasemos los dígitos a representar en un array de 4 unsigned byte definidos con un tipo raro int8_t:

int8_t  digitos[] = {3,2,1,2} ;

En este caso el display mostrara 3212. Y ahora hay que inicializar la librería y el display

void setup()
   {
      display1.set();
      display1.init() ;
   }

Y ahora ya solo queda pedirle que visualice digitos[]

display1.display(digitos);

Y listo. El programa completo:

#include <TM1637.h>

#define CLK 3
#define DIO 2

TM1637 display1(CLK,DIO);
int8_t digitos[] = {3,2,1,2} ;

void setup() {
 // put your setup code here, to run once:
 display1.set();
 display1.init() ;

}

void loop() {
 // put your main code here, to run repeatedly:
 display1.display(digitos);
}

Para hacer un contador vamos a crear una función a la que llamaremos calculaDigitos() y que le mandamos un número entero, lo desglosa en 4 dígitos y lo muestra en el display.

void calculaDigitos(int num)
 {
 int8_t digit0 = num %10 ;
 int8_t digit1 = (num % 100) / 10 ;
 int8_t digit2 = (num % 1000) / 100 ;
 int8_t digit3 = num / 1000 ;

 digitos[3] = digit0 ;
 digitos[2] = digit1 ;
 digitos[1] = digit2 ;
 digitos[0] = digit3 ;

 display1.display(digitos);
 }

Y para calcular el número:

void loop() {
 // put your main code here, to run repeatedly:
 for (int i = 0 ; i<10000 ; i++)
    {
      calculaDigitos(i);
      delay(100);
 }
}