Hardware
Os LEDs utilizados são do tipo anodo (terminal positivo do LED) comum. Isto leva a uma conexão e mapeamento dos LEDs um pouco diferentes. As linhas DIG do MAX7219 precisam ser conectadas aos catodos dos LEDs, portanto ao invés de selecionar o LED vão selecionar a cor (vermelho, verde ou azul). A seleção do LED é feita conectando o anodo comum à linhas SEG.
Como no exemplo anteior, o Arduino utilizado é um Nano e usei três saídas digitais quaisquer para gerar os sinais de comunicação. Novamente temos o resistor que define a corrente nos segmentos e dois capacitores de desacoplamento.
Software
O software utiliza a mesma funções básicas que o exemplo anterior. O código de teste é bastante simples.
// Conexões ao MAX7219
#define PIN_LOAD 6
#define PIN_DIN 5
#define PIN_CLK 4
#define LED 13
// Registradores do MAX7219
#define MAX7219_NOP 0x00
#define MAX7219_DIG0 0x01
#define MAX7219_DIG1 0x02
#define MAX7219_DIG2 0x03
#define MAX7219_DIG3 0x04
#define MAX7219_DIG4 0x05
#define MAX7219_DIG5 0x06
#define MAX7219_DIG6 0x07
#define MAX7219_DIG7 0x08
#define MAX7219_MODE 0x09
#define MAX7219_INT 0x0A
#define MAX7219_LIM 0x0B
#define MAX7219_SHUT 0x0C
#define MAX7219_TEST 0x0F
// CONEXOES DOS LEDS
#define LED_R MAX7219_DIG0
#define LED_G MAX7219_DIG1
#define LED_B MAX7219_DIG2
#define LED_1 0x40
#define LED_2 0x20
#define LED_3 0x10
// Iniciação
void setup ()
{
pinMode (LED, OUTPUT);
pinMode (PIN_LOAD, OUTPUT);
pinMode (PIN_DIN, OUTPUT);
pinMode (PIN_CLK, OUTPUT);
digitalWrite (PIN_LOAD, HIGH);
digitalWrite (PIN_CLK, LOW);
digitalWrite (PIN_DIN, LOW);
write7219 (MAX7219_SHUT, 0x00);
write7219 (MAX7219_TEST, 0x00);
write7219 (MAX7219_MODE, 0x00);
write7219 (MAX7219_INT, 0x0F);
write7219 (MAX7219_LIM, 0x02);
write7219 (LED_R, 0);
write7219 (LED_G, 0);
write7219 (LED_B, 0);
write7219 (MAX7219_SHUT, 0x01);
}
// Loop principal
void loop ()
{
// Acende o LED do Arduino (para indicar primeira etapa)
digitalWrite (LED, HIGH);
// LEDs apagados
write7219 (LED_R, 0);
write7219 (LED_G, 0);
write7219 (LED_B, 0);
delay (2000);
digitalWrite (LED, LOW);
// Acende o primeiro LED na cor vermelha
write7219 (LED_R, LED_1);
delay (2000);
// Apaga o primeiro LED
// Acende o segundo LED na cor vermelha
write7219 (LED_R, LED_2);
delay (2000);
// Apaga o segundo LED
// Acende o terceiro LED na cor vermelha
write7219 (LED_R, LED_3);
delay (2000);
// Acendo o primeiro LED na cor vermelha
// Acendo o segundo LED na cor verde
// Acendo o terceiro LED na cor azul
write7219 (LED_R, LED_1);
write7219 (LED_G, LED_2);
write7219 (LED_B, LED_3);
delay (2000);
// Acende os três LEDs na cor "branca" (vermelho+verde+azul)
write7219 (LED_R, LED_1 | LED_2 | LED_3);
write7219 (LED_G, LED_1 | LED_2 | LED_3);
write7219 (LED_B, LED_1 | LED_2 | LED_3);
delay (2000);
}
// Escreve em um registrador do MAX7219
void write7219 (uint8_t addr, uint8_t data)
{
digitalWrite (PIN_LOAD, LOW);
shiftOut (PIN_DIN, PIN_CLK, MSBFIRST, addr);
shiftOut (PIN_DIN, PIN_CLK, MSBFIRST, data);
digitalWrite (PIN_LOAD, HIGH);
}
ResultadoO vídeo abaixo mostra a montagem funcionando.


2 comentários:
como poderia usar o max7219 para trabalhar com display (caseiro) com segmentos de fitas com3 LEDs alimentados por 12V, RoHS 5730 - 3LED
Fagundes, o MAX7219 não é apropriado para controlar (pelo menos diretamente) LEDs de alta potência. Talvez desse para fazer algum esquema colocando transistores nas saídas do MAX, mas seria bem complicado.
Postar um comentário