Ir ao conteúdo
  • Cadastre-se
diego.maga

MATRIZ de LED com PIC

Recommended Posts

Boa tarde Galera, gostaria de uma ajuda, quero montar um display simples com matriz de led 8x8, conforme o video abaixo utilizando o CCS COMPILER, mas não sei a lógica para a mensagem correr nos leds, alguem poderia me ajudar. Segue um video da lógica que gostaria de fazer, o pic utilizado pode ser qualquer um , pois é algo simples.

[ame=

]
[/ame]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este projeto aí usa um driver, eu sugiro o max7219, é o melhor driver 8x8 que eu conheço, também existem outras opções(não driver) onde você pode fazer a varredura e controlar a frequência dos leds "na unha" neste caso pode-se usar dois ports do uC, onde um dos ports controla o dado e o outro controla a linha referente ao dado, neste caso fica difícil pois só da para colocar 1 matriz dependendo do uC, para usar varias matrizes, você pode usar o 74hs595.

a logica pra fazer na unha:

Letra "A"

00111100

01100110

11000110

11000110

11111110

11000110

11000110

00000000

Você deve enviar coluna a coluna o dado correspondente, por exemplo na coluna 1 do caso da letra a, coloca-se no port referente: 00111110 e no outro port coloque em nivel 0 o pino correspondente da coluna 1 , fala isso para todas as colunas colocando o dado referente a cada uma

espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se é o que você precisa mas segue um arquivo. É precido ter o proteus para rodar.

Sinto não poder ajudar mais pois programo só em basic e por mero hobby. Mesmo não entendendo nada de C, fiz modificações neste projeto abaixo e escrevi o que eu queria. Não fui eu quem desenvolveu este projeto mas desenvolvi outro parecido em basic no Pic Simulator IDE no qual compreendi totalmente a técnica utilizada na matriz de Led. Boa sorte.

http://www.4shared.com/zip/hrnQlYkQ/serialmatrix.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse é o meu código, esse código é da minha matriz 8x8 e que tambem serviu de base para esse outro projeto meu aqui



ele é de fácil entendimento, e tem um modo de mudança de texto muito muito fácil
esta ai para quem o quiser e o quiser alterar

