Go Down

Topic: RTC shield impostazione data/ ora (Read 8906 times) previous topic - next topic

lucadh

Oct 27, 2013, 07:49 pm Last Edit: Oct 28, 2013, 06:28 am by leo72 Reason: 1
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:
Code: [Select]
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...

MasterPi

#1
Oct 27, 2013, 09:34 pm Last Edit: Oct 28, 2013, 06:28 am by leo72 Reason: 1
Innanzitutto la sintassi è :
Code: [Select]
rtc.adjust(DateTime(__DATE__, __TIME__));
Dubito ti compili il codice come hai scritto tu..
Inoltre devi sempre inizializzare l'rtc con:
Code: [Select]
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?

lucadh

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....

MasterPi

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

leo72

@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.

lucadh

#5
Oct 29, 2013, 07:33 pm Last Edit: Oct 29, 2013, 07:42 pm by lucadh Reason: 1
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...

MasterPi


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

lucadh

#8
Oct 29, 2013, 07:49 pm Last Edit: Oct 29, 2013, 10:44 pm by leo72 Reason: 1
si il problema rimane. ecco il codice:


Code: [Select]
#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();
}

MasterPi


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...

leo72

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.

lucadh

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....

leo72

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?

lucadh

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).

gpb01


... 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
Search is Your friend ... or I am Your enemy !

Go Up