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:
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:
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:
Aquí tenemos otro ejemplo: