Problema con RTC DS3232 ed Arduino Uno

Salve a tutti, ho realizzato un orologio a led e dopo aver constatato che non sarà mai preciso senza RTC ho deciso di provare un DS3232. Ho utilizzato la libreria reperibile al seguente indirizzo:

Per prima cosa provo l'esempio che mi restituisce l'orario tramite porta seriale (SetSerial). Ovviamente funziona alla perfezione. Il mio orologio perde circa un minuto l'ora. Dopo aver installato l'RTC ho provato a copiare il programma dell'esempio nel programma del mio orologio. Funziona tutto, ma continua a perdere secondi ogni minuto che passa, inoltre la scrittura sulla seriale è rallentata ed irregolare, forse colpa del programma abbastanza lungo. Come mai succede questo? Con l'istruzione setSyncProvider(RTC.get); da quanto ho capito dovrei interrogare l'RTC per aggiornare il mio orario, ma a quanto pare questa cosa non accade. Qui sorgono delle domande, magari banali:

Come funziona questo benedetto RTC? Come mai c'è bisogno di interrogarlo? Può il mio programma in qualche modo influenzare il conteggio del tempo dell'RTC? Se qualcuno riesce a farmi capire meglio magari posso trovare gli errori che commetto. Intanto ho lasciato l'orologio acceso per capire quanto perde in tot ore, vi tengo aggiornati.

Grazie mille a tutti!

Quel RTC funziona come tutti gli RTC ne più e ne meno del DS1307 ... solo è più preciso e ... NON esiste che perda secondi ogni minuto ! La batteria è correttamente collegata ?

Il tuo programma NON può influenzare l'RTC ... ma, con scritture sbagliate, può alterarne il contenuto.

Studiati bene tutte le funzioni della liberia, apri i sorgenti e leggitele, dopo di che usa SOLO quelle che realmente ti servono.

Guglielmo

P.S.: Mai usata una libreria per questi RTC ... basta studiarsi bene il datasheet, capire le locazioni da leggere/scrivere e usare la libreria Wire per farlo.

...Il mio orologio perde circa un minuto l'ora...

Capirei se dicessi che usi il solito DS1307, ma il DS3232 è molto più preciso.

Se anche con l'esempio della libreria perdi alcuni secondi ogni minuto, è probabile ci sia qualcosa che non va nel modulo.

Adesso ho appena notato che i secondi di scarto non aumentano sempre, da 5 secondi sono passato ad 1 secondo, che mano mano va a perdersi. Comunque non sono per niente esperto di programmazione, mi è difficile studiare un datasheet ed una libreria per bene. Lo faccio per hobby, niente di più, per questo mi sono rivolto a voi. La batteria è correttamente collegata, infatti anche se tolgo l’alimentazione mantengo l’orario. Quello che mi sembra strano è che senza il mio programma funziona perfettamente, copiandolo pari pari nel mio perde dei secondi, in modo casuale. Non ho utilizzato funzioni che scrivono nella memoria dell’RTC, per cui non saprei come posso influenzarlo.

Ma allora gli esempi funzionano senza perdere secondi?

Se è così, c'è qualche errore nel tuo sketch

Beh, se usi la TimeLib, mi pare che di default si sincronizzi con l'RTC ogni 5 minuti. Tra una sincronizzazione e l'altra usa il clock interno, per cui può disallinearsi.

Ecco, questo volevo sapere SukkoPera. Quindi in pratica viene usato il clock interno che viene corretto interrogando ogni 5 minuti l'RTC. Posso interrogare l'RTC una volta ogni 10 secondi ad esempio? Che comando devo dare per interrogarlo "manualmente"?

Altra domanda. Ho letto che con la batteria dell'RTC ho un backup di sei mesi circa. Ciò vuol dire che devo cambiare la batteria ogni sei mesi? Quando si scarica la batteria l'RTC continua a funzionare o mi perde l'orario anche se non tolgo l'alimentazione ad arduino?

Puoi impostare l'intervallo di sync semplicemente con questa funzione:

void setSyncInterval(time_t interval); // set the number of seconds between re-sync

Sei mesi? Durerà almeno sei anni :slight_smile: E poi la batteria viene usata solo quando l'RTC non è alimentato!

Come pensavo, magari dura sei mesi con RTC non alimentato. Perfetto quindi. Comunque sto usando la libreria Time, non TimeLib, non so se c'è qualche differenza.