Handmades

Fórum Geral => Microchip PIC => Tópico iniciado por: otton em 12 de Dezembro de 2013, as 20:02:07



Título: Projeto com encorde PIC16F877A e BCD - AJUDA
Enviado por: otton em 12 de Dezembro de 2013, as 20:02:07
Pessoal :tup

Meu professor de sistemas digitais me passou um trabalho utilizando encoder.
O problema é o seguinte: quando eu girar o encoder no sentido horário tenho que incrementar uma variável e se girar no sentido anti-horário tenho que decrementar a mesma. Se o valor da variável for maior que 100 ou menor que 0 tenho que acender um led de aviso.

Até aqui já fiz o programa e o professor disse que está beleza mas ai que surge o problema: ele quer que eu mostre o valor da variável utilizando os BCD's da bancada, mas não tenho ideia de como vou fazer isso  )>| )>|.
Se vocês puderem ajudar fico grato.

Estou utilizando o programa MPLAB, o compilador HI-TECH e o PIC16F877A para fazer o código fonte, que seque abaixo:
Spoiler (clique para mostrar ou esconder)


Título: Re: Projeto com encorde PIC16F877A e BCD - AJUDA
Enviado por: xformer em 12 de Dezembro de 2013, as 20:30:05
O que você quer dizer com "BCD´s da bancada" ?


Título: Re: Projeto com encorde PIC16F877A e BCD - AJUDA
Enviado por: otton em 12 de Dezembro de 2013, as 20:51:42
xformer BCD's sao aqueles Displays que tem aqui na bancada do laboratório
são displays que mostram números de 0 a 9 cada um então vou ter que utilizar 3
mas não sei implementar isso no programa

http://en.wikipedia.org/wiki/Binary-coded_decimal
http://img2.mlstatic.com/display-led-7-segmentos-vermelho-anodo-comum-23-polegadas_MLB-O-237299430_3488.jpg


Título: Re: Projeto com encorde PIC16F877A e BCD - AJUDA
Enviado por: Dexter em 12 de Dezembro de 2013, as 20:59:22
http://www.pictronics.com.br/inicio/36-projetos/76-multiplexando-displays-de-7-segmentos-com-pic16f877a.html (http://www.pictronics.com.br/inicio/36-projetos/76-multiplexando-displays-de-7-segmentos-com-pic16f877a.html)

Isso?


Título: Re: Projeto com encorde PIC16F877A e BCD - AJUDA
Enviado por: otton em 12 de Dezembro de 2013, as 21:12:18
Dexter não tive exito ao acessar o site fui direcionada pra pagina principal
quanto ao bcd e esse mesmo de 7 seguimentos na bancada só tem os 4 pinos
para ligar uma saída digital de 8 bits, a parte de conversão de binário pra decimal
já ta tudo embutido na bancada.

eu quero saber como faço no programa (os codigos que tenho que usar) para mostrar
o numero da variável no bcd pois vou ligar alguma porta de saida do pic nesse display
abraços [beer]
   


Título: Re: Projeto com encorde PIC16F877A e BCD - AJUDA
Enviado por: xformer em 12 de Dezembro de 2013, as 21:48:47
Ok. O que você tem na sua bancada são conjuntos de displays acionados por decodificadores BCD para 7 segmentos (provavelmente CD4511).

BCD quer dizer Binary Coded Decimal. ou decimal codificado para binário.  Pra representar números decimais de 0 a 9 precisa de 4 bits, de 0000 a 1001.  Cada conjunto display-decodificador precisa então de 4 bits da dados.  O seu PIC vai precisar fornecer então 12 bits para 3 conjuntos display-decoder.

Sua variável RODA pode variar de 0 a 100, então o que você tem que fazer é criar 3 outras variáveis: CENTENA, DEZENA e UNIDADE e retirar da variável RODA quantas centenas inteiras ela tem, do resto das centenas, quantas dezenas inteiras e o restante vai para as unidades. Você sabe fazer isso né ?  (basta dividir RODA por 100, pegar a parte inteira e jogar na CENTENA, do resto dividir por 10, jogar a parte inteira e jogar na DEZENA e o resto jogar na UNIDADE).  Isso é básico e faz parte da teoria das bases numéricas.
Cada variável CENTENA, DEZENA e UNIDADE deve ser repassada para 4 bits de uma porta qualquer do PIC que serão ligadas aos conjuntos display-decoder, por ex. jogue a variável UNIDADE nas portas B0 a B3, DEZENA nas portas B4 a B7 e por fim CENTENA nas portas C0 a C3 (na verdade, só precisa de um bit, pois a centena não vai passar de 1, e aterrar os outros 3 bits do decoder BCD).

Só isso.


Título: Re: Projeto com encorde PIC16F877A e BCD - AJUDA
Enviado por: Dexter em 12 de Dezembro de 2013, as 21:54:32
O principio de funcionamento é o mesmo, a diferença é que você vai conectar somente 4 pinos do uC. Com 4 pinos/bits temos valores de 0 a 15 (0  a F), mas o BCD só reconhece os dez primeiros valores, portanto somente números.

Os "valores" são ligados aos pinos de entrada do BCD, você deve ligar (através de software) cada um dos dígitos por vez em alta velocidade (10 ms, por exemplo) assim você terá a impressão de estarem todos ligados.

Outra forma é você usar 4 bits menos significativos para representar a unidade e os 4 bits mais significativos para representar a dezena.
Nos dois casos converta o valor hexa para decimal de 2 bytes, mostre um valor por vez se usar o primeiro tipo de conexão (alternar os valores do display), ou rotacione 4 bits para esquerda o valor da dezena e faça lógica OU com a unidade e jogue para a porta, se estiver usando os 8 pinos de uma porta para ligar os BCDs.

A rotina de conversão Hexa/Decimal já existe por aí.

Esquema

http://www.cheers4all.com/2012/02/dsiplaying-two-bcd-on-one-port-of-pic16f877-2/
 (http://www.cheers4all.com/2012/02/dsiplaying-two-bcd-on-one-port-of-pic16f877-2/)

Rotina

http://www.piclist.com/techref/microchip/math/radix/index.htm (http://www.piclist.com/techref/microchip/math/radix/index.htm)


Título: Re: Projeto com encorde PIC16F877A e BCD - AJUDA
Enviado por: otton em 13 de Dezembro de 2013, as 08:42:33
valeu Dexter :tup
vou tentar aqui o trabalho e pra ser entregue na terça
ate la eu consigo vou ver se consigo gravar e mostra aqui
abraços


Título: Re: Projeto com encorde PIC16F877A e BCD - AJUDA
Enviado por: otton em 23 de Dezembro de 2013, as 22:45:45
Salve salve galera
venho informar que o projeto funcionou  (aplaus2)
obrigado a todos que me ajudaram


SimplePortal 2.3.3 © 2008-2010, SimplePortal