Amélioration de la précision du DS1307

Salut

j'utilise le module DS1307 et j'ai remarquer que la précision de ce module est très légère ... j'ai une perte de 5s environ par jour ... si vous avez une idée pour améliorer la précision de ce module ... j'ai lu sur le net qu'il est possible de le faire via un condensateur variable ... mais je ne trouve pas de méthode ... il y a aussi qui propose de changer le quartz ... est ce que c'est bonne solution ?

Merci

hello
regarde du coté de la DS3231.

+10000000000000000 avec dfgh

Ce n'est pas le DS1307 qui est imprécis : il est parfait, en fait ce n'est qu'une série de compteurs.
C'est le quartz avec ses défauts d'adaptation et ses dérives en température qui est source d'imprécision.
Il est possible de recentrer sa fréquence d'oscillation, mais pas les dérives en températures sauf à utiliser une enceinte thermostatée.

Pour ton information :

  1. Extrait de la datasheet du DS3231 :
    quartz_ds3231.png

La courbe en cloche est celle de tout quartz commun.
Il existe plusieurs axes de coupe du cristal de quartz, l'un est très précis mais il y a beaucoup de casse pendant la taille, l'autre est très facile à tailler mais a de moindres performances.
Il va de soi que le premier est beaucoup plus cher et que c'est le second qu'on utilise.

Le DS3231 n'utilise pas de quartz mais des MEMS (nano technologie) ce qui à permis à Maxim d'y introduire une compensation en température.
D'où les excellants résultats visibles sur la courbe du DS3231.

Qui plus est les dérives d'un quartz sont centrées sur 25 °C, il est impossible que les dérives des températures basses compensent celles des températures hautes : tout s'additionne.

Avec le DS3231 comme c'est un principe de compensation il y aura un moyennage entre les sur-compensations et les sous-compensations et la dérive sur un 1 an sera probablement (je n'ai pas fais le test) inférieure à ce qu'annonce Maxim.

quartz_ds3231.png

finalement ... la solution la plus simple est (a priori) de passer vers un DS3231 ... vous êtes sure que c'est plus précis ?

esloch:
finalement ... la solution la plus simple est (a priori) de passer vers un DS3231 ... vous êtes sure que c'est plus précis ?

Tu as vu les courbes ?
Qu'est-ce qu'il faut de plus ?
Tu les comprends les courbes ?

Lis la datasheet en entier si tu as des doutes.

Bonjour
au passage un article intéressant sur le DS3231

68tjs:
Tu as vu les courbes ?
Qu'est-ce qu'il faut de plus ?
Tu les comprends les courbes ?

Lis la datasheet en entier si tu as des doutes.

ola .. !

c'est juste une question ...

je l'efface ??

sinon ... niveau modification au niveau de mon code si je change de DS1307 vers le DS3231 ... c'est simple ou il faut que je refais tous le code ?

Merci

je refais tous le code ?

Non c'est juste la partie "qui résonne" qui change le reste est inchangé.

Par rapport au DS1307 le DS3231 possède en plus deux alarmes et en moins les 56 octets de ram (pour cela il faut un DS3232).

Des bibliothèques du DS1307 ont étés adaptées aux DS3231.
Vu de l'utilisateur ce devrait être transparent.

68tjs:
Non c'est juste la partie "qui résonne" qui change le reste est inchangé.

Par rapport au DS1307 le DS3231 possède en plus deux alarmes et en moins les 56 octets de ram (pour cela il faut un DS3232).

Des bibliothèques du DS1307 ont étés adaptées aux DS3231.
Vu de l'utilisateur ce devrait être transparent.

