FIGURA 1 - MATRIZ DE LED 8X8 CHIP MAX 7219 |
Essa matriz possui grande força para estudo de multiplexação e array de matrizes. Com ela podemos escrever letreiros ou fazer efeitos de desenhos aninhados com informações.
Mas porque essa matriz e tão boa?! Você deve ta se perguntando. Simples porque ela possui um chip integrado muito bom, que o MAX7219.
O MAX7219 opera de modo muito semelhante ao dos registradores de deslocamento, no sentido de que você faz a entrada de dados de modo serial, bit a bit. Esse chip utiliza apenas 3 pinos do arduino, que reconhecemos na placa com os nomes MAX, DIN e CLK.
O MAX7219 ainda permite ativar o modo shutdown, que reduz a
corrente para 150µA, o modo de controle de brilho, que controla
o brilho da matriz analógica ou digitalmente, e o modo de teste que acende
todos os LED’s para verificar se estão funcionando corretamente.
Material:
- Arduino
- Matriz de LED 8X8 com chip MAX7219
Esquema:
FIGURA 3 - ESQUEMA |
Código:
#include "LedControl.h" //biblioteca de controle de matriz
const byte DIN = 12; //Pino DataIn
const byte CS = 11; //Pino LOAD (CS)
const byte CLK = 10; //Pino CLK
const byte QTD_DISP = 1; //apenas um MAX72XX
LedControl ledMatrix = LedControl(DIN, CLK, CS, QTD_DISP);
void setup() {
ledMatrix.shutdown(0, false); //modo 'shutdown' no display '0' é FALSE
ledMatrix.setIntensity(0, 10); //intensidade do display '0' é 5 (0~16)
ledMatrix.clearDisplay(0); //clear display '0'
}
void loop(){
byte i=0, col=0, row=0;
char texto[] = " www.arduinoprog.blogspot.com.br "; //Texto a ser apresentado
char texto2[] = "acesse: ";
ledMatrix.clearDisplay(0); //clear display '0'
ledMatrix.printStringScroll(0, 0, texto, 70, '<'); //Texto passando direita para esquerda
delay(500);
ledMatrix.printStringScroll(0, 0, texto2, 50, '>'); //Texto passando direita para esquerda
delay(500);
}
Vídeo:
Downloads:
Qualquer dúvida fica a disposição para tentar responde-las.
Excelente artigo, já tinha ouvido falar desses chips que podem ser usados para estender a quantidade de portas do microcontrolador, mas nunca cheguei a ver seu funcionamento.
ResponderExcluirExiste algum outro chip capaz de operar tantos registros assim e que seja de fácil acesso e compatível com o arduino?
Cleiton, você pode substituir o MAX7219 pelo AS1107 da Austria Microsystems, ou até msm por um CI registrador de deslocamento 74HC595, esse último nao recomendo pois vcoê irá utilizar muitos fios para conexão.
ExcluirHá, e outra cosia o MAX7219 so funciona em matriz de led 8X8 catodo comum.
por isso que eu não estou conseguindo controlar a matriz de led rgb 8x8 .. ela fica com os led's ligado o tempo todo afff... tenho max 7219 a matriz é anodo comum
ExcluirEste comentário foi removido pelo autor.
ResponderExcluircaro amigo gostei,montei um e funcionou,mas quando coloco mais um modulo nao da certo porque,nao da a sequencia.
ResponderExcluirObrigado pelo comentário! Quanto a sua dúvida acredito eu que não e possível fazer o controle de duas matrizes de leds com apenas um max7219!
Excluirvc consegue sim, tem que ligar o Dout do chip 1 no Din do chip 2 espero ter esclarecido!!!
ExcluirEste comentário foi removido pelo autor.
Excluirfelipe ,mesmo colocando dois modulos em cascata encaixando uma na outra,ele roda so em um.
ResponderExcluirOlá pessoal. Para usar dois módulos deveremos modificar no software o parâmetro QTD_DISP = 2. O pino 24 DOUT do módulo 1 deve ser ligado ao pino 1 DIN do módulo 2. Veja a ligação no Arduino neste link:
Excluirhttp://www.instructables.com/id/16x8-LED-dot-matrix-with-MAX7219-module/
Bons estudos.
Poxa Gilberto, ótima contribuição! Eu não tinha reparado isso e nem fiz as buscas certas, mtu obrigado pela participação!
ExcluirAlterei os parâmetros e interliguei o dout do primeiro modulo ao din do segundo e não funcionou pode mãe ajudar.?
Excluiroi tem algumas opções de cascata no site dhgate.com
Excluirhttp://www.dhgate.com/wholesale/search.do?act=search&sus=&searchkey=Color+LED+Module+TM1638+Can+be+Cascaded+Replace+CH452%2FMAX7219+FZ0574&catalog=#search
ou
http://www.dhgate.com/wholesale/search.do?searchkey=MAX7219+LED&catalog=&supplierid=&searchSource=search#search
Tente usar então 2 ci's 74HC595, ele funcionam em cascata!
ResponderExcluirde uma olhada neste video http://youtu.be/W8qzJYUjhCI
ResponderExcluirledMatrix.printStringScroll
ResponderExcluiressa função não muda de cor, é como se não reconhecesse essa função!!
Poxa, tem certeza que você copiou certo? Pq eu retestei aqui e funcionou.
ExcluirOlá Felipe, o código acima está correto? (sou principiante)
ResponderExcluirFiz a verificação na IDE do Arduino e aparece as 2 seguintes mensagens de erro:
sketch_apr06a.ino: In function 'void loop()':
Linha 17: sketch_apr06a:17: error: 'class LedControl' has no member named 'printStringScroll'
Linha 19: sketch_apr06a:19: error: 'class LedControl' has no member named 'printStringScroll'
O que pode ser? obrigado
Bom dia vc deve baixar a biblioteca no link acima, descompacta-la e colocar na pasta libraries do programa do arduino lembrando que vc deve criar uma pasta LedControl.
ExcluirOlá Felipe, funcionou perfeitamente aqui comigo! muito obrigado por disponibilizar.
ResponderExcluirMas tenho uma pergunta: olha que já pesquisei e baixei pela internet vários sketches dessas matrizes (tenho 4 desses módulos q comprei pelo ebay), mas nenhuma delas foi tão fácil pra mim; então, pq q em outros códigos é tão complicado e com tantas linhas? tipo, nesse seu tem a função "char texto[] =" para o texto; vc poderia, por favor, explicar alguma coisa desse código? por exemplo, aqui: "char texto2[] = "acesse: ";
Mais uma vez, muito obrigado e que Deus te abençoe!
Bom, obrigado dancopy pelo feed back sobre o funcionamento do código.
ExcluirEsse código está todo comentado ao lado de suas respectivas ações e realmente esta bem "enxuta" em relação aos outros códigos de matriz de led.
Isso ocorre por causa da biblioteca criada. Ela é bem sucinta.
Já sua dúvida especifica sobre o texto é fácil de explicar.
No comando:
char texto[] = " www.arduinoprog.blogspot.com.br ";
Estou criando uma array do tipo char, eu poderia ter criado um classe string apenas. Mas quando as strings usadas como um array de char nos baseamos na tabela ASCII. Uma array char pode ser declarado de várias formas.
char myVariable[10]; char myVariable[6] = {'H', 'e','l','1','o'}; etc...
Nessa biblioteca nos usamos a ideia do display de LCD e colocamos a string entre " ".
Espero ter respondido sua dúvida e estou aberto a mais dúvida.
*Para tentar reformular essa resposta eu consultei o livro Arduino em ação - EVANS, Martin; JOSHUA, Noble. Editora Novatec - 1ª Edição
Obrigado Edson, por responder (desculpe-me, ñ tinha visto!)
ResponderExcluirObrigado amigo Felipe,
ResponderExcluirDaniel Fernandes
Ola, como eu faria para substituir um display de 7 segmentos e usar a matriz, exemplo,,eu montei um medidor de RPM usando um display de 7 segmentos duplo, teria como exibir estes dois dígitos numa só matriz, no caso cada digito ficaria 8x4..
ResponderExcluirDesde já muito obrigado pela resposta, e parabéns pelo post
ola amigo,otimo post,como faria p/ acrescentar figuras e aumentar a velocidade do texto? obrigado sucesso.
ResponderExcluirFala Lucas, Obrigado pelo comentário. Bom no caso de aumenta a velocidade vc deve modificar o parâmetro 70 da linha de comando:
Excluir- ledMatrix.printStringScroll(0, 0, texto, 70, '<'); //Texto passando direita para esquerda
Ja para passar figuras especiais e so vc declarar um texto e jogar a fugura nela.
boa tarde meu amigo, obrigado pelo retorno,sou novato no maravilhoso mundo do arduino,a parte da velocidade do texto eu entendi,mas sobre as figuras n entendi!! sei que para criar figura tem o codigo binario,mas n sei como declarar esse texto q o amigo falou, e se é no começo do codigo ou no fim, teria como vc me mostrar um ex: emcima desse seu codigo como declarar esse texto? desde ja te agradeço ,abraço.
ResponderExcluirBom Lucas, se você quiser fazer figuras simples como: :-) ou \o/, você apenas deve declara na linha:
Excluir- char texto[] = " :-) \o/ "; //Texto a ser apresentado
pois essa linha de comando faz qualquer texto como char, com isso nao precisa fazer de modo de declarar binário. Tente ai e me de um feed back por favor.
Sabe onde eu posso ver a documentação da API dessa biblioteca (LedControl)? Vlw!!
ResponderExcluirAri Ribeiro, desculpa a demora (quse um mês). Mas eu coloquei a biblioteca nesse link aq:
Excluirhttps://dl.dropboxusercontent.com/u/25438507/LedControl.zip
Entra na pasta depois em doc e vai no icone que ira aparecer do seu navegador. lá tem td q eu achei dessa biblioteca.
Parabéns Felipe, código simples e objetivo. Uma dúvida: eu sei que, pra aumentar o número de colunas, é só colocar um CI na sequência do outro. Mas e para aumentar o número de linhas? Seria o mesmo princípio? obrigado. Marcelo Cuin [www.cuin.com.br]
ResponderExcluirEntão Marcelo, acredito que sim, eu nunca fiz mais que um módulo, porque afinal so possuo um! Mas, acho q funciona sim!.
ExcluirBoa noite amigo não estou conseguindo copliar aparece esse erro:
ResponderExcluirsketch_sep27a.ino:17:13: error: 'class LedControl' has no member named 'printStringScroll'
sketch_sep27a.ino:19:13: error: 'class LedControl' has no member named 'printStringScroll'
ja baixei a biblioteca.
Fala Dorciley, você colocou a biblioteca na pasta certa? Tenta compilar algum exemplo que vem com a biblioteca
ExcluirEstou com o mesmo problema do Dorciley Ribeiro!
ResponderExcluirResolvido!
ExcluirFelipe. Você resolveu como?
ExcluirConversei com o Alex e ele usou outra biblioteca.
ExcluirEste comentário foi removido pelo autor.
ResponderExcluirboa tarde, tive o mesmo erro de alguns sobre o ledMatrix.printStringScroll e não consegui resolver no meu, aparece para mim a biblioteca instalada mas não reconhece
ResponderExcluirresolvido
Excluir