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); }Resultado
O 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