void la();void lb();void lc();void ld();void le();void lf();void lg();void lh();void li();void lj();void lk();void ll();void lm();void ln();void lo();void lp();void lq();void lr();void ls();void lt();void lu();void lv();void lx();void lw();void ly();void lz();void executa();void espaco();void main();void aparece();void repete();void esquerda();void tempo();void pac_man();void coracao();void coracao2();char coluna1,coluna2, coluna3, coluna4, coluna5, coluna6, coluna7, coluna8;char lop, temporario;void aparece(){for(lop=0; lop<=5; lop++){porta=0x07;portb=coluna8;delay_ms(2);porta=0x06;portb=coluna7;delay_ms(2);porta=0x05;portb=coluna6;delay_ms(2);porta=0x04;portb=coluna5;delay_ms(2);porta=0x03;portb=coluna4;delay_ms(2);porta=0x02;portb=coluna3;delay_ms(2);porta=0x01;portb=coluna2;delay_ms(2);porta=0x00;portb=coluna1;delay_ms(2);}return;}void esquerda(){coluna8=coluna7;coluna7=coluna6;coluna6=coluna5;coluna5=coluna4;coluna4=coluna3;coluna3=coluna2;coluna2=coluna1;return;}void main(){intcon=0x00;cmcon=0x07;trisa=0xf8;trisb=0x00;coluna1=0; coluna2=0; coluna3=0; coluna4=0;coluna5=0; coluna6=0; coluna7=0; coluna8=0;delay_ms(100);while(1){espaco();lm();la();lt();lr();li();lz();espaco();ld();le();espaco();ll();le();ld();espaco();li();ln();lv();li();ls();li();lv();le();ll();espaco();espaco();}}void la(){esquerda(); coluna1=0x7f; aparece();esquerda(); coluna1=0x88; aparece();esquerda(); coluna1=0x88; aparece();esquerda(); coluna1=0x88; aparece();esquerda(); coluna1=0x7f; aparece();esquerda(); coluna1=0x00; aparece();return;}void lb(){esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x91; aparece();esquerda(); coluna1=0x91; aparece();esquerda(); coluna1=0x69; aparece();esquerda(); coluna1=0x06; aparece();esquerda(); coluna1=0x00; aparece();return;}void lc(){esquerda(); coluna1=0x7e; aparece();esquerda(); coluna1=0x81; aparece();esquerda(); coluna1=0x81; aparece();esquerda(); coluna1=0x81; aparece();esquerda(); coluna1=0x42; aparece();esquerda(); coluna1=0x00; aparece();return;}void ld(){esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x81; aparece();esquerda(); coluna1=0x81; aparece();esquerda(); coluna1=0x81; aparece();esquerda(); coluna1=0x7e; aparece();esquerda(); coluna1=0x00; aparece();return;}void le(){esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x91; aparece();esquerda(); coluna1=0x91; aparece();esquerda(); coluna1=0x81; aparece();esquerda(); coluna1=0x00; aparece();return;}void lf(){esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x90; aparece();esquerda(); coluna1=0x90; aparece();esquerda(); coluna1=0x90; aparece();esquerda(); coluna1=0x80; aparece();esquerda(); coluna1=0x00; aparece();return;}void lg(){esquerda(); coluna1=0x7e; aparece();esquerda(); coluna1=0x81; aparece();esquerda(); coluna1=0x89; aparece();esquerda(); coluna1=0x89; aparece();esquerda(); coluna1=0x4e; aparece();esquerda(); coluna1=0x00; aparece();return;}void lh(){esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x10; aparece();esquerda(); coluna1=0x10; aparece();esquerda(); coluna1=0x10; aparece();esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x00; aparece();return;}void li(){esquerda(); coluna1=0xbf; aparece();esquerda(); coluna1=0x00; aparece();}void lj(){esquerda(); coluna1=0x82; aparece();esquerda(); coluna1=0x81; aparece();esquerda(); coluna1=0x81; aparece();esquerda(); coluna1=0xfe; aparece();esquerda(); coluna1=0x80; aparece();esquerda(); coluna1=0x80; aparece();esquerda(); coluna1=0x00; aparece();return;}void lk(){esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x10; aparece();esquerda(); coluna1=0x28; aparece();esquerda(); coluna1=0x44; aparece();esquerda(); coluna1=0x82; aparece();esquerda(); coluna1=0x01; aparece();esquerda(); coluna1=0x00; aparece();return;}void ll(){esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x01; aparece();esquerda(); coluna1=0x01; aparece();esquerda(); coluna1=0x01; aparece();esquerda(); coluna1=0x00; aparece();return;}void lm(){esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x40; aparece();esquerda(); coluna1=0x20; aparece();esquerda(); coluna1=0x10; aparece();esquerda(); coluna1=0x20; aparece();esquerda(); coluna1=0x40; aparece();esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x00; aparece();return;}void ln(){esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x40; aparece();esquerda(); coluna1=0x20; aparece();esquerda(); coluna1=0x10; aparece();esquerda(); coluna1=0x08; aparece();esquerda(); coluna1=0x04; aparece();esquerda(); coluna1=0x02; aparece();esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x00; aparece();return;}void lo(){esquerda(); coluna1=0x7e; aparece();esquerda(); coluna1=0x81; aparece();esquerda(); coluna1=0x81; aparece();esquerda(); coluna1=0x81; aparece();esquerda(); coluna1=0x7e; aparece();esquerda(); coluna1=0x00; aparece();return;}void lp(){esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x90; aparece();esquerda(); coluna1=0x90; aparece();esquerda(); coluna1=0x90; aparece();esquerda(); coluna1=0x60; aparece();esquerda(); coluna1=0x00; aparece();return;}void lq(){esquerda(); coluna1=0x7e; aparece();esquerda(); coluna1=0x81; aparece();esquerda(); coluna1=0x89; aparece();esquerda(); coluna1=0x85; aparece();esquerda(); coluna1=0x7e; aparece();esquerda(); coluna1=0x01; aparece();esquerda(); coluna1=0x00; aparece();return;}void lr(){esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x98; aparece();esquerda(); coluna1=0x94; aparece();esquerda(); coluna1=0x92; aparece();esquerda(); coluna1=0x61; aparece();esquerda(); coluna1=0x00; aparece();return;}void ls(){esquerda(); coluna1=0x61; aparece();esquerda(); coluna1=0x91; aparece();esquerda(); coluna1=0x91; aparece();esquerda(); coluna1=0x91; aparece();esquerda(); coluna1=0x8e; aparece();esquerda(); coluna1=0x00; aparece();return;}void lt(){esquerda(); coluna1=0x80; aparece();esquerda(); coluna1=0x80; aparece();esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x80; aparece();esquerda(); coluna1=0x80; aparece();esquerda(); coluna1=0x00; aparece();return;}void lu(){esquerda(); coluna1=0xfe; aparece();esquerda(); coluna1=0x01; aparece();esquerda(); coluna1=0x01; aparece();esquerda(); coluna1=0x01; aparece();esquerda(); coluna1=0xfe; aparece();esquerda(); coluna1=0x00; aparece();return;}void lv(){esquerda(); coluna1=0xfc; aparece();esquerda(); coluna1=0x02; aparece();esquerda(); coluna1=0x01; aparece();esquerda(); coluna1=0x02; aparece();esquerda(); coluna1=0xfc; aparece();esquerda(); coluna1=0x00; aparece();return;}void lx(){esquerda(); coluna1=0x21; aparece();esquerda(); coluna1=0x12; aparece();esquerda(); coluna1=0x0c; aparece();esquerda(); coluna1=0x0c; aparece();esquerda(); coluna1=0x12; aparece();esquerda(); coluna1=0x21; aparece();esquerda(); coluna1=0x00; aparece();return;}void lw(){esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x01; aparece();esquerda(); coluna1=0x02; aparece();esquerda(); coluna1=0x04; aparece();esquerda(); coluna1=0x02; aparece();esquerda(); coluna1=0x01; aparece();esquerda(); coluna1=0xff; aparece();esquerda(); coluna1=0x00; aparece();return;}void ly(){esquerda(); coluna1=0xe1; aparece();esquerda(); coluna1=0x11; aparece();esquerda(); coluna1=0x11; aparece();esquerda(); coluna1=0x11; aparece();esquerda(); coluna1=0xfe; aparece();esquerda(); coluna1=0x00; aparece();return;}void lz(){esquerda(); coluna1=0x81; aparece();esquerda(); coluna1=0x83; aparece();esquerda(); coluna1=0x85; aparece();esquerda(); coluna1=0x89; aparece();esquerda(); coluna1=0x91; aparece();esquerda(); coluna1=0xa1; aparece();esquerda(); coluna1=0xc1; aparece();esquerda(); coluna1=0x81; aparece();esquerda(); coluna1=0x00; aparece();return;}void espaco(){esquerda(); coluna1=0x00; aparece();esquerda(); coluna1=0x00; aparece();esquerda(); coluna1=0x00; aparece();return;}void pac_man(){esquerda(); coluna1=0xc4; aparece();esquerda(); coluna1=0xc6; aparece();esquerda(); coluna1=0x05; aparece();esquerda(); coluna1=0x05; aparece();esquerda(); coluna1=0x05; aparece();esquerda(); coluna1=0xc6; aparece();esquerda(); coluna1=0xc4; aparece();}void coracao(){esquerda(); coluna1=0x70; aparece();esquerda(); coluna1=0x88; aparece();esquerda(); coluna1=0x84; aparece();esquerda(); coluna1=0x82; aparece();esquerda(); coluna1=0x41; aparece();esquerda(); coluna1=0x82; aparece();esquerda(); coluna1=0x84; aparece();esquerda(); coluna1=0x88; aparece();esquerda(); coluna1=0x70; aparece();esquerda(); coluna1=0x00; aparece();}void coracao2(){esquerda(); coluna1=0x70; aparece();esquerda(); coluna1=0x88; aparece();esquerda(); coluna1=0x84; aparece();esquerda(); coluna1=0x42; aparece();esquerda(); coluna1=0x21; aparece();esquerda(); coluna1=0x42; aparece();esquerda(); coluna1=0x84; aparece();esquerda(); coluna1=0x88; aparece();esquerda(); coluna1=0x70; aparece();esquerda(); coluna1=0x00; aparece();}

