Ir ao conteúdo
  • Cadastre-se
Martins_eng

[Resolvido] Automação com 8051 - Contador de eventos

Recommended Posts

E ai galera beleza, estou prescisando de uma ajuda

Estou com um trabalho para fazer com o uC 8051 eu tenho que fazer um automação de esteira onde ei irei contar as peças que passam neste esteira mostrar em um display de 7 segmentos o numero de pçs e quando atingir um certo numero de peças parar a esteira e soar um alarme:

Condições:

Programa em ASM

display fica no Port P0

Entrada de contagem no Port P3 ( estou usando as INT0 e INT1 ) e botões de start , repet e stop

Saidas de alarme e motor no Port P2

Eu fiz um programa em ASM sem os display inicialmente porém ele de forma alguma efetua a contagem ja revisei ele varias vezes e não ache o erro

PEÇO POR FAVOR QUE ME AJUDEM

Editado por Martins_eng
Vício de linguagem no título.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Melhor colocar o desenho do hardware, exatamente como são ligadas as entradas dos contadores.

Já verificou se os pulso nos pinos T0 e T1 estão de acordo com as especificações do datasheet?

Editado por soschip

Compartilhar este post


Link para o post
Compartilhar em outros sites
Melhor colocar o desenho do hardware, exatamente como são ligadas as entradas dos contadores.

Já verificou se os pulso nos pinos T0 e T1 estão de acordo com as especificações do datasheet?

Estou colocando o circuito que estou usando para analisar no proteus.

Coloquei um subcircuito para gerar pulsos na entrada T0 e T1 como um pulso de clock o LED serve para sinalizar o alarme !! e os botões são de repete star e stop conforme esta descrito na tabela e EQU'S no programa em ASM.

post-440115-13884948958612_thumb.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que não usa as entradas dos contadores T0 e T1 (p3.4 e p3.5)?

Obs: Não uso proteus ou qualquer simulador pra eletrônica.

Não são 100% confiáveis.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Por que não usa as entradas dos contadores T0 e T1 (p3.4 e p3.5)?

Obs: Não uso proteus ou qualquer simulador pra eletrônica.

Não são 100% confiáveis.

Estou usando elas como contadores estou neste caso contando os pulso recebidos pelo circuito de clock estas chaves que estão colocadas nelas são para separa onde o pulso irá !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve, Martins_eng.

O que o soschip falou sobre simuladores é verdade. O que vale, de fato, é a descrição do circuito elétrico real. Poste aqui seu esquema elétrico integral. E, como ele disse, ao invés de usar interrupção, coloque sua entrada de contagem, diretamente em um dos timers do 51. Por comparação, é muito mais fácil estabelecer limites de contagem.

Não se esqueça tb, que o 51 conta na transição/nível negativa do pulso.

O programa é bem simples, mas, não posso te ajudar mais, porque eu nem me lembro mais como ASM funciona, sinceramente. O negócio agora é C, eheheheheheh

Mas, dá pra dar uns pitacos.

Boa sorte.

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites
... porque eu nem me lembro mais como ASM funciona, sinceramente. O negócio agora é C, eheheheheheh

Posso te re-ensinar... em troca de C....

é brincadeira! hehe

Martins,

Usar interrução para contar pulso pode não ser uma boa ideia, já que enquanto se trata uma interrupção, pode se perdem pulso(s).

Nos contadores você não precisa se preocupar. Basta apenas ler os valores em TL0 e TL1 para até 255 ou os pares TH0/TL0 e TH1/TL1 para contagens até 65535.

Editado por soschip

Compartilhar este post


Link para o post
Compartilhar em outros sites
Posso te re-ensinar... em troca de C....

é brincadeira! hehe

Martins,

Usar interrução para contar pulso pode não ser uma boa ideia, já que enquanto se trata uma interrupção, pode se perdem pulso(s).

Nos contadores você não precisa se preocupar. Basta apenas ler os valores em TL0 e TL1 para até 255 ou os pares TH0/TL0 e TH1/TL1 para contagens até 65535.

Fera fiz as alterações e estou utilizando as entradas P3.4e P3.5 e agora a durante a simulação da pra ver o T contarem os valores, porém ainda não tenho saida..... o que vocês querem dizer em descrever o projeto eletrico na integra

Compartilhar este post


Link para o post
Compartilhar em outros sites
Posso te re-ensinar... em troca de C....

é brincadeira! hehe

KKKKKKKKKKKKKKKKKKKKKKKKKKKK

