Ir ao conteúdo
  • Cadastre-se

PIC Display LCD 20x4 em C


Posts recomendados

Boa tarde.

Montei um sistema que utiliza um display de LCD de 20X4 que ao ligar funciona perfeitamente. Mas ao passar o tempo, dois ou mais dias ligado, o mesmo começa a mostrar caracteres estranhos, no local de algumas letras começa a piscar estes caracteres.

O mais estranho é que montei outro sistema igual, pois a placa é fresada em uma fresadora CNC, usei os mesmos componentes e o mesmo firmware no PIC, e este segundo não mostrar esta alteração. Sendo que tanto o display como os outros componentes são iguais, e comprados do mesmo fornecedor.

Como linguagem estou usando o C pelo CCS, e o uC é o 18F4550, a marca do LCD não sei mas tem o código MGD2004D-FL-YBS-02.

Se alguém tiver a solução ou uma ideia do que pode ser este problema, por favor comparti-lhe.

Link para o comentário
Compartilhar em outros sites

Já tive muitos problemas desse tipo. Resolvi escrevendo meu próprio driver para o controle do display lcd em assembly, um dia passo para linguagem C.

Aqui alguns pontos importantes:

De um delay de pelo menos 200 milissegundos antes de iniciar o display;

Garanta uma alimentação regulada e estável;

Prefira usar o pino RW do display e ler o busy flag, assim você tem certeza que o display está desocupado;

pelo menos de hora em hora, reinicialize o display.

Você está usando algum componente indutivo no circuito?

Está usando no modo 4 bits ou 8 bits?

Que driver está utilizando para interfacear o display? O próprio do CCS?

Link para o comentário
Compartilhar em outros sites

Obrigado projetos_afg pela colaboração...

Agora que você comentou da alimentação regulada e estável, verifiquei um detalhe na placa que está apresentando o problema estou usando um capacitor de 16V após os diodos, e na outra um de 25V, ambos por 1000uF, sendo que o transformador é de 12V, mas após a retificação, a corrente sobe para 16V, antes do regulador. Acho que este capacitor possa estar em curto por estar no limite, mas vou testar isso.

Em qual local você recomenda o delay? na inicialização do mesmo ou toda vez que escrever algo no LCD, pois não posso travar a aplicação por esse tempo senão a porta USB se desconecta.

O pino RW eu aterei por estar usando todos os pinos do PIC, e desculpe minha ignorância mas não sei o que é busy flag.

Uso no modo 4 bits tambérm por economia de pinos. Uso a biblioteca padrão do CCS, com algumas adaptações que achei na internet, para funcionar com RW aterado e com as quatro linhas.

Não estou usando nada indutivo, apenas o transformador, 4 diodos em ponte, um capacitor e um regulador LM7812 e em seguida um LM7805 para formar a fonte.

Como eu posso fazer para reiniciar o LCD sem reinicar o PIC? Acho que isso solucionaria o problema.

Link para o comentário
Compartilhar em outros sites

Antes de começar o programa principal dê um delay de 200ms (na hora que ligar o PIC).

O busy flag é um bit do display lcd que indica se o mesmo está ocupado. É possível escrever no display ignorando esse bit e dando delays de alguns microssegundos para esperar o lcd ficar desocupado. Pelas experiências que fiz aqui, usando delays funciona, mas apresenta o mesmo problema seu. Se você tem pinagem suficiente é sempre bom usar o pino RW.

Fiz um relógio com temperatura usando um display lcd desses. Deixei ele ligado já faz 1 semana, e ele funciona normalmente. Mas o meu driver está em assembly.

A rotina de inicialização do display lcd no driver ccs é lcd_init();

Eu já mexi com a porta USB, mas poucas vezes, e ainda não domino o protocolo. Você está usando a classe HID? Porque se for, eu usaria algum timer para gerar uma interrupção de 5 em 5ms para tanto ler dados quanto confirmar a presença para o computador. Assim a parte USB não travaria.

Link para o comentário
Compartilhar em outros sites

senão a porta USB se desconecta.

Não entendí esse ponto?

Deve ter algo incomum no seu driver USB(pic ou PC)?

voce poderia postar o esquema elétrico que esta usando no PIC,pois sei que o 18F2550 fica instável com USB se não fizer alguma alterações no Hardware,o 4550 dve ser igual.

Quando fiz meu primeiro protótipo para USB,usando o 18F2550,toda vez que tocava em alguns pinos de PORTs,ele reiniciava ou trava,mas achei a solução.

Link para o comentário
Compartilhar em outros sites

Obrigado mais uma vez projetos_afg e vtrx por terem colaborado.

Localizei uma fonte provável dos problemas: Ao aquecer a parte posterior do LCD os problemas começar (mais ou menos 25 graus celsius), ao afastá-lo da fonte de calor, o LCD funciona normalmente.

A rotina lcd_init(); eu uso na inicialização do programa, agora posso usá-lo de tempos em tempos para reinicar o LCD?