floww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai gente aqui esta o hardware, ele é extremamente simples também, mas vai uma descrição falada dele também

O PORTB SE CONECTA COM O ANODO (POSITIVO) DA MATRIZ

OS PINOS RA0, RA1 E RA2 SE CONECTAM COM O A, B e C (ENTRADAS) DO CI

AS SAÍDAS DO CI SE CONECTAM NAS BASES DE TRANSISTORES NPN

O EMISSOR DOS TRANSISTORES SÃO ATERRADOS

OS COLETORES DOS TRANSISTORES SÃO CONECTADOS NOS CATODOS (NEGATIVO) DA MATRIZ

o pic é o 16f628A

o ci é o cd4028

os transistores eu usei o bc338

matriz 8X8

resistores são de 220R

GENTE, EU EDITEI O CÓDIGO! EU TINHA PASSADO POR UM PROBLEMA E PRECISEI FAZER UMA ADAPTAÇÃO NO SOFTWARE POR CAUSA DAQUILO, COMO VOCÊS NÃO VÃO PASSAR POR ISSO MODIFIQUEI AQUELA PARTE ADAPTADA, NÃO HAVERÁ PROBLEMA PARA VOCÊS, A MUDANÇA É MAIS PARA EFICIÊNCIA DO QUE OUTRA COISA!!! QUE JÁ O TINHA COPIADO APAGUE E COPIE ELE DO JEITO QUE ESTA AGORA, GARANTO QUE VAI FACILITAR MUITÍSSIMO O ENTENDIMENTO DELE AGORA

