Ir ao conteúdo

Pic 16F877A - Alterar programação C para utilizar display 7 segmentos catodo comum


TECHNOSAT

Posts recomendados

Postado

Boa tarde amigos. Mais um vez recorro à experiência do pessoal deste forum para tentar resolver um "probleminha" de programação.

Estou com um projeto completo de um relógio digital, calendario e termômetro que muito me agradou por utilizar display de sete segmentos. Não quero usar o LCD pois com o display da para ver de uma distância maior.

Ocorre que este projeto utiliza o duplo display sete segmentos ANODO COMUM, inexistente em minha cidade. Se for tecnicamente possível, gostaria de saber se alguém poderia fazer a alteração no programa em C do arquivo em anexo para funcionamento com CATODO COMUM, componente muito mais comum.

Trata-se de montagem não comercial e não entendo praticamente nada da linguagem C pois optei pelo BASIC.

Obs: Percebi que este circuito não apresenta os resistores limitadores de corrente. Apesar de estar multiplexado, creio que devam ser acrescentados, ou não?

http://www.mediafire.com/?eeakaxykfit7avv#!

Postado

Caro Technosat, o ideal é você postar o seu código para que possamos ajuda-lo a adequa-lo às suas necessidades. No geral, se o display original é anodo comum, isso significa que os pinos do uC estão drenando corrente, isso porque, os anodos comuns estão conectados ao positivo da fonte. Se estiver falando em C com compilador CCS, a alteração seria algo do tipo alterar "output_low" dos pinos dos barramentos para "output_high". É claro que você deverá alterar, também, o seu hardware, ligando os catodos comuns dos displays ao negativo da fonte e os segmentos aos pinos do uC.

Quanto à questão dos resistores: alguns displays possuem mais de um led por segmento, ligados em série. Então, cada um introduz uma queda de tensão e a queda de tensão total possibilita ligar o segmento diretamente ao pino do uC. Se você for utilizar um display comum, de led único por segmento, provavelmente terá que colocar resistores nos segmentos.

Bons trabalhos.

Advtec.

Postado
Caro Technosat, o ideal é você postar o seu código para que possamos ajuda-lo a adequa-lo às suas necessidades. Se você for utilizar um display comum, de led único por segmento, provavelmente terá que colocar resistores nos segmentos.

Bons trabalhos.

Advtec.

Caro Advtec, agradeço pela resposta.

Quanto ao código, creio eu que esteja postado no link abaixo:

http://www.mediafire.com/?eeakaxykfit7avv#!

Se não fiz nada de errado, no link acima estão inseridos em extensão .rar o circuito eletrico em proteus, o arquivo c (que gostaria de ver modificado) e o arquivo .hex para os amigos verem que já funciona perfeitamente com o duplo display sete segmentos ANDODO COMUM que eu gostaria de passar para CATODO COMUM, se for possível é claro. Como disse, não tem nenhuma conotação comercial, apenas gostaria de presentear a patroa com um relogio diferente para ela não me criticar tanto quando fico horas no quarto da bagunça queimando placas..rs^_^

Quanto à questão dos resistores limitadores, não se preocupe, é coisa simples de se resolver com alguns testes, não é o foco do problema.

Agradeço grandiosamente a sua ajuda.

Postado

......Talves seja simples......

Faça as alterações necessárias no hardware, no soft é só inverter alguns bits, mude a linha seguinte

const int display_digit[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};  // ortak anotlu için   

por

const int display_digit[10]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF};  // ortak [B]catotlu[/B] için   

e na função display_tara(), sicaklik_tara, gecis_animasyon() e outras do genero inverte os bits de cada output_d();

ex:

output_d(0b00000001); ---> output_d(0b11111110);

????? e que língua é essa ??????? :confused:

Postado
......Talves seja simples......

Faça as alterações necessárias no hardware, no soft é só inverter alguns bits, mude a linha seguinte

const int display_digit[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};  // ortak anotlu için   

por

const int display_digit[10]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF};  // ortak [B]catotlu[/B] için   

e na função display_tara(), sicaklik_tara, gecis_animasyon() e outras do genero inverte os bits de cada output_d();

ex:

output_d(0b00000001); ---> output_d(0b11111110);

????? e que língua é essa ??????? :confused:

