RTC shield impostazione data/ ora

Ciao a tutti! Sto usando una rtc shield per un piccolo progetto e col cambio ora mi sono accorto che quando carico lo sketch non si imposta automaticamente, cosa che credo dovrebbe fare scrivendo questa riga:

rtc.adjust(datetime(__date__ __time__))

Ma basta semplicemente scrivere questa riga oppure devo scrivere altro? Negli esempi mi sembra ci sia sollo quella riga che parla del cambio ora automatico...

Innanzitutto la sintassi è :

rtc.adjust(DateTime(__DATE__, __TIME__));

Dubito ti compili il codice come hai scritto tu.. Inoltre devi sempre inizializzare l'rtc con:

rtc.begin();

e naturalmente devi includere la libreria per la comunicazione i2c. Comunque se hai seguito attentamente l'esempio queste cose le hai sicuramente inserite giusto?

No certo, ho scritto tutto e funziona. Solo non aggiorna l'ora quando carico lo sketch mentre con quella riga di codice, come hai scritto tu, dovrebbe aggiornarla....

Mmm in effetti è un po' strano; ho utilizzato un DS1307 poco tempo fa e non ho avuto problemi. Ci potresti fornire il codice? Così magari lo provo anche con il mio rtc e vediamo qual è il problema

@lucadh: quel comando non aggiorna l'ora. Semplicemente TIME e DATE sono 2 macro che il compilatore sostituisce con la data o l'ora del computer su cui compili nel momento in cui esegui la compilazione, per cui ogni volta che riavvii lo sketch, questo riscriverà nell'RTC l'orario al momento della compilazione.

E' incompleto di per sé perché andrebbe unito ad un controllo dell'RTC per vedere se questo sta marciando oppure no. A seconda dell'RTC usato (DS1307 o PCF8563, ad esempio) cambia il modo per verificare se il chip sta funzionando correttamente, ma il principio non cambia: prima controlli se l'RTC va oppure no, e solo in quest'ultimo caso puoi usare quel sistema per dare all'RTC un punto di avvio.

grazie a tutti! Lo sketch è praticamente quello di esempio nella libreria. .. io qui nel post ho scritto solo la riga di codice che dovrebbe servire per impostare l'ora del pc...ma il codice funziona benissimo nel senso che tiene l'ora. anche se è sempre 2 minuti avanti rispetto al pc...

Ma il problema sussiste ancora?

a ecco. un'altra cosa, perchè i secondi arrivano (non sempre ma ogni tanto) a 99!!!! strano vero? oppure fa 1,2,3,4 ...,..., 39,49,40,41...eccc

si il problema rimane. ecco il codice:

#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;

Void setup(){
  Serial.begin(57600);
  Wire.begin();
  RTC.begin();
  RTC.sqw(1);     //0 Led off - 1 Freq 1Hz - 2 Freq 4096kHz - 3 Freq 8192kHz - 4 Freq 32768kHz
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
}
void loop(){
DateTime now = RTC.now();
  //DATA***********************************************
  Serial.print("DATA: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.println(' ');

  //ORA**********************************************
  Serial.print ("ORA: ");
  Serial.print (now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.println(now.second(), DEC);
  Serial.println();
}

lucadh: a ecco. un'altra cosa, perchè i secondi arrivano (non sempre ma ogni tanto) a 99!!!! strano vero? oppure fa 1,2,3,4 ...,..., 39,49,40,41...eccc

Non è affatto normale.. Lo shield l'hai saldato tu? Io ricontrollerei un po' i collegamenti e le saldature innanzitutto...

Se è basato su un DS1307, controlla anche che la batteria tampone sia presente e che sia carica. Qualche mese fa ho avuto alcuni problemi con un DS1307 (normalmente uso un altro RTC) che ho risolto proprio attaccando la batteria tampone.

Mi confermate quindi che con questo sketch dovrebbe funzionare alla perfezione? Senza secondi che arrivano a 99...sto usando anche una sonda di T su bus i2c, potrebbe disturbare? Controllo che i pin usati dall' rtc siano liberi....

E' il classico sketch di test dei DS1307. Dovrebbe funzionare. L'I2C è un bus seriale nato per gestire fino a 127 device per cui la presenza di una sonda I2C non deve creare disturbo. Al max, staccala e riprova. Ma la batteria tampone l'hai messa oppure no? L'RTC è su uno shield oppure è su un circuito? Stai usando R di pull-up sulle linee I2C?

si la batteria c'è (proverò a sostituirla con una decente dato che è molto cinese!!!). è la shield che vende futura elettronica per intenderci. le resistenze di pull-up sul bus non credo di averle (anche perchè non so a cosa servono).

lucadh: ... le resistenze di pull-up sul bus non credo di averle (anche perchè non so a cosa servono).

Le resistenze di pull-up sono OBBLIGATORIE sul bus i2C, pena appunto ... errate letture/scritture e mal funzionamenti !

Mettile da 10 K? e vedi se la cosa migliora ... e ... magari, quando hai tempo, fai una ricerca su google per "I2C Bus" e studiatene un po' il funzionamento ;)

Guglielmo

sarà sicuramente fatto!! purtroppo ultimamente non ho molto tempo. appena riesco mi studio i2c bus e provo con le R. poi vi farò sapere... grazie a tutti!!

Ho letto un po sul bus i2c. E credo che le resistenze di pull up siano presenti sulla shield... ho guardqto uno schema su google e sulle shield sono presenti.

Immagino sia questo shield QUI vero ?

Non vedo lo schema (non mi sembra lo pubblichino), ma, effettivamente, sulla scheda vedo delle resistenze ... :roll_eyes:

Se il bus I2C è correttamente terminato, allora deve essere qualche altra cosa ... ... hai fatto la prova senza null'altro (... altri devices) sul bus I2C ? Ti da lo stesso problema ?

Guglielmo

Mmm... prova una cosa: Togli l'integrato dallo zoccolo e rimettilo. Lo so, sembra ridicolo ma molte volte un'integrato non ben inserito nel corrispondente zoccolo può causare molti problemi, in particolar modo in comunicazioni seriali/i2c/ ecc ;)

Ho chiesto delle R di pull-up perché l'Arduino attiva di default le pull-up interne ai pin A4 e A5 quando viene usato l'I2C.