floww

post-908995-13884966629317_thumb.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade eu ainda não ví pessoalmente como é o brilho dos Leds dependendo do circuito,que existem vários meios,e como ví o vídeo eu queria ver o esquema,mas esse esquema com transitors eu ja tinha observado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho alguns esquemas da parte do 'driver' dos leds,mas não sei qual tem o melhor 'brilho'.

Tem uns que usam o 74LS149 direto nos ports,tem uns que usam o UN e por aí vai.

Como estou para comprar os componentes para testar uns códigos que fiz ,usando varredura e Eeprom,eu estou tentando chegar a um 'driver' dos leds com melhor brilho antes de fazer a placa final.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ahhh entendi, mas acho (na minha humilde opinião) que os transistores são melhores, mas nem sei quanta diferença pode fazer, acho que deve ser pouca.

mas esse foi um problema que eu tinha passado (na verdade esse é o problema que eu disse la em cima), eu queria aumentar o brilho e diminui o a resistência do resistor, então o pic começou a se resetar quando acendia todos os led's jutos, a solução foi acender os nibbles separadamente.

por isso acho que para o brilho máximo o modo que eu usei já não será o melhor, acho que para usar o brilho máximo ambas polaridades dos led's devem ser fornecidas por transistores, e não provenientes do pino do pic como eu fiz, que apenas usei transistores para fornecer o terra

