Ola boa tarde pessoal, como alguns sabem , ou me acompanham estou montando Cubo de leds 8x8x8, quero fazer animação não tenho muita pratica em programação.

    Direto ao assunto , como o CI 74HC595 registrador de deslocamento , alguns programas vejo postam,usam mais a forma binaria para representar a saida quer habilitar.

     Mas quero algo mais facil para mim , fazer animação , colocar em Hexadecimal ,não ficaria muito extenso na hora colocar os dados para a animação. em vez colocar bits.

     Queria ajuda como fazer essa programação para colocar esses dados e visualizar nas saidas do CI

sendo assim  00h a FFh, não achei nada sobre isso ,fazer com este circuito 74HC595.

  

     Também na sequencia algo com 74HC138 para fazer assim ... as animações do cubo depende eixo X.Y.Z, o eixo Y seria comandado pelo 74HC138, então cada animação que faria com 74HC595, poderia fazer funcionar junto outro circuito habilitando as saidas correspondentes a animação nos eixos

   Obrigado seria uma luz para a sequencia de progamação sobre esses circuitos e como chamar eles para atuarem em conjuntos.

Exibições: 1951

Responder esta

Respostas a este tópico

A ideia do LS595 é economizar I/O (pinos do microcontrolador). Com ele vc consegue ligar "infinitos" leds com 1 pino só. Só que quanto mais vc coloca menos rápido vc consegue modificar o estado. Mas como do outro lado tem "apenas" uma pessoa, com um olho que não consegue diferenciar se está aceso ou piscando se piscar mais rápido que uns 25Hz, ta otimo...

A solução paralela seria o LS373, que tem um irmão mais fácil de ligar, o LS573 (por ser entrada de um lado e saida do outro). Nele vc entra com os dados em paralelo e dá um clock. Aih ele retem a informação até um novo clock.

Já o LS138 provavelmente no circuito que vc está vendo é do outro lado (se um está no catodo o outro está no anodo). A ideia é que seria possivel ligar por vez apenas uma linha ou coluna ou camada. Com a ajuda dele vc gasta apenas 3 ios para acionar uma de 8 possibilidades.

V se é isso..

Olá, Sérgio,

Poste o código que fica mais fácil ajudar.

Abraços.

Ahhh, tinha entendido que vc queria um hardware que fizesse a função em paralelo...

Agora entendi que vc apenas quer escrever no texto em C os binarios como hexa...

Eh isso ?

Basta colocar 0x1e por ex para 1Eh. 

Alguns compiladores "não gostam" de numeros começados com letras, então as vezes eh preciso colocar por ex 0x0fe no lugar de 0xfe por ex. (eu escrevo sempre assim, por vicio).

Mais sobre:

http://www.arduino.cc/en/Reference/IntegerConstants

Eh isso ?

Seguindo o padrão ANSI deve poupar eventuais problemas: "\xFF\xEA", etc.

A minha dica é vc encapsular o acesso aos LEDs como uma classe, para facilitar a sua vida. Uma coisa que fique assim:

Cubo.Ligar(x,y,z)

onde x,y e z são as coordenadas do LED a ser ligado.

"Toda a mágica" dos CIs ficaria dentro da classe. Acho que vc já viu a que eu fiz prá ligar display de LED. Na mesma linha.

Bicho, o melhor jeito de "despoluir" o código, sejam as máscaras cadastradas em binário ou hexa é colocar o código numa classe separada.

Quanto a converter as máscaras, basta vc usar a calculadora do Windows no modo Programmer para converter prá hexa. Só que, no seu caso, o modo binário é melhor na minha opinião, porque representa o que liga e o que desliga.

Parabéns pelos progressos!

Uma saída legal e barata seria vc arrumar um breakout micro SD e gravar os desenhos de alguma forma lá. Aí vc leria o desenho do SD e aplicaria funções de transformação (giro, aumento etc).

Sem ver seu circuito não dá pra palpitar mto, mas o normal seria:

Vc seleciona 0,0,0 (manda 0,0 e 0) para os pinos do Y (se é ele que ta no LS138) e escreve no outro (X???) o valor, seja hexa ou binario (isso só faz difença para a legibilidade do codigo. depois da primeira passada do compilador tudo vira numero do mesmo jeito (identico)).

Feito isso aguarde um instante.

Agora escreva 0,0,1 e outro dado. Esse dado vai aparecer nos pxs leds.

Aguarde mais um instante.

Repete para 0,1,0....

Primeiro tente acender ok uma linha, por ex com um 0xAA (um sim e um não).

Depois 2 linhas, por ex com um 0xAA numa e 0x55 noutra.... Aih vai indo.

Fica melhor com um for(;;) lendo de uma matriz.

Fica melhor ainda se em vez de fazer um tripão com delay vc usar uma interrupção de tempo com um contador para indexar de onde ler e para onde mandar ). 

Acho que para um inicio já ta otimo se vc fizer um quadrado ou coisa assim. Se ele rodar por ex já ta show !

Mas se quiser fazer um negocio sério sério mesmo sugiro dar uma olhada num programa de desenho 3D.  Por ex o 3DMAX com o plugin PandaExporter. ele exporta para um formato .x (directx) que pode ser texto (vc escolhe binario ou texto). Aih daria pra fazer um programa (melhor no PC) pra converter um arquivo .x para uma matriz compativel com seu codigo. Daih eh só dar um #include.

Acho que qualquer programa 3D acaba gerando arquivos texto. seja .x, .dwg, ou .stl Tem que fazer um quadradinho de 10x10x10 por ex, salvar e abrir com o notepad pra ver se enxerga lá as coordenadas.

Vc está no caminho certo é só implementar...

Algo como:

unsigned char i,dado;

//Inde i = contador de bits e dado=dado a mandar;

For (i=0;i!=7;i++) { if (((dado >> i) & 1)!=0) Manda1propinodedado() else Manda0propinodedado;

                                Manda0propinodeclock();

                                Delay(1); // ou nem poe

                                Manda1propinodeclock();

}

   Por ex deve carregar esse teu shift register

  Aih é só acionar a linha que vc quer acender conforme esse padrão.

Esse for que eu sugeri no fim é mais ou menos o ShiftOut que vem pronto....

Não conhecia.

Vc viu essa pagina:

http://www.arduino.cc/en/Tutorial/ShiftOut

Tem exemplo passo a passo..

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço