Eu tenho um monitor LCD 16x2 padrão (eu acredito que seja compatível com Hitachi HD44780 - veja o resumo e as especificações abaixo), conectado a um Arduino Uno usando 4 pinos de dados, conforme descrito aqui , embora eu tenha adicionado 2x resistores de 220ohm em paralelo (ou seja, um Resistor de 110ohm) no pino 16 (terra da luz de fundo) e substituiu o pote por resistores estáticos para criar 4V no Vo.
Em resumo, o RW é conectado ao terra, e RS, Enable e Data4-7 são conectados aos pinos do Arduino, enquanto os Dados 0-3 estão flutuando.
Eu tenho outras coisas (sensores, um transistor com um SSR opto-isolado e um relé de rede, alguns botões) conectados a diferentes pinos do Arduino. O código que eu uso grava texto na tela várias vezes por segundo e, normalmente, a tela funciona perfeitamente.
No entanto, quando o relé fecha (leva cerca de 10ma e é controlado por um transistor que por sua vez é controlado por um dos pinos do Arduino), às vezes o LCD fica distorcido. Ele permanece distorcido normalmente até o próximo relé fechar, mas às vezes quando o relé é aberto, ou depois de mais alguns ciclos de abertura / fechamento para redefinir. O garbling sempre inicia e para ao mesmo tempo que o relé abre ou fecha.
Por "ilegível", quero dizer que toda vez que escrevo para ele após ser ilegível, em vez de escrever caracteres em inglês, recebo uma sequência de caracteres que normalmente não consigo identificar na folha de dados (embora alguns possam). Essa seqüência de caracteres distorcidos tende a se mover para a esquerda na tela enquanto escrevo um novo texto no LCD.
Estou confiante de que não é o próprio Arduino que está ficando confuso, enquanto escrevo o mesmo texto no monitor Serial ao mesmo tempo e não é ilegível.
Desde então, experimentei conectar o pino RW a uma saída do Arduino e o Data0-3 ao terra, mas isso não ajuda. Alimentei o dispositivo inteiro com uma bateria de 9V ou com USB, e isso não ajuda. Troquei a bateria ... nenhuma mudança.
A única coisa que parece funcionar é não ter nenhuma carga conectada ao relé, mas isso anula o objetivo :-)
Não tenho um analisador de sinal ou algo mais sofisticado que um multímetro, um laptop e um arduino ... Alguém tem alguma dica para me ajudar a depurar isso?
Folha de resumo do LCD: http://oomlout.com/LCDD/LCDD-SUMM-BC1602A.pdf
Especificação do LCD: http://oomlout.com/LCDD/LCDD-DATA-BC1602A.pdf
Exemplo de texto ilegível: