Kit relogio rtc

Olá Pll, Mais uma vez venho recorrer aqui ao forum ;)

Estou á beira de um ataque de nervos :confused:

O meu projecto é baseado no do Fernando Garcia, (eu sozinho nem 1/10 fazia). Segundo sei o projecto dele não é compativel com um RTC com EEPROM, por isso tive de comprar este Kit.

De notar que um relogio é uma peça fundamental deste projecto.

Só consegui por o relogio a funcionar nos pinos GND e 5V (no conjunto de pinos do POWER), o problema é que tenho um lcd toutchscreen que está ligado nestes pinos, e se eu tentar partilhar os pinos (através de uma breadbord) o relogio deixa de funcionar, como posso resolver este problema?

Não estou a perceber. Como faz essa partilha? Talvez o problema esteja aí.

Eu tenho este e funciona relativamente bem (tive alguns problemas no início, mas agora funciona sem problemas).

Olá Luis, ligo o GND e os 5V do arduino a uma BreadBord e depois ligo o RTC e o ecrã nas mesmas linhas respectivamnete.

De notar que este RTC é diferente do seu por não ter EEPROM, eu tinha um desses mas parece que não é compativel com a biblioteca DS1307henning que é usada no código do Fernando, (não sei porquê).

PS: De testes que tenho feito o problema só está no GND, pois os 5V já consegui partilhar.

Essa parte de a placa"não é compativel com a biblioteca DS1307henning" não me parece. De qualquer forma vou fazer o teste (já que tenho aqui a placa) e já digo alguma coisa.

luisilva: Essa parte de a placa"não é compativel com a biblioteca DS1307henning" não me parece. De qualquer forma vou fazer o teste (já que tenho aqui a placa) e já digo alguma coisa.