infelizmente não tenho mais pinos suficientes para poder usar a função RW do LCD.

Bom pelo que sei a função usb_task é necessária para manter a comunicação USB ativa, mas pelo que li aqui mesmo no fórum, não poderia estar dentro de um timer, agora não sei o porquê, e realmente depois que fiz isso coloquei-o dentro do loop principal, a comunicação ficou totalmente estável, comunicando com o PC por mais de semanas. Eu uso HID. Desta forma se for dado um time, a conexão cairá. Acredito que isso não seja verdade, mas eu não gostaria de mudar, pois demorou muito tempo para testar, e não possuo mais tempo para testar a comunicação USB.

Me preocupou bastante a falta de qualidade do displays, pois os dois são exatamente iguais, e um deles apresenta esse problema por aquecimento, agora se eu for usar em escala, precisarei testar um a um antes para ver se apresenta problemas. Mas esses são os percalços. Mas uma vez obrigado, e caso puderem me dar mais idéias me será muito útil.

Link para o comentário
Compartilhar em outros sites

  • 11 meses depois...
  • 9 meses depois...

é igual ao de um 16x2, as ligações são as mesmas, a diferença é no software, na forma de lidar com o display

 

http://2.bp.blogspot.com/-P9QI8H3UA1A/T2OqpeDPM9I/AAAAAAAAAiY/jnsUCfDi9i0/s400/ScreenHunter_13.bmp

 

obs: aconselho aterrar os pinos não usados do display (diferente do que o cara fez na imagem)

 

abrçs

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Olá pessoal

 

Não sei se meu problema é parecido com o de vocês mas tenho um LCD 20x4 (ebay) que funciona perfeitamente e há alguns dias chegaram dois LCDs 20x4 (aliexpress) que mostram os caracteres totalmente quebrados, parecidos com hieróglifos ou caracteres chinenes.

 

É muito estranho porque desencaixo do soquete o LCD que funciona e encaixo o outro (pequeno ajuste no contraste) e fica totlamente maluco. Os displays chegaram em boa embalagem, perfeitos, acredito que não foram testados na fábrica antes do envio.

 

Como posso enviar fotos aqui para mostrar (ou somente por mediafire)?

 

Grato

 

Sandro


Este é o LCD ruim:

 

https://www.mediafire.com/convkey/de10/rq5g9vc5t99it9l6g.jpg

 

Este é o LCD que funciona:

 

https://www.mediafire.com/convkey/9282/66zi3s63yxfv71o6g.jpg

 

 

Agradeço a ajuda.

 

Sandro

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Pior que parece chinês mesmo

rq5g9vc5t99it9l6g.jpg

66zi3s63yxfv71o6g.jpg

Sobre imagens... entre tags [i m g] e [/ i m g] sem espaços

[i m g] https://www.mediafire.com/convkey/9282/66zi3s63yxfv71o6g.jpg [/i m g]

Ou "mais opções" "selecionar arquivo" "Anexar este arquivo"

O espaçador pode dar curto. Coloque arruela isolante

abç

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Não muito estranho amigo. você recebeu um display com set de caracteres chineses. Sinceramente não sei se isso é alterável. Contacte o vendedor.

Dá um trabalho do cão mas em último caso você pode desenhar as letras. Bom,  isso só se for pra seu proprio uso e não um produto comercial.

 

De fato recentemente tive um dissabor semelhante com um produto que funciona a contento apenas na china.

Link para o comentário
Compartilhar em outros sites

Olá Ricardo, tudo bom?

 

Vez ou outra já li algo nos datasheets dos LCDs mas, como a maioria dos makers uso as bibliotecas LCD.C (16x2) e Flex_lcd.c (20x4) nos códigos . Esse LCD que funciona corretamente tem o controlador HD44780 enquanto que os outros tem um controlador "genérico". O estranho é que tenho vários 16x2 "genéricos" (nenhum HD44780) e todos funcionam perfeitamente, inclusive alguns retirados de sucata (big character) e  nunca deram esse tipo de tela. Estou contatando o vendedor do Aliexpress para resolver isso e vamos ver o que vai ocorrer. Abraço.

Link para o comentário
Compartilhar em outros sites

  • mês depois...

Alo pessoal, problema resolvido!!

 

Como uso gravação ICSP uso dois resistores 10K nos pinos PGC e PGD do PIC. Apenas reduzi os resistores para 4k7 e funconou normalmente.

 

Acredito que o LCD que funcionava corretamente conseguia trabalhar com corrente menor e o outro não, daí a necessidade de diminuir a resistencia da linha naqueles pinos.

 

Obrigados pelos posts.

 

Sandro

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

pra confirmar sua teoria, meça com osciloscópio os 2 casos e compare os níveis do sinal. Uma outra (bicuda) seria que a velocidade de comunicação está mui alta ou pulso muito rápido e com 4k7 os sinais excursionam melhor.

De toda a forma, agradecemos seu retorno!!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!