Inicio » Electronica » Arduino » [:es]Matriz de LEDs 8×8 Max7219[:en]8×8 LEDs Matrix (Max7219)[:]

[:es]Matriz de LEDs 8×8 Max7219[:en]8×8 LEDs Matrix (Max7219)[:]

[:es]Aprende a utilizar la matriz de LEDs 8×8 Max7219. El robot DYOR utiliza la matriz de LEDs para generar expresiones a través de la boca. Incluimos la descripción de funcionamiento y ejemplos de uso con Facilino y Arduino.

¿Cómo funciona la matriz de LEDs?

Al igual que la pantalla de un ordenador o móvil, que están compuestas por píxeles, la matriz de LEDs 8×8 dispone de hasta 64 LEDs rojos con los que podemos dibujar casi cualquier cosa, de hecho tenemos un total de 18446744073709551616 combinaciones!

El módulo de matriz LEDs se comunica a través del bus SPI (Serial Programming Interface) con Arduino, se trata de un protocolo de comunicación serie muy común entre dispositivo y controlador bidireccional que requiere de 4 líneas (una de habilitación o carga de datos, otra de reloj, una para los datos de entrada y otra para los datos de salida). No obstante, dado que la comunicación entre el Arduino y el módulo de matriz LEDs es unidireccional, sólo necesitaremos 3 líneas: la señal CS (Chip Select), a veces conocida por LOAD, permite habilitar el dispositivo para recibir información, la señal DIN es la entrada de datos (del módulo) y la señal CLK es la señal de reloj.

Arduino dispone de un bus SPI, pero su interfaz de programación todavía no dispone de instrucciones sencillas de acceso al mismo, con lo que se suelen generar con instrucciones de escritura directamente en los pines de entrada o salida de Arduino, siendo el usuario el que debe generar la secuencia correspondiente para enviar el dato al dispositivo.

En el robot DYOR la matriz está normalmente colocada como se muestra en la siguiente figura:

Para ello, debemos enviar, por cada fila (F1 a F8, que en realidad son columnas en la imagen) el número correspondiente binario. Así pues, para generar la figura anterior debemos enviar los siguientes números:

F1=0

F2=2^2=4

F3=2^1+2^2+2^7=134

F4=2^0+2^1+2^2+2^3+2^4+2^5+2^6+2^7=255

F5=2^0+2^1+2^2+2^3+2^4+2^5+2^6+2^7=255

F6=2^7=128

F7=0

F8=0

¿Cómo se conecta?

Tal y como se ha comentado, la conexión del módulo de matriz de LEDs require de tres señales además de la alimentación y la masa. Las señales podemos conectarlas a cualquiera de las señales de Arduino:

  • VCC: Alimentación. Conectar a los pines de +5V.
  • GND: Masa. Conectar a los pines 0V (GND).
  • CS: Salida digital. Conectar a los pines digitales de Arduino.
  • DIN: Entrada digital. Conectar a los pines digitales de Arduino.
  • CLK: Salida digital. Conectar a los pines digitales de Arduino.

A continuación se muestra un ejemplo de conexión a Arduino Nano v3.0 con placa de expansión. Las señales CS, DIN y CLK se han conectado a los pines 10, 12 y 11, respectivamente. Los pines VCC y GND se pueden conectar a cualquiera de las filas de alimentación y masa del módulo de expansión de entradas de Arduino Nano v3.0.

 

Aquí podéis descargar el fichero Fritzing:

¿Cómo utilizarlo?

La programación de la matriz de LEDs es sencilla. Por un lado se dispone de una instrucción específica para la boca del robot DYOR con la que se puede generar un conjunto de expresiones ya predefinidas para expresar emociones. Además, se puede generar nuestro propio abanico de expresiones o dibujos de forma muy intuitiva.

Por ejemplo, para expresar un cabreo utilizaremos una de las expresiones predefinidas tal y como se muestra a continuación (en este primer ejemplo se utilizan en la secuencia de inicio de Arduino):

Aquí podéis descargar el fichero Facilino:

En un segundo ejemplo, ahora pretendemos que el robot alterne de una expresión a otra, repitiéndose dentro del bucle principal:

