Diferencia entre revisiones de «LedControl»

De ArduWiki
Saltar a: navegación, buscar
(Ejemplo 1)
(Ejemplo 1)
 
(No se muestran 10 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
 
== Descripción ==
 
== Descripción ==
La libreria [https://github.com/wayoda/LedControl LedControl.h] de Eberhard Fahle para trabajar con MAX7219 o MAX7221 que maneja display 7 segmentos de matriz de LED 8x8
+
La libreria [https://github.com/wayoda/LedControl 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 ==
 
== Sintaxis ==
  
== Parametros ==
+
<pre>
 +
#include <LedControl.h>
 +
LedControl lc = LedControl(DIN,CLK,CS,n);
 +
</pre>
 +
 
 +
== Parámetros ==
 +
;DIN:Entrada de datos (MOSI)
 +
;CLK:Reloj (CSK)
 +
;CS:Selector de chip (SS)
 +
;n:Numero del MAX (0~7)
  
 
== Métodos ==
 
== Métodos ==
Línea 32: Línea 41:
  
 
== Comentarios ==
 
== 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 ==
 
== 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 ==
 +
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.
 +
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
#include <LedControl.h>;
+
#include <LedControl.h>
 
LedControl lc = LedControl(12,11,10,1); //El 1 al final indica cuantos MAX en cascada hay. Máximo 8.
 
LedControl lc = LedControl(12,11,10,1); //El 1 al final indica cuantos MAX en cascada hay. Máximo 8.
  
Línea 52: Línea 68:
  
 
void loop{
 
void loop{
   //Cuenta regresiva
+
   //Cuenta
   for(byte n=9, n>0, n--) {
+
   for (byte n=0, n<10, n++) {
      //Muestra display
+
      for (byte dig=0, dig<4; n++) {
      lc.setDigit(0, n, false);
+
        //Muestra display
      delay(1000);
+
        lc.setDigit(0, dig, n, false);
       i--;
+
        delay(1000);
 +
       }
 
   }
 
   }
 
   lc.setChar(0,0,'H',false);
 
   lc.setChar(0,0,'H',false);
Línea 65: Línea 82:
 
   delay(1000);
 
   delay(1000);
 
   //Apaga display
 
   //Apaga display
   lc.shutDown(0, true);
+
   lc.shutdown(0, true);
 
   lc.clearDisplay(0);
 
   lc.clearDisplay(0);
 
   delay(3000);
 
   delay(3000);
 
   //Prende display
 
   //Prende display
   lc.shutDown(0, false);
+
   lc.shutdown(0, false);
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
Línea 78: Línea 95:
 
== Referencias ==
 
== Referencias ==
 
* [https://www.arduinolibraries.info/libraries All Libraries]
 
* [https://www.arduinolibraries.info/libraries All Libraries]
 +
* [https://www.maximintegrated.com/en/app-notes/index.mvp/id/1196 Using the MAX7219/7221 to drive higher voltage or current] - Maxim
 +
* [https://www.prometec.net/8x8-max7219/ Matriz LED 8x8 con MAX7219 y SPI] - Prometec
 +
* [https://naylampmechatronics.com/luces-iluminacion/265-kit-matriz-led-max7219.html Kit matriz LED MAX7219] - Naylamp Mechatronics
 +
* [https://www.luisllamas.es/matriz-led-arduino-max7219/ Encender una matriz LED con MAX7219] - Luis Llamas
 +
* [https://www.youtube.com/watch?v=Gc77CG5-TWo Capitulo 49 - Display 7 segmentos con MAX7219 y multiplexacion] - Bitwise Ar
  
 
[[Category:Librerias]]
 
[[Category:Librerias]]
 
[[Category:Libreria LedControl]]
 
[[Category:Libreria LedControl]]

Revisión actual del 01:14 12 dic 2019

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