MAX7219

Me decidi a dedicar toda esta hoja a este fabuloso multiplexor que te permite manejar hasta 8 display de 7 segmentos o una matriz de 8x8 enviando los datos en serie. Ni siquiera requieres resistencias imitadoras para cada segmento, basta una resistencia imitadora de seguridad y hasta puedes manejar el brillo digitalmente por software.

1. Descripción general

El MAX7219 es un controlador de display LED multiplexado de 8 dígitos y 7 segmentos o una matriz 8x8 de cátodo común (CC), con entrada y salida serie, que soporta una corriente de segmento de hasta 40 mA mientras opera desde un suministro de 5V (pin 19). Tiene 24 pines. Es fabricado por la china Maxim integrated

Incluye un decodificador BCD, multiplexos de máximo 10 MHz, controladores de corriente, y una RAM estática de 8x8. Es compatible con SPI, solo requiere de una resistencia externa (pin 18) para establecer corriente máxima de cada LED. Ademas incluye un modo de apagado de baja potencia (150 μA), control de brillo analógico y digital, un registro de límite de escaneo que permite al usuario visualizar de 1 a 8 dígitos y un modo de prueba que fuerza a todos los LED. Como si fuera poco se pueden poner en cascada hasta 8 MAX7219 gracias a la salida DOUT (pin 25)

MAX7219
Pines de MAX7219
FunciónPin MAXDescripciónPin Arduino
LOAD o CS12Selección de dígito10
CLK13Reloj11
DIN1Entrada de datos12
DOUT25Salida 

Evite usar los pines 0, 1 y 13 de Arduino.

Para poner en cascada hasta ocho (8) MAX7219 se hacen comunes CLK (13) y LOAD (12). La data para el primer MAX7219 se mete en DIN (1) y para el siguiente se extrae de DOUT (25).

Notese que al estar diseñado para cátodo común (CC) las salidas de cada dígito (que van al cátodo) son reformazadas (320 mA) mientras que los segmentos (que van al ánodo) son las imitadoras de corriente (max 40 mA) determinadas por Rset. Ademas gracias a la multiplexion solo un dígito esta prendido a la vez.

2. Métodos disponible en librería LedControl.h

Estas son las métodos disponibles en la librería LedControl.h

Métodos disponibles en LedControl.h
MétodoDescripciónEjemplo
lc.shutDown()TRUE apaga, FALSE para operación normal.lc.shutDown(0,false)
lc.setIntensity()Determina el brillo (0 a 15)lc.setIntensity(0,8)
lc.setScanLimit()Numero de dígitos a usar 0~7lc.setScanLimit(0,5)
lc.clearDisplay()lc.clearDisplay(0)
lc.setDigit()Muestra un dígito exadecimal. addr,digit,value,dplc.setDigit(0,0,num,false)
lc.setChar()'0','1','2','3','4','5','6','7','8','9','0','A','b','c','d','E','F','H','L','P','.','-','_',' ' lc.setChar(0,0,'A',false)
lc.setLed()addr,row,col,state (true=on)lc.setLed(0,0,0,true)
lc.setRow()Addr,row,valuelc.setRow(0,0,1)
lc.setColumn()Addr,col,valuelc.setColumn(0,0,1)
#include <LedControl.h>;
LedControl lc = LedControl(12,11,10,1); //El 1 al final indica cuantos MAX en cascada hay. Máximo 8.
void setup(){
	//Despierta display
	lc.shutdown(0,false);
    //Pone brillo en medio
    lc.setIntensity(0,8);
    //Limita a solo 4 digitos
    lc.setScanLimit(0,3);
    //Limpia display
    lc.clearDisplay(0);
}
void loop{
   //Cuenta regresiva
   for(byte n=9, n>0, n--) {
      //Muestra display
      lc.setDigit(0, n, false);
      delay(1000);
      i--;
   }
   lc.setChar(0,0,'H',false);
   lc.setChar(0,1,'E',false);
   lc.setChar(0,2,'L',false);
   lc.setChar(0,3,'P',false);
   delay(1000);
   //Apaga display
   lc.shutDown(0, true);
   lc.clearDisplay(0);
   delay(3000);
   //Prende display
   lc.shutDown(0, false);
}

3. Factores que determinan brillo

Hay tres factores que determinan el brillo del display.

  1. El valor de la resistencia RSet que limita la corriente máxima que pasa a través de los LED.
  2. El límite de escaneo de display. Siempre trabara con 8 dígitos y cada uno prenderá 125 ms. Si pones setScanLimit(0,3) solo activa 4 (0~3) y cada uno prenderá 250 ms. Si pones setScanLimit(0,5) cada dígito prende 167 ms.
  3. El métodos setIntensity(int addr, int intensity) que le permite controlar el brillo en 16 pasos discretos. 0=mínimo brillo, 15=máximo brillo, >15 ignorados. 0 no apaga, para eso se usa el método shutDown().

El control digital

Es importante entender que Rset es el control de brillo analógico y el método setIntensity() el el control de brillo digital, mediante modulación de ancho de pulso (Duty Cycle) entre 1/32 y 31/32. Para eso debemos ver en las especificaciones de nuestro LED la corriente máxima y la tensión directa. Por ejemplo si mi LED tiene una Imax de 25 mA y una tensión directa de trabajo de 2V elegiré Rset = 28kΩ, como no es comercial le pondré 33kΩ.

