Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
LucasDiulbern

Duvida em Matriz de Led 8x32

Recommended Posts

Estou tentando escrever na matriz, mais não estou conseguindo nem sicronizar os clocks com data e strobe dos 4094.

Eu peguei um pedaço do codigo fonte de outro circuito de matriz e modifiquei o que eu achei que era necessario, mais mesmo assim não funciona.

#include <16F877A.h> // identifica microcontrolador alvo
#use delay (clock=4000000) // <- define cristal para 4Mhz. Para outros valores, mude e recompile.

#INCLUDE <MATH.H>
#DEFINE EEPROM_SCL PIN_E2
#DEFINE EEPROM_SDA PIN_E3
#FUSES NOWDT
#FUSES XT
#FUSES NOPUT
#FUSES NOPROTECT
#FUSES NOBROWNOUT
#FUSES NOLVP
#FUSES NOCPD


#define RDD_DATA PIN_B1
#define RDD_CLOCK PIN_B0
#BYTE PORTD = 0x08
#BYTE PORTB = 0x06
#BYTE PORTD_TRIS = 0x88
#BYTE PORTB_TRIS = 0x86
void fConfigurar_portas(void);
void fRDD_send_data0(void);
void fRDD_send_data1(void);

void main(){


int8 i,j;
fConfigurar_portas();
output_low(RDD_CLOCK);
output_low(RDD_DATA);
//
//------Dibujo las filas una a una -----
//
while (TRUE){
PORTD = 0b11111110; //Filas 1 encendida, las demas apagadas.
for (i=0;i<8;i++) {
for (j=0;j<8;j++) {
fRDD_send_data1();
}
delay_ms(200);
PORTD = (PORTD <<1) +1;
}
//
//------Dibujo rectangulos... -----
//
PORTD = 0b11111111; //Filas apagadas.
for (i=0;i<8;i++) {fRDD_send_data1();}
for (i=0;i<8;i++) {
fRDD_send_data0();
PORTD = PORTD /2 ;
delay_ms(200);
}
}
}

void fConfigurar_portas(void){

PORTB_TRIS = 0b11000000; //1 = ENTRADA, 0 = SAIDA
PORTD_TRIS = 0b00000000; //1=ENTRADA, 0=SAIDA
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
}

//--------------------------------------------------
//---Envia un 0 al registro de desplazamiento:
//--------------------------------------------------
void fRDD_send_data0(void){
output_low(RDD_DATA);
delay_us(2);
output_low(RDD_CLOCK);
delay_us(2);
output_high(RDD_CLOCK);
}
//--------------------------------------------------
//---Envia un 1 al registro de desplazamiento:
//--------------------------------------------------
void fRDD_send_data1(void){
output_high(RDD_DATA);
delay_us(2);
output_low(RDD_CLOCK);
delay_us(2);
output_high(RDD_CLOCK);
}

Gostaria de uma ajuda, ao menos uma dica do que eu estou fazendo errado, ou do que eu estou deixando de fazer. Não tenho muita experiencia com programação e é a primeira vez que eu tento montar uma matriz com mais de uma matriz se é que me entendem.

Outra duvida é como eu posto o aqruivo .DNS aqui no forum? para ajudar vocês para que me ajudem

Desde já agradeço aos que responderem!!!

post-738360-1388496148117_thumb.jpg

Editado por Bcpetronzio
Foto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse é o problema de pegar codigos alheios ,no fim nao da certo,pegue a ideia e tente fazer o teu,alem de entender melhor sabe o que esta fazendo.Eu tenho um aqui so q é para uma matriz pequena e uso o 4017,se interessar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pela ajuda, mais eu tambem pensei em começar do zero, mais eu não sei como fazer a varredura de deslocamento. Se puder posta ai o seu pra mim dar uma olhada, as vezes vendo um funcionando e vendo o codigo fonte eu entendo alguma coisa.

Fiz uma matriz dessas, funcionou perfeitamente. Mas está em ASM

ASM, num entendo nada....=/ . Eu ate achei alguns esquemas na intenet mais ta tudo em ASM. Mais valeu mesmo assim!!!

