Codificação compatível com Arduino 10: Multiplexação de sete segmentos usando Arduino e MAX7219

Codificación compatible con Arduino 10: multiplexación de siete segmentos usando Arduino y MAX7219

En el tutorial anterior , aprendimos cómo conectar una pantalla de siete segmentos con Arduino. Una pantalla de siete segmentos se compone de una unidad de ocho LED, siete de los cuales tienen forma de barra y uno de punto. Estas unidades de visualización son ideales para mostrar números o letras.

Por ejemplo, a menudo se utilizan como unidad de visualización en aplicaciones sensibles al costo donde un sistema integrado puede requerir solo información numérica, como un reloj digital o un tablero de visualización de fichas. Esta opción suele ser más rentable que los monitores LCD completos.

En el tutorial anterior, descubrimos que interconectar una sola pantalla de siete segmentos requiere ocho o nueve conexiones. La unidad de siete segmentos sólo puede mostrar un dígito. Si se necesitan más dígitos, se necesitan más segmentos.

Si cada siete segmentos se interconectan de forma independiente con el controlador (como Arduino ), se requieren múltiples canales de E/S digitales. Generalmente, la cantidad de pines de E/S digitales en cualquier controlador es limitada. Sin embargo, muchas pantallas de siete segmentos pueden conectarse a un controlador mediante la técnica de multiplexación.

Al utilizar esta técnica, se puede reducir considerablemente la cantidad de pines necesarios para conectar múltiples dispositivos de siete segmentos con un controlador. También hay varios circuitos integrados de controladores de pantalla de siete segmentos que pueden realizar la técnica de multiplexación y utilizar interfaces serie estándar para comunicarse con un controlador.

MAX7219 es un controlador IC de LED que permite multiplexar hasta ocho pantallas de siete segmentos. Utiliza una interfaz SPI para comunicarse con el controlador. De esta manera, sólo se activan tres pines del controlador para controlar ocho de las pantallas de siete segmentos. De lo contrario, la multiplexación directa requeriría al menos 16 pines de E/S digitales.

Multiplexación de siete segmentos
Hay dos tipos de visualizadores de siete segmentos: cátodo común y ánodo común.

Cuando un único cátodo común de siete segmentos interactúa con un controlador, el terminal del cátodo común generalmente está conectado a tierra. Del mismo modo, cuando un único ánodo común de siete segmentos se conecta a un controlador, el terminal del ánodo común normalmente se conecta a VCC. De esta manera los siete segmentos están siempre activos y listos para encender/apagar sus LED de acuerdo con la señal lógica en sus pines de datos (a, b, c, d, e, f, g y dp).

En la técnica de multiplexación se conectan siete segmentos múltiples con un controlador y se acortan las respectivas líneas de datos de todos los segmentos. Por lo tanto, cuando el controlador transfiere la lógica para encender/apagar los segmentos, se pasa a los siete segmentos al mismo tiempo. Sin embargo, sólo se activa una unidad de visualización a la vez.

Además, cada uno de los siete segmentos multiplexados con un controlador debe ser del mismo tipo (es decir, todos deben ser ánodo común o cátodo común).

Los terminales del ánodo común o del cátodo común no están conectados a VCC ni a tierra. En cambio, interactúan con los pines del microcontrolador. Los terminales del ánodo común o del cátodo común de los siete segmentos sirven como líneas seleccionadas. Uno de los segmentos se puede seleccionar pasando la lógica relevante a los terminales de cátodo común/ánodo común.

Si es ánodo común, se multiplexan siete segmentos:

  • Uno de los siete segmentos se puede seleccionar pasando una lógica ALTA al terminal del ánodo común que debe permanecer activado a la vez.
  • Los otros siete segmentos se pueden mantener inactivos manteniendo una lógica BAJA en sus terminales de ánodo común.
  • El dígito deseado se puede mostrar en los siete segmentos seleccionados encendiendo los segmentos LED apropiados simplemente pasando una lógica BAJA a las líneas de datos respectivas.

De manera similar, si el cátodo común, se multiplexan siete segmentos:

  • Uno de los siete segmentos se puede seleccionar pasando una lógica BAJA al terminal del cátodo común que debe permanecer activado a la vez.
  • Los otros siete segmentos se pueden mantener inactivos manteniendo una lógica ALTA en sus terminales de cátodo común.
  • El dígito seleccionado se puede mostrar en los siete segmentos seleccionados encendiendo los segmentos LED apropiados pasando una lógica ALTA a las líneas de datos respectivas.

Los siete segmentos multiplexados pueden verse como una serie de LED agrupados por unidades de visualización de siete segmentos: cada unidad se activa una tras otra. Los LED de la unidad se controlan pasando la lógica adecuada.

Sólo se activa un segmento de siete a la vez y en él se muestra el dígito deseado. Luego se activan los otros siete segmentos y en ellos se muestra el dígito seleccionado. Esto continúa para los siete segmentos multiplexados.

Si se muestran 25 fotogramas (o más) en un segundo, el ojo humano verá los fotogramas como una visualización continua. Por lo tanto, los siete segmentos multiplexados aparecerán como si mostraran los dígitos simultáneamente.

Circuitos integrados de controladores LED
Incluso cuando se multiplexan siete segmentos directamente en los pines de E/S digitales de un controlador, implican muchos pines. La interconexión cada siete segmentos requiere la participación de un pin adicional en el controlador. Sin contar los ocho pines ya ocupados para líneas de datos. Si los ocho o siete segmentos están conectados al controlador, se requieren 16 pines de E/S digitales (ocho para las líneas de datos y ocho para las líneas de selección).

Sin embargo, no todos los microcontroladores tienen tantos GPIO. E incluso si lo hicieran, normalmente no es recomendable utilizar tantos pines para interactuar con un sistema de visualización. Esto se debe a que es posible que otros componentes también requieran interfaz con el controlador.

La solución a este problema: circuitos integrados de controladores LED. Estos circuitos integrados realizan multiplexación en sus propios canales/pines, lo que significa que los siete segmentos o conjuntos de LED se pueden controlar a través de interfaces serie estándar (como SPI o I2C). Los circuitos integrados de controlador LED solo requieren obtener datos del controlador, utilizando la interfaz I2C o un SPI de tres cables.

I2C permite la comunicación de datos semidúplex a través de dos cables. Esto significa que un controlador IC de pantalla LED que utiliza la interfaz I2C implica solo dos pines de un microcontrolador para controlar varias de las pantallas de siete segmentos o la matriz de LED.

SPI de tres cables permite la comunicación de datos unidireccional a través de tres cables. Un controlador IC de pantalla LED que utiliza un SPI de tres cables implica solo tres pines de un microcontrolador para controlar varias de las pantallas de siete segmentos o la matriz de LED.

El controlador LED de 8 dígitos MAX7219
MAX7219/MAX7221 es un controlador de pantalla LED de cátodo común de ocho dígitos. Permite interconectar un microprocesador o microcontrolador con unidades de visualización de siete segmentos con hasta ocho dígitos. También se pueden interconectar 64 barras de LED y pantallas gráficas de matriz con un controlador/computadora utilizando este IC.

El CI incluye:

  • Un decodificador BCD de código B en chip
  • Un controlador de segmento y dígito
  • Un circuito de escaneo multiplex
  • Una RAM estática de 8x8 para almacenar hasta ocho dígitos

El IC tiene una interfaz serial de 10 MHz que puede comunicarse con un controlador/computadora a través de un IPS, un QSPI o un MICROWIRE.

Funciona con un suministro de 5 V 330 mA y consume solo 150 uA de corriente en modo apagado. Para funcionamiento de 3 V, se puede utilizar el MAX6951. El MAX7219/MAX7221 admite el modo de apagado, el control de brillo analógico y digital y el modo de prueba que obliga a que todos los LED se enciendan. Este controlador también puede controlar individualmente cada segmento de LED.

