LedControl

De ArduWiki
Revisión del 20:14 11 dic 2019 de Kike GL (Discusión | contribuciones) (Ejemplo 1)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Descripción

La libreria LedControl.h de Eberhard Fahle para trabajar con MAX7219 o MAX7221 que maneja display 7 segmentos de catodo comun o matriz de LED 8x8.

Sintaxis

#include <LedControl.h>
LedControl lc = LedControl(DIN,CLK,CS,n);

Parámetros

DIN
Entrada de datos (MOSI)
CLK
Reloj (CSK)
CS
Selector de chip (SS)
n
Numero del MAX (0~7)

Métodos

Metodos disponibles libreria LedControl.h
Método Descripción Ejemplo
lc.shutdown() TRUE apaga, FALSE para operación normal. lc.shutdown(0,false)
lc.setIntensity() Determina el brillo (0 a 15) lc.setIntensity(0,4)
lc.setScanLimit() Numero de dígitos a usar 0~7 lc.setScanLimit(0,3)
lc.clearDisplay() lc.clearDisplay(0)
lc.setDigit() Muestra un digito decimal. addr,digit,valor,dp lc.setDigit(0,dig,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,value lc.setRow(0,0,1)
lc.setColumn() addr,col,value lc.setColumn(0,0,1)

Comentarios

  • Notese que al estar diseñado para cátodo común (CC) las salidas de cada dígito (que van al cátodo) son reforzadas (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.
  • 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).
  • Cada CHIP puede manejar hasta 8 digitos en cuyo caso cada uno prendera 125 ms. Si usas menos digitos en un MAX sebe usar setScanLimit(0,n), si n=3 solo se activan 4 digitos y cada uno prenderia 167 ms.
  • Es importante entender que Rset es el control de brillo analógico y el método setIntensity() es el control de brillo digital, mediante modulación de PWM o 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Ω.

Advertencias

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

Ejemplo 1

Conectamos un MAX7219 con un display de 4 digitos y 7 segmentos y mostramos un contador ascendente en cada digito por un segundo y luego la palabra HELP durante 3 segundos.

#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
   for (byte n=0, n<10, n++) {
      for (byte dig=0, dig<4; n++) {
         //Muestra display
         lc.setDigit(0, dig, n, false);
         delay(1000);
      }
   }
   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);
}

Vea también


Referencias