Dei uma modificada basica no circuito, mais ainda nao funciona, meu problema é sincronizar clock com data com strobe, pra poder fazer a varredura

post-738360-1388496148848_thumb.jpg

Editado por Bcpetronzio
Unir Post seguidos em menos de 24 horas, use a opção editar

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce posicionou bem a matriz? Com os catodos no PIC e os anodos no registro?

voce posicionou bem a matriz? Com os catodos no PIC e os anodos no registro?

Faça antes um teste pra saber quais são os catodos e quais são os anodos?

Compartilhar este post


Link para o post
Compartilhar em outros sites
 #include <16F628a.h> //Microcontrolador utilizado
#fuses hs,nowdt,noprotect,put,brownout,mclr,nolvp,nocpd
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(
#byte porta = 0x05
#byte portb = 0x06
#bit clk =porta.1
int n;
const unsigned char table[1][5] = {{0B10111111
0B10111111
0B10000000
0B10111111
0B10111111}};

void main()
{
set_tris_b(0);
set_tris_a(1);
while(1){
clk=0;
for (n=0;n<5;n++) {
clk=1;
output_b(table[0][n]);

delay_us(100);

}
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
 #include <16F628a.h> //Microcontrolador utilizado
#fuses hs,nowdt,noprotect,put,brownout,mclr,nolvp,nocpd
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(
#byte porta = 0x05
#byte portb = 0x06
#bit clk =porta.1
int n;
const unsigned char table[1][5] = {{0B10111111
0B10111111
0B10000000
0B10111111
0B10111111}};

void main()
{
set_tris_b(0);
set_tris_a(1);
while(1){
clk=0;
for (n=0;n<5;n++) {
clk=1;
output_b(table[0][n]);

delay_us(100);

}
}
}

post-299450-13884961489239_thumb.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites
voce posicionou bem a matriz? Com os catodos no PIC e os anodos no registro?

voce posicionou bem a matriz? Com os catodos no PIC e os anodos no registro?

Faça antes um teste pra saber quais são os catodos e quais são os anodos?

Realmente estava ao contrario,mudei para o jeito que você falou. Mais eu não consegui entender qual a diferença. Era so mudar no programa não. Ao invés de mandar 1 mandar 0.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo programa a matriz activa-se a baixo na parte que liga no PIC (por exemplo pra activar a primeira coluna - 0b11111110) portanto é aí que se liga os catodos. E envia-se os dados em serie atraves do registro, aí liga-se os anodos.

Podia-se trocar a logica no programa, mas creio que essa é mesmo a melhor forma.

Editado por LEOPUENA

Compartilhar este post


Link para o post
Compartilhar em outros sites

matriz8x32j.jpg

Virei as matrizes e adicionei uma ao lado para mostrar a configuração dos led(anodo catodo)

Agora quem controla as colunas são os Shift Register e o pic controla as linhas

Consegui fazer tipo uma varredura mais foi com a coluna inteira como mostra na figura, nao sei se o programa esta certo, se tiver o que eu devo fazer pra continuar. Como eu vou adicionar os valores binarios correspondentes as linhas para formar uma letra no pic?

Segue o programa

#include <16F877A.h> // identifica microcontrolador alvo
#use delay (clock=4000000) // <- define cristal para 4Mhz. Para outros valores, mude e recompile.

#INCLUDE <MATH.H>
#DEFINE EEPROM_SCL PIN_E2
#DEFINE EEPROM_SDA PIN_E3
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD


#define RDD_DATA PIN_B1
#define RDD_CLOCK PIN_B0
#BYTE PORTD = 0x08
#BYTE PORTB = 0x06
#BYTE PORTD_TRIS = 0x88
#BYTE PORTB_TRIS = 0x86
void fConfigurar_portas(void);
void fRDD_send_data0(void);
void fRDD_send_data1(void);

void main(){


int8 i,j;
fConfigurar_portas();
output_low(RDD_CLOCK); //clock = Bajo
output_low(RDD_DATA);
//
//------Dibujo las filas una a una -----
//

//i=limha
//j=coluna
while (TRUE){


//
PORTD = 0b00000000; //Filas acendidas.

for (i=0;i<1;i++) {fRDD_send_data0();}

for (i=0;i<24;i++) {
fRDD_send_data1();

PORTD = PORTD /2 ;
delay_ms(100);

}
}//Fin while
}//Fin main

void fConfigurar_portas(void){

PORTB_TRIS = 0b00000000; //1 = ENTRADA, 0 = SALIDA
PORTD_TRIS = 0b00000000; //1=ENTRADA, 0=SALIDA
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
}

//--------------------------------------------------
//---Envia un 0 al registro de desplazamiento:
//--------------------------------------------------
void fRDD_send_data0(void){
output_high(RDD_DATA);
delay_us(2);
output_low(RDD_CLOCK);
delay_us(2);
output_high(RDD_CLOCK);
}
//--------------------------------------------------
//---Envia un 1 al registro de desplazamiento:
//--------------------------------------------------
void fRDD_send_data1(void){
output_low(RDD_DATA);
delay_us(2);
output_low(RDD_CLOCK);
delay_us(2);
output_high(RDD_CLOCK);
}

post-738360-13884961490517_thumb.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja altero o codigo mas se não quiseçe era so por portas nand que funciona na saida do 4094 antes de ir para a matriz

a primeira vez que fiz não entendia o que acontecia mas depois prestanu bem a atenção identifique que esse era o erro não tinha paciencia de muda o cod e fiz isso deu certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem um erro na imagem, a matriz de exemplo não está na mesma posição das outras. Contudo a ideia é essa, o PIC controla as linhas com sinal baixo (catodos) e os registros controlam as colunas com sinal alto (anodos).

PORTD = 0b00000000;

Fazendo isso está a ser activada a linha toda e depois activa-se uma coluna que acende todos leds. o Ideal é iniciar tudo a 1 e ir activando as linhas desejadas (com logica baixa).

Se já entendeste tenta criar um programa teu, testando tudo parte por parte. Primeiro testa a varredura nas colunas activando os registros, e depois vai enviando os dados pelas linhas.

Olha esse programa que fiz agora. Tem muitas falhas ainda mas dá pra ver a ideia


//--VETOR COM MEU NOME----
int dado[24];
dado[0]=0;
dado[1]=0;
dado[2]=0b00111110;
dado[3]=0b00100000;
dado[4]=0b00100000;
dado[5]=0;
dado[10]=0b00111110;
dado[11]=0b00101010;
dado[12]=0b00100010;
dado[13]=0;
dado[14]=0;
dado[18]=0b00111110;
dado[19]=0b00100010;
dado[20]=0b00100010;
dado[21]=0b00111110;
dado[22]=0;
//--------------------------
....
output_high(data);
[B] for(i=0;i<24;i++){[/B] portd=dado[i-1];
output_d(0x00); //não testei bem essa parte
output_low(en);
delay_us(100);
output_high(en);
output_low(data);
delay_us(100);
[B]}[/B]
...

e aí está o circuito

post-838024-13884961532079_thumb.png

.

Editado por LEOPUENA
codigo e circuito

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou fazer o programa desde o inicio, fazer as modificações e depois posto com que ficou.

Obrigado ai a todos que estão ajudando!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal, boa noite a todos, 1° gostaria de agradecer a todos pelo assunto que sempre vai e vem, tem sempre alguem como eu que gosta de matriz de led, e sempre os que adoram ajudar... Bom estou procurando algo parecido com isso a tempo (Pic 16f877A e 4094), então se o colega LucasDiulbern, puder postar um link com a simulação fontes e tudo mais, talvez eu possa contribuir um pouquinho....

desde já agradeço...

Editado por axiel

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, eu meio que desisti de fazer essa matrix por enquanto. Nao estava tendo tempo nem paciencia para faze-la. Mais estou com um projeto novo de um cubo de led que vai comecar com 4x4x4 e depois irei fazer um de 8x8x8. Por mais incriver que pareca ta sendo muito mais fácil hehe. Depois posto alguns detalhes...

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






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

×