Ir ao conteúdo
  • Cadastre-se
mrc-ninja

Sequencial de 16 Leds‏

Recommended Posts

Olá pessoal, veio novamente a pedir ajuda, preciso que alguém faça o programa deste circuito:

8051-1.jpg

Os leds devem acender desta maneira com o push-button solto:

Ledsentido1push-button.gif

E com o push-button apertado deve acender assim:

Ledsentido2push-buttonapertado.gif

Agradeço aqueles que puderem ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Embora o meu forte não seja a programação de MCU's, algumas sugestões posso dar:

Sequencial de 16 Leds‏

Não precisa utilizar 16 saídas para este efeito...

Note que oito saídas já dão conta...

O O O O O O O O  O O O O O O O O
[COLOR=Red][U][B]O[/B][/U] O O O O O O O[/COLOR] O O O O O O O [U][B]O[/B][/U]
[COLOR=Red][U][B]O O[/B][/U] O O O O O O [/COLOR] O O O O O O [U][B]O O[/B][/U]
[COLOR=Red][U][B]O O O[/B][/U] O O O O O[/COLOR] O O O O O [U][B]O O O[/B][/U]
[COLOR=Red][U][B]O O O O[/B][/U] O O O O[/COLOR] O O O O [U][B]O O O O[/B][/U]
[COLOR=Red]O O [U][B]O O O O[/B][/U] O O[/COLOR] O O [U][B]O O O O[/B][/U] O O
[COLOR=Red]O O [U][B]O O O O[/B][/U] O O [/COLOR]O O [U][B]O O O O[/B][/U] O O
[COLOR=Red]O O O [U][B]O O O O[/B][/U] O[/COLOR] O [U][B]O O O O[/B][/U] O O O
[COLOR=Red]O O O O [U][B]O O O O[/B][/U][/COLOR] [U][B]O O O O[/B][/U] O O O O
[COLOR=Red]O O O O O [U][B]O O O[/B][/U][/COLOR] [U][B]O O O[/B][/U] O O O O O
[COLOR=Red]O O O O O O [U][B]O O[/B][/U][/COLOR] [U][B]O O[/B][/U] O O O O O O
[COLOR=Red]O O O O O O O [U][B]O[/B][/U][/COLOR] [U][B]O[/B][/U] O O O O O O O
[COLOR=Red]O O O O O O O O[/COLOR] O O O O O O O O

Este conjunto que eu destaquei em vermelho é o espelhamento do outro conjunto, em preto...

Compartilhar este post


Link para o post
Compartilhar em outros sites

mrc-ninja, não me leve a mal,

mas se já tivesse começado o desenho ou tentado, esse projeto já estaria adiantado ou pelo menos encaminhado.

Ainda mais que é só simulado...

Tente pelo menos fazer o desenho.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado por cabteixeira

Não precisa utilizar 16 saídas para este efeito...

Note que oito saídas já dão conta...

Cabteixeira, não é tão simples, pois ele não pode ligar os LEDs nem em série e nem em paralelo, pois a seta vira de lado e a sequencia também, além de usar mais de 1 ponto em cada linha da seta.

Analisei este efeito e não é um simples sequencial. É um painel de 16 x 13.

Portanto tem que ser multiplexado para obter tais efeitos.

Tem que trabalhar com 26bytes de RAM = 208bits ( 2 x 8 x 13 ) como se fossem uma memória de vídeo. Manipular esta memória e atualizar o display com varredura para que o olho não perceba que está sendo multiplexado.

Exemplos de projetos similares:

http://www.avrprojects.net/articles.php?lng=en&pg=86

Este é mais simples que o seu, pois são só 7 lilhas.

Este é mais parecido, com a diferença que você só vau usar a seta, mas o princípio é o mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só este circuito não dará o efeito que quer. Veja minha mensagem anterior.

Terá que ser matriz de LEDs 13 x 16 para fazer a seta ir e voltar.

Neste esquema só pode fazer acender um LED com efeito vai-e-vem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela que ele postou é a representação das linhas que ele quer que sejam jogadas na saída, e não a matriz toda. (excelente projeto mostrado ali pelo soschip).

Para isso, faça como disse o colega cabteixeira, pois os valores que desejas são apenas espelhados. Coloque o LED 9 em série com o 8, o LED 10 em série com o 7, e assim por diante.

Para o programa, utilize uma interrupção de temporização.

Provavelmente terás que contar diversas interrupções para executar uma troca de valor, senão será uma troca imperceptível por ser muito rápida.

Faça isso com uma contagem.

Nela, deve-se testar o pino desejado para o controle de direção.

Uma um registrador deve ser incrementado ou decrementado, dependendo do estado do pino para fazer a direção dos LEDs. Também tem que fazer os teste dos limites da contagem (de 0 a 12), recarregando o contador nos momentos apropriados.

Então faz uma cópia do valor do registrador para o acumulador e chama essa sub-rotina que pega o código (valor) para então jogar na porta. "LCALL VALOR"

O valor que estará no acumulador deve ser jogado na porta de saída escolhida.

Então é só esperar outro númedo de interrupções para fazer do novo.

VALOR:

mov dptr, #TABELA_LED

movc a, @a+dptr

ret

TABELA_LED:

db 11111111B

db 01111111B

db 00111111B

db 00011111B

db 00001111B