Obrigado pelas dicas Leopuena.....Mas como meu CCS expirou a experiência, terei primeiro que procurar uma "alternativa genérica" para trabalhar com a linguagem C em questão, que, aliás, não domino nada pois sou apenas hobbysta em programação e preferi o BASIC por ter achado um pouquinho mais fácil, embora eu deva reconhecer que a linguagem C parece estar se tornando universal em programação de microcontroladores.

Quanto à questão de acerto de hardware, isto eu domino bem e não representará qualquer problema as alterações que se fizerem necessárias.

Se alguém se habilitar em fazer as alterações sugeridas pelo amigo, testar e postar o .hex eu agradeceria.

Ah, a origem deste projeto é de um site turco por isso a linguagem, creio eu, que também seja em turco.

Agradeço a ajuda de todos e o projeto está a disposição para mudanças e melhorias que espero que sejam compartilhadas com todos do Fórum.

Esse projetinho ficou legal,acho que vou montar um,mas vou usar um pic menor.

PS:Só lembrando que o código tem um pequeno erro.

Saudações vtrx. também gostei muito deste projeto e gostaria muito mais se pudesse fazer um para uso aqui em casa. Já montei relogios simples com PIC 16F84A que funcionam mutissimo bem, mas este certamente seria especial se eu conseguisse montá-lo, é claro.

Com a utilizaçãode um PIC menor não haveria perdas de funções como do termometro por exemplo?

Apesar de não manjar de C, por curiosidade, qual seria este erro no código?

E, por fim, caso tenha êxito na modificação do projeto, se possivel, gostaria de pedir que compartilhasse conosco.

Agradeço pela sua ajuda e a de todos.

Postado
Com a utilizaçãode um PIC menor não haveria perdas de funções como do termometro por exemplo?

Escolheria um PIC com 20 pinos e com ADC.

Apesar de não manjar de C, por curiosidade, qual seria este erro no código?

Porque não fazemos um acordo?

Muitas pessoas aqui podem te passar um código funcionando como voce deseja.

voce não poderia montar o Hrdware,do jeito que voce quer,e postar para vermos funcionar?

Postado
Porque não fazemos um acordo?

Muitas pessoas aqui podem te passar um código funcionando como voce deseja.

voce não poderia montar o Hrdware,do jeito que voce quer,e postar para vermos funcionar?

O hardware é o que está no link da primeira postagem, com única diferença de que 03 displays 7 segmentos duplos ANODO COMUM seriam trocados para 03 de CATODO COMUM. O projeto do jeito que está hoje funciona perfeitamente no Proteus, por isso estranhei sua colocação sobre a existência de um erro na programação. Mas, se ao final não tiver jeito de modificar vou tentar conseguir o componentes e montar do jeito que está mesmo.

Thanks.

Postado

caro TECHNOSAT, quando voce quiser uma ajuda, por favor, de um print do esquemático, e cole o codigo no forum, é chato ter que ficar baixando as coisas, imagine se fosse te que baixar os arquivos de cada topico?

ajude aos colegas a poder e ajudar.

abraço.

por favor considere esta mensagem como uma critica construtiva.

Postado
caro TECHNOSAT, quando voce quiser uma ajuda, por favor, de um print do esquemático, e cole o codigo no forum, é chato ter que ficar baixando as coisas, imagine se fosse te que baixar os arquivos de cada topico?

ajude aos colegas a poder e ajudar.

abraço.

por favor considere esta mensagem como uma critica construtiva.

Caro arh, peço desculpas pela inexperiência.

Em minha inocência, imaginei que seria mais fácil para todos simplesmente baixarem o arquivo proteus e ver o sistema funcionando imediatamente ao invés de terem que ficar desenhando a partir de uma fotografia.

Mas, refletindo melhor, agora me dou conta que nem todos podem ter o proteus disponivel e ficariam sem entender a real magnitude do problema.

Corrigindo, segue a foto do projeto já com os displays CATODO COMUM. Agradeço pela dica.

http://imageshack.us/photo/my-images/21/fotoprojetopic16f877aam.jpg/

Não sei se alguem te passou,mas caso voce monte um,tem como postar a foto??

-> Arquivo Compilador e modificado<-

Caro vtrx. Fiz as modificações no hardware proteus e testei o arquivo que voce mandou. Ao meu ver, só posso dizer que ficou PERFEITO. Agradeço imensamente a sua ajuda.

