Tabla de contenido:

Cómo conectar una matriz LED 8x8 impulsada por MAX7219 con el microcontrolador ATtiny85: 7 pasos
Cómo conectar una matriz LED 8x8 impulsada por MAX7219 con el microcontrolador ATtiny85: 7 pasos

Video: Cómo conectar una matriz LED 8x8 impulsada por MAX7219 con el microcontrolador ATtiny85: 7 pasos

Video: Cómo conectar una matriz LED 8x8 impulsada por MAX7219 con el microcontrolador ATtiny85: 7 pasos
Video: ✅ Control de Matriz de LEDs 8x8 - Curso Básico de Arduino UNO 2024, Mes de julio
Anonim
Cómo conectar una matriz LED 8x8 impulsada por MAX7219 con el microcontrolador ATtiny85
Cómo conectar una matriz LED 8x8 impulsada por MAX7219 con el microcontrolador ATtiny85

El controlador MAX7219 fabricado por Maxim Integrated es un controlador de pantalla de cátodo común de entrada / salida en serie compacto que podría conectar microcontroladores a 64 LED individuales, pantallas LED numéricas de 7 segmentos de hasta 8 dígitos, pantallas de gráficos de barras, etc. -chip son un decodificador BCD de código B, circuitos de escaneo multiplex, controladores de segmentos y dígitos y una RAM estática de 8 × 8 que almacena cada dígito.

Los módulos MAX7219 son muy convenientes de usar con microcontroladores como ATtiny85 o, en nuestro caso, la placa Tinusaur.

Paso 1: el hardware

El hardware
El hardware
El hardware
El hardware

Los módulos MAX7219 suelen tener este aspecto. Tienen un bus de entrada en un lado y un bus de salida en el otro. Esto le permite conectar en cadena 2 o más módulos, es decir, uno tras otro, para crear configuraciones más complicadas.

Los módulos que estamos utilizando son capaces de conectarse en cadena mediante 5 pequeños puentes. Vea la imagen a continuación.

Paso 2: Pinout y señales

El módulo MAX7219 tiene 5 pines:

  • VCC - potencia (+)
  • GND - tierra (-)
  • DIN - Entrada de datos
  • CS - Selección de chip
  • CLK - Reloj

Eso significa que necesitamos 3 pines en el lado del microcontrolador ATtiny85 para controlar el módulo. Esos serán:

  • PB0 - conectado al CLK
  • PB1 - conectado a la CS
  • PB2 - conectado a la DIN

Esto es suficiente para conectarse al módulo MAX7219 y programarlo.

Paso 3: el protocolo

El protocolo
El protocolo

Comunicarse con el MAX7219 es relativamente fácil: utiliza un protocolo síncrono, lo que significa que por cada bit de datos que enviamos hay un ciclo de reloj que indica la presencia de ese bit de datos.

En otras palabras, enviamos 2 secuencias paralelas a bits, una para el reloj y otra para los datos. Esto es lo que hace el software.

Paso 4: el software

El software
El software

La forma en que funciona este módulo MAX7219 es la siguiente:

  • Escribimos bytes en su registro interno.
  • MAX7219 interpreta los datos.
  • MAX7219 controla los LED en la matriz.

Eso también significa que no tenemos que recorrer la matriz de LED todo el tiempo para encenderlos; el controlador MAX7219 se encarga de eso. También podría gestionar la intensidad de los LED.

Entonces, para usar los módulos MAX7219 de una manera conveniente, necesitamos una biblioteca de funciones para cumplir ese propósito.

Primero, necesitamos algunas funciones básicas para escribir en los registros MAX7219.

  • Escribiendo un byte en el MAX7219.
  • Escribiendo una palabra (2 bytes) al MAX7219.

La función que escribe un byte en el controlador se ve así:

void max7219_byte (uint8_t datos) {para (uint8_t i = 8; i> = 1; i--) {PORTB & = ~ (1 << MAX7219_CLK); // Establecer CLK en LOW if (data & 0x80) // Enmascarar el MSB de los datos PORTB | = (1 << MAX7219_DIN); // Establezca DIN en ALTO de lo contrario PORTB & = ~ (1 << MAX7219_DIN); // Establezca DIN en LOW PORTB | = (1 << MAX7219_CLK); // Establecer CLK en datos HIGH << = 1; // Desplazar a la izquierda}}

Ahora que podemos enviar bytes al MAX7219, podemos comenzar a enviar comandos. Esto se hace enviando 2 byes: el primero para la dirección del registro interno y el segundo para los datos que nos gustaría enviar.

Hay más de una docena de registros en el controlador MAX7219.

Enviar un comando, o una palabra, es básicamente enviar 2 bytes consecutivos. La función que implementa eso es muy simple.

void max7219_word (dirección uint8_t, datos uint8_t) {PORTB & = ~ (1 << MAX7219_CS); // Establecer CS en LOW max7219_byte (dirección); // Enviando la dirección max7219_byte (data); // Envío de datos PORTB | = (1 << MAX7219_CS); // Establecer CS en HIGH PORTB & = ~ (1 << MAX7219_CLK); // Establecer CLK en LOW}

Es importante notar aquí la línea donde traemos la señal CS de regreso a HIGH - esto marca el final de la secuencia - en este caso, el final del comando. Una técnica similar se utiliza cuando se controla más de una matriz conectada en cadena. El siguiente paso, antes de comenzar a encender y apagar los LED, es inicializar el controlador MAX7219. Esto se hace escribiendo ciertos valores en ciertos registros. Por conveniencia, mientras lo codificamos, podríamos poner la secuencia de inicialización en una matriz.

uint8_t initseq = {0x09, 0x00, // Registro de modo de decodificación, 00 = Sin decodificación 0x0a, 0x01, // Registro de intensidad, 0x00.. 0x0f 0x0b, 0x07, // Registro de límite de escaneo, 0x07 para mostrar todas las líneas 0x0c, 0x01, // Registro de apagado, 0x01 = Operación normal 0x0f, 0x00, // Registro de prueba de pantalla, 0x00 = Operación normal};

Solo necesitamos enviar los 5 comandos anteriores en una secuencia como pares de dirección / datos. Siguiente paso: encender una fila de LED.

Esto es muy simple: solo escribimos un comando donde el primer byte es la dirección (de 0 a 7) y el segundo byte son los 8 bits que representan los 8 LED en la fila.

void max7219_row (dirección uint8_t, datos uint8_t) {if (dirección> = 1 && dirección <= 8) max7219_word (dirección, datos); }

Es importante tener en cuenta que esto funcionará solo para 1 matriz. Si conectamos más matrices en una cadena, todas mostrarán los mismos datos. La razón de esto es que después de enviar el comando, devolvemos la señal CS a ALTO, lo que hace que todos los controladores MAX7219 de la cadena se bloqueen y muestren el último comando.

Recomendado: