Many times we have seen advertising lighting signs of different colors or images with texts sliding from left to right or vice versa, mostly in shopping centers or businesses, and we wonder how expensive it is to have one. But here we will learn how to make an expandable advertising panel (8x40) through the ATMEGA328P-AU(SMD) microcontroller.
GERBER DEL PCB
https://mega.nz/file/Kd40GBCa#hh5WNz4eHy24ywPyZN9Gq8O_wNC7hQWsYoROIYh5yrU
DATASHEET ATMEGA328P-AU
https://mega.nz/file/CM5imBTb#XwQ2-X6fQGMp3nv5a_pfC13LZuHpoJuD1Lt_-7jMom8
DATASHEET CH340C
https://mega.nz/file/XBgAGJQK#qQgzdaxvzKvIpuA2bXqwoNivkQ017ndzww7F2CLIXHc
DATASHEET MAX7219CNG
https://mega.nz/file/6ZwyiLyL#1NVYfOsd7tRC3arU-hVszt4Vbili4ojUbbTBU0zxqwM
DATASHEET 7805 SMD
https://mega.nz/file/aMo03ZIB#rrRcrYjqTRfAxjCnJBQ62hXYYR4ltB39aGpndoEJwjo
![](https://cdn.hackaday.io/images/8849291643581635126.jpg)
![](https://cdn.hackaday.io/images/552391643581656114.jpg)
MAX7219 MODULE
Our project is based on the integrated MAX7219CNG is an integrated to control 8x8 matrices, for our project we will use this module as a reference to be able to assemble 5 matrices in a single pcb and with 5mm leds. Next we will see the characteristics of this module:
- Serial control interface: with only 3 pins we can control an entire matrix of LEDs
- Simple external circuit – requires few external components
- Cascading: Multiple MAX7219s can be cascaded. In this way you can control several LED arrays using only 3 pins of the Arduino board.
- Low power mode: can consume only 120 uA.
The matrix of our project is 5 max7219 modules connected in cascade as we will see below:
![](https://cdn.hackaday.io/images/2092321643581754451.png)
In our case there are 5 max7219 connected in cascade and we only control it with 3 DIN-CS-CLOCK pins.
Now we will see the test code to upload our program, We will use the arduino IDE, for this we must know that we need the MAX7219 library. This library is very good and will allow us to move the text from one side to another, for this we must include it in the Arduino libraries. Next we will see the code:
/* Matriz de Desplazamiento LED 8x8
Usando Arduino UNO y el Controlador MAX7219
Debe instalar la libreria MaxMatrix para que funcione el programa
Libreria: MaxMatrix
Conexiones del Arduino al Modulo MAX7219:
ARDUINIO MAX7219
10 CLK
9 CS
8 DIN
GND GND
5V VCC
Conexion de la cascada de MAX7219(1) al MAX7219(2)
MAX7219(1) MAX7219(2)
CLK CLK
CS CS
DOUT DIN
GND GND
VCC VCC
La cascada se hace conectano de los pines Superiores a los inferiores del modulo MAX7219
y los modulos se instalan de derecha a izquierda
*/
#include <MaxMatrix.h>
#include <avr/pgmspace.h>
PROGMEM unsigned char const CH[] = {
3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // :
2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // <
3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // =
3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash
2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
};
int data = 8; // DIN pin del modulo MAX7219
int load = 9; // CS pin del modulo MAX7219
int clock = 10; // CLK pin del modulo MAX7219
int maxInUse = 5; //Cambie este valor dependiendo del numero de matrices que use
MaxMatrix m(data, load, clock, maxInUse); // Define el modulo
byte buffer[10];
char mensaje1[] = " Electronica ABC proyectos y circuitos"; //Escriba el mensaje a desplegar
char mensaje2[] = " Patrocinado por JLCPCB 5PCBS A $2 https://jlcpcb.com/RAV";
void setup(){
pinMode(8,OUTPUT); //Conexion a DIN
pinMode(9,OUTPUT); //Conexion a CS
pinMode(10,OUTPUT); //Conexion a CLK
m.init(); // inicializa el modulo
m.setIntensity(8); // intencidad de los puntos de la matriz, entre 1-5
Serial.begin(9600); // inicializa el puerto serial
}
void loop(){
byte c;
// Lee el mensaje que llega por el puerto serial
while (Serial.available() > 0){
byte c = Serial.read();
Serial.println(c, DEC);
printCharWithShift(c, 100);
}
delay(100); // Tiempo de inicio de un nuevo Ciclo de mensajes
m.shiftLeft(false, true);
// Despliega los mensajes almacenados en las variables
printStringWithShift(mensaje1, 100); // El ultimo termino se usa para la velocidad del mensaje
printStringWithShift(mensaje2, 100);
}
void printCharWithShift(char c, int shift_speed){ // Imprime caracteres
if (c < 32) return;
c -= 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(maxInUse*8, 0, buffer);
m.setColumn(maxInUse*8 + buffer[0], 0);
for (int i=0; i<buffer[0]+1; i++)
{
delay(shift_speed);
m.shiftLeft(false, false);
}
}
void printStringWithShift(char* s, int shift_speed){ // Imprime cadena de caracteres
while (*s != 0){
printCharWithShift(*s, shift_speed);
s++;
}
}
void printString(char* s) // Imprime cadena
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
In this project we use the following electronic components:
- 320 leds 5mm
- 5 MAX7219CNG ICs
- 1 IC CH340C
- 1 regulator 7805
- 2 leds 3MM
- 5 electrolyte capacitors 10UF16V
- 2 electrolyte capacitors 100UF16V
- 1 IC ATMEGA328P-AU(SMD)
- 5 resistors 1206 OF 1K
- 1 button
- 1 crystal 16MHZ
- 2 capacitors 22PF
- 1 D-TYPE connector
- 1 DC JACK
- 5 capacitors 104
- 5 resistors 1/4W 1K
- 10 resistors 1/4W 100 ohm
- 5 resistors 1/4W 220 ohm
- 2 capacitors 100nf smd 1206
![](https://cdn.hackaday.io/images/8921221643581939319.png)
![](https://cdn.hackaday.io/images/2545041643581953734.png)
This project is thanks to JLCPCB professional PCB manufacturers No. 1 worldwide
Get your pcbs at only $2 for 5pcbs of 100mm x 100mm
we thank JLCPCB for the professional pcbs you can purchase
5 pcbs a $ 2
order your pcb here:
Gerber
https://mega.nz/file/Kd40GBCa#hh5WNz4eHy24ywPyZN9Gq8O_wNC7hQWsYoROIYh5yrU