El MAX7219 viene en paquetes DIP y OS de 24 pines, con el siguiente diagrama de pines:

El MAX7219 tiene este diagrama funcional:

El IC MAX7219 tiene la siguiente configuración de pines:

Multiplexación con Arduino usando MAX7219
Es bastante sencillo multiplexar las unidades de visualización de ocho y siete segmentos con un controlador/computadora a través del MAX7219/MAX7221.

  • Los pines de datos de los siete segmentos primero deben conectarse al SEG A a los pines SEG G y DP del MAX7219.
  • Los terminales de cátodo común de los segmentos deben conectarse a los pines DIG0 a DIG7 del MAX7219.
  • Los pines 4 y 9 del IC deben estar conectados a tierra.
  • El pin 19 del IC debe estar conectado a 5 V CC.
  • El pin 18 del MAX7219 también debe conectarse a 5V DC a través de una resistencia adecuada.
  • Los pines DIN, LOAD y CLK del IC deben conectarse a los pines de E/S digitales de un controlador/computadora.

Una interfaz SPI con Arduino
El bus SPI es un bus de datos serie síncrono maestro-esclavo. Solo puede haber un maestro en un bus SPI y varios dispositivos esclavos pueden compartirlo.

Un bus SPI tiene cuatro cables:

1. Master Out Slave In (MOSI): para transferir datos del maestro al esclavo
2. Master In Slave Out (MISO): para transferencia de datos de esclavo a maestro
3. Reloj serie (SCK/SCLK): para señal de reloj del maestro al esclavo
4. Selección de esclavo (SS en maestro)/Selección de chip (CS en esclavo): para selección de esclavo por parte del maestro

Algunos componentes electrónicos sólo requieren la transmisión o recepción de datos. Estas piezas sólo pueden tener un canal MISO o MOSI. Algunos dispositivos utilizan un SPI de tres cables, en el que MISO y MOSI se combinan en un cable y se denominan MIMO.

Un bus SPI puede comunicar datos al hardware a través de un registro de desplazamiento simple. Los bits de datos se comunican de forma ininterrumpida y continua con cada bit transferido en cada pulso de reloj.

La mayoría de las placas Arduino tienen al menos una interfaz SPI. La interfaz SPI en Arduino UNO se muestra aquí:

Cómo funciona el MAX7219 en el bus SPI
El IC MAX7219 requiere un bus SPI de tres cables para la comunicación de datos con un controlador/computadora, donde el bus solo tiene pines MOMI, CLK y SS/CS.

El IC tiene un registro de desplazamiento interno de 16 bits donde los datos se transfieren desde un controlador/computadora cuando hay un flanco ascendente en el pin LOAD del IC. Los datos transferidos al IC a través de un SPI tienen una longitud de dos bytes.

  • El primer byte es la dirección de un registro interno, que selecciona uno de los registros internos.
  • El segundo byte escribe datos en el registro interno seleccionado.

Al pasar los datos de 16 bits al IC, se pueden controlar múltiples dígitos de siete segmentos y funciones como el control de brillo, el modo de prueba y el modo de apagado.

Los registros MAX7219
El MAX7219 tiene estos registros internos...

Registro autónomo: cuando se transfieren datos a este registro, no se realizan operaciones en las unidades de visualización de siete segmentos del IC MAX7219 suministrado. Este registro se utiliza cuando se conectan en serie varios circuitos integrados MAX7219.

Por ejemplo, si cuatro IC MAX7219 están conectados en serie, para transferir datos a un cuarto IC, los primeros tres IC MAX7219 deben tener datos escritos en sus registros no operativos. Este registro tiene una dirección bXXXX0000 (0xX0).

DigitRegisters: se utilizan para controlar los ocho dígitos que se muestran en las unidades de visualización de siete segmentos. Hay registros de ocho dígitos que tienen direcciones desde bXXXX0001 (0xX1) hasta bXXXX0111 (0xX7).

