Multiplexación



En esta ocasión conectaremos a nuestro Arduino una Matriz de leds



Explicación paso a paso:

BITBLOQ 301 MULTIPLEXACION

 

 

CONECTAR UNA MATRIZ DE LEDS A UN ARDUINO MEDIANTE UN CHIP Max7219:

Hoy vamos a hacer que nuestro Arduino escriba signos, (una letra A) en una matriz de 8x8 leds a través de un chip driver Max7219:

Material:

1 Arduino, 1 Led Rojo, 1 Protoboard, Numerosos Cables de Colores con conectores para protoboard, 1 Bluetooth ROHS PARA ARDUINO, 1 Portabaterías con 4 Pilas, 1 Conector de Portabaterías, 1 Módulo con MATRIZ 8x8 leds y chip driver Max7219:

Arduino UNO Original con ATMega328

Donde encontrarlo

Diffused LED - Red 10mm

Donde encontrarlo

Cable USB 2.0 terminales A y B 1.8m

Donde encontrarlo

Small Breadboard

Donde encontrarlo

http://www.electan.com/images/Seeedstudio/234.jpg

Donde encontrarlo

Portapilas 4 pilas tipo AA

Donde encontrarlo

http://www.electan.com/images/PRT-08084-01.jpg

Donde encontrarlo

Módulo Bluetooth HC-06

Donde encontrarlo

Donde encontrarlo

Para ello se conecta todo el módulo a tres puertos de salida digital y a los dos puntos de corriente (+) y (-)

 

Así es como lo haremos nosotros:

 

Como podéis observar hemos añadido:

Un led amarillo que nos indicará cuando pasa corriente por el cable amarillo, conectado al puerto 10 al que llamaremos "10 load"

Un led verde que nos indicará cuando pasa corriente por el cable verde, conectado al puerto 13 al que llamaremos "13 clck"

Un led rojo, (no encontré azul) que nos indicará cuando pasa corriente por el cable azul, conectado al puerto 11 al que llamaremos "11 din"

Aquí tenemos un esquema de cómo se conecta el Chip a la matriz de 8x8 leds:

MAX7219 example LED matrix circuit

 

Descripción de los pines del Chip:

 

Aquí tenemos las diferentes direcciones de memoria que tiene el Chip y que función tiene cada una:

 

La primera dirección 00000000 la utilizaremos cuando conectemos varias matrices de led, (con su chip correspondiente en cada una) en serie.

Será donde se indique si a ese chip se le va a pasar información o a otro de los que estén en esta serie.

Las últimas direcciones 00001001 a 00001111 sirven para indicar valores de configuración, (intensidad de los led y otras)

Y estas ocho direcciones 00000001 a 00001000 corresponden a cada una de las columnas de leds. Aquí indicaremos si se enciende o se apaga ese led. Como podemos ver en el siguiente ejemplo:

 

 

         DIRECCIÓN EN 8 BITS VALOR QUE DAREMOS        RESULTADO ENVIADO

0000          0001          11111000 = 0000000111111000

0000          0010          00100100 = 0000001000100100

0000          0011          00100010 = 0000001100100010

0000          0100          00100001 = 0000010000100001

0000          0101          00100001 = 0000010100100001

0000          0110          00100010 = 0000011000100010

0000          0111          00100100 = 0000011100100100

0000          1000          11111000 = 0000100011111000

Así pues, si queremos escribir una letra "A" en la matriz de leds, le debemos introducir los siguientes valores en cada una de sus direcciones de memoria:

 

 

PASOS:

A, le indicamos a nuestro Chip que le vamos a pasar el valor de una dirección de memória.

B, Después le pasaremos la dirección en binario de esta posición de memoria, por ejemplo: 00000001

C, A continuación le pasaremos el valor que queremos que tenga esa posición de memoria en nuestro caso: 11111000

D, Por último, le indicaremos a nuestro Chip que ya hemos acabado con esa posición.

Si queremos enviar otra posición repetiremos el porceso entero

MULTIPLEXIÓN:

Cómo podemos transmitir toda esta información solamente con "tres puertos"?

A este proceso se le llama multiplexión y se realiza de la siguiente manera:

Imaginemos que queremos pasar la dirección: 01010101 y el valor: 11110000

Para indicar el primer paso, "A" Ponemos el puerto Load a "0" y así se quedará hasta que acabe de pasar la dirección y el valor.

En el siguiente paso "B" pasamos cada uno de los dígitos de la dirección.

Primer dígito:

Para pasar el primero de los dígitos, (0) le indicaremos poniendo el puerto Dim con el valor que queremos pasar, "0"

A continuación, ponemos el puerto Clock a 1 para indicarle al Chip que le estamos pasando el primer dígito.

El Chip leerá el valor que hay en el puerto Dim, (0) y entenderá que este es el valor del dígito.

En cuanto ponemos el Clock a 0, el Chip entenderá que el primer dígito ha pasado ya.

Segundo Dígito:

En este caso el dígito es un 1, así que pondremos a 1 el puerto Dim.

A continuación, ponemos el puerto Clock a 1 para indicarle al Chip que le estamos pasando otro dígito.

El Chip leerá el valor que hay en el puerto Dim, (1) y entenderá que este es el valor del dígito.

En cuanto ponemos el Clock a 0, el Chip entenderá que otro dígito ha pasado ya.

...Continuamos con el resto de dígitos del primer octeto, (que codifica la dirección)

Paso "C": Sin hacer nada nuevo, continuamos con el segundo octeto, (que codifica el valor).

En el paso final, "D" Ponemos de nuevo el puerto Load a "1" Eso indicará al Chip que ha pasado toda la información de los dos octetos: la dirección y el valor.

Este es un dibujo que hemos encontrado en Internet en la página del Chip:

 

Este es el gráfico dibujado por nosotros en el que hemos diferenciado todas las fases por las que pasaremos al diseñar nuestro software:

 

Imaginemos que queremos representar el paso de los dos primeros dígitos que hemos explicado antes:

Programación del Firmware del Arduino mediante la plataforma Online BitBloq:

Para todo ello, entramos en el Bitbloq y creamos un nuevo proyecto, con una placa con tres leds:

 

Para entenderlo correctamente he preparado varios ejercicios:

Primer ejercicio: Max29_Multiplexion_7219_8x8_OndasCuadradas

Diseña un software que haga esto:

 



 



 



 

Segundo ejercicio: Max30_Multiplexion_7219_8x8_OndasCuadradasEnFuncion

Hacer lo mismo utilizando funciones:

 



 



 



 

Tercer ejercicio:

 

Enviar los primeros 16 valores: 00001001 00000000

De manera cutre: Max31_Multiplexion_7219_8x8_Primeros16Cutre:

Hemos de añadir esto al código ya insertado:

 

Mediante función de recortar texto: Max32_Multiplexion_7219_8x8_Primeros16Funcion

Hemos de añadir esto al código ya insertado:

 



 

Cuarto ejercicio: Max33_Multiplexion_7219_8x8_ConfiguracionYLetra

Hemos de añadir esto al código ya insertado:

 



 

Aquí vemos cómo podemos poner las matrices con los chips en serie:

http://hobbycomponents.com/images/forum/HCOPTO0014_Arduino_Diagram.png

 

Aquí tenemos otro ejemplo:

http://3.bp.blogspot.com/-aMCHOvC0VMs/U36S3vgmQoI/AAAAAAAACO0/fF6hpBH1RK4/s1600/Circuito_2x_Matriz_8x8_Max7219.png

 

 

Ver todos los demás