[Proteus versión 8.3]
En la lección 21 vimos en profundidad la utilización de displays de 7 segmentos. También aprendimos cómo utilizar los integrados 4511 para controlar varios displays de 7 segmentos. Sin embargo, si queremos construir un cartel luminoso formado por múltiples displays de 7 segmentos, es más cómodo utilizar el integrado MAX7219.
Este integrado nos permite controlar filas de 8 unidades de displays de 7 segementos y puede conectarse con nuestro Arduino utilizando un sistema de comunicación vía serie que sólo ocupa tres pines de nuestro controlador. Además, igual que el ejemplo que vimos con los integrados 4511, podemos utilizar varios integrados MAX7219 enlazando unos con otros, para aumentar el número de displays controlados. Por esta razón, en la práctica utilizar carteles luminosos formados por múltiples conjuntos de 8 unidades de displays de 7 segmentos practicamente exige que la mejor solución sea el uso de los integrados MAX7219. En la página www.openhacks.com podemos encontrar esta imágen con un ejemplo dónde se utiliza tres conjuntos de displays desde un Arduino.
Una muestra de la utilización práctica de este tipo de montajes, podría ser la creación de un panel de avisos de varias filas como el que se muestra en la imagen siguiente:
El elemento básico de esta lección es el integrado MAX7219 de la casa Maxim. La información técnica sobre el mismo se puede encontrar en el siguiente enlace: https://www.sparkfun.com/datasheets/Components/General/COM-09622-MAX7219-MAX7221.pdf. Básicamente se trata de un integrado que nos permite controlar ocho displays de siete segmentos (también se puede utilizar para matrices de leds de 8x8, pero eso no es objeto de esta lección). Se comunica con el microcontrolador que lo gobierna mediante el uso de un protocolo de comunicaciones serie SPI, QSPI o MICROWIRE. Incluye un decodificador BCD, lo que nos permite no tener que dibujar una matriz por cada caracter que queramos usar, resultando muy fácil escribir mayúsculas, minúsculas, dígitos y otros signos. Almacena en memoria RAM el valor de cada dígito, lo que posibilita que podamos escribir sólo el dígito que varía y que no sea necesario enviar en cada escritura todos los valores de los ocho dígitos. Y, por último, incluye en su diseño sistemas para la reducción de las emisiones electromagnéticas. En la siguiente imagen se muestra el conexionado estandar de este integrado.
Nosotros vamos a utilizar dos integrados para controlar 16 displays. De esta manera el lector podrá conocer cómo se puede utilizar más de un integrado en sus diseños y no será complicado crear proyectos a partir de este ejemplo dónde se utilicen tres o más. El montaje completo tiene este aspecto.
Veamos los detalles por separado para comprenderlos bien. Hemos utilizado cuatro bloques de cuatro dígitos de displays de siete segmentos cada uno de ellos con cátodo común (el modelo en proteus denominado 7SEG-MPX4-CC). Hemos unido dos bloques a un integrado MAX7219 y los otros dos bloques al otro. El conexionado de cada integrado con sus dos bloques de displays se muestra a continuación.
Se unen los pines de cada segmento (A, B, C, D, E, F, G, DP) de cada bloque en paralelo con los pines de igual nombre del integrado. Y se unen los cuatro pines de cada bloque de displays (los ocho en total) con los pines numerados DIG0 - DIG7 del integrado.
A continuación vemos el detalle de cómo se une cada uno de los integrados con nuestro Arduino.
El pin CLK se une con el pin IO13 de nuestro Arduino. El pin LOAD con el pin IO10 y el pin DIN con el pin IO11. Si sólo usáramos un integrado, aquí hubiera acabado nuestro trabajo. Pero como queremos utilizar dos, el segundo integrado debe conectarse de la siguiente manera.
Los pines CLK y LOAD se conectan en paralelo con el primer integrado, uniéndolos a los mismos pines del Arduino. Pero en el segundo integrado el pin DIN debe conectarse con el pin DOUT del primer integrado. De esta forma generamos la cadena de integrados unos detrás de otro. Si quisierámos unir un tercer integrado MAX7219, conectaríamos el pin DOUT del segundo integrado con el pin DIN del tercero. Y así sucesivamente. Nosotros hemos utilizado un terminal con el mismo nombre (LINK_MAX) para enlazar los dos integrados y simplificar el cableado. Recordemos que Proteus enlaza automáticamente los terminales del mismo nombre.
Nuestro diseño no tiene más complicación. Realmente es sencilla la implementación de rótulos de filas de displays de siete segmentos con ayuda de los integrados MAX7219.
No queremos terminar esta sección de conexionado sin mencionar que en el mundo real (ya sabemos que la simulación en Proteus siempre tiende a simplificarnos la tarea), hay que utilizar una resistencia y un condensador en cada integrado. Consultar la hoja de datos del integrado para ver un esquema completo de ejemplo:
Es el momento ahora de escribir el código que deseamos ejecutar en nuestro Arduino. Como es habitual en el mundo Arduino, existe una librería que nos hará la vida muy sencilla en el uso de este tipo de integrados. En este caso, Eberhard Fahle ha escrito la librería que tiene el nombre de HCMAX7219 y puede ser descargada desde este enlace: https://github.com/HobbyComponents/HCMAX7219. La información sobre el uso de esta librería la podemos encontrar en este enlace: http://forum.hobbycomponents.com/viewtopic.php?f=58&t=1794.
Nuestro código es tan sencillo gracias a la utilización de la librería que no consideramos necesario añadir muchas explicaciones. Simplemente, señalar que utilizamos tres funciones. HCMAX7219.print7Seg() para enviar la cadena de caracteres a los integrados. HCMAX7219.Refresh() para refrescar los caracteres que se visualizan en los displays. Y HCMAX7219.Clear() para limpiar el buffer de datos de los integrados al acabar.
Nos falta un punto muy importante para que nuestro programa funcione bien. La librería está por defecto escrita para gestionar un sólo integrado MAX7219 con ocho displays, pero preparada para cambiar el número de integrados a utilizar con una parametrización muy sencilla. Para indicarle que queremos utilizar más de un integrado, tenemos que ir a la carpeta donde se encuentran las librerías de Arduino (en la carpeta libraries del directorio dónde se aloja el compilador). Abrimos la carpeta de nuestra librería (HCMAX7219) y modificaremos el fichero llamado HCMAX7219.h. Buscamos la sección USER CONFIGURATION.
Modificaremos la definición NUMBEROFDRIVERS para indicar el número de integrados que estamos usando (en nuestro caso 2).
Y ya podemos compilar nuestro proyecto y arrancar la simulación.
El resultado es nuestro mensaje desplazándose por los diferentes displays generando la sensación de un rótulo en movimiento.
Esperamos, como en las ocasiones anteriores, que esta lección os permita implementar en vuestros diseños filas de displays de 7 segmentos utilizando los integrados MAX7219.