miércoles, 28 de marzo de 2018

Display matricial 8x8 con Arduino SPI y MAX7219



La matrices led de 8x8 son elementos extremadamente útiles para desplegar mensajes que puedan ser visibles desde la distancia. Estos elementos funcionan activando cada led en la matriz de forma secuencial, lo cual se logra multiplexando en tiempo las entradas. Esta multiplexación podemos lograrla "manualmente"  por medio de un microcontrolador o circuito de lógica secuencial para controlar  el display, pero sería un verdadero desperdicio de recursos ya que existen circuitos integrados como el Max7219 que son capaces de llevar a cabo esta tarea y tiene un muy bajo costo.

Las matrices de leds disponibles en nuestra tienda vienen montadas sobre una placa de  circuito que incluye el circuito integrado Max7219, a la vez que nos permiten comunicarnos por medio de protocolos SPI, facilitándonos así la conexión de varios displays a vez con sólo 5 cables. El control de estos módulos podemos lograrlo por  medio de la librería Max72xxPanel que puedes descargar aquí. 

De esta forma podemos ver la presentación de 4 displays juntos que se puede controlar con la misma librería y con la misma facilidad de un sólo display y así mismo podemos juntar tantos displays consecutivos como se quiera para agrandar nuestra pantalla sólo conectando la salida de uno a la entrada del siguiente e incluso podemos colocar varios paneles de displays uno encima del otro y sólo modificando una par de líneas de código en nuestra librería podemos hacer que las letras sean tan grandes como lo las dos  líneas de matrices, la versatilidad entonces es total. Cabe mencionar que la librería también nos permite regular el brillo de los displays, cambiar el tamaño de las letras y representar caracteres especiales del alfabeto inglés.

A continuación te mostramos un mini proyecto basado en ejemplo de la librería, con el cual podrás implementar cualquier arreglo de estos displays y desplegar texto en ellos, el código está modificado para la presentación de los 4 displays consecutivos, sin embargo, puede ser utilizado para la presentación de un solo display sólo poniendo y quitando algunos comentarios marcados.

Esquema de  conexión Arduino UNO





Las conexiones también se encuentran señaladas en el código.

Código Arduino

#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 = 4;
//const int numberOfHorizontalDisplays = 1; // retirar comentario para una sola matriz 
const int numberOfVerticalDisplays = 1;

Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

String tape = "Arca Electronica";  //tu mensaje

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

   //
   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.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

/* // retirar comentario a esto y comentar lo de arriba para una sola matriz
   matrix.setPosition(0, 0, 0); // The first display is at <0, 0>
   matrix.setRotation(0, 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);
   }
}

Una ves subido el código y realizadas las conexiones, verás el mensaje desplazarse de derecha a izquierda en la pantalla.


FIN DEL POST

0 comentarios:

Publicar un comentario

Display matricial 8x8 con Arduino SPI y MAX7219

La matrices led de 8x8 son elementos extremadamente útiles para desplegar mensajes que puedan ser visibles desde la distancia. ...