floww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu ja consegui obter resultados satisfatórios com este sistema de varredura feita pelo PIC, porém se o PIC tiver que efetuar qualquer outra função adicional, a varredura fica prejudicada, o processamento tem que ficar dedicado totalmente à varredura,sem contar que o controle do brilho depende diretamente do duty cycle da frequencia, ou seja, eu desisti do sistema por varredura e optei por usar um driver (max7219), esse driver faz tudo de forma automatica, você envia a ele o dado e ele se vira com a frequencia de vredura e também tem como você controlar o brilho dos leds simplesmente enviando o valor a ele e o interessante é que ele é uma memória, ou seja, você envia o dado e ele fica memorizado nos leds, daí o PIC pode ficar parado ou fazendo outras funções, varredura na unha é canseira.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usei os timers. Mesmo com os timers, a latência das interrupções interferem na varredura e pode ocorrer flick na tela. O problema é que de acordo com a quantidade de blocos que você coloque a frequencia muda, eu testei de varias formas, por exemplo, coloquei uma sequencia de 74hc595 um atras do outro controlando apenas cada coluna, dessa forma eu envio um passo para o 595 de forma que apenas uma coluna de todo display fica ativa, daí envio o dado desta coluna, tive problemas pois no meu caso eram 6 blocos de 8x8 e para percorrer todo o display tinha que enviar 48 passos nos 595 sendo que para mudar apenas um passo são 2 ou tres comandos. Ao final das contas, depois de muita ralação consegui fazer funcionar razoavelmente bem, mas como já disse antes, consegui resultados 100% melhores com o driver. Tem uma outra forma de fazer por varredura que eu ainda não testei, mas estudando estes paineis de led gigantes que o pessoal está usando nas ruas para publicidade, entendi que a forma de fazer é bem diferente, e creio que seja bem mais funcional, eles não controlam o x e o y separados, nesses que costumamos ver na internet, agente envia um comando no x e depois outro no y e esses comando se cruzam acendendo o led correspondente, no caso dos paineis de led gigantes, eles controlam apenas o x, e usam para isto CIs semelhantes aos 595, porém o deles não tem apenas 8 saídas como o 595 e sim 16 saídas,porém faz a mesma coisa.

Esses dias eu fiz testes usando os sitema dos paineis gigantes, coloquei 1 74hc595 e um pic18f4550 (20mhz) e consegui fazer 8 PWM separados com sucesso, daí aumentei para 2 hc595 e a frequencia de varredura ja ficou extremamente baixa, aumentei o PIC para 48mh e quase resolveu, mas percebi que precisa de mais velocidade para conseguir fazer uma boa varredura, sinceramente, não sei o que os chineses fazem para conseguir tantos PWMs separados sem dar fliks na tela.

Uma coisa deu para perceber com este teste, no caso para alcançar frequencias de PWM não deu muito certo, mas se usar este mesmo sistema sem a necessidade de PWM, ou seja controlando a frequencia igual para todos (é o caso de paineis de apenas texto) ficaria perfeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu uso varredura igual de tv(só horizontal).

Uso 10 74HC164 fazendo apenas a varredura de uma coluna por vez da direita até a ultima e um PORT enviando os 8 bits de dados a cada coluna ativa.

Eu preciso decidir o hardware dos Leds.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você fez igual ao meu primeiro projeto, só que eu usei o 74HC595. Quanto ao hardware, você tem a opção de colocar um transistor para cada led, ou então, como o HC significa que o CI tem potência mais elevada, você pode colocar um ULN2008 no port e resistores no HC. O ULN2008 vai acionar o terra e tem um outro CI compatível com ele(não me lembro o nome), que faz o positivo, poderia ser ligado no lugar dos resistores do HC, daí é só colocar um resistor para cada led e pronto, o que você ganha com isto é que se você quiser futuramente colocar mais de um led por ponto é só aumentar os resistores e os leds.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Também estou nessa luta de fazer matriz com texto rolante.

Depois de uma péssima experiência usando o 74HC595 para drivear 8 displays de 7 segmentos, estou optando por trabalhar com o MAX7219.

Como o colega Vinicius comentou, a varredura fica muito prejudicada quando o PIC tem que fazer outras coisas além de controlar os displays.