Já tenho 99% dos componentes, só falta o RTC DS1302 que vou encomendar no ML.

Quanto à montagem, vou desenvolver a placa PCI no ARES e terei imenso prazer em compartilhar com todos daqui os arquivos e as fotos da montagem. Costumo montar em face simples.

A título de exemplo e para quem quiser montar um OUTRO relógio extremamente simples e perfeitamente funcional com o PIC 16F84A verifiquem o tópico abaixo. No anexo deste, além do programa, está a PCI que desenvolvi para o projeto pronto para montagem. Montei este projeto e funciona perfeitamente.

http://forum.clubedohardware.com.br/resolvido-ajuda-relogio/1079279?t=1079279

Enfim, graças a ajuda de todos aqui e especialemnte do amigo vtrx, dou o caso como resolvido, ficando a critério do nobre moderador decidir se encerra ou aguarda a postagem das fotos e PCI que irei confeccionar para montagem deste projeto.

Obrigado a todos.

Postado

observando o esquemático fiquei curioso. tenho um 877 pra chegar da china, vou tentar fazer um pra mim,com algumas coisinhas por brincadeira.

boa sorte ai amigão, poste as fotos quando possível.

Postado
observando o esquemático fiquei curioso. tenho um 877 pra chegar da china, vou tentar fazer um pra mim,com algumas coisinhas por brincadeira.

boa sorte ai amigão, poste as fotos quando possível.

Saudações arh... É um projetinho bastante interessante.

Entretanto, depois de deixar simulando no proteus por várias horas, percebi a ocorrência de pequenos "slags" na hora e no calendário. Não sei se causado pela simulação em si ou algum problema do código original. veja a foto abaixo:

http://imageshack.us/photo/my-images/507/fotoprojetopic16f877asl.jpg/

São bastante rápidas, tanto que tive muita dificuldade em capturar a tela com esta ocorrência. Como eu disse, não tenho intuito comercial então para mim não haverá muitos problemas.

Porém tenho que alertar os demais companheiros de fórum que também pretendam montar para outros fins que os slags poderão ocorrer no projeto final.

Por outro lado, se alguem souber identificar o problema que pode estar ocorrendo e postar a solução, acho que será de utilidade para todos.

Obs: verifiquem já fiz alterações e inseri os resistores limitadores de corrente. Talvez eu simplifique ainda mais o projeto eliminando alguns leds em excesso.

Abraço a todos.

Postado

É consequencia do Proteus estar simulando.

Toda simulaçao no proteus,na parte analógica,não é 100%.

Por isso a insistencia que monte um Hardware REAL pois pode ser que tenha que alterar alguma coisa no código.

Postado
É consequencia do Proteus estar simulando.

Toda simulaçao no proteus,na parte analógica,não é 100%.

Por isso a insistencia que monte um Hardware REAL pois pode ser que tenha que alterar alguma coisa no código.

Ok. Já estou trabalhando na placa PCI.

Postado
Ok. Já estou trabalhando na placa PCI.

Pessoal...Já quase terminei a montagen. tirei a fotos e tudo mais apenas estou impedido de posta-las aqui no Forum por falta de acesso à internet. Assim que possivel irei postá-las.

Postado
Pessoal... Assim que possivel irei postá-las.