Aquí podéis descargar el fichero Facilino:

Por otro lado, si queremos hacer una expresión diferente a las predefinidas, entonces debemos indicar fila a fila cuales son los valores que queremos enviar. El programa ya tiene en consideración el hecho de que la matriz de LEDs está girada y por tanto debemos literalmente dibujar la expresión que queremos que aparezca (esto es bastante intuitivo y los alumnos no tienen porqué dominar los conceptos de generación de números binarios):

Aquí podéis descargar el fichero Facilino:

A continuación os incluimos un ejemplo de cuenta atrás del 10 al 0:

[:en]Learn how to use a 8×8 LEDs matrix (max7219). DYOR robot has a LEDs matrix to generate expressions (as a mouth). We describe it’s working principle and examples of use with de uso con Facilino and Arduino.

How does a LEDs matrix work?

As in a mobile phone or computer screen composed by pixels, the 8×8 LEDs Matrix has upto 64 red LEDs which we can use to draw almost anything, actually, we have 18446744073709551616 combinations!

The LEDs module communicates through SPI (Serial Programming Interface) with Arduino. It’s a communicaton protocol very common between microcontrolers and devices, with bidirectional communication which requires upto 4 lines (one for loading data, another one for the clock, one for data input and one for data output). However, given that the communication between Arduino and the LEDs module it’s unidirectional, we only require 3 lines: signals CS (Chip select), also known as LOAD, allows us to enable the device to receive information; signal DIN es the data input signal (to the module) and signal CLK is the clock signal.

Arduino Nano  has SPI signals that can be used for this purpose:

  • MISO (Master In Slave Out) – The Slave line for sending data to the master, assigned to pin 12
  • MOSI (Master Out Slave In) – The Master line for sending data to the peripherals assigned to pin 11
  • SCK (Serial Clock) – The clock pulses which synchronize data transmission generated by the master, assigned to pin 13
  • SS (Slave Select) – Assigned to pin 10

The matrix orientation of DYOR’s robot LED matrix (standard robot) is shown in next figure:

In order to activate pins, we must think of sending a value to the hole row, actually a column in previous figure due to it’s orientation. Therefore, in order to generate the previous drawing, we must send the following numbers for each row starting with it’s binary combination with the LSB (Least Significant Bit) the ones on the top:

F1=0

F2=2^2=4

F3=2^1+2^2+2^7=134

F4=2^0+2^1+2^2+2^3+2^4+2^5+2^6+2^7=255

F5=2^0+2^1+2^2+2^3+2^4+2^5+2^6+2^7=255

F6=2^7=128

F7=0

F8=0

How is it connected?

For this particular module, we need three signals to communicate with the device, in addition to the power and ground signals. We can connect them to any digital pin of Arduino, but it’s better if we connect them to SPI signals:

  • VCC: Power. Connect to any +5V pin.
  • GND: Ground. Connect to any 0V pin.
  • CS: Digital output. Connect to any digital pin of Arduino.
  • DIN: Digital intput. Connect to any digital pin of Arduino.
  • CLK: Digital output. Connect to any digital pin of Arduino.

Here we show the connection to Arduino Nano v3.0 with the expansion board, where signals CS, DIN and CLK have been connected to pins with dedicated hardware with SPI protocol.

 

Here you can download the Fritzing diagram:

How to use it?

Programming the LEDs matrix it’s easy. In Facilino, we have one specific instruction for generating predefined expressions for DYOR robot. In addition to this, we can also generate our own instructions in a very intuitive way.

This is an example of Facilino for generating an ‘angry’ expression:

Here you can download the Facilino code:

In this another example, the LEDs matrix is repeatedly generating ‘happy’ and ‘angry expressions:

Here you can download Facilino code:

On the other hand, if you are interested in generating different patterns than the predefined expressions, then, we must indicate for each row the LEDs we would like to activate. Internally, the instruction it does take into account the fact that the LEDs matrix can be oriented vertically or horizontally, so we must draw as we would like to appear and select the appropriate module orientation.

Here you can download Facilino code:

Here we include another example with a countdown from 10 to 0:

[:]