Eu acho que tem a ver com o codigo dele ler e escrever varias vezes na eeprom, (mas posso estar a dizer uma grande bacurada...já vou sabendo algumas coisas...mas isso ainda é muita areia para a minah camioneta :stuck_out_tongue:

Por o RTC a funcionar é praticamente o que me falta para concluir este projecto, não queria mesmo "morrer na praia".

Realmente, o exemplo da biblioteca aqui também não funciona. Tenho que ver melhor o que se está a passar. A biblioteca que uso normalmente (esta), funciona correctamente.

luisilva: Realmente, o exemplo da biblioteca aqui também não funciona. Tenho que ver melhor o que se está a passar. A biblioteca que uso normalmente (esta), funciona correctamente.

Tambem estou com a impressão de que o problema está na biblioteca, mas a questão é que o código fonte que tenho utiliza muita coisa desta biblioteca, por exemplo:

setFont(SMALL, 255, 255, 0, 0, 0, 0);
  myGLCD.print(rtc.getTimeStr(FORMAT_LONG), 315, 227+3);  

  if ((oldval != day) || refreshAll)
  {
    setFont(SMALL, 255, 255, 0, 0, 0, 0);
    myGLCD.print(rtc.getDOWStr(FORMAT_LONG), 10, 227+3);
    myGLCD.printNumI(t.date, 75, 227+3);
    myGLCD.print("DE", 95, 227+3);
    myGLCD.print(rtc.getMonthStr(FORMAT_LONG), 125, 227+3);
    myGLCD.print("DE", 205, 227+3);
    myGLCD.printNumI(t.year, 225, 227+3);

float lunarCycle = moonPhase(t.year,t.mon, t.date);

por exemplo, esta função t.xxxx está disponivel noutra biblioteca? como é que posso resolver o problema?

Obg NJPinheiro

Se essa funcao nao estiver disponivel podera estar uma equivalente… sem testares ou leres nao vais descobrir isso.

Como estas a ligar o teu kit? Ligaste a pilha?

No codigo, estas a usar o endereco correcto?

NJPinheiro: Tambem estou com a impressão de que o problema está na biblioteca, mas a questão é que o código fonte que tenho utiliza muita coisa desta biblioteca, por exemplo:

setFont(SMALL, 255, 255, 0, 0, 0, 0);
  myGLCD.print(rtc.getTimeStr(FORMAT_LONG), 315, 227+3);  

  if ((oldval != day) || refreshAll)   {     setFont(SMALL, 255, 255, 0, 0, 0, 0);     myGLCD.print(rtc.getDOWStr(FORMAT_LONG), 10, 227+3);     myGLCD.printNumI(t.date, 75, 227+3);     myGLCD.print("DE", 95, 227+3);     myGLCD.print(rtc.getMonthStr(FORMAT_LONG), 125, 227+3);     myGLCD.print("DE", 205, 227+3);     myGLCD.printNumI(t.year, 225, 227+3);

float lunarCycle = moonPhase(t.year,t.mon, t.date);




por exemplo, esta função t.xxxx está disponivel noutra biblioteca? como é que posso resolver o problema?

Obg
NJPinheiro

Sim, a outra biblioteca também tem essa estrutura de dados (ou uma equivalente).

luisilva:
Sim, a outra biblioteca também tem essa estrutura de dados (ou uma equivalente).

Sim Luis, acredito que sim, eu é que não tenho “arcaboço” para fazer a conversão.

Eu até tentei…mas logo no principio bateu aqui (time9 = t.min;):

[int16_t n;
  char buf[7];
  minuto01 = 0;
  char oldminuto9;
  oldminuto9 = time9;
  time9 = t.min;

  if (oldminuto9!=time9)
  {  
    if(bitRead(modo_personalizado_on,1) == true) 
    {
      if((bitRead(segunda_dosagem_personalizada,1) == t.dow)|| (terca_dosagem_personalizada_1 == t.dow) || (quarta_dosagem_personalizada_1 == t.dow)
        || (quarta_dosagem_personalizada_1 == t.dow) || (quinta_dosagem_personalizada_1 == t.dow) || (sexta_dosagem_personalizada_1 == t.dow)
        || (sabado_dosagem_personalizada_1 == t.dow) || (domingo_dosagem_personalizada_1 == t.dow))
      {
        if(file.open(&root, "HDP1.TXT", O_READ))
        {
          while ((n = file.read(buf, sizeof(buf))) > 0)
          {
            minuto01 = atoi(buf);
            if(minuto01 ==  NumMins(t.hour,t.min))
            {
              tempo_dosagem = map (((dose_dosadora_1_personalizada/quantidade_dose_dosadora_1_personalizada)*2), 0, fator_calib_dosadora_1, 0, 60000);
              tempo_dosagem /= 2;                 
              digitalWrite(dosadora1, HIGH);
              delay(tempo_dosagem);
              digitalWrite(dosadora1, LOW);
            }
          }
        }
        file.close();
      }
    }
  }
}

e eu já fiquei á nora ???

Já agora umas perguntinhas se puder ser:

1 - O RTC funcionou com este código:

#include <Wire.h>

#define Binary 0
#define Hex 1


void SetTime();
void DisplayTime();


const int I2C_address = 0x68;  // I2C write address 
byte    Second;     // Store second value
byte    Minute;     // Store minute value
byte    Hour;       // Store hour value
byte    Day;        // Store day value
byte    Date;       // Store date value
byte    Month;      // Store month value
byte    Year;       // Store year value


void setup() 
{ 
  Serial.begin(9600);
  Wire.begin();        // join i2c bus (address optional for master) 
  delay(1000);
} 
 

void loop() 
{ 
  boolean Readtime;       // Set/Read time flag
  unsigned int Incoming;  // Incoming serial data

  // Display prompt
  Serial.println("What would you like to do?");
  Serial.println("(0) To set the current time.");
  Serial.println("(1) To display the current time.");
  Serial.print("Enter 0 or 1: ");
   
  Incoming = SerialNumRead (Binary);  // Get input command
  Serial.println(Incoming, DEC);      // Echo the value
  Serial.println();
  
  if (Incoming == 0)                  // Process input command
    SetTime();
  else if (Incoming == 1)
    DisplayTime();
  
  delay (1000);
}


unsigned int SerialNumRead (byte Type)
{
  unsigned int Number = 0;       // Serial receive number
  unsigned int digit = 1;        // Digit
  byte  i = 0, j, k=0, n;        // Counter
  byte  ReceiveBuf [5];          // for incoming serial data
  
  while (Serial.available() <= 0);
  
  while (Serial.available() > 0)  // Get serial input
  {
    // read the incoming byte:
    ReceiveBuf[i] = Serial.read();
    i++;
    delay(10);
  }
  
  for (j=i; j>0; j--)
  {
    digit = 1;
    
    for (n=0; n < k; n++)          // This act as pow() with base = 10
    {
      if (Type == Binary)
        digit = 10 * digit;
      else if (Type == Hex)
        digit = 16 * digit;
    }
        
    ReceiveBuf[j-1] = ReceiveBuf[j-1] - 0x30;    // Change ASCII to BIN
    Number = Number + (ReceiveBuf[j-1] * digit); // Calcluate the number
    k++;
  }
  return (Number);    
}

void SetTime()
{
  Serial.print("Enter hours (00-23): ");
  Hour = (byte) SerialNumRead (Hex);
  Serial.println(Hour, HEX);        // Echo the value
  Hour = Hour & 0x3F;               // Disable century
  Serial.print("Enter minutes (00-59): ");
  Minute = (byte) SerialNumRead (Hex);
  Serial.println(Minute, HEX);      // Echo the value
  Serial.print("Enter seconds (00-59): ");
  Second = (byte) SerialNumRead (Hex);
  Serial.println(Second, HEX);      // Echo the value
  Second = Second & 0x7F;           // Enable oscillator
  Serial.print("Enter day (01-07): ");
  Day = (byte) SerialNumRead (Hex);
  Serial.println(Day, HEX);         // Echo the value
  Serial.print("Enter date (01-31): ");
  Date = (byte) SerialNumRead (Hex);
  Serial.println(Date, HEX);        // Echo the value
  Serial.print("Enter month (01-12): ");
  Month = (byte) SerialNumRead (Hex);
  Serial.println(Month, HEX);       // Echo the value
  Serial.print("Enter year (00-99): ");
  Year = (byte) SerialNumRead (Hex);
  Serial.println(Year, HEX);        // Echo the value

  Wire.beginTransmission(I2C_address);
  Wire.write(0);
  Wire.write(Second);
  Wire.write(Minute);
  Wire.write(Hour);
  Wire.write(Day);
  Wire.write(Date);
  Wire.write(Month);
  Wire.write(Year);
  Wire.endTransmission();
  //I2COUT SDA, I2C_WR, [0,Second,Minute,Hour,Day,Date,Month,Year]
  Serial.println();
  Serial.println ("The current time has been successfully set!");
}


void DisplayTime()
{
  char tempchar [7];
  byte i = 0;
  Wire.beginTransmission(I2C_address);
  Wire.write(0);
  Wire.endTransmission();
  
  Wire.requestFrom(I2C_address, 7);
  
  while(Wire.available())          // Checkf for data from slave
  { 
    tempchar [i] = Wire.read(); // receive a byte as character 
    i++;
  } 
  Second = tempchar [0];
  Minute = tempchar [1];
  Hour   = tempchar [2];
  Day    = tempchar [3];
  Date   = tempchar [4];
  Month  = tempchar [5];
  Year   = tempchar [6];
  
  // Display time
  Serial.print("The current time is ");
  Serial.print(Month, HEX);
  Serial.print("/");
  Serial.print(Date, HEX);
  Serial.print("/20");
  if (Year<10)
    Serial.print("0");
  Serial.print(Year, HEX);
  Serial.print("    ");
  Serial.print(Hour, HEX);
  Serial.print(":");
  Serial.print(Minute, HEX);
  Serial.print(":");
  Serial.println(Second, HEX);
}

Mas não funcionou com este, (que utiliza a mesma biblioteca que o código fonte que tenho):

#include <DS1307henning.h>

// Init the DS1307
DS1307 rtc(20, 21);

void setup()
{
  // Set the clock to run-mode
  rtc.halt(false);
  
  // Setup Serial connection
  Serial.begin(9600);

  // The following lines can be commented out to use the values already stored in the DS1307
  rtc.setDOW(DOMINGO);        // Set Day-of-Week to SUNDAY
  rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
  rtc.setDate(3, 10, 2010);   // Set the date to October 3th, 2010
}

void loop()
{
  // Send Day-of-Week
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
  
  // Send date
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");

  // Send time
  Serial.println(rtc.getTimeStr());
  
  // Wait one second before repeating :)
  delay (1000);
}

pode-se concluir que o problema está na biblioteca?

2 - tenho lido que os RTC’s necessitam de pilha para trabalharem, mas a verdade é que eu com a pilha não consegui ter o RTC a funcionar no meu código fonte , (dava conflito no GND), e sem pilha funcionou, (com a biblioteca Wire, ou seja só tinha relogio no meu código fonte, porque todas as funções que utilizam as horas/dias estão em função da biblioteca DS1307henning e como tal não funcionavam, estranho não?

Adicionalmente vou ter uma pausa forçada no projecto…acabei de dar cabo do Lcd :’( :’( :’(

O problema é que comprados na UE são caros…mandados vir da china parecem que vêm de barco :fearful:

Epá a coisa está enguiçada :smiling_imp:

Comprados na China vem realmente de barco...

Eu se fosse a ti nao usava essa biblioteca to henning... pelo simples motivo que pareces ter os pinos do I2C disponiveis e essa biblioteca faz bit banging do protocolo I2C. Se tens os pinos disponiveis, usa-os como devem ser usados.

Sem pilha nao funciona... o que fizeste aos pinos onde liga a pilha? O datasheet e muito especifico acerca de usar o chip sem pilha. E possivel, mas precisas de fazer ligacoes ao GND.

Como tens os pinos SDA e SCL ligados? Eu reparei agora que a biblioteca do Henning nao activou pull ups nas linhas... isso pode ser um dos motivos que nao esta a funcionar como deve.

bubulindo: Comprados na China vem realmente de barco...

Boas, Pois e ainda por cima agora no Natal parece que há transito....novo ecrã só pro ano :sob: :sob: :sob:

Não se compreende a diferença de preços, vindos na UE são 30€, mandei vir da cina por 14€ :money_mouth_face:

bubulindo: Eu se fosse a ti nao usava essa biblioteca to henning... pelo simples motivo que pareces ter os pinos do I2C disponiveis e essa biblioteca faz bit banging do protocolo I2C. Se tens os pinos disponiveis, usa-os como devem ser usados.

Pois bubulindo eu até gostaria de mudar a biblioteca, mas não está a ser facil por me faltarem as bases de linguagem de programação, tudo o que sei aprendi aqui, mas estou a tentar, o problema é que o codigo fonte original utiliza muito funções de tempo & timmer, e há formulas que não percebo para as poder alterar. Sim os pinos SDA e SCL estão disponiveis, podes esplicar melhor essa parte dos pinos do I2c? (o mais simplificado possivel, porque o conhecimento é pouco).

bubulindo: Sem pilha nao funciona... o que fizeste aos pinos onde liga a pilha? O datasheet e muito especifico acerca de usar o chip sem pilha. E possivel, mas precisas de fazer ligacoes ao GND.

Os pinos onde liga a pilha estavam também ligados aos 5V e ao GND (julguei que a a pilha funcionava como Backup caso a corrente falhe, estarei errado?)

bubulindo: Como tens os pinos SDA e SCL ligados? Eu reparei agora que a biblioteca do Henning nao activou pull ups nas linhas... isso pode ser um dos motivos que nao esta a funcionar como deve.

Tinha as lgações conforme esta página acrescentando as resistêncas de 1oK entre o DS1307 e os pinos SDA e SCL respectivamente. Podes também explicar melhor a perte dos pull ups?

Obg NJPinheiro

A diferenca de preco deve vir dos impostos cobrados na alfandega. Comprar um display e uma coisa... comprar uns 200 e outra e o Governo nao deixa isso passar sem cobrar a sua "portagem". Depois tens o custo de armazenamento... se eu comprar 200 displays da China, nao tos vou vender ao mesmo preco que me custaram a mim... vou-tos vender a esse preco mais o custo do espaco onde os vou guardar.

30 talvez seja exagerado, mas em Portugal nao deves encontrar a menos de 20 euros um display destes. Podes tambem agradecer aos cabroes da Somalia... muitos cargueiros vao a volta de Africa para nao lidarem com os riscos de serem tomados refens. Mas adiante...

O ATmega328 tem um periferico dentro dele que faz de forma "automatica" a comunicacao I2C. Isso tira trabalho ao processador e existem registos especiais para usar esse periferico. A biblioteca Wire faz isso. A outra uqe estas a usar nao usa esses perifericos e em vez disso emula o funcionamento do periferico. A vantagem dessa biblioteca e que pode ser ligada a qualquer pino... do Arduino.

Nada como ir fazendo aos poucos... ou comprar o kit feito do site do Fernando... :/ Nao deve ser muit odificil portar o codigo se o objectivo for aprender algo com isto.

O manual do RTC diz isto:

If a backup supply is not required, VBAT must be grounded.

Entao o pino 3 (VBAT) deve estar ligado ao GND. Nao estou a dizer que va ser isto que va fazer toda a diferenca... mas e assim que deve ser feito. A pilha serve de backup... mas isso nao significa que devas alimentar o chip por ali.

Vais ter de definir o que queres dizer por entre o DS1307 e os pinos SDA e SCL... Nao estou a ver o que queres dizer com isso... um desenho ou fotografia e a maneira mais simples de ver o que esta la.

Basicamente, a assumpcao que tens (como toda a gente) que se um pino nao tiver nada la ligado, esta em potencial zero e errado. Se nao estiver nada la ligado o potencial pode ser qualquer coisa... E se esse potencial nao for definido, a electronica pode comportar-se de forma estupida.

O pull-up e basicamente uma resistencia ligada entre um pino e a alimentacao (5V do Arduino). O pull-down e uma resistencia ligada do pino ao GND. O facto de ser uma resistencia e nao um fio e apenas para limitar a corrente que pode passar pelo pino.

Algo que tambem acontece e o sinal, neste caso do I2C, ir-se degradando entre chips ou se mais do que um chip estiver ligado nesse barramento. Nesses casos, coloca-se uma resistencia de pull-up para garantir que o sinal logico alto esta sempre num estado correctamente definido. Infelizmente sem conhecimentos de electronica/electricidade, e impossivel de explicar isto convenientemente... ou em tempo util.

bubulindo: O ATmega328 tem um periferico dentro dele que faz de forma "automatica" a comunicacao I2C. Isso tira trabalho ao processador e existem registos especiais para usar esse periferico. A biblioteca Wire faz isso. A outra uqe estas a usar nao usa esses perifericos e em vez disso emula o funcionamento do periferico. A vantagem dessa biblioteca e que pode ser ligada a qualquer pino... do Arduino. Nada como ir fazendo aos poucos... ou comprar o kit feito do site do Fernando... :/ Nao deve ser muit odificil portar o codigo se o objectivo for aprender algo com isto. Vais ter de definir o que queres dizer por entre o DS1307 e os pinos SDA e SCL... Nao estou a ver o que queres dizer com isso... um desenho ou fotografia e a maneira mais simples de ver o que esta la. O pull-up e basicamente uma resistencia ligada entre um pino e a alimentacao (5V do Arduino). O pull-down e uma resistencia ligada do pino ao GND. O facto de ser uma resistencia e nao um fio e apenas para limitar a corrente que pode passar pelo pino.

bubulindo, no codigo fonte que tenho estou a usar as duas bibliotecas, a DS1307henning e a Wire, pelo que dizes não poderá haver conflito entre elas?

Eu até pretendo no futuro comprar o Kit ao Fernando, até porque gosto das coisas bem feitas e o Kit dele tem um "ar profissional", mas como sabes neste mundo do Arduino tudo é à medida, e comprar o Kit e depois não saber "personalizar" não é boa politica. O código dele está escrito para um ecrã 400x240 e eu tinha um de 320x240, o que me obrigou a "redesenhar" todo o código, e com isso fiquei a "conhecer" todo o código, (ainda que haja formulas que não entendo). Porquê o objectivo é no futuro adquirir um Kit ao Fernando é que queria evitar mudar bibliotecas.

O que quis dizer foi que tenho as ligações conforme as figuras desta página e que entre os pinos 5 e 6 do relogio e os pinos 20 e 21 do Mega tenho uma resistência de 10K, (parac cada uma das ligaões). Desculpa não postar foto da ligação, mas neste momento não tenho condições do fazer, (maquina fotográfica avariada e como um mal nunca vem só também não sei do cabo de ligação do tlm ao computador).

Calculo que o problema de não conseguir por o relogio a funcionar no código do Fernando não estivesse nas ligações mas sim no "software" mais concretamente na questão das bibliotecas, digo isto, porque eu consegui por o relogio a funcionar com um exemplo baseado na biblioteca Wire, posso concluir isto?

Nao estas a usar ambas ao mesmo tempo, como podem estar em conflito?

O meu comentario nao foi no sentido de criticar estares a construir isto por ti… mas se nao te queres dar ao trabalho de aprender a desenvolver sistemas baseados em microcontroladores, a maneira mais simples de conseguires o que queres seria comprando o kit.

E que e que essas resistencias estao ai a fazer? Podes elucidar-nos?

Pode em parte ser do software… mas para mim essas resistencias nao fazem sentido. Talvez me consigas convencer porque e que elas ai estao em vez de estarem ligadas aos 5V.

bubulindo:
E que e que essas resistencias estao ai a fazer? Podes elucidar-nos?

Pode em parte ser do software… mas para mim essas resistencias nao fazem sentido. Talvez me consigas convencer porque e que elas ai estao em vez de estarem ligadas aos 5V.

As resistências vinham com no kit do RTC, trazia 2, deveria ter ligado aos 5V? é que assim foi a unica maneira de fazer o relogio funcionar.

Sim, comprar o KIt do Fernando era mais fácil, (e é o que pretendo fazer), mas 1º queria perceber o código para em caso de necessidade “caminhar pelos meus pés”. Como estou a fazer no curto prazo vai sair mais caros, (é quase comprar tudo em duplicado), mas no longo prazo ficarei apto, ((espero eu), a “personalizar” o meu sistema, e depois o que estou a aprender posso aplicar noutros projectos…

Essas duas resistencias sao ligadas aos 5V. Ou seja, um perno da resistencia nos 5V e o outro perno liga a um dos pinos do DS1307 e do Arduino.

Experimenta assim com ambas nas linhas de comunicacao a ver o resultado. Pesquisa na internet por pull-up para ver se encontras algo mais. Infelizmente a minha internet e lenta demais para abrir um site que te mostre o que disse.

A discussão já vai bastante adiantada. Ontem fiz algumas experiências com esta biblioteca e com o meu Tiny RTC. Ligando directamente o RTC ao meu MEGA, a comunicação não funciona correctamente. Por exemplo os dígitos dos minutos alteram de segundo a segundo. Ligando a ponta do osciloscópio à linha SDA a comunicação passou a fazer-se bem. Na minha placa, tenho uma resistência de 1k2 ligada entre SDA e +5V (quando comecei a trabalhar com ela cheguei à conclusão que tinha que levar este pull-up), mas com esta biblioteca, mesmo assim não funciona. Posteriormente (e uma vez que isto não foi feito para trabalhar com o osciloscópio ligado :) ) liguei uma resistência de 3k3 em paralelo com a de 1k2 que já lá estava e funcionou bem. Sendo assim, eu diria que que ligando um pull-up de entre 500 Ohm e 1000 Ohm, o RTC deve funcionar bem, mesmo com esta biblioteca.

Olá pll,
Já viram alguem á beira de um ataque de nervos ;D

tanto o bubulindo como o Luisilva têm razão, ou seja as duas resistencias sao ligadas aos 5V, um perno da resistencia nos 5V e o outro perno liga a um dos pinos do DS1307 e do Arduino, sendo as resistências de 10K (julgo 1000 Ohm).

Testado e a funcional com este código:

#include <DS1307henning.h>

// Init the DS1307
DS1307 rtc(20, 21);

void setup()
{
  // Set the clock to run-mode
  rtc.halt(false);
  
  // Setup Serial connection
  Serial.begin(38400);

  // The following lines can be commented out to use the values already stored in the DS1307
  rtc.setDOW(SEGUNDA);        // Set Day-of-Week to SUNDAY
  rtc.setTime(23,59, 45);     // Set the time to 12:00:00 (24hr format)
  rtc.setDate(8, 12, 2014);   // Set the date to October 3th, 2010
}

void loop()
{
  // Send Day-of-Week
  Serial.print(rtc.getDOWStr());
 // Serial.print(" ");
  
  // Send date
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");

  // Send time
  Serial.println(rtc.getTimeStr()); 
  
  // Wait one second before repeating :)
  delay (1000);
}

Agora o que não percebo é que depois carragando o código fonte do Fernando não dá :confused:
sendo que os pinos usados são o 20 e 21 (igual ao código testado).

Algures neste tópico o bubulindo diz:
Basicamente, a assumpcao que tens (como toda a gente) que se um pino nao tiver nada la ligado, esta em potencial zero e errado. Se nao estiver nada la ligado o potencial pode ser qualquer coisa…
E se esse potencial nao for definido, a electronica pode comportar-se de forma estupida.

Mas em todo o códgo fonte a unica referencia que eu vejo aos pinos 20 e 21 é:

//*******************************************************************************************************
//********************** Funções do RTC ********************************************************************
//*******************************************************************************************************
//       (SDA,SCL)
DS1307 rtc(20, 21); // Indica em quais pinos o RTC está conectado.

Epá por este andar vou dar cabo dos neuronios :smiley: :smiley:
Está um parto mesmo difícil!!!

Alguma ideia porque é que o relogio funciona com um código e não funciona com outro?

O que significa "não dá"? Dá erro ao compilar? Não comunica correctamente com o relógio e dá as horas erradas? Ou outra coisa?