Problème module RTC DS1307 / Arduino UNO

Bonjour,

J'utilise actuellement une carte Arduio UNO et un shield SD : https://www.mouser.fr/datasheet/2/737/adafruit-data-logger-shield-932859.pdf

Ce dernier possède un module RTC mais lorsque j'utilise le code en exemple pour le bibliothèque RTClib; j'arrive a mettre la date mais pas l'heure et de plus elle ne change pas, c'est-à-dire, les secondes ne changent pas

le code utilisé :

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup () {
  while (!Serial); // for Leonardo/Micro/Zero

  Serial.begin(57600);
  Wire.begin();
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  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(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
     rtc.adjust(DateTime(2017, 1, 21, 3, 0, 0));
  }
 rtc.adjust(DateTime(2018, 6,18,10,24,0));
}

void loop () {
    DateTime now = rtc.now();
    
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" (");
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
    Serial.print(") ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");
    
    // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now + TimeSpan(7,12,30,6));
    
    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
    
    Serial.println();
    delay(3000);
}

Et sur le moniteur, on m'affiche :
2018/6/19 (Tuesday) 0:4:0
since midnight 1/1/1970 = 1529366640s = 17701d
now + 7d + 30s: 2018/6/26 12:34:6

alors qu'il est 10h41 et ça ne change pas.

Cordialement,

PGEA

// calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now + TimeSpan(7,12,30,6));

ça te calcule un instant qui est 7 jours, 12 heures, 7 minutes et 0 secondes dans le futur. Et en effet, ça correspond à ce qu'il affiche avec l'heure actuelle à 00:04:00.

Tu mets l'horloge à l'heure avec la commande:
rtc.adjust(DateTime(2018, 6,18,10,24,0)); et visiblement, elle ne fait pas ce que tu lui demandes. Les spécifications de DateTime sont :
DateTime::DateTime (uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t min, uint8_t sec)donc pour toi : 18 juin 2018, 10 heures 24 minutes. Mais visiblement, il ne retient pas cette date ni cette heure puisqu'il affiche : 2018/6/19 (Tuesday) 0:4:0

Il peut y avoir un conflit sur l'accès I2C avec le shield SD : peux-tu essayer de le déconnecter ?

Merci de ta réponse,

Excuse moi, le copier collé que j'ai fait tout à l'heure n'est pas bon. J'arrive à configurer la date mais c'est juste l’heure qui ne se configure pas bien :

2018/6/18 (Monday) 0:4:0
since midnight 1/1/1970 = 1529280240s = 17700d
now + 7d + 30s: 2018/6/25 12:34:6

Pour la date dans le future, effectivement, cela fonctionne bien mais comme l'heure de début n'est pas bonne cela devient faux.

Je ne sais pas comment le déconnecter comme le shield est fait exprès pour ne pas avoir de raccords à faire.

Connecte directement la RTC sur le Uno : SDA sur A4, SCL sur A5

il existe des shields avec SD et RTC :

Tu as bien inséré une pile à l'emplacement prévu? Le DS1307 ne fonctionne pas correctement si elle est absente.

lepset :
oui j'utilise précisément un de ces shields : https://www.mouser.fr/datasheet/2/737/adafruit-data-logger-shield-932859.pdf

fdufnews:
Oui une pile CR1220 comme indiquée sur le shield.

Merci de vos réponses.

Le lien que tu indiques dit qu'il faut utiliser un fork de la bibliothèque RTCLib : as-tu installé le bon (ils donnent un lien) ?

Sinon, en cherchant un peu (google : arduino rtc library), tu trouveras plein d'autres bibliothèques permettant de faire fonctionner une RTC.

Tu as une bibliothèque simplifiée et grandement suffisante dans le sous répertoire Tutoriel et cours.
"Les tutos du Bricoleau"
Clique Ici pour voir l'ensemble des tutos du Bricoleau

Oui je l'ai utilisé, même plusieurs bibliothèques et d'autres codes mais je ne comprends pas j'arrive a avoir la date mais pas l'heure et même si elle n'est pas bonne, elle n'avance pas. Les secondes ne bouge pas :confused:

