.
Me siento muy identificaco con tu problema. Cuando empezé con los LCDs el primero que compré fue un Winstar WHB1602 y casi lo tiro a la basura por creer que no funcionaba.
En sí, creo que las rutinas para mandar caracteres e instrucciones a los LCDs son todas iguales, lo que sí puede diferir es su inicialización, que es lo que me pasaba a mí. Para el KS0066 la inicialización es así:
- Esperar unos 50 ms (no lo indica en el datashet del controlador, pero lo leí por ahí y siempre funcionó),
- Mandar la instrucción '0011NF00' (N: número de líneas, F: formato del caracter),
- Esperar unos 45 us,
- Mandar la instrucción '00001DCB' (D: display on/off, C: cursor on/off, B: cursor blink on/off),
- Esperar 45 us,
- Mandar la instrucción '00000001' (Clear display)
- Esperar 2 ms,
- Mandar la instrucción '000001(I/D)(SH)' (I/D: incremento/decremento del cursor, SH: shift on/off,
- Esperar 45 us.
Listo, el LCD debería funcionar normalmente después de haber seguido estos pasos. Te adjunto la biblioteca (también llamada librería) que uso, pero en asm... No se muy bien como es el C, pero espero que te sirva.
Antes de tirarlo a la basura, avisame, que tal vez sirva.
Saludos.