excellent ... je viens de commander 3 DS3231 ... (0.97€ l'unité) ... il arrive d'ici 2 mois (oui c'est long .. mais c'est long) ...

et au final je ne touche rien à mon code ... je change de module ... je branche le 5V ; GND ; SCL et SDA ... et ca devrais fonctionner direct

2 Mois ?! Il n'y a pas que le RTC qui dérive :slight_smile:

-Standby:
2 Mois ?! Il n'y a pas que le RTC qui dérive :slight_smile:

:cold_sweat:
j'ai pas le choix ... pour passer de 2 mois a 3 semaines c'est 2.41€ de frais de livraison ... j'attends patiemment ... :sunglasses:

au niveau code je pense faire les changements suivants :

code original (un extrait) - (DS1307) :

#include <TimeLib.h>        //Time Library
#include <DS1307RTC.h>   //Real Time Clock Library
#include <Wire.h>        //Auxiliary Library for DS1307RTC (Real-Time Clock) - Pins to Arduino UNO: A4 (SDA), A5 (SCL)

//---------------------------------------------------
int hora, minuto, temp, umid;
int unidadeHora, unidadeMinuto, dezenaHora, dezenaMinuto;
int unidadeTemp, dezenaTemp, unidadeUmid, dezenaUmid;
unsigned long ti;

void setup() {

  pinMode(LDRpin, INPUT);

  pinMode(latchPin, OUTPUT); // Define the 3 digital pins as output
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);

  dht.begin();

  setSyncProvider(RTC.get);   // Update the time with data of RTC (Real Time Clock)

}



void read_time() {

  hora = hour();
  minuto = minute();
  unidadeHora = hora % 10;
  dezenaHora = hora / 10;
  unidadeMinuto = minuto % 10;
  dezenaMinuto = minuto / 10;

  t = now();
  varHr = hour(t);
  varMin = minute(t);
  setTime(varHr, varMin, 0, 0, 0, 0);

  delay (100);

}

code modifié (DS3231):

#include <TimeLib.h>        //Time Library
#include <DS3231.h>  //Real Time Clock Library
#include <Wire.h>        //Auxiliary Library for DS1307RTC (Real-Time Clock) - Pins to Arduino UNO: A4 (SDA), A5 (SCL)

//---------------------------------------------------
int hora, minuto, temp, umid;
int unidadeHora, unidadeMinuto, dezenaHora, dezenaMinuto;
int unidadeTemp, dezenaTemp, unidadeUmid, dezenaUmid;
unsigned long ti;

void setup() {

  pinMode(LDRpin, INPUT);

  pinMode(latchPin, OUTPUT); // Define the 3 digital pins as output
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);

  dht.begin();

  setSyncProvider(RTC.get);   // Update the time with data of RTC (Real Time Clock)

}



void read_time() {

  hora = hour();
  minuto = minute();
  unidadeHora = hora % 10;
  dezenaHora = hora / 10;
  unidadeMinuto = minuto % 10;
  dezenaMinuto = minuto / 10;

  t = now();
  varHr = hour(t);
  varMin = minute(t);
  setTime(varHr, varMin, 0, 0, 0, 0);

  delay (100);

}

je ne change que #include <DS1307RTC.h> vers un #include <DS3231.h> ... je pense que le TimeLib.h fonctionne aussi avec le DS3231 ... sinon j'ai vu dans des exemples qu'il utilise le RTClib.h ... mais ca implique d'autre changements ...

Pour revenir à une discussion déroulée dans un autre sujet je ne comprends pas l'utilité de la programmation objet avec une RTC qui ne peut donner naissance qu'à 1 seul objet par montage.
De plus dans toutes les classes que je vois aucune ne pratique l'héritage de la classe I2C et pourtant l'héritage est la propriété qui est mise le plus souvent en avant pour vanter l'utilité de la programmation objet..

Vu qu'avec les RTC je ne comprends pas l'utilité d'une classe j'utilise une bibliothèque de fonctions qui occupent moins de place en mémoire.
Et donc je ne te serais d'aucune aide sur les bibliothèques à base de classe pour RTC.

c'est bien beau ce que vous dite là ... mais mon niveau "beginner" ne me permet pas d'y répondre ... j'essai de voir ce que le "héritage de la classe I2C" ... et j'y reviens ...

Je n'ai pas dit que ce qui est disponible ne fonctionne pas.
Les RTClib et autres fonctionnent très bien.

C'est juste que l'individu (très) particulier qui est en train de te répondre se pose des questions sur l'utilité des classes dans certaines applications et qu'il ne trouve pas la réponse.
Rassures toi je ne suis pas beaucoup plus haut que le niveau débutant en programmation.
Par goût le matériel m'interresse plus.