Je viens d'utiliser la bibliothèque que tu viens de poster et regarde j'obtiens bien la bonne date mais l'heure ne se met pas à celle à laquelle j'ai téléversé :

Programme exemple 2 : reglage automatique RTC

Date de compil : Jun 18 2018
annee=18
mois=6
jour=18
Heure de compil : 15:57:51
heure=15
minute=57
seconde=51
Reglage OK

Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)
Lun 18/06/2018 05:07:41 heure d'ete (18/06/2018 03:07:41 UTC)

et elle n'avance toujours pas.

Si Bricoleau n'est pas dans les parages, tu pourrais lui envoyer ta question par MP, il a l'air de bien connaitre le sujet...

Question basique pour vérifier que le module 'horloge n'est pas en panne :

Tu peux lire l'heure ?
Si c'est non --> DS1307 = poubelle

Si c'est oui tu la lis puis tu la relis 5mn, 10 mn etc après.
Si l'heure lue change il y a de l'espoir, si l'heure ne change pas = poubelle.

Remarque TRES importante :
Les montages à base de DS1307 ne sont absolument pas précis --> c'est dans le principe même d'un quartz qui dévie s'il n'est pas stabilisé en température.

Avant il n'y avait pas mieux --> on faisait avec.

Maintenant il y a les MEM's qui est une technologie nettement plus précise et compensée en température.

Il ne faut plus utiliser des DS1307 mais des DS3231 qui valent le même prix et qui sont incomparablement plus précis.

Pgea:
fdufnews:
Oui une pile CR1220 comme indiquée sur le shield.

Et tu es certain qu'elle est bonne? Tu as contrôlé sa tension?

Oui effectivement je pense qu'il ne fonctionne pas tout simplement, j'arrive a obtenir l'heure mais elle ne change pas même si j'attends plusieurs minutes.

Cependant, j'ai mesuré la tension de la pile et sur mon multimètre, la mesure est : 2,8V alors que la pile est une 3V, cela peut-il engendré le problème ?

Merci encore pour vos réponses :).

Non, 2,8V c'est une pile qui est encore bonne. La tenson Vbat doit être comprise entre 2V et 3,5V.
As-tu fait une inspection visuelle de ta carte pour vérifier s'il n'y aurait pas une mauvaise soudure autour du circuit de la RTC plus particulièrement dans son circuit d'alimentation?

Personnellement j'ai eu une expérience avec un module DS1307 livré avec une pile et qui ne fonctionnait pas.
J'ai retiré la pile --> sans pile il fonctionnait, la pile faisait autour de 2,5 V.
Je place une pile neuve : il fonctionnait.

Par contre cela doit dépendre de la techno de la pile : une pile qui normalement fait 3V et qui descend à 2,5V n'a plus son comportement normal, en particulier sa résistance interne augmente considérablement et c'est particulièrement perturbant lors des appels de courant.
AMHA le CI peut bien fonctionner avec une "vraie" source de tension de 2V mais très mal avec une source de tension dégradée.

Cela ne coûte pas grand chose d'essayer avec une pile neuve.

Je vais essayer de changer la pile merci pour vos réponses. :slight_smile:

J'ai bien vérifier et tout est bien soudé.

Bonjour,

Cela fonctionne, je ne sais pas trop ce que j'ai fait.

J'ai changé la pile mais cela ne fonctionnait toujours pas, après avoir essayer pleins de programmes je suis revenu au début avec la bibliothèque RTC.lib, dedans il y a des exemples et l'exemple pcf8523 fonctionne. Je pense alors que cela vient du module qui n'est pas un module DS1307 mais un pcf8523 or dans la datasheet du module il est spécifié que c'est un DS1307.

Merci de vos réponses et de votre aide :).

Pgea:
Je pense alors que cela vient du module qui n'est pas un module DS1307 mais un pcf8523 or dans la datasheet du module il est spécifié que c'est un DS1307.

Tu peux le vérifier en lisant sa référence sur le dessus du circuit intégré