Salve a tutti,
ho un piccolo problema: ho acquistato una scheda tiny RTC per la gestione del tempo, di quelle piccole con a bordo la batteria.
Ho collegato il tutto (massa, +5v, SDA su A4, SCL su A5, batt su A1) con un piccolo sketch ho interrogato il clock e mostrato l'orario usando la libreria rtc [now = rtc.now()] e funziona.
Quando stacco l'Arduino dal PC però si resetta tutto e l'orario riparte da quello base gestito nello sketch.
Se tengo spento il PC ma collegato in alimentazione l'Arduino l'orario procede.
Cosa può essere? La batteria che non funziona? A bordo c'è una litio a bottone di tipo ricaricabile. Un collegamento errato?
La batteria è carica, se la misuro con un tester dice quasi 4V.
Ho letto da qualche parte che potrebbe essere dovuto al fatto che la carcassa del quarzo non è collegata alla basetta, ho provato a tenerla premuta x far fare contatto a massa ma nulla, devo portarci un filo collegato a GRD ?
Se l'orario si resetta vuol dire che la batteria non funziona come dovrebbe.
Puoi fare una foto o mostrarci lo schema dei collegamenti che hai effettuato?
Risalve,
avete ragione, ma son poco avvezzo ai forum, perdonatemi...
Sono ingegnere civile, grande passione per l'informatica.. Di programmazione me ne intendo discretamente (linguaggi di alto livello), di elettronica il giusto. Per questo vado con i piedi di piombo... ho sempre paura di bruciare tutto!!
I collegamenti mi sembrano ok anche perché funziona e si vede sul monitor seriale.
Allego foto
Controlla allora con un tester se arriva tensione sui piedini dell'integrato connessi alla batteria.
Se è come dice Cyb potrebbe essere l'alloggio che crea falsi contatti.
Ci fai vedere lo sketch usato?
Spesso in tanti si scordano la parte che resetta l'orario nel setup() quindi ad ogni riavvio l'ora riparte dall'istante a cui hai compilato lo sketch che viene memorizzato in DATE e TIME
Allora, di sicuro le linee che impostano data e ora ci sono sempre perchè se le toglievo, al successivo riavvio (dopo aver scollegato l'alimentazione) data il messaggio di errore che RTC non stava funzionando.
Ho fatto qualche prova col tester e sembra che la batteria faccia falso contatto.
A titolo informativo... Alcune librerie integrano un metodo per controllare se l'RTC sta lavorando o si è fermato (condizione che si verifica al 1° avvio, se stacchi la batteria oppure se lo fermi da codice).
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
char cStatoRTC = '--_';
// Per lettura dati batteria (da AB)
int sensorValue = 0; // value read from the pot
float TT=0.0;
// Fine Per lettura dati batteria (da AB)
void setup () {
Serial.begin(57600);
#ifdef AVR
Wire.begin();
#else
Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
rtc.begin();
if (! rtc.isrunning()) {
Serial.println("RTC non sta funzionando!");
cStatoRTC = 'KO ';
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(__DATE__, __TIME__));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
//tolta sennò tutte le volte riparte dalla data di compilazione
}
else
{
cStatoRTC = 'OK ';
}
// Serial.print(cStatoRTC);
}
//*****************************************
// measure battery function
//*****************************************
void ReadBatVcc(void){
sensorValue = analogRead(A1);
TT = sensorValue*0.0047;
Serial.print("Tensione batteria Vcc: ");
Serial.print(TT);
Serial.print("V");
Serial.println();
}
void loop () {
DateTime now = rtc.now();
// Serial.print(cStatoRTC);
Serial.print("Data: ");
Serial.print(now.day(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.year(), DEC);
Serial.print(" - ora: ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.print(" - ");
// Serial.println();
ReadBatVcc();
delay(1000);
}
VCC dev'essere di 5V, mentre la batteria di 3V (come tensione max accetta 3,5V. Se tu usi una batt da 3,6V sei un pò fuori specifiche). Non so però cosa puoi leggere sui pin del quarzo, mai misurato.
La formula la trovi in base ai valori da misurare:
valore = (lettura x Vmax ) / 1024
"lettura" è ciò che ti restituisce analogRead, Vmax è la massima tensione che tu puoi misurare (e questa dipende dalla tensione della batteria a piena carica).
Buongiorno a tutti,
scusate l'assenza ma non ho avuto tempo.
Ho avuto modo di effettuare alcuni test: lavorando sulla batteria e sui pin di collegamento sembra che adesso la tensione arrivi, infatti se stacco la presa usb al ricollegamento l'RTC non si resetta ma adesso ha un altro comportamento strano. In pratica è come se 'congelasse' l'ora in cui si spenge per poi ripartire da li nel momento in cui arriva alimentazione.
Il mio portatile è andato in standby ieri sera verso le 21. Stamani mattina lo sketch di esempio che ho caricato mi dava questo della foto.
Mi sa che il componente è partito.. ne ho ordinato un altro, vediamo.