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.
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.

Editado por mrc-ninja

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.

Editado por soschip

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

Já montei o circuito, só falta o assembler, alguém poderia me ajudar? Não conheço a linguagem assembler.

imagem.jpg

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

Editado por soschip

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.

Editado por mrc-ninja

Compartilhar este post


Link para o post
Compartilhar em outros sites

As trocas devem ser a cada segundo ou a sequencia toda?

E são quantos que devem ser acesos por vez?

Lê o meu post.

Editado por miguelmhill
...

Compartilhar este post


Link para o post
Compartilhar em outros sites

não sei programar em assembler. A frequenia do crystal é de 12mhz

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.

Editado por soschip

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

Editado por miguelmhill

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, preciso de alguém que me ajude no programa de um circuito com o 8051, as inrfomações estão na 1ª pagina.

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

×