Se na época do 74HC595 eu já tivesse conhecido o max7219, teria trocada na hora. Muiiiito mais fácil fazer como max. O problema que vejo é ter que usar 1 MAX7219 para cada matriz. O hardware acaba ficando grande.

Mas tá saindo. Ainda estou só simulando. Estou criando uma biblioteca para poder escolher quantos max serão usados. Estou garrando numa parte boba mas vou tentando...

Uma preview:

teste_7219_matriz.png~original

Falou

Compartilhar este post


Link para o post
Compartilhar em outros sites
O problema que vejo é ter que usar 1 MAX7219 para cada matriz. O hardware acaba ficando grande

Eu descartei ele justamente por causa disto,fica quase que se estivesse colocando um pic por matriz.

Eu tenho dois códigos praticamente prontos usando Eeprom 24C16 em C,um com CCS e 16F628 e o outro usando C18 e 18F2550,o código em ASM ta pronto mas quero postar alguma coisa em C,mas preciso montar o Hardware.

Vou acabar tendo que comprar e talvez desperdiçar material se algo não ficar bom.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ué, se vocês fizerem o cascateamento, podem enviar as informações para tantos quantos forem necessários, via serial numa excelente velocidade, 10 Mbits/seg !

Se cascatearem 20 deles, mesmo supondo uma baixa velocidade de 1 Mbit/seg, tem de enviar 160 bytes, ou seja, 320 microsegundos, se fosse um Atmega a 20 Mhz, o overhead seria zero para enviar isso. Esse seria mesmo o tempo total para enviar a atualização COMPLETA de todas as 20 matrizes. E isto sem nenhuma multiplexação !!!!!!!!!!

100 vezes melhor do que usar 20 74hct595 , enviar serialmente , e além disto ficar multiplexando tudo .... O tempo que cada linha ficaria acesa seria tão ínfimo que dificilmente se notaria alguma coisa acesa. Multiplexar 160 colunas de Leds , com refresh 30 vezes por minuto, dá um ciclo de trabalho de cada Led da coluna muiiito baixo. Se você imaginar 40 mA por coluna, dividido por 8 leds, dá 5 mA por led. Com um ciclo de trabalho como o acima, ele acende 30 vezes por segundo, com uma duração de apenas 1/160 de segundo a cada vez, o que daria uma corrente média de 5ma/160 = 32 uA ...... nem dá para ver ele aceso !

Não vejo nenhum problema em utilizar esses Max em vez dos 74hct595, aliás, a corrente é muito maior por segmento, a matriz fica muito legal.

O preço também é excelente. E quanto ao tamanho do hardware, usar um CI de 24 pinos em vez de um ci de 16 pinos não me parece tanta diferença.

Aliás, se você tiver que usar umas 20 matrizes, teria também de usar algum driver de corrente, dobraria os CI's por matrix.

Enfim, mandem bala que eu também quero fazer um desses kkkk !

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou pensando o seguinte,mas no Proteus não vai dar para saber o resultado,seguindo ainda o esquema que escolhí usando 10 74HC164,o 74HC164 pode ser alimentado com até 7 v,eu usaria 7 volts e na saida dos ports do PIC usaria um ULN2003.

Alguma ideia 'virtual' do resultado?

Cada 74HC164 eu pago 0.80 centavos.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Estou pensando o seguinte,mas no Proteus não vai dar para saber o resultado,seguindo ainda o esquema que escolhí usando 10 74HC164,o 74HC164 pode ser alimentado com até 7 v,eu usaria 7 volts e na saida dos ports do PIC usaria um ULN2003.

Alguma ideia 'virtual' do resultado?

Cada 74HC164 eu pago 0.80 centavos.

Salve vtrx....

Tenho feito minhas matrizes com o 74HC164 e gostei muito da simplicidade deste componente. Veja abaixo os exemplos (serialmatrix):

