Ir ao conteúdo
  • Cadastre-se
NikolaTesla

RESOLVIDO Traduzindo a biblioteca 74hc595.C da CCS C compiler !

Recommended Posts

Pessoal Feliz Natal! estou a tempos tentando entender a biblioteca 74hc595 da ccs c compiler então fiz este tópicopara sanar as duvidas na medida que alguem vai postando algunha  coisa , aqui como contribuição vai meu projeto Muito obrigado!  // seta a esquerda#include <16f84.h> // bibliteca#use delay(clock=4000000) // frequencia#fuses xt,protect // fusiveis                                    #use fast_io( // economiza memoria       // variavel do tipo inteiro de 8bits e constante para economizar memoria                            int8 const matriz[221]={0b00000010,0b00000011,0b00000010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00110010,0b00010010,0b00000010,0b00001010,0b00000010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00110010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b000101100,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00110010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00110010,0b00010010,0b00000000,0b00000001,0b00000000,0b00000100,0b00000000,0b00000010,0b00000011,0b00000010,0b00001010,0b00000010,0b00001010,0b00000010,0b00001010,0b00000010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00110010,0b00010010, 0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00011010,0b00010010,0b00110010,0b00010010,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010010,0b00010011,0b00010010,0b00010001,0b00010000,0b00010001,0b00010000,0b00010100,0b00010000,0b00000000,0b00001000,0b00000000,0b00001000,0b00000000,0b00001000,0b00000000,0b00001000,0b00000000,0b00001000,0b00000000,0b00010000,0b00011000,0b00010000,0b00011000,0b00010000,0b00100000,0b00000000,0b00010000,0b00011000,0b00010000,0b00011000,0b00010000,0b00011000,0b00010000,0b00011000,0b00010000,0b00011000,0b00010000,0b00010000,0b00011000,0b00110000,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00010001,0b00010000,0b00000100}; void main (){ //função principal int  i; // Variavel set_tris_b(0x00);// seta os pino como entrada ou saídaset_tris_a(0xff);while (true){   // enquanto verdade, loop infinitofor(i=0;i<221;i++){ // laço for  output_b(matriz[i]); // chama o vetor ou os numeros binarios delay_us(25); // aqui você escolhe o tempo}}}

post-740568-0-90293400-1419642982_thumb.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderiam me explicar sobre este output_bit ? ? ?

e também if ((* (OE + (NUMBER_OF_74595-1)) & 0x80) == 0)

fica difícil saber sem realmente ter uma noção, aguem poderia me esclarecer algo mais???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala brother!

 

Não entendi que tipo de tradução você está tentando fazer; seria tradução para uma outra linguagem? caso sim, qual?

 

output_bit coloca em nível 0 ou 1 um determinado bit dos ports (A, B, C,...)

exemplo:

 

output_bit(PIN_B2,0); //coloca o pino B2 em nível 0

output_bit(PIN_B2,1); //coloca o pino B2 em nível 1

 

seria o mesmo (se tratando de sintaxe) que:

 

output_low(PIN_B2);//coloca o pino B2 em 0

output_high(PIN_B2);//coloca o pino B2 em 1

 

Já este if, não encontrei ele no código que você postou, precisaria ver por completo pra entender melhor.

 

Não entendi esse código aí. Acho que ele está sem a lógica correta, veja na linha onde envia os dados para os 595: output_b(matriz[i]);

 

Isso aí está muito estranho, não é assim que funciona, precisa enviar vários shifts no pino de entrada do 595, depois ativar as saídas.

 

 

Abraço.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

agradecemos a contribuição mas realmente tá bem confuso. Como dica procure entender o 74hc595 antes de sua biblioteca. Resumidamente é beeeem simples: 8 deslocamentos de bits formam um byte interno nele. Depois um chutinho empurra o byte todo pra fora. Depois de entender isso , esqueça  a lib e faça a sua. Então ... mãos a obra pois já entendeu!!

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agradeço os comentarios , e dei umas curtidas , é o seguinte , o projeto que postei esta funcionando, coloquei ate as imagens dos componentes que estão ai no proteus e como se liga, caso vocês por coriosidade quiserem ver se esse projeto realmente mostra a seta para a esquerda como esta na imagem , fiquem a vontade para testar que funciona mesmo ! o pic é o 16f84 ...

 

sobre o projeto simplesmente gostaria de converter para outro codigo , quando vocês testarem ele no proteus e ver que funciona mesmo! Valeu! o que eu queria era diminuir a quantidade de shifter 595 que usei , o que quero dizer é que aceito sujestões de como fazer este codigo de outra maneira (forma) "!Rsrsr! :D  

 

para vocês terem uma ideia os DATAS e STROBE já estão todos nos vetores , :D  :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

@NikolaTesla,

Sim, legal ver isso funcionar ! Mas sou da opinião da @Isadora Ferraz... Usar um 74HC595 é tão simples que não precisa de uma lib para ele.....

