He estado probando con un LCD (el WH1602C-YGB-STK puntualmente) y puse entre el Arduino y éste un 74HC595 para poder controlarlo tan solo con 3 PINs.
La prueba me ha funcionado, pero me ha dado muchísimo dolor de cabeza, y creo que se debe a que en algún momento hay algún tipo de pérdida de sincronismo. Puede ser? Alguien sabe de esto?
Doy un poco más de detalle: Dado que las pruebas no me funcionaban (no se imprimía nada en el LCD o a veces aparecían caracteres raros), empecé a agregar Serial.print para debuguear. Analizando la salida del Serial Monitor, no detecté nada incorrecto, y cambié en el fuente para que en vez de imprimir en el LCD "Hola Mundo", imprimiera solamente "A". Y funcionó, obvio, para mi, por arte de magia ya que no había hecho un gran cambio. Así que opté por volver a poner el "Hola Mundo", y funcionó. Luego cambié el fuente para que se impriman los millis(), y funcionó!. Pero luego a esos milis los quise divir por 1000 para que muestre solo segundos y dejó de funcionar. Luego quise volver al "Hola Mundo" y ya no funcionaba. Obviamente probé resetear, desenchufé el USB y volví a enchufar, y nada. Pantalla en blanco.
Luego me puse a buscar en internet sobre esto, y pasados unos minutos, volví a probar subiendo la prueba del "Hola Mundo" y empezó a funcionar. Volví a probar lo de dividir x 1000 y funcionó.
Mas info: Al momento de postear el msg anterior, el LCD funcionaba bien. Luego desenchufé el USB, y volví a enchufarlo, y dejó de funcionar.
Lo que veo ahora es la pantalla toda vacía salvo el último caracter de la 1er fila que tiene un "?" y se nota al cursor parpadeando.
Veré cuando y como vuelve a funcionar y postearé nuevamente...
Sí, lo había visto ya y tengo el mismo problema. De hecho el primer comentario es mío. Pensé que era un cable flojo, pero no lo es. Es este problema que no logro entender qué lo ocasiona. Quizás sea algo del "startup" del LCD. En el datasheet habla de un tiempo inicial de espera de unos 40ms para que el V llegue a 4.5. También noté que el datasheet habla de un BF (Busy Flag) que habría que leer antes de enviar datos pero perdería la posibilidad del uso del 595.
Alguno ha logrado hacer funcionar un LCD en 4 bits u 8 bits sin problemas y estable usando un 595 para reducir la cantidad de PINs usados en el Arduino?
La otra opción que se me ocurre es ver cómo resuelven el circuito los LCDs serie comerciales. Creo que Parallax tiene uno. Capaz algún capacitor o IC puesto en el lugar correcto soluciona el inconveniente.
El problema está en la secuencia de inicialización. La rutina de LCD que viene con Arduino al final del constructor tiene una invocación a "clear()" que por algún motivo que desconozco al LCD no le gusta.
No me pregunten por qué anda bien (creo) si no hay un 595 de por medio!
El crédito es totalmente para jiGGaK que ha desarrollado otra librería LCD la cual he probado directamente con el 595 haciéndole las modificaciones pertinentes: http://www.slashdev.ca/arduino-lcd-library/
Si miran el código, en el setup() dice:
// remaining three instructions of the initialization routine
// hd44780 spec states the second cmd should be display clear
// but display on is the only one that works
Si a alguien le interesa ver cómo queda el código de jiGGaK junto con mi librería de manejo del 595, avíseme que lo publico.
Gracias a esto ahora puedo tener un LCD usando tan solo 3 PINes del Arduino