Registro de modo de decodificación : selecciona el código BCD B o ninguna operación de decodificación para cada dígito. Cada bit del registro corresponde a un dígito. Una lógica ALTA selecciona la decodificación del código B y una lógica BAJA ignora el decodificador. Este registro tiene una dirección bXXXX1001 (0xX9).

Si se selecciona el código BCD-B para un dígito, el decodificador solo mira el cuarteto inferior de los datos en los registros de dígitos (D3–D0), sin tener en cuenta los bits D4–D6.

El bit D7 de los registros de dígitos es independiente. Si se establece en ALTO, activa el punto decimal. De lo contrario, si se establece en BAJO, desactiva el punto decimal.

El código BCD-B controla los dígitos de siete segmentos según la siguiente tabla:

Si no se selecciona ninguna decodificación, los bits de datos D7–D0 de los registros de dígitos corresponden a las líneas de segmento MAX7219/MAX7221 como se muestra aquí:

Registro de intensidad : controla el brillo de los segmentos. Tiene una dirección bXXXX1010 (0xXA). Si se conecta una resistencia de valor mínimo (9,53 kΩ) entre los pines V+ e ISET, la corriente máxima suministrada a los segmentos será 100 veces la corriente que ingresa al pin ISET. Esta corriente se puede controlar digitalmente registrando datos en el registro de intensidad.

El brillo de la pantalla se controla digitalmente mediante un modulador de ancho de pulso interno, que escala la corriente del segmento en 16 pasos.

Este modulador de ancho de pulso está controlado por el mordisco inferior del registro de intensidad, como se muestra en la tabla:

Registro de límite de escaneo : controla el número de dígitos que muestra el MAX7219/MAX7221. Tiene una dirección bXXXX1011 (0xXB).

Los dígitos a visualizar se controlan según esta tabla:

Registro de apagado : si el LSB de este registro se establece en 0, el MAX7219/MAX7221 entra en modo de apagado y todos los dígitos se apagan. Este registro tiene una dirección bXXXX1100 (0xXC).

Registro de prueba de pantalla : si el LSB de este registro se establece en 1, el MAX7219/MAX7221 ingresa al modo de prueba de pantalla y se activan todos los segmentos de dígitos. Este registro tiene una dirección bXXXX1111 (0xXF).

Controlando los siete segmentos a través del MAX7219
Para controlar las unidades de visualización multiplexadas de siete segmentos a través del MAX7219/MAX7221, el controlador/computadora debe escribir datos en los registros internos del IC utilizando el bus SPI, QSPI o Microwire.

Los datos se pasan al registro de desplazamiento interno de 16 bits del IC, donde el primer byte selecciona un registro interno y el segundo byte escribe los datos en el registro seleccionado. Si es necesario probar las unidades de visualización de siete segmentos o el IC, se pueden escribir datos para mostrar el registro de prueba (byte de dirección 0x0F). Confirmará que los siete dígitos del segmento están operativos.

El brillo de la pantalla se puede controlar escribiendo datos en el registro de intensidad (byte de dirección 0x0A). El número de dígitos que se utilizarán se puede implementar escribiendo datos en el registro de límite de escaneo (byte de dirección 0x0B). Luego, se debe seleccionar el modo de decodificación escribiendo los datos en el registro del modo de decodificación (byte de dirección 0x09).

Luego, los dígitos individuales se pueden controlar escribiendo datos en los registros de dígitos (direcciones 0x01 a 0x08). Si es necesario apagar la pantalla, se puede forzar al MAX7219 a entrar en modo de apagado escribiendo datos en el registro de apagado (byte de dirección 0x0C).

Si se conecta en serie más de un IC MAX7219/MAX7221, el registro no operativo (byte de dirección 0x00) se puede utilizar durante la transferencia de datos entre los MAX7219s/MAX7221 conectados en serie.

Receta: contador con pantalla de siete segmentos usando Arduino y MAX7219