Já ligar 100 WS2811 e controlar todos eles ao mesmo tempo.... Isso sim é bem trabalhoso !

Paulo

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deve funcionar mesmo, só que a lógica está incorreta. Seu código ficou preso em somente mostrar as setas, e agora se você quiser que mostre depois das setas, algum outro caractere? Penso que você terá que adicionar ao código manualmente este caractere, mais uma vez seu sistema está fadado a mostrar somente isto que foi programado, ou seja, se o usuário não quiser mais este caractere? se ele quiser um outro, você terá que adicionar ou mudar um caractere somente pela programação. Deu pra entender onde quero chegar?

 

A primeira coisa a se fazer será seguir uma lógica onde os caracteres possam ser mudados pelo usuário e não pelo programador, entende!  Claro, a menos que seja exatamente isso o que você queira, mesmo que seja, siga a lógica correta que irá facilitar futuras implementações.

 

Qualquer coisa dá um feedback aí.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente colocar data e strobe nos vetores... fala sério! o que você anda bebendo? Mas o importante é que você entendeu o conceito.

isso do asm51 funciona bem...

#define clock RB0#defne data RB1#define stb RB2#define CLK clock=1;clock=0#define STB stb=1;stb=0void out595(unsigned char dado){unsigned char i;for (i=0;i<8;i++){data=dado;CLK;dado>>=1;}STB;}

tente fazer uma microanálise. mó moleza. De posse do entendimento, agora veja isso

 

http://forum.clubedohardware.com.br/topic/1038008-matriz-de-led-com-pic/page-5

 

Usa hc595. clique na figura que postei pra você ver a msg. Basicamente você deve varrer a matriz numa interrupção colocando cada bit em seu lugar na saída do hc595. Pra formar palavras ou desenhos, essencialmente é escrever na ram - matriz[ ]

 

não fale que não entendeu.

abç

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caramba ´ja nem sei mais o que dizer vocês já disseram tudo , é isso mesmo!!! pessoal! basta acrecentar rotina ou sub rotina de outro vetor 

para gerar outra imagem ou apertando um botão pega e muda a imagem ! mais K entre nois tem como vocês fazerem isso , essa seta pra esquerda com somente com os codigos da biblioteca 595 pra ver como funciona por favor , é isso que quero mesmo  ;)  vou curtir o comentario de vocês!! valeu!  

ViniciusKruz & isadora kkkkkkkkkkkkk Valeu mesmo  :lol:  :D 

kkkk caxaça cavalo branco  :D

 

me escrevi no teu canal lá no youtube kkk

 

Cara eu nem sabia que tu era fera , eu olhei a matriz de led que tu fizesse com PWM , ficou bem colorida bacana 

 

caso queira , e  sei que você pode , já sabendo que sou principiante poderia amigo fazer um exemplo dessa seta com essa biblioteca 595 somente pra iniciar sentir o cheiro da coisa! te agradeço amigo pela atenção! :eek:  

 

Apaz de Deus pra você ViniciusCruz e  agradeço a Deus  por você ter comentado ai desculpa ai qualquer coisa !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Nikola Tesla Amém!! pra você também!!

 

Eu tenho aqui é um projeto, só que não vai rodar em um f84 por falta de memória. Esse projeto está meio bagunçado porque abandonei ele antes de finalizar pois passei a usar os CIs max7219(e já descontinuei também; descobri os tlc5940 )hahahaha que doidera!!! é que a tecnologia me fascina. Esse TLC sim está me arrebentando.

 

Não tá organizado como os projetos das Isadoras Ferrazes por aí não mas funciona, vou te passo pra você brincar. Mas to avisando, a organização está um lixo, afinal eu não levei muito à diante, enquanto você organiza, vai aprendendo.

 

Testei em um 16f877 e 18f4550.

 

Abraço.

 

display.rar

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
unsigned char const tabela[]={0b00010000,0b00110000,0b01110000,0b11110000,0b01110000,0b00110000,0b00010000,0b00000000,0b00001000,0b00001100,0b00001110,0b00001111,0b00001110,0b00001100,0b00001000,0b00000000,//etc};

consegue ver as setas? Mentalize: dois 595: um pra tabela e outro pros anodos comuns. Agora imagine varrendo cada byte na saída do 595 numa interupção chute a 100Hz

...out595_1(0b00000000);//apaga leds - anodo comum - pra não aparecer fantasmasout595_2(tabela[i]); //padrão de bitsout595_1(1>>i); //acende uma linha por vez - anodo comumi++;if (i>7) i=0; //recomeça...

digitei on line...

Por enquanto é só...

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isadora  bacana esse teu codigo Simples igual e mais eficiente que o meu valeu Mesmo!! e Viniciuscruz e Paulo obrigado por tudo!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.





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

×