bclose

Display con interface

Arduino con display de 4 digitos

Objetivos

 

 

    • Nuestro primer display numérico de 4 digitos.
    • Multiplxando los digitos.
    • Aprendiendo a programar: Dividiendo el problema en funciones.
    • Vuelta a las operaciones con enteros
 

Material requerido.

 

  Tienda España Tienda Mexico
Kit Arduino Uno  Kit inicio UNO Kit inicio UNO
Kit Arduino MEGA Kit Inicio Mega Kit Inicio Mega

 

Los displays LED de 4 dígitos

 

En la sesión anterior vimos cómo usar un display de 4 dígitos montando nosotros toda la electrónica. Vimos que la cosa funcionaba bastante bien, y vimos que no se notaba el truco de multiplexar los dígitos, porque en general los Duinos son lo suficientemente rápidos para que no lo percibamos.

Pero lo que desde luego si que percibimos, fue lo pesado que es montar aquel 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 ese sistema solo es para los estudiantes (por aquello de que aprendan sufriendo), pero en la realidad es mucho mejor utilizar un display con sistema anexo de control, que son un poco más caros, pero no tienen ninguno de los problemas que vimos.

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

Hoy os voy a presentar un display chiquitín, pero muy resultón, que tengo rodando por la mesa ya un tiempo y que me encanta.

Es un display de Catalex, un fabricante chino, de 4 dígitos que se gobierna con esos 4 pines que decíamos (y dos son Vcc y GND), tiene una librería muy simple y funciona tanto a 5V como a 3,3V.

 
  • Espero recibir en breve uno de estos displays en versión I2C (Aaún no hemos hablado del I2C, pero todo llegará) y entonces haremos un sesión sobre el tema..
 

 

Diagrama de conexión

 

El cableado de uno de estos displays es insultantemente sencillo:

Esquema de conexion

 

Conectamos tensión y Ground y solo nos quedan 2 hilos: DIO o Data Input Output y Clock, que conectamos a los pinos 2 y 3 respectivamente. Y eso es todo.

Cableado

El programa de control

 

El fabricante del display nos proporciona una librería para que podamos olvidarnos del multiplexado y demás historias:   DigitalTube 

La descargamos e instalamos como vimos en la sesión Conociendo los servos, Seleccionad Programa – Añadir librería e indicadle el fichero que acabáis e descargar y se instalará.

Y en la lista de librerías que sale en el desplegable elegid DigitalTube . Veréis que os incluye una línea como esta:

#include <TM1637.h>

Que es un nombre impresentable, pero que es lo que hay. Para usarla, definimos un par de pines para la señal CLK y DIO:

#define CLK 3//pins definitions for TM1637 and can be changed to other ports
#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, del que no teneís que preocuparos:

int8_t  Digits[] = {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 imprima Digits[]

Display1.display(Digits);

Y listo. Por pura vagancia os pongo el programa completo para que apreciéis la diferencia:

#include "TM1637.h"
#define CLK 3    
#define DIO 2

TM1637 Display1(CLK,DIO);
int8_t Digits[] = {5,2,1,2};

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

void loop()
   {
        Display1.display(Digits);
   }

Vamos ahora a hacer el ejemplo del contador de la sesión anterior para que veamos cómo queda. Vamos a empezar por las definiciones

#include "TM1637.h"

#define CLK 3
#define DIO 2

TM1637 Display1(CLK,DIO);
int8_t Digits[] = {7,6,5,4};            //Valor inicial

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

Vamos a usar un contador para que veamos su valor en el display, así que vamos a necesitar separar los dígitos del valor y meterlos en el array Digits. Para ello vamos a recuperar la función CalculaDigitos () de la sesión anterior con alguna pequeña modificación:

Contenido solo disponible para suscriptores. ¡Accede al contenido!

    

Resumen de la sesión

Con este arduino curso hemos aprendido lo siguiente:

 

 

    • Hemos presentado los displays LED de 7 segmentos y 4 dígitos de Catalex, que utiliza un bus propio (y no documentado) pero que como funciona, casi puedo perdonárselo.
    • Hemos modificado nuestra función CalculaDigitos(), para que podamos usarla con este display u otros que requieran que les pasamos los dígitos separados.
    • La virtud de este tipo de display (Digital tubes para los ingleses) es la facilidad de conexión y de gestión con la librería.
 

 

 

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login

(31) Comments

  • Avatar for Charly
    • Ivan Uriarte

    Gracias Domingo!

  • Avatar for Charly
    • Domingo

    lo encontré :

    Display1.point(POINT_ON); \\ encendidos los » : »
    Display1.point(POINT_OFF); \\ apagados los » : »
    y tambien esto para quien le interese:

    Display1.set(7); // Brillo, 0 (mínimo) a 7 (maximo)

  • Avatar for Charly
    • Domy

    cual no veo como encender los dos puntos, no veo la función

  • Avatar for Charly
    • Ivan Uriarte

    Creo que es esta la función.

  • Avatar for Charly

    Gracias prometec. MUy bueno. Una pregunta: cómo enciendes los dos puntos

  • Avatar for Charly
    • Ivan Uriarte

    Hola Jose, puedes poner varios, necesitas dos pines para cada uno a parte de la alimentación. Luego sólo tienes que crear una instancia por cada uno.

  • Avatar for Charly
    • Jose

    buen día. Consulta. Puedo poner múltiples módulos TM1637 por cada Arduino? Hasta cuantos soporta? Y el CLK puede ser uno para todos o tengo que destinar 2 salidas por cada módulo? Gracias

  • Avatar for Charly
    • Ivan Uriarte

    Hola Gerardo, perdona pero no ten entiendo bien. Quieres pasar de binario a decimal y al revés?

  • Avatar for Charly
    • Gerardo

    Saludos desde Colombia.
    Estoy implementando un sistema con arduino, utilizando el max7219 para manejar un display de 6 digitos. Se tienen doce entradas digitales; dependiendo de cual entrada se active, se incrementara el valor de un unico registro( 5, 10,20, 50,100,200,500,1000,2000,5000,10.000,20.000). Aquí se definió una variable tipo long, que se incrementa en binario, comenzando en cero.(en decimal, la sumatoria total podría llegar a 150.000; mismo valor que se debería mostrar en el display).
    El inconveniente que tengo, es convertir el valor binario de la variable, en bcd, para posteriormente, poder separarlos, y llevar cada uno de los 6 digitos al max7219.
    Muchas gracias por su valioso consejo.

  • Avatar for Charly
    • Polo

    Hola, tengo la solución, tienes que ponerlo así:

    void CalculaDigitos(int Num) {
    int8_t Digit0 = Num %10;
    int8_t Digit1 = (Num %60)/10; Pusiste los 60 aquí
    int8_t Digit2 = (Num % 1000)/60; —-Acá tambien tienes que poner 60.
    int8_t Digit3 = Num / 1000;

  • Avatar for Charly
    • Alejandro

    A mi me pasa lo mismo. Ya revise todo y no encuentro el problema.

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login