OK
Mira yo por ejemplo tengo un modulo RTC con el integrado DS1307 y un lcd 1602 con un backpack que tiene el integrado PCF8574T y este transforma el lcd a i2c; también es compatible con un lcd 2004
Utilizo la libreria LiquidCrystal_I2C.h
Te dejo el código base que tengo para esto, tendrás que ajustarlo a tu pantalla si es necesario.
/*https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads*/
#define DS1307_ADDRESS 0x68
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity
void setup()
{
Wire.begin();
Serial.begin(9600);
lcd.begin(16,2); // Inicia el lcd con 2 renglones y 16 columnas
}
void loop()
{
printDia();
delay(1000);
}
byte bcdToDec(byte val) {
// Convert binary coded decimal to normal decimal numbers
return ( (val/16*10) + (val%16) );
}
void printDia(){
Wire.beginTransmission(DS1307_ADDRESS);
byte zero = 0x00;
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
int second = bcdToDec(Wire.read());
int minute = bcdToDec(Wire.read());
int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
int monthDay = bcdToDec(Wire.read());
int month = bcdToDec(Wire.read());
int year = bcdToDec(Wire.read());
switch(weekDay)
{
case 0:
lcd.setCursor(0,0);
lcd.print("Sun ");
break;
case 1:
lcd.setCursor(0,0);
lcd.print("Mon ");
break;
case 2:
lcd.setCursor(0,0);
lcd.print("Tues ");
break;
case 3:
lcd.setCursor(0,0);
lcd.print("Wed ");
break;
case 4:
lcd.setCursor(0,0);
lcd.print("Thurs ");
break;
case 5:
lcd.setCursor(0,0);
lcd.print("Fri ");
break;
case 6:
lcd.setCursor(0,0);
lcd.print("Sat ");
break;
}
lcd.print(monthDay);
lcd.print("/");
lcd.print(month);
lcd.print("/");
lcd.print(year);
lcd.setCursor(0,1);
lcd.print(hour);
lcd.print(":");
lcd.print(minute);
lcd.print(":");
lcd.print(second);
lcd.setCursor(9,1);
lcd.print("Temp");
delay(1000);
}
void printDate(){
// Reset the register pointer
Wire.beginTransmission(DS1307_ADDRESS);
byte zero = 0x00;
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
int second = bcdToDec(Wire.read());
int minute = bcdToDec(Wire.read());
int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
int monthDay = bcdToDec(Wire.read());
int month = bcdToDec(Wire.read());
int year = bcdToDec(Wire.read());
//print the date EG 3/1/11 23:59:59
Serial.print(month);
Serial.print("/");
Serial.print(monthDay);
Serial.print("/");
Serial.print(year);
Serial.print(" ");
Serial.print(hour);
Serial.print(":");
Serial.print(minute);
Serial.print(":");
Serial.println(second);
}