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