db 10000111B

db 11000011B

db 11100001B

db 11110000B

db 11111000B

db 11111100B

db 11111110B

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estão esquecendo que mesmo que se faça 1 lado o espelho do outro, mesmo assim ele terá que ver a imagem formada da seta pelo menos de um dos lados. Isto implica em ver uma matriz de 8 x 12 acesa em algumas linhas tem certos leds acesos e em outras linhas, outros LEDs. Eles deves ser vistos como se estivessem acesos ao mesmo tempo.

Pensem bem.

post-163362-13884949260341_thumb.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites
Só este circuito não dará o efeito que quer. Veja minha mensagem anterior.

Terá que ser matriz de LEDs 13 x 16 para fazer a seta ir e voltar.

Neste esquema só pode fazer acender um LED com efeito vai-e-vem.

Isso eu quero só uma linha e que os leds acendam do extremo para o meio da seguinte maneira acende os dois leds do extremo depois permanece o 1º led de cada lado aceso e acende o 2º, depois apaga o 1º led de cada lado e cende o 3º percmanecendo o 2º aceso, assim vai acende o seguinte e apaga o último sempre tendo dois aceso tudo em intervalos de 1 segundo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estava entendendo que todas as 'bolinhas' eram LEDs, que formariam uma seta. Então ali só representa a sequência de uma linha.

Usa o código disponível no meu site. Está pronto!

http://www.projekit.com/8051/asm51/part4.html

Use a dica do post #8. É fácil montar os códigos e está explicado lá.

Mais fácil que isto, não tem como.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Escrevi o programa, e comentei também.

Criei o arquivo de gravação .hex, e se quiser que te mante me envie um email.

;---------------------------------------------------------------------

; Sequencial LEDs, por Miguel Mannes Hillesheim, em 30/100/2008

SAIDA EQU P0 ; Saida para os LEDs.

CONTAGEM EQU 30H ; Posição de memória para contar a linha a ser mostrada (0 .. 12).

NUM_INTER EQU 31H ; Posição de memória para contagem das interrupções.

BOTAO EQU P2.0 ; Pino para teste (ativo em nível baixo)

LIM_INF EQU 0 ; Limite inferior de CONTAGEM

LIM_SUP EQU 12 ; Limite superior de CONTAGEM

CONST_NI EQU 125 ; Interrupções do timer necessárias para um segundo. = 1/T

CONST_TEMP EQU 6 ; TC0 modo 0 com prescaler e conta 250.

; Contante de tempo para T = 8ms.(f = 12,000 MHz)

;------------------------------------------------------------------------------------------

ORG 0

MOV IE, #10000010B ; Habilita interrupções a a interrupção do Tempotizador 0

MOV TMOD, #00000000B ; Confugura o TC0 como temporizador no modo zero.

; (instrução não necessária)

SJMP configuração ; Não há espaço sificiente

;------------------------------------------------------------------------------------------

ORG 0BH

MOV TH0, #CONST_TEMP ; Regarga da constante de tempo.

DJNZ NUM_INTER, SAI ; Decrementa e desvia se for diferente de zero.

MOV NUM_INTER, #CONST_NI ; Recarrega a constante, pois é zero.

JB BOTAO, INCREMENTA ; Teste do botão

DECREMENTA:

DEC CONTAGEM ; Decrementa contagem para mostrar o valor

MOV A, CONTAGEM ; Copia contagem para o Acumulador

CJNE A, #(LIM_INF-1), CONTINUA ; Testa se passou abaixo de zero, se não, contunua...

MOV CONTAGEM, #LIM_SUP ; Recarrega o limite superor em CONTAGEM

MOV A, CONTAGEM ; Move para o acumulador o valor de CONTAGEM

SJMP CONTINUA ; Depois de Ajustados os valores, continua...

INCREMENTA:

INC CONTAGEM ; Incrementa contagem para mostrar o valor

MOV A, CONTAGEM ; Copia contagem para o Acumulador

CJNE A, #(LIM_SUP+1), CONTINUA ; Testa se passou acima de doze, se não, contunua...

MOV CONTAGEM, #LIM_INF ; Recarrega o limite inferior em CONTAGEM

MOV A, CONTAGEM ; Move para o acumulador o valor de CONTAGEM

; Depois de Ajustados os valores, continua...

CONTINUA:

LCALL VALOR ; Subrotina de conversão de valor (usa valor do acumulador para

; pegar o valor correto.

MOV SAIDA, A ; Move para a saida o valor.

SAI:

RETI

;--------------------------------------------------------------------------------------------------

VALOR:

mov dptr, #TABELA_LED

movc a, @a+dptr

ret

TABELA_LED:

db 11111111B

db 01111111B

db 00111111B

db 00011111B

db 00001111B

db 10000111B

db 11000011B

db 11100001B

db 11110000B

db 11111000B

db 11111100B

db 11111110B

;---------------------------------------------------------------------------------------

configuração: ; Terminio das configurações

MOV CONTAGEM, #LIM_SUP ; Valor inicial de CONTAGEM

MOV NUM_INTER, #1 ; Para confirutat na primeira interrupçao.

SETB TR0 ; Liga o TC0

SETB TF0 ; Provoca uma interrupção forçada para iniciar a saída

SJMP $ ; Loop infinito (Espera de interrupção para mudar os valores)

END

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

×