Obrigado, soschip, mas, deixei as drogas já faz um tempo.... kkkkkkkkkkkkkkkk

Em contrapartida, posso te auxiliar no que eu conheço de C pro 51, sem querer nada em troca. Mas, quem tem que começar é você, né, velho?!?!

Eu já comecei, e agora não quero parar mais! ehehehehehehe

Martins_eng.

Posta aí seu circuito elétrico integral. Desde a parte da captação dos pulsos, até a fonte de alimentação. Fica mais fácil de analisar. E, as vezes, o problema está no hardware, não no software.

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, você parou com as dr... e eu não estou querendo começar.kkkk

mas, sem brincadeira,

tem um programa em ASM que não dá pra fazer de forma alguma em C ou Basic.

São alguns refletores RGB DMX12 que faço com apenas 1 AT89C2051, que nem tem detecção de erro na serial.

Têm que receber 512 bytes a 250KBps e ainda manter de 3 a 6 PWMs implementados por soft, reconhecer o canal programado de 1 a 512 e atualizar esses PWMs sem perder um quadro sequer e ainda fazer efeito strobo. Detalhe: termina o último byte e já começa o primeiro e os espaços entre os bytes são apenas 2 stop-bits.

Isso tudo eu uso menos de 500bytes. Comecei o programa no bascom, mas antes de programar metade, já foi os 2Kbytes de flash.

Poderia fazer com um mega8, mas uma empresa exige que seja o 2051 (questão de custo).

mas no começo do ano devo abandonar os 51s e ficar só com AVRs, pois os preços dos Tiny2313 e mega8 estão baixando bastante. Aí já posso começar a usar dro... desculpe, C...hehehe

Compartilhar este post


Link para o post
Compartilhar em outros sites
Pois é, você parou com as dr... e eu não estou querendo começar.kkkk

mas, sem brincadeira,

tem um programa em ASM que não dá pra fazer de forma alguma em C ou Basic.

São alguns refletores RGB DMX12 que faço com apenas 1 AT89C2051, que nem tem detecção de erro na serial.

Têm que receber 512 bytes a 250KBps e ainda manter de 3 a 6 PWMs implementados por soft, reconhecer o canal programado de 1 a 512 e atualizar esses PWMs sem perder um quadro sequer e ainda fazer efeito strobo. Detalhe: termina o último byte e já começa o primeiro e os espaços entre os bytes são apenas 2 stop-bits.

Isso tudo eu uso menos de 500bytes. Comecei o programa no bascom, mas antes de programar metade, já foi os 2Kbytes de flash.

Poderia fazer com um mega8, mas uma empresa exige que seja o 2051 (questão de custo).

mas no começo do ano devo abandonar os 51s e ficar só com AVRs, pois os preços dos Tiny2313 e mega8 estão baixando bastante. Aí já posso começar a usar dro... desculpe, C...hehehe

E ai galera beleza, estou postando o circuito na integra com os botões e os sensores ( optoacopladores ) que irão gerar os pulso nas estrada T0 e T1.

post-440115-13884948961743_thumb.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Reveja a parte do optoacoplador. Não precisa polarizar a base.

Nos coletores você só coloca resistores pull-up.

A ligação do coletor do transistor do opto com o anodo do led também não faz sentido!

Se for usar o botão reset, o mesmo deve ser em paralelo com C5. Do jeito que está não faz efeito quando pressionado, pois o capacitor já vai estar carregado pelo resistor.

Editado por soschip

Compartilhar este post


Link para o post
Compartilhar em outros sites
Reveja a parte do optoacoplador. Não precisa polarizar a base.

Nos coletores você só coloca resistores pull-up.

A ligação do coletor do transistor do opto com o anodo do led também não faz sentido!

Se for usar o botão reset, o mesmo deve ser em paralelo com C5. Do jeito que está não faz efeito quando pressionado, pois o capacitor já vai estar carregado pelo resistor.

E ai fiz a alteração colocando apenas um botão como se fosse uma chave fim de curso e toda fez que alguns deles a atuado o nivel na port (T0 ou T1) vai para nivel baixo

post-440115-13884948962542_thumb.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora é pensar no programa.

Como os contadores são crescentes, para contar de 155 a 100, basta complementar este valores antes de iniciá-los e quando ler eles no registro do contador.

Ex:

155d = 9Bh = 64h complemantado

100d = 64h = 9bh

Então carregue o contador com 64h e leia-o inverido.

Assim:

mov a, tl1

cpl a

entendeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se mesmo assim, você ainda continuar tendo problemas com o sinal que você vai contar, na saída dos optos, é bom tb colocar portas schmitt-trigger, pra dar uma condicionada no sinal.

74HC14 é uma delas.

Veja essa sugestão:

[]'s

post-67551-13884948963188_thumb.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites
Se mesmo assim, você ainda continuar tendo problemas com o sinal que você vai contar, na saída dos optos, é bom tb colocar portas schmitt-trigger, pra dar uma condicionada no sinal.

74HC14 é uma delas.

Veja essa sugestão:

[]'s

Certo irei colocar este circuito nas entradas T0 e T1 para ver se ira dar tudo certo e assim que analisar postarei novamente !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ai galera tudo bem consegui efetuar a contagem agora mas , pra variar agora apos a contagem o certo seria eu pressionar o botao que esta na P3.0 que o botão de repete e ele reiniciar a contagem porém ele esta ficando o loop de DELAY,vocês podem me dar mais um ajudinha !!!

post-440115-13884949001055_thumb.jpg

Editado por Martins_eng

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi o que quis dizer...

Mas analisar um programa ASM que criamos já é difícil. Criado então por outra pessoa é quase impossível. Tenta fazer um fluxograma ou use português estruturado.

Vai ajudar você também na hora de escrever o programa.

http://www.ucb.br/programar/algoritmo/estruturasdecontrole.htm

Compartilhar este post


Link para o post
Compartilhar em outros sites
Não entendi o que quis dizer...

Mas analisar um programa ASM que criamos já é difícil. Criado então por outra pessoa é quase impossível. Tenta fazer um fluxograma ou use português estruturado.

Vai ajudar você também na hora de escrever o programa.

http://www.ucb.br/programar/algoritmo/estruturasdecontrole.htm

E ai fera funcionou bem agora, acertei alguns detalhes e usei as dicas que vocês me passaram e deu certo el conto um numero peças ele seta uma saida de alarme e apos pressionar um botão ele volta a contar e reseta os Contadores e as saidas de alarme tudo correto.

Agora vou fazer a segunda parte que e colocar o numero de peças contadas num display de leds, ja volto a postar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que bom, amigo.

Se dedicando assim você vai longe!

Se ainda não tem muita experiência, aproveite para fazer testes de rotinas de formas diferentes, se tibver tempo, é claro.

Eu quando pego um projeto, aproveito pra testar tantas quantas forem as formas possíveis de funcionar e assim vou aumentando minha biblioteca...

Compartilhar este post


Link para o post
Compartilhar em outros sites
Que bom, amigo.

Se dedicando assim você vai longe!

Se ainda não tem muita experiência, aproveite para fazer testes de rotinas de formas diferentes, se tibver tempo, é claro.

Eu quando pego um projeto, aproveito pra testar tantas quantas forem as formas possíveis de funcionar e assim vou aumentando minha biblioteca...

E ai fera tudo bem, estou com uma duvida fiz a logica do display de les usando uma tabela na qual utilizo os ponteiros sem os mesmo os proprios valores em Hex relacionado com o binarios e colocos os mesmo na porta P0

Mas exite um outro jeito onde eu carrego os valores dos cotadores faço uma divisão por 0A0H ( 10 ) e coloco no port P0, você tem alguma suges~tão de como seria alogica no segundo caso !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Não entendi!

Dê um exemplo do que quer que saia na porta.

Por exemplo contador vai fazer uma contagem de 0 ate 63h ou de 0 a 99d

para cada valor que ele contar devera sair o correspondente na porta P0 para uma seguencia BCD ou se tiver o valor 9 no contador tevera sair na porta P0 o valor 1001b no port P7 a P4 por exemplo !!!

Editado por Martins_eng

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, mas ele já sai em binário. Quem transforma ele em 7 segmentos é o 4511 !!!

Meça os níveis lógicos do port e verá que o 93 que aparece no display, por exemplo, sai na verdade 10010011 em P.0 (P0.7.....P0.0)

Compartilhar este post


Link para o post
Compartilhar em outros sites
Amigo, mas ele já sai em binário. Quem transforma ele em 7 segmentos é o 4511 !!!

Meça os níveis lógicos do port e verá que o 93 que aparece no display, por exemplo, sai na verdade 10010011 em P.0 (P0.7.....P0.0)

E ai beleza cara estava agora mesmo trabalhando no meu projeto, mas eu me expliquei mal minha dificuldade e de como colher os dados do T0 ( P3.4) e colocar no port P0 e mandar para os dois 4511 que irão converter para os display's

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

×