Conexion pantalla LCD Alfanumeria MC42005A6W-BNMLWI

Buenos días.

Estoy intentando hacer que mi ARDUINO UNO R3 se intente comunicar una una pantalla LCD Serial Alfanumérica de 20*4. Todos me contestareis usa la librería LiquidCristal o algunas semejantes, pero esta pantalla tiene incorporado el bus I2C y tengo dos y las quería intentar reciclar para futuros proyectos y esta librería no me funcionan para nada.

El enlace de la pantalla es el siguiente, no son precisamente baratas pero como son recicledas :wink: :

http://es.farnell.com/midas/mc42005a6w-bnmlwi/lcd-alpha-num-20-x-4-white/dp/2425751?exaMfpn=true&categoryId=&searchRef=SearchLookAhead&searchView=table&iscrfnonsku=false

El datasheet de la misma esta en el siguiente enlace:

Con el I2C Scanner he conseguido la dirección I2C de la pantalla, es la 0X3c, por lo que la comunicación se realiza.

El problema me viene cuando intento configurarla, hay veces que me deja otras no y ya no se por donde podría hacerlo. Si alguien tiene alguna idea seria de gran ayuda

El programa que uso es el siguiente:

#include <Wire.h>

void setup()
{
  Wire.begin();                                 // Conexion como maestro
  delay(100);
  Wire.beginTransmission(0x3c);         // Start Transmision de datos
  delay(100);
  Wire.write(0x08);                           // Display ON/OFF
  delay(100);  
  Wire.write(0x01);                           // Limpio el display
  delay(100);
  Wire.write(0x07);                           // Entor en el modo SET
  delay(100);
  Wire.endTransmission(0x3c);            // Stop Transmision datos
  delay(100);
}

//byte val = 0;

void loop()
{
  delay(1000);
  Wire.beginTransmission(0x3c);          // Start Transmision datos
  delay(100);
  Wire.write("val ");                          // Envio los caracteres "val " al display para visualizarlos   
  delay(100);                                // inicialmente seria un contador pero me conformo con que salga "val "
  Wire.endTransmission(0x3c);           // Stop Transmision datos
  delay(100);

  
/*  val++;                                // Incremento valor
  if(val == 64)                         // Compruebo si ha llegado al numero 64
  {
    val = 0;                            // Reinicio la constante
  }
  delay(50);   */
}

Muchas gracias.

usa esta librería y reemplaza todo lo que tienes en LiquidCrystal x esto
https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
Acá como usarla, básicamente te permite manejar todos los tipos de displays, I2C paralelo, Shift Register, etc.