📟 Librería MAX7219 para PIC18 (Oshonsoft PIC Basic)MAX7219: matrices 8x8 LED (Pic18 Basic compiler).Dejo aquí una nueva práctica utilizando bloques de LED 8x8 (matrices) controlados con el chip
MAX7219.
Módulos en cascada: cuando hacemos referencia a varios controladores MAX7219 conectados en serie para manejar múltiples matrices de LEDs o displays de 7 segmentos.
La idea es:
Cada MAX7219 se encarga de un bloque (por ejemplo, una matriz 8×8 o un display de 8 dígitos).
Se pueden
encadenar conectando la salida de datos (DOUT) de un módulo a la entrada de datos (DIN) del siguiente.
El reloj (CLK) y la señal de carga (CS/LOAD) se comparten entre todos los módulos.
Esto permite formar una cadena o cascada de módulos, donde se envían los datos de forma secuencial y cada MAX7219 “toma” los suyos.
La librería incluye las funciones básicas de configuración y las necesarias para que cada usuario pueda desarrollar las suyas propias. Además, ya incorpora las funciones típicas para realizar desplazamiento lateral del texto,
tanto a izquierda como a derecha, con el fin de facilitar las pruebas de funcionamiento y servir de base para otros proyectos.
Esta versión es una actualización de otra más antigua. El cambio principal es la incorporación de un
FrameBuffer mejorado (anteriormente llamado
VideoRam), que ahora permite encadenar varios módulos para ampliar el número de celdas 8x8 controladas de forma sencilla.
La librería utiliza el módulo SPI del PIC y, por defecto, está configurada para gestionar un bloque de 4 matrices. Para adaptarla a un número distinto de matrices, basta con editar la cabecera del archivo
Max7219SPI_Lib.bas y modificar tanto la constante que define la cantidad de matrices como la longitud del FrameBuffer.
Calculada como:
Número de matrices × 8
🔹 Ejemplos de configuración:Bloque de 4 matrices:Const MAX7219_MATRIX_COUNT = 4 ' Número de matrices encadenadas (>=1)
Dim FrameBuffer(32) As Byte ' 8 filas × 4 matrices
Bloque de 8 matrices:Const MAX7219_MATRIX_COUNT = 8 ' Número de matrices encadenadas (>=1)
Dim FrameBuffer(64) As Byte ' 8 filas × 8 matrices
🔹 Funciones principales incluidas:MAX7219_Init() → Inicializa el MAX7219 y el framebuffer.
MAX7219_ClearMatrix() → Apaga todos los LEDs de las matrices.
MAX7219_Bright(Brillo) → Ajusta el brillo de 0 a 15.
LeftShift(P_FrameBuffer, texto) → Desplazamiento del texto de izquierda a derecha.
RightShift(P_FrameBuffer, texto) → Desplazamiento del texto de derecha a izquierda.
📌
Recordatorio sobre el MAX7219 y la comunicación SPI-likeEste chip ya fue comentado en un hilo anterior usando displays de 7 segmentos.
El MAX7219 puede controlar hasta 8 dígitos de 7 segmentos o una matriz 8×8 usando únicamente tres líneas: DIN (datos), CLK (reloj) y LOAD/CS (latch).
Aunque se programa de forma muy similar a SPI modo 0 (CKP=0, CKE=1), el MAX7219 no es estrictamente compatible con el estándar SPI, pero funciona perfectamente con el módulo SPI del PIC o con SPI por software.
El envío se hace en ráfagas de 16 bits (registro + dato), y en cadenas, el primer par enviado llega al módulo más alejado y el último par al más cercano al microcontrolador.📂
Archivos de la práctica:Test Matrix Max7219 SPI.bas → Programa de prueba.
Max7219SPI_Lib.bas → Librería principal para control del MAX7219.
SPI_Lib.bas → Librería de funciones SPI.
Nota: por pura curiosidad he encadenado 20 matrices y funciona perfecto.Video del ejemplo: