Página 1 de 2
MULTIPLEX LED 16F887

Enviado:
09 Ago 2014 13:45
por eloyfm
Ola Pessoal.
Perciso controlar o acendimento de 30 LEDs para um painel,mas não consegui usar a mesma tecnica de 7 segmentos pois preciso controlar eles separadamente. ou seja, acender e apagar qualquer a qualquer momento. Isso seria usado para sinalizar chaves ligadas. Estou usando o 887 porque preciso das outras portas para outras coisas. O circuito usa 10 (iOS) em ter colunas, ou seja. 3 x 10.. alguem poderia me dar uma luz de qual seria a maneira mais correta ou confiável para fazer isso ? Obrigado...
Re: MULTIPLEX LED 16F887

Enviado:
09 Ago 2014 16:30
por EvandrPic
*
Re: MULTIPLEX LED 16F887

Enviado:
09 Ago 2014 17:07
por ze
com 10 io disponíveis vc consegue acionar 30 leds.. uma matriz tridimensional 5x3x2 p.ex. (me lembro de ter feito isso num attiny26 com 6 displays de 7seg). me lembro também de um an da microchip que ensina vc a contolar vários leds com poucos io's. vc coloca leds entre um pino e outro e controla o tris também... algo assim. depois procuro...
Mas se vc tiver 11 io's é muito + fácil: matriz 5x6. e com +1 vc consegue ler + 6 chaves usando a varredura dos 6 (de fato estou fazendo isso AGORA.. sério kk)
abç
Re: MULTIPLEX LED 16F887

Enviado:
09 Ago 2014 17:19
por eloyfm
O projeto deve usar o 16F887. Ele tem muito mais que 10 iOS, mas comentei que tenho 13 disponíveis para essa multiplexação dos LEDs
Gostaria que alguem pudesse me dizer qual seria uma forma eficáz e facil de fazer. Gostaria de fazer 3 colunas com 10 linhas.
Obrigado
Re: MULTIPLEX LED 16F887

Enviado:
09 Ago 2014 17:30
por andre_luis
eloyfm,
Eu também já tive a necessidade de expandir a capacidade de IO´s de um microcontrolador, e usei o 74LS373 pra isso. Dá uma olhada no circuito abaixo que utiliza 2 desses CI´s para duplicar a capacidade de uma porta de 8bits, mas voce pode usar quantos mais quizer, sendo necessário 1 pino de saída extra para cada 8 bits adicionais:
Se quizer mais detalhes, pode obter nesse artigo:
Projeto experimental de lavadora de roupas
Re: MULTIPLEX LED 16F887

Enviado:
09 Ago 2014 17:48
por eloyfm
Entendi Andre, mas eu preciso de um circuito bem pequeno pro falta de espaço e custo. Gostaria se possivel de uma ideia de programa para usar somente
( 10 ) iOS em linhas e (3) iOS em colunas, e só.. Tentei a tecnica de display de 7 segmentos pois não conheço muito e preciso copiar algum bloco pronto
e assim aprender tambem. Ai segue o circuito
Re: MULTIPLEX LED 16F887

Enviado:
09 Ago 2014 19:09
por andre_luis
Bom, o que eu sugeri foi a abordagem classica com o 74LS373, que realmente ocupa espaço, pois os pinos são duplicados, ou seja, a mesma quantidade usada na entrada, também para a saida. No caso de menor espaço, teria de uzar alguma solução baseada em entrada serial e saída paralela, mas eu pessoalmente não gosto muito de trabalhar com shift registers.
Já pensou em algo baseado em I2C ?
Re: MULTIPLEX LED 16F887

Enviado:
09 Ago 2014 19:57
por eloyfm
Ola Andre. Eu estou usando um PIC 16F887. Ele tem ( iOS sobrando ). Veja bem o que eu estou precisando.. Tenho 10 Botoes. Esses eu vou ligar direto em IOs.. casa um e um IO.. Os LEDs são 30.. então, se eu usar uma multiplexação de 3 colunas e 10 Linhas são 13 iOS.. isso tudo soma 23 iOs e aind asobra um montão de iO.. Por isso escolhi o 887.. Para não ter que colcoar mais componentes. Se pudesse usar outro eu poderia usar até um 12F629, mas eu preciso usar o 887, que da mais iOS de sobra pra fazer tudo o que quero.. O que eu preciso é um programa, ou bloco, que me ajude a entender com multiplexar esses 13 iOS em 30 LEDs.. Obrigado...
Re: MULTIPLEX LED 16F887

Enviado:
09 Ago 2014 20:51
por ze
ok. entendi. isso é relativamente fácil. vc vai ter que lançar mão de algum conhecimento de interrupt por timer. possui? vislumbro superficialmente 4 bytes sendo que seus bits controlam os leds. não tenho os programas (compilador + proteus) aqui mas pretendo instalar em breve. vou ver que posso fazer ok? a propósito que tal uma matriz 4x8? basta desprezar 2 leds.
em tempo... tenho phd em pisca led para mc e este lance de minimalismo em hw é meu mundo também. wellcome à selva
Re: MULTIPLEX LED 16F887

Enviado:
09 Ago 2014 21:01
por andre_luis
eloyfm escreveu:Por isso escolhi o 887.. Para não ter que colcoar mais componentes
eloyfm escreveu:O que eu preciso é um programa, ou bloco, que me ajude a entender com multiplexar esses 13 iOS em 30 LEDs
O problema é que as especificações acima parecem estar conflitantes, ou então ainda não entendi direito, mas o fato é que para multiplexar os IOs, será necesário a adição de componentes externos, seja de maior quantidade de pinos ( serial ) ou menor quantidade de pinos ( paralelo ) não dá pra fazer isso apenas com os 13 pinos do microcontrolador.
Re: MULTIPLEX LED 16F887

Enviado:
09 Ago 2014 22:23
por eloyfm
Eu vi uma infinidade de videos e outros mais onde fazem multiplex de LEDs até de 30 LEds com 6 iOS.. Só que fica muito complicado. Ou seja. Se eu não consigo fazer com 3 colunas e 10 linhas, certamente vu fritar o pouco que resta do meu cerebro pra fazer um modo mais avançado.. aparentemente deve ser ligando e desligando colunas e linhas, numa velocidade de aprox. 10ms, mas eu nao consigo fazer a parte que acende e apaga e continua nesse loop para os 30 leds.. Eu estou tentando aqui fazer com um mesmo programa para display de 7 segmentos (adaptar ), mas nem sei se servirá no final.. obrigado....
Re: MULTIPLEX LED 16F887

Enviado:
09 Ago 2014 23:23
por ze
particularmente vejo coerência e não conflito. enfim... só 1 lôco entende outro...
"aparentemente deve ser ligando e desligando colunas e linhas, numa velocidade de aprox. 10ms,..."
amigo é exatamente isso que uma interrupção por timer deve fazer. Veja isso (digito online portanto não nos importemos com enganos):
catodos em RA3...0, anodos em RB7...0
- Código: Selecionar todos
unsigned char a[4],k=1,i=0;
...
static void interrupt timer1() //10ms ou menos
{
PORTB=a[i];//nem
PORTA=~k;// preciso
i++;// comentar nada
k<<=1; if(k>8) {k=1;i=0;} //pois é autoexplicativo... espero
}
void main(void)
{
//...inicializa hw, timer1 principalmente
//teste
a[0]=0b10101010;
a[1]=0x55;
a[2]=0x0f;
a[3]=0xf0;
for (;;)
{
//...
//...
}
}
consegue enxergar os leds dentro de a[3...0]? bit=1=aceso. esta é a essência da coisa (senão a coisa toda). como disse está 8x4. (mc de 8 bits se dá bem com ... 8 bits). se insistir nos 3x10, depois de entender o treco deve fritar muito menos os miolos...Julgo não precisar explicar mais além disso e muito menos como inicializar o timer para interrupt, né? mas se necessário, não se acanhe
(em implorar de joelhos. kk )creio que vc pode ligar os 30 leds direto (com resistor, claro) nos pinos sem buffer. Sugiro que sejam de alto brilho
Re: MULTIPLEX LED 16F887

Enviado:
10 Ago 2014 00:27
por eloyfm
Zé, agradeço.. como disse, sou bastante novo no assunto, e o pouco que aprendi foi no CCS então demoro um pouco para enteder os codigos . quem sabe consigo colocar essa ideia para funcionar. Sei que o Timer0 deve ser usado para varrer as colunas e estou tentando pro aqui. Eu estive olhando o codigo para display de 7 seg. 4x8 e parece que da para adaptar . Vou queimando os miolos por aqui.. obrigadão..
Re: MULTIPLEX LED 16F887

Enviado:
10 Ago 2014 07:48
por andre_luis
Pessoal,
Entendi agora, eu realmente estava enganado. Olhando o código acima...realmente usando apenas 4 transistores externos ( e mais alguns resistores adicionais ) para multiplexar uma porta de 8 bits, seria a solução perfeita, pois como exclareceu o Zé, no total iria consumir uma porta de 8 bits mais 4 pinos de uma outra porta. Esse conceito também tá no esquemático de um outro artigo publicado aqui no forum, conforme a seguir:
Painel de LED publicitário baseado no PIC16F877.
Re: MULTIPLEX LED 16F887

Enviado:
10 Ago 2014 10:35
por vtrx
André,não sei se é mesquinharia minha,mas é interessante postar um projeto destes completo,caso seja seu?
Tem tanta gente na net ,hoje em dia,que só quer levar vantagem.