Resistencia imitadora Rset
Corriente1V52V2V53V3V5
40 mA12K211K811K10K69K69
30 mA17K817K115K815K14K
20 mA29K828K25K924K522K6
10 mA66K763K759K355K451K2

Rset puede ser variable (lo que permite un control de brillo analógico) pero su valor minimo absoluto es 9K53

MAX7219 con display grandes

Los display grandes usan tres o más LED en serie por segmento y no pueden ser impulsados directamente por el MAX7219 desde una fuente de 5V debido a las múltiples caídas de voltaje de los LED. Pero aun así se puede usar el MAX7219, basta usar unos transistores externos y usar un display de ánodo común (CA) para contrarrestar la inversión que introducen los transistores.

Existen dos situaciones en que se requiere estos transistores externos: para display que puedan ser alimentados con 5V pero que requieren corrientes de segmento de más de 40 mA y para display grandes que requieres tensiones de alimentación de 9V o mas.

Los controladores que se muestran en las Figuras 1 a 4 conectan un MAX7219 que funciona con 5V a pantallas de ánodo común (CA) que operan a una tensión mayor de corriente y/o de accionamiento que el MAX7219 puede entregar. Se requieren ocho instancias del controlador de segmento (conectado al cátodo) de baja corriente y ocho instancias del controlador de dígito (conectado al ánodo) de alta corriente.

El control de intensidad digital PWM del MAX7219 aun funciona. Sin embargo, la corriente de segmento máxima ahora está configurada por resistencias de limitación de corriente externas (R1) en serie con los cátodos de LED en lugar de mediante la resistencia Rset. Elija R1 (Figura 4) para configurar la corriente de de LED deseado actual Iseg de acuerdo con el controlador de tensión de alimentación V del controlador y LED LED de caída de tensión V_LED:

R1 = (Vcc - Vled - Vce_Q1 - Vsd_Q2)/Ipeak

Tenga en cuenta que los display debe ser del tipo de ánodo común (CA) para interconectar los controladores descritos aquí; el MAX7219 esta diseñado manejar directamente el cátodo común (CC), pero estos controladores externos invierten la polaridad del dígito y segmento.

Las salidas de dígitos del MAX7219 son interruptores de potencia que se activan de a uno a la vez para activar un dígito y alta impedancia cuando están apagados.

4.1 Controladores de dígitos

Aquí se sugieren tres circuitos de accionamiento de displays alternativos.

El circuito más simple (Figura 1) se adapta a una aplicación en la que se desea una corriente de segmento superior a 40 mA pero una tensión de alimentación de 5V. Las salidas de digito del MAX7219 activan directamente el nivel lógico FET Q2 cuando esta en LOW. La resistencia R3 (1K) apaga el Q2 cuando la salida del dígito esta en HIGH. La tension Vdriver es la misma que la de MAX7219, osea 5V.

Manejo de los dígitos con 5V con mas de 40 mA

El circuito de la Figura 2 incluye una transito de cambios de nivel para permitir que se use un voltaje en los LED (Vdriver) mayor que 5V. Q3 (NPN) funciona como un interruptor de corriente de base común, y suministra una corriente de colector establecida por la resistencia R2 (220Ω) (alrededor de 5 mA con Vcc = 5V) cuando la salida de dígitos es LOW. Esta corriente a su vez desarrolla alrededor de 5V a través de R3 (1kΩ) para proporcionar un control de compuerta consistente al nivel lógico FET (Q2), independientemente de las fluctuaciones en Vdrive. Tenga en cuenta, sin embargo, que el colector de Q3 no puede ser inferior a Vce (sat) Q3 por encima de su emisor, que está en Vbe por debajo de Vcascode.

Como en R3 (1K) está cayendo 5V, esto coloca el límite inferior para el Vdriver en alrededor de 10V si Vcascode es 5V.

5V con mas de 40 mA

El circuito de la Figura 3, permite poner por ejemplo Vcascode en 2V, simplemente limitando los 5V a través de un diodo Zener. Solo se necesita un diodo zener para servir a todos los controladores de dígitos. Tenga en cuanta que Vdriver debe ser al menos 7V.

5V con mas de 40 mA

4.2 Controlador de segmentos

Las salidas para segmentos del MAX7219 son fuentes de corriente, que controlan una corriente constante establecida por la resistencia Rset conectada al pin 18 del MAX7219. La corriente máxima por segmento es 40mA. Para impulsar una corriente de segmento más alta, se necesitan transistores (Q1) y resistencias (R1) limitadoras de corriente externas por cada segmento (Figura 4).

Al configurar la fuente de corriente del variador de segmentos de MAX7219 correctamente, no se requiere una resistencia de limitación de corriente de base para Q1. La corriente del variador de segmentos (Iset) se debe configurar como un valor apropiado usando Rset para encender el Q1. La resistencia R4 (1K5) es necesaria para garantizar que Q1 se apague de forma razonablemente rápida al final del ciclo múltiplexor de cada dígito. Para Rset un valor de alrededor de 150 kΩ (min 47 kΩ) es un buen punto de partida.

Manejo de los segmentos

Fuente: https://www.maximintegrated.com/en/app-notes/index.mvp/id/1196