Matriz De Leds 8×8 Max7219 Arduino

DESCRIPCIÓN:

Una matriz LED es un tipo de display, formado por más de un LED en distribución normalmente rectangular y están conectados eléctricamente de una manera particular. Para que un LED encienda se deberá recibir un «0» en la fila y un «1» en la columna simultáneamente.

Ánodo

Cada fila de leds tiene unidos entre una de sus dos patas según sea Ánodo o Cátodo común, una u otra pata estarán unidas entre sí.

NOTA: Todas las dimensiones están en milímetros aproximadamente de 0.25mm 
Cátodo

Módulo de Matriz de Led 8×8 operado con un MAX7219 que permite controlar el módulo usando solamente 3 pines del microcontrolador. El modulo dispone de una interfaz serial similar a SPI, por lo que es compatible con una gran cantidad de microcontroladores.

El MAX7219 es un controlador de displays que puede manejar 8 segmentos en hasta 8 dígitos o bien 64 leds individuales, esto lo hace ideal para manejar una matriz de led de 8 x 8, se encarga del multiplexado de los caracteres y dígitos y para los caracteres tiene una memoria, dado que también incluye un decodificador BCD.

En este módulo el MAX7219 viene conectado a una matriz de cátodo común, por lo que  podemos controlar los 64 leds con solamente 3 líneas de un microcontrolador. Este tipo de módulos son de gran utilidad para experimentar con matrices de led, pues simplifican en gran medida las conexiones que hay que realizar para poder controlar el arreglo de leds.

El módulo MAX7219 con matriz de led se entrega listo para funcionar, puede usarse simplemente conectándolo a un Arduino, Raspberry pi o cualquier otro dispositivo que pueda comunicarse a través de una interfaz SPI o pueda simular su funcionamiento. En la plataforma Arduino ya existen librerías para realizar la interfaz con el MAX7219 de forma muy sencilla y mostrar cualquier patrón en la matriz de leds. Incluso pueden conectarse varios módulos para formar un anuncio de leds.

Características:

  • Controlador / Chip: MAX7219
  • Voltaje de operación: 4.7V~5.3V
  • Velocidad de comandos: < 10MHz
  • Controlan hasta 64 leds individuales
  • Corriente de operación: 320mA (2A máximo)
  • Se controla solamente con 3 señales: DIN, CS, SCK
  • MAX7219 controlador de displays con 8 segmentos y 8 dígitos
  • Intensidad de iluminación de leds se puede controlar mediante software a través de la interfaz serial

MULTIPLEXADO

Técnica que permite usar pocos pines de entrada y salida del microcontrolador. Esto para controlar los circuitos integrados que encenderán los LED’s. Existen diversos tipos para hacerlo.

LATCH

  • Es una memoria que mantiene un valor es sus salidas hasta que se le indique. De esta forma se encienden los LED’s rápidamente y por turnos para formar una palabra.

REGISTRO DE DESPLAZAMIENTO

  • Funciona de la misma manera que una fila. Por un extremo ingresan los datos (0,1) y del otro extremo van saliendo. Se necesitan solamente 3 pines;
    • DATA: Envía los datos al registro ya sea un «0» o un «1».
      • CLOCK: Avisa al registro que el dato ya está listo para ingresarse.
        • RESET: Es el que vacía la fila al escribir un «0» en todas las salidas.

DIAGRAMA DE CONEXIÓN PARA UNA MATRIZ.

Como se puede ver, la conexión es muy sencilla debido al MAX7219. Como ya mencionamos esta matriz cuenta con un decodificador BCD Code-B que tiene una memoria interna de 8×8 para almacenar el valor de cada dígito y hacer el multiplexado. Se maneja solo con 3 pines, DIN, CS y CLK.

DIAGRAMA DE CONEXIÓN PARA DOS O MÁS  MATRICES.

Código

En este tutorial mostraremos todo el texto en scroll (recorriéndose por el display) de una matriz. El procedimiento consiste en hacer un barrido por filas (o columnas). Encendemos todos los LED de una única fila (o columna), y a continuación cambiamos a la siguiente. Sólo una fila (o columna) está encendida cada instante pero, al hacerlo rápidamente, el efecto en nuestra visión es ver toda la imagen formada de forma simultánea.

La comunicación con el MAX7219 se realiza a través de SPI por lo que sólo se requieren 3 pines de Arduino (SS, MOSI y SCK). Para que nuestro código funcione correctamente y haya una buena comunicación entre nuestra matriz y Arduino debemos de considerar tener o instalar las librerías Max72xxPanel y la librería Adafruit-GFX.

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
 
//Vcc - Vcc
//Gnd - Gnd
//Din - Mosi (Pin 11)
//Cs  - SS (Pin 10)
//Clk - Sck (Pin 13)
 
const int pinCS = 10;
const int numberOfHorizontalDisplays = 8;
const int numberOfVerticalDisplays = 1;
 
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
 
String tape = "Rantec Electronics";  //text
 
const int wait = 100; // In milliseconds
 
const int spacer = 1;
const int width = 5 + spacer; // The font width is 5 pixels
 
void setup() {
   matrix.setIntensity(7); // Use a value between 0 and 15 for brightness
 
   // Adjust to your own needs
   matrix.setPosition(0, 0, 0); // The first display is at <0, 0>
   matrix.setPosition(1, 1, 0); // The second display is at <1, 0>
   matrix.setPosition(2, 2, 0); // The third display is at <2, 0>
   matrix.setPosition(3, 3, 0); // And the last display is at <3, 0>
   matrix.setPosition(4, 4, 0); // And the last display is at <3, 0>
   matrix.setPosition(5, 5, 0); // And the last display is at <3, 0>
   matrix.setPosition(6, 6, 0); // And the last display is at <3, 0>
   matrix.setPosition(7, 7, 0); // And the last display is at <3, 0>
   matrix.setPosition(8, 8, 0); // And the last display is at <3, 0>
   //matrix.setPosition(9, 9, 0); // And the last display is at <3, 0>
 
   matrix.setRotation(0, 1);    // Display is position upside down
   matrix.setRotation(1, 1);    // Display is position upside down
   matrix.setRotation(2, 1);    // Display is position upside down
   matrix.setRotation(3, 1);    // Display is position upside down
   matrix.setRotation(4, 1);    // Display is position upside down
   matrix.setRotation(5, 1);    // Display is position upside down
   matrix.setRotation(6, 1);    // Display is position upside down
   matrix.setRotation(7, 1);    // Display is position upside down
   matrix.setRotation(8, 1);    // Display is position upside down
   //matrix.setRotation(9, 1);    // Display is position upside down
}
 
void loop() {
   for (int i = 0; i < width * tape.length() + matrix.width() - 1 - spacer; i++) {
 
      matrix.fillScreen(LOW);
 
      int letter = i / width;
      int x = (matrix.width() - 1) - i % width;
      int y = (matrix.height() - 8) / 2; // center the text vertically
 
      while (x + width - spacer >= 0 && letter >= 0) {
         if (letter < tape.length()) {
            matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1);
         }
 
         letter--;
         x -= width;
      }
      matrix.write(); // Send bitmap to display
 
      delay(wait);
   }
}

Librerías

Dejar un comentario

Close Bitnami banner
Bitnami