[Risolto] Problema con DS1307

Salve a tutti!

Mi è appena arrivato l'RTC DS1307 l'ho subito collegato, seguendo lo schema presente nel datasheet (usando delle resistenze di pull-up da 2.2KOhm) https://www.sparkfun.com/datasheets/Components/DS1307.pdf

Ho provato ad impostare data ed ora, ma senza risultato (ogni valore che leggevo era sempre 255) così ho provato a controllare l'indirizzo con l'I2CScanner http://playground.arduino.cc/Main/I2cScanner

E il risultato è stato:

I2C Scanner
Scanning...
No I2C devices found

Qualcuno ha un'idea sul perchè di questa cosa? Io non so più dove andare a sbattere la testa...

Grazie

ok, ma su quali Pin lo hai collegato ?

e che sketch hai usato per impostare l'ora

L’ho collegato sui pin SDA e SCL di Arduino UNO, quelli vicini al pulsante di reset.

#include <Wire.h>
 
void setup()
{
  Serial.begin(9600);
 
  Wire.begin();
 
  Wire.beginTransmission(0x68); //Indirizzo RTC

  Wire.write((byte)0x00);

  Wire.write((byte)0x00);  //secondi
  Wire.write((byte)0x10);  //minuti
  Wire.write((byte)0x08);  //ore
  Wire.write((byte)0x03);  //giorno settimana
  Wire.write((byte)0x06);  //giorno del mese
  Wire.write((byte)0x08);  //mese
  Wire.write((byte)0x14);  //anno
  Wire.endTransmission();
}
 
void loop()
{
  Wire.beginTransmission(0x68);
  Wire.write((byte)0x00);
  Wire.endTransmission();
 
  Wire.requestFrom(0x68, 7);

  byte secondi = Wire.read();
  byte minuti = Wire.read();
  byte ora = Wire.read();
  byte giorno_sett = Wire.read();
  byte giorno_mese = Wire.read();
  byte mese = Wire.read();
  byte anno = Wire.read();
 
  Serial.print("Orario corrente: ");
  Serial.print(ora, DEC);
  Serial.print(":");
  Serial.print(minuti, DEC);
  Serial.print(":");
  Serial.println(secondi, DEC);
 
  Serial.print("Giorno della settimana: ");
  Serial.println(giorno_sett, DEC);
 
  Serial.print("Data corrente: ");
  Serial.print(giorno_mese, DEC);
  Serial.print("/");
  Serial.print(mese, DEC);
  Serial.print("/");
  Serial.println(anno, DEC);
  Serial.println();
 
  delay(1000);
}

Scusate per i commenti scarsi…

Un’altra domanda: Sul datasheet mi da l’indirizzo a 7 bit e mi dice che il bit meno significativo indica se voglio accedere in lettura o in scrittura, in particolare 0 in scrittura e 1 in lettura, quindi se per esempio l’indirizzo a 7 bit che mi da è 1101000 e io voglio accedere in lettura devo fare Wire.beginTransmission(B11010000); giusto?

Il fatto che l’IC scanner non ti rilevi niente in genere e’ dato da

  1. Hai invertito SCL e SDA
  2. La batteria sul RTC e’ scarica
  3. C’e’ un falso contatto sui cavi di collegamento
  4. mancano le resistenze di PullUp ( pero’ il modulo normalmente le ha gia’ e tu le hai anche aggiunte)
  5. Non e’ che c’e’ qualcosaltro collegato sui pin A4 e A5 ?

l’indirizzo e’ sempre 0X68 B01101000
Poi ci pensa la libreria Wire ( a seconda se Wire.write o Wire.read ) gestirsi il bit di R/W

Problema risolto, avevo dei problemi di contatto con la batteria sulla bredboard, perchè collegando l'RTC al 3.3V di Arduino me lo rileva e riesco ad impostare l'ora. (izie per l'aiuto Buo pensavo che la batteria esterna servisse solo per il backup... :sweat_smile:)

Grazie mille per l'aiuto Brunello!