Problemi con gestione DS1307

Ciao ragazzi, da qualche giorno ho ricevuto il mdulo RTC con DS1307 assemblato con quarzo e batteria tampone tipo questo :

Uploaded with ImageShack.us

l'ho collegato ad Arduino, caricato uno sketch per una prima prova e per settare l'ora e la data, tutto perfetto come un orologio svizzero :slight_smile:

Allora incomincio a modificare lo sketch (che riporto sotto) per primo per evitare che ogni volta che lo ricarico mi vada a modificare i settaggi ho commentato i comandi per settare l'orologio e poi aggiungo un paio di righe di print su seriale (quelle con il commento in italiano ) ricarico tutto sull'Arduino e cosa mi succede ?

Nonostante abbia commentato le istruzioni per il settaggio ogni volta che riparte l'orologio si setta sui parametri impostato nello sketch e la stessa cosa lo fa se tolgo l'alimentazione e riaccendo il tutto dopo un pò, dove ho sbagliato ?

Ringrazio anticipatamente chi mi risponderà.
Ciao.

/*Reads the value from a Real Time Clock (RTC) DS1307 and displays it in the serial monitor
*
*Created by D. Sjunnesson 1scale1.com d.sjunnesson (at) 1scale1.com
*
*Created with combined information from
*http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1180908809
*http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1191209057
*
*
*Big credit to mattt (please contact me for a more correct name...) from the Arduino forum
*which has written the main part of the library which I have modified
*
*/

#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h> // written by mattt on the Arduino forum and modified by D. Sjunnesson

void setup()
{
Serial.begin(9600);

/*RTC.stop();
RTC.set(DS1307_SEC,1); //set the seconds
RTC.set(DS1307_MIN,31); //set the minutes
RTC.set(DS1307_HR,22); //set the hours
RTC.set(DS1307_DOW,3); //set the day of the week
RTC.set(DS1307_DATE,17); //set the date
RTC.set(DS1307_MTH,6); //set the month
RTC.set(DS1307_YR,10); //set the year
RTC.start();
*/
}

void loop()
{

Serial.print(" ORA "); // Etichetta
Serial.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
Serial.print(":");
Serial.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
Serial.print(":");
Serial.print(RTC.get(DS1307_SEC,false));//read seconds
Serial.print(" DATA "); // Etichetta
Serial.print(RTC.get(DS1307_DATE,false));//read date
Serial.print("/");
Serial.print(RTC.get(DS1307_MTH,false));//read month
Serial.print("/");
Serial.print(RTC.get(DS1307_YR,false)); //read year
Serial.println();

delay(1000);

}

Ciao, non so dirti di preciso dove sia l'errore ma visto che ho combattuto anche io con questo chip mi sento di dirti di eliminare il delay in quanto renderebbe l'orario impreciso. Leggi questo post che avevo inserito tempo fa, c'è lo sketch funzionante ma occorre eliminare il delay comunque se continui la lettura vengono fornite le indicazioni su come farlo funzionare correttamente. Ecco il post, prova ad adattarlo per le tue esigenze: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1259875836/5
Di per sè l'rtc funziona ma il delay fa si che ogni tanto i secondi non corrispondono alla realtà, basta soltanto eliminarlo come suggerito nella discussione.
Ciao.

ciao Freddy65
non só,
cosa succede se cancelli il codice che hai messo comentato?
Ciao Uwe

@Pelletta, ciao, non credo che dipenda dal delay, durante il funzionamento del terminale seriale non salta nessun secondo.

@uwefed, ciao, si ci avevo pensato, purtroppo il poco tempo a disposizione mi costringe sempre a rimandare le cose, comunque stamattina in ufficio ho fatto approfondito le ricerche sul forum per casi analoghi ed ho trovato questo post http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1268084735 dove se ho capito bene ha un problema simile al mio all'apertura del terminale seriale ed in pratica gli viene consigliato di creare uno sketch per il settaggio dell'orario ed uno per leggere i dati.
Appena posso farò questa prova e vi farò sapere.

Grazie a tutti, ciao.

Forse faresti bene a mettere un controllo di inizializzazione nel setup del tipo:

void setup()
{
  Serial.begin(9600);

  if( RTC.get(DS1307_YR,false) < 10 ){ //se l'anno è inferiore a 2010 inizializza
    RTC.stop();
    RTC.set(DS1307_SEC,1);        //set the seconds
    RTC.set(DS1307_MIN,31);      //set the minutes
    RTC.set(DS1307_HR,22);       //set the hours
    RTC.set(DS1307_DOW,3);       //set the day of the week
    RTC.set(DS1307_DATE,17);       //set the date
    RTC.set(DS1307_MTH,6);        //set the month
    RTC.set(DS1307_YR,10);         //set the year
    RTC.start();
  }
}

ciao Freddy65
Praticamente quando apri il terminale del IDE fa automaticamnete resetare l'arduino e percui parte il sketch dal inizio.
Forse per questo Ti succede, ma dovresti avere ancora la versione non commentata dello sketch sul arduno.
Ciao Uwe

Ciao uwefed, si in effetti ogni volta che aprivo il terminale i secondi ripartivano da zero, ora dopo aver settato l'orario ho creato un nuovo sketch cancellando le istruzioni per il SET ed ho lasciato solo quelle per la lettura e devo dire che una volta caricato su Arduino l'orario non si resetta più sia quando apro il terminale sia quando ridò alimentazione alla scheda, ora lo tengo ancora un pò alimentato poi se ne parla domani per altre prove

Ciao e buonanotte a tutti.

Ok, continua a funzionare, con 5 secondi avanti ma funziona senza resettarsi.

Ancora grazie e ciao a tutti.