Interferenza i2c (lcd + ds1307)

Ciao a tutti,
quesito forse banale.
Ho un progettino con un orologio DS1307 ed un lcd con interfaccia i2c.
Per il DS1307 uso DS1307RTC.h
Per il display uso LiquidCrystal_i2c.h

L'orologio funziona, ma nel momento che inserisco nello sketch la libreria del display comincia a dare numeri a caso.

Avendo i dispositivi indirizzi diversi, com'è possibile che vadano in conflitto tra di loro?

Notare che il display non ha alcun problema a visualizzare il "codice".

m265:
.... Avendo i dispositivi indirizzi diversi, com'è possibile che vadano in conflitto tra di loro?

Appunto, NON è possibile, quindi ... metti il codice che usi (...mi raccomando, in conformità al regolamento, punto 7, il codice va racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra) e vediamo, perché, SE i collegamenti sono fatti bene (... niente falsi contatti, niente fili troppo lunghi, resistenze di pull-up SOLO su un modulo, ecc.), il problema può essere solo nel codice.

Guglielmo

Ecco il codice spolpato per questo test.
Le resistenze di pull-up sono solo sull'orologio (4.7K).
I cavi non sono lunghissimi, non dovrebbero esserci falsi contatti anche se sono ancora su breadboard quindi non è da escludere completamente (sebbene abbia rifatto i collegamenti più e più volte....).

Ho provato a sostituire la libreria del RTC con una "fatta in casa" leggendo e scrivendo solo con la Wire.h, ma non cambia niente.

// RTC STUFF
#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
tmElements_t tm;
const char *monthName[12] = {
  "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
int secondi;
int minuti;
int ore;
int giorno;
int mese;
int anno;

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 

bool getTime(const char *str)
{
  int Hour, Min, Sec;

  if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false;
  tm.Hour = Hour;
  tm.Minute = Min;
  tm.Second = Sec;
  return true;
}

bool getDate(const char *str)
{
  char Month[12];
  int Day, Year;
  uint8_t monthIndex;

  if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false;
  for (monthIndex = 0; monthIndex < 12; monthIndex++) {
    if (strcmp(Month, monthName[monthIndex]) == 0) break;
  }
  if (monthIndex >= 12) return false;
  tm.Day = Day;
  tm.Month = monthIndex + 1;
  tm.Year = CalendarYrToTm(Year);
  return true;
}

void writeRTC() {
  bool parse = false;
  bool config = false;
  if (getDate(__DATE__) && getTime(__TIME__)) {
    parse = true;
    // and configure the RTC with this info
    if (RTC.write(tm)) {
      config = true;
    }
  }
}

void readRTC() {
  RTC.read(tm);
  secondi = tm.Second;
  minuti = tm.Minute;
  ore = tm.Hour;
  giorno = tm.Day;
  mese = tm.Month;
  anno = tmYearToCalendar(tm.Year);
}

void printRTCOnSerial() {
  readRTC();
  Serial.print(ore);
  Serial.print(":");
  Serial.print(minuti);
  Serial.print(" --- ");
  Serial.print(giorno);
  Serial.print("/");
  Serial.print(mese);
  Serial.print("/");
  Serial.println(anno);
}


void setup() {
  Serial.begin(9600);
  Wire.begin();

  //writeRTC();
  
  readRTC();

  lcd.begin(16, 2);
  lcd.home();
  lcd.print("------TEST------");
  lcd.setCursor(0, 1);
  lcd.print("__version x.xx__");
  delay(2000);
}

void loop() {

  lcd.home();
  lcd.print("TEST");
  lcd.setCursor(0, 1);
  lcd.print("TEST 2");  

  printRTCOnSerial();  

}