Alguém já teve esse problema? E conseguiu solucionar?
Desde que começei a brincar com o arduino e LCD eu tenho esse problema, sempre que ligo a anergia da placa o controlador inica e funciona perfeitamente mas o display exibe apenas retangulos pretos. Depois de um reset ele "acorda" e passa a funcionar normalmente.
As vezes apenas a primeira linha fica com os retangulos e em rarissimas vezes ele inicia corretamente.
Alguma ideia do que pode ser feito?
Ele está ligado diretamente no arduino, 4 fios de dados e um pot para o contraste.
Valeu.,
Estou aqui tentando todas as alternativas.
Fiquei pensando se a inicialização do display não é mais lenta que a do atmega. Sendo assim decidi editar o arquivo LiquidCrystal.cpp e estou incluindo alguns delays no método contrutor. Mas até agora nada de funcionar. Testei com os 3 displays que tenho aqui e todos reagem da mesma forma.
Ainda estou na duvida se as funções de tempo (delay) são executadas na criação do objeto, sabem de alguma coisa?
[]s
Bom. Continuei hoje com min ha luta. Liguei o display no arduino usando o cristal (maximo clock) e nada. Na minha placa com o socilador interno e nada. Sempre os mesmos erros. Editei o cpp e inclui delays e umas outras coisas e nada. Testei agora com 4 displays diferentes e a mesma coisa. As vezes fica em branco, as vezes com a primeira linha toda preta, e as vezes cheiod e caracteres estranhos. E sem fazer nada de diferente em codigo ou fiação ele começa a funcionar. Nao consegui definir um padrao para os erros para ter o que buscar.
Achei a dica de usar um cap ligado no pino E e o terra. Mas nao ajudou.
Bom, pelo visto só é aqui que isso acontece, então o problema deve ser aqui. O fogo é que estou usando a biblioteca do Arduino e um Severino nos testes. Se funciona para os outros deveria funcionar aqui também.
Vou continaur com minha luta, e assim que achar a solução eu posto aqui, pode ser que apareça outro com o mesmo problema.
[]s
Consegui!!!
Bastou usar essa lib aqui: Slashdev
Só teve uma manha que eu demorei um tempo para me ligar. Tem que criar o objeto indicando que o display tem 2 linhas:
Lcd lcd = Lcd(16, FUNCTION_4BIT|FUNCTION_2LINE);