http://isisproteus.blogspot.com.br/2012/09/isis-proteus.html#!/2012/09/isis-proteus.html

esse é o meu código, esse código é da minha matriz 8x8 e que tambem serviu de base para esse outro projeto meu aqui

ele é de fácil entendimento, e tem um modo de mudança de texto muito muito fácil

esta ai para quem o quiser e o quiser alterar

mister nintendo , você tem o hardware proteus completo deste projeto, com todas as matrizes, compenetes e chaves e tudo mais para acerto de data e hora?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vtrx,

Esse CI pode fornecer no total 50mA. A vantagem em relação ao 595 é o preço que é bem baixo.

Mesmo você reforçando a saída do PIC com um ULN2003, já fez o cálculo da corrente média em cada Led, considerando a taxa de refresh ?

Essa é a melhor referência virtual para ver a luminosidade real, pois no Proteus você sempre vai conseguir ver na mesma luminosidade por causa do modelo da matriz de Led, ou seja, no Proteus, mesmo se você fizer 20 matrizes vai ver funcionar direitinho, mas se for montar, vai ver que a matrix quase fica apagada.

Mas o preço baixo fica bem tentador, comparando um Max na faixa de R$ 2,00 contra os R$ 0,80 dos hc164. Mas lembra de uma coisa, com o Max você não se preocupa com a multiplicação, e o brilho sempre será o máximo possível, e você pode cascatear os Max um após o outro, facilita bastante o projeto.

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Além do que no Max, podemos escolher o brilho via código, apenas mudando 1 registrador. Super fácil.

Outra coisa que o Paulo já comentou mas merece ser reforçada é a corrente necessária por causa do refresh alto. Veja que como já mencionado, devido ao tamanho da matriz e o alto refresh, a corrente será muito baixo. Uma forma de contornar isso seria utilizar uma corrente muiiito maior para drivear a matriz pois com isso, compensamos o baixo duty cicle.

Mas imagina se o microcontrolador trava ou acontece algo estranho e ele pára de dar o refresh. Temos uma corrente alta agora sobre poucos ou 1 led. O que vai acontecer? Ele queima.

Também sou adepto ao Max7219, sendo comprado a preço de ebay. Aqui ele está muito caro. R$6 ~R$8 acho absurdo. Aí não vale a pena.

Falou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vou usar o max porque eu só desito se for impossivel e sei que não é:D

Brincadeirinha no comentário;)

Minha intenção é outra além das matrizes e vou utilizar o mesmo princípio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

KKKKK boa Vtrx !!!

Concordo, tem mesmo de ir até onde dá heheheh.

Se fosse uma matrix pequena, tipo umas 5 matrizes, até que dá para ver, fraco, mas dá, eu já ví uma que um amigo meu montou no ano passado, ele usou só os HCT595 com um Pic, 4 matrizes, e aparecia legal, mas ele usou um refresh baixo para aumentar a luminosidade, e dava para ver tremular......

Talvez com o ULN2003 melhora um pouco, mas não sei , por que mesmo que tenha capacidade de fornecer muita corrente, os 74HC qqr coisa só conseguem 25mA por segmento e 50mA no total....

Mas realmente eu gostei muito desses MAX, eu liguei eles em cascata e foi uma beleza. O brilho voce ajusta no software mesmo.

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, só para complementar, lembrei de um artigo que li uns dias atrás sobre os diferentes MAX7219 disponíveis no mercado.

Veja que encontramos no ebay preços normais ($2.5 cada) ou 10 unidades por $5. estranho né a diferença de preço. Pelo que pude ler por aí, tem vários falsetas no mercado.

MAS, um carinha comprou várias unidades de diferentes vendedores e TODOS funcionaram do mesmo jeito, mesmo os falsetas.

Boa leitura:

http://tronixstuff.com/2013/05/16/the-max7219-led-display-controller-real-or-fake/

Edit: Substituto ao Max7219:

austriamicrosystems AS1107.

Mais barato mas difícil de encontrar.

Falou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×