En esta receta, diseñaremos un contador numérico utilizando unidades de visualización de siete segmentos, un controlador IC de LED MAX7219 y Arduino UNO. El contador contará desde 0000 hasta 9999.

Componentes necesarios

1. Arduino UNO x1
2. SSD x4
3. MAX7219 x1
4. Puente o cables de conexión.

Conexiones de circuito
Se utiliza un módulo controlador de siete segmentos basado en IC MAX7219. Los pines DIN, CLK y LOAD del IC están conectados a los pines 12, 11 y 10 del Arduino UNO respectivamente. El IC MAX7219 viene con 5 V CC y tierra Arduino.

Bosquejo de Arduino

Cómo funciona el proyecto
Las unidades de visualización multiplexadas de siete segmentos interactúan con el IC MAX7219. El IC interactúa con Arduino UNO a través del bus SPI. Utilizando la interfaz SPI de Arduino, se transfieren 16 bits de datos al registro de desplazamiento del IC MAX7219.

Al escribir datos en los registros internos del IC MAX7219, se controlan dígitos de siete segmentos para mostrar un contador de números del 0000 al 9999.

guía de programación
El boceto de Arduino comienza importando la biblioteca SPI. Las variables globales se definen para asignar números de pin que están conectados a los pines DIN, CLK y LOAD de IC MAX7219. Se define una variable de tipo matriz para almacenar los comandos de 16 bits para el MAX7219.

Se almacena una tabla de caracteres en la memoria flash del Arduino UNO utilizando la construcción PROGMEM. Esta tabla contiene los bytes que se deben escribir en los segmentos de LED para mostrar los dígitos del 0 al 9 y las letras de la A a la F.

Se define una función spiTransfer para que la función shiftOut transfiera los datos de 16 bits al MAX7219 IC. Cada dato de 16 bits contiene dos bytes. El primer byte es la dirección del registro MAX7219 y el segundo byte son los datos que se escribirán en un registro seleccionado. Ambos bytes se pasan como argumentos a esta función definida por el usuario.

Se define una función clearDisplay, donde la función spiTransfer se usa para escribir 0x00 en todos los registros de dígitos para borrar todos los dígitos. Se define una función de apagado, que utiliza la función spiTransfer para escribir datos en el registro de modo de apagado MAX7219.

Se define una función init_7seg para inicializar la vista. En esta función, los pines MOSI, SCLK y CS están configurados para salida digital. El pin CS está configurado en ALTO para seleccionar el MAX7219 en el bus SPI.

Se transfiere un valor de 0x00 al registro de prueba de pantalla (dirección de registro 15 o 0x0F) usando la función spiTransfer para configurar el MAX7219 en modo normal. Se transfiere un valor 0x07 al escaneo del registro límite (dirección de registro 11 o 0x0B), lo que permite el uso de los ocho dígitos. Se transfiere un valor de 0x00 al registro del modo de decodificación (dirección de registro 9 o 0x09) para seleccionar "sin decodificar" para todos los dígitos.

Se define una función setChar que escribe un valor en el registro de dígitos del MAX7219. Tanto el valor como el dígito se definen como parámetros de la función. En esta función, se completa la validación del dígito pasado y los datos del valor. Luego, el valor verificado se pasa a un registro de dígitos determinado utilizando la función spiTransfer.

En la función de configuración, se llaman las funciones init_7seg y Shutdown(false). Se llama a la función spiTransfer(10, 8) para establecer la intensidad de la visualización. La pantalla se borra llamando a la función clearDisplay.

En la función de bucle, se realiza un "bucle for" para los valores del 0 al 9999. Para cada número, se derivan cuatro dígitos mediante operaciones aritméticas y los dígitos se muestran en los siete segmentos multiplexados mediante la función setChar. Cada número es incremental y se muestra en un intervalo de 250 milisegundos. El intervalo se proporciona mediante la función de retardo.

En el próximo tutorial cubriremos cómo conectar la pantalla LCD de caracteres con Arduino.

contenido relacionado

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.