Diferencia entre revisiones de «LedControl»
De ArduWiki
(→Comentarios) |
(→Advertencias) |
||
Línea 47: | Línea 47: | ||
== Advertencias == | == Advertencias == | ||
+ | * Rset puede ser variable (lo que permite un control de brillo analógico) pero su valor minimo absoluto es 9K53. | ||
== Ejemplo 1 == | == Ejemplo 1 == |
Revisión del 00:55 12 dic 2019
Contenido
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
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
#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);
}
Vea también