Bom Pessoal... Conforme prometido, seguem as fotos e demais arquivos da montagem. Ainda não testei pois ainda não consegui o RTC e continuo sem internet :(

O arquivos proteus e ares anexos foi como imaginei que ficaria melhor a montagem, mas cada um que quiser montar deve ver quais são as suas necessidades e fazer as devidas alterações no s arquivos.

Apenas reforço que não testei o projeto pois o meu está incompleto. Apenas estou postando os arquivos com intuito de compartilhar e colaborar com outros integrantes que queiram também trabalhar neste projeto.

Como continuo sem internet, não estranhem se eu ficar algum tempo sem postar.

Seguem os links das fotos e arquivos:

http://www.mediafire.com/?lco90rjljgxowpw

http://imageshack.us/photo/my-images/809/dsc00472gv.jpg/

http://imageshack.us/photo/my-images/6/dsc00473b.jpg/

http://imageshack.us/photo/my-images/341/dsc00474py.jpg/

http://imageshack.us/photo/my-images/21/dsc00475tn.jpg/

http://imageshack.us/photo/my-images/502/dsc00476r.jpg/

  • mês depois...
Postado

Boa noite a todos.

Perdoem por estar ressucitando o tópico porém fiquei de dar retorno sobre a montagem aqui veiculada.

Após aguardar alguns meses pelo RTC 1302 que veio da China, terminei a montagem do circuito com o lay-out que postei anteriormente.

Apenas tive que acertar o lay out dos displays pois os digitos não estavam na sequência correta.

Feitos os acertos, a data e a hora funcionaram perfeitamente pois são funções ligadas ao RTC.

Entretanto estou enfrentando problemas com a temperatura (LM35). Inicialmente a medição se apresentava bastante oscilante, impossivel se ler. Estes problemas nunca aparecem na simulação. (_(

Após pesquisa, constatei tratar-se de harmônicos (sujeira) da fonte e, seguindo orientações, adicinei um capacitor de 10u à saida do LM35 ao GND, o que estabilizou os numeros nos displays.

Porém, nitidamente a leitura não está correspondendo à realidade visto que marcava no maximo 16º quando na verdade a temperatura era de uns 27º no momento. Quando colocado em contato com gelo, descia ao patamar minimo de 7º e proximo ao ferro de solda não passava dos 16°.

Pode ser algum parâmetro do programa que não saberei verificar pois não entendo nada de programação em C uma vez que optei pelo BASIC.

Aguardo ajuda e percepções de quem tenha também montado este projeto para tentar solucionar esta charada.

Technosat

Postado
Experimente ligar o capacitor entre o Terra e o + do LM,na saída a tensão que corresponde a temperatura vai ficar errada.

Obrigado vtrx pelo seus inestimáveis suporte e paciência.

Faz sentido sua colocação, afinal o LM mede exatamente a variação de tensão para cálculo da temperatura.

voce saberia qual o valor do capacitor para este caso e se eletrolitico ou cermico/poliester?

Sempre grato pela ajuda.

Technosat

Postado

Só experimentando,começe com 1µ.

O problema é que usamos um programa pronto e com fotos funcionando,então pode ser algo no Hardware que esta interferindo.

Postado
Só experimentando,começe com 1µ.

O problema é que usamos um programa pronto e com fotos funcionando,então pode ser algo no Hardware que esta interferindo.

Tem razão mais uma vez meu amigo. Creio que o fato de eu estar usando uma fonte comercial de 5V (de um roteador) possa também estar interferindo visto que alguns tópicos dão conta que diacs e triacs podem "sujar" bastante a fonte de alimentação do sistema. Preciso filtrar melhor essas imperfeições.

Vou fazer as experimentações necessárias, afinal falta pouco para o sucesso completo. O negócio é persistir:).

Postado

Bom, experimente ligar o terra do LM35 diretamente em cima do pino AGND do PIC, e coloque um resistor de 1K entre a saída do LM35 e o pino de entrada do conversor A/D do PIC. Nesse pino do conversor A/D voce coloca um capacitor eletrolítico de 10uF , ligado ao pino AGND do PIC.

Se isso não corrigir o problema e estabilizar a leitura, deve ter algo errado no programa...

Paulo

Postado
Bom, experimente ligar o terra do LM35 diretamente em cima do pino AGND do PIC, e coloque um resistor de 1K entre a saída do LM35 e o pino de entrada do conversor A/D do PIC. Nesse pino do conversor A/D voce coloca um capacitor eletrolítico de 10uF , ligado ao pino AGND do PIC.

Se isso não corrigir o problema e estabilizar a leitura, deve ter algo errado no programa...

Paulo

Professor Paulo.

Grato pelas orientações.

Farei os testes indicados e postarei os resultados.

Cordialmente.

Technosat

Postado

Opa meu amigo, obrigado, mas nada de professor , e sim pescador heheheh !

Existe um post no tutorial do PIC SIMULATOR IDE que é muiiiito parecido com isso que você quer fazer em C, até a multiplexação está lá, e o exemplo de cálculo de um circuito amplificador para otimizar a leitura do LM35, transformando a variação de algumas centenas de milivlts para 4,5 volts de amplitude ( o que permite uma resolução maior ) !

Dá uma olhada lá e veja se serve, ok ?

Paulo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!