probleme ds1307 dérèglé

Bonjour,

je me suis fabriquer un System de pompe de dosage pour mon aquarium.

au niveau dosage tout fonctionne correctement mais j'ai un problème avec mon horloge ...

enfaîte elle se dérègle et prend environ 1.30 minute de retard par semaine.
j'ai testé avec 3 module ds1307 venant de 2 fournisseur différent mais également sur 2 arduino différent.

j'ai aussi tester les ds1307 sur un autre projet et la ... il ne se décale pas ...

J'en suis donc arriver a la conclusion que ça devait venir de mon code

quelqu’un peut t'il m'aider pour trouver d'ou vient se phénomène svp

merci

#include "AFMotor.h"
#include "DS1307.h"
#include "Wire.h"


AF_DCMotor motor1(1, MOTOR12_64KHZ); // create motor #2, 64KHz pwm
AF_DCMotor motor2(2, MOTOR12_64KHZ); // create motor #2, 64KHz pwm
AF_DCMotor motor3(3, MOTOR12_64KHZ); // create motor #2, 64KHz pwm
AF_DCMotor motor4(4, MOTOR12_64KHZ); // create motor #2, 64KHz pwm

int seconde;
int minut;
int heure;
int jour;
int temps;


void setup() {
  
/*
  RTC.stop();
  RTC.set(DS1307_SEC,0);           //réglage secondes
  RTC.set(DS1307_MIN,22);              //réglage minutes
  RTC.set(DS1307_HR,11);               //réglage heures
  RTC.set(DS1307_DOW,4);               //réglage jour de la semaine
  RTC.set(DS1307_DATE,15);             //réglage date
  RTC.set(DS1307_MTH,11);               //réglage mois
  RTC.set(DS1307_YR,12);                 //réglage année
  RTC.start();
  */
  
  
  
  Serial.begin(9600);           // set up Serial library at 9600 bps
 
 
 
 
 motor1.setSpeed(111);     // set the speed
 motor2.setSpeed(111);      
 motor3.setSpeed(111);     
 motor4.setSpeed(111);     
}

void loop() {
  
   heure = RTC.get(DS1307_HR,true);  
  minut = RTC.get(DS1307_MIN,true);
  seconde = RTC.get(DS1307_SEC,true);
  temps = (heure*100) + minut;
  

/* 
************   dosage pour produit tridacna   *****************

dosage des produit par litres.
CA/KH en poudre
OLIGO liquide concentré (50ml=500ml)


bouteille 1 (CA + OLIGO 1 + OLIGO 2) :
1 litre eau osmose + 70g de CA/KH 1 + 10ml OLIGO 1 + 10ml OLIGO 2.

bouteille 2 (KH + OLIG 3) :
1 litre eau osmose + 85g de CA/KH 2 + 10ml OLIGO 3.

BOUTEILLE 3 ( SEL SANS CHLORURE DE SODIUM + MAGNESIUM) :
0.75 litre eau osmose + 0.25 litres magnesium 2% + 27g de CA/KH 3.


************   dosage phyto et zoo plancton   *****************

produit utilisé :
seachem Phytoplancton Reef (recommandé 0.35ml / J max)
Brightwell Aquatics Zooplanktos s ( recommandé 1.25ml / J max)

melange des solution :
75ml de seachem Phytoplancton Reef + 250ml de Brightwell Aquatics Zooplanktos s 

*/



 if ((temps == 700) && (seconde == 10)){
  motor4.run(FORWARD);      // CA/KH 1 (CALCIUM) + OLIGO 1 et 2 
  delay(9200);
  motor4.run(RELEASE);  
 }
else if ((temps == 1000) && (seconde == 10)){
  motor4.run(FORWARD);      // CA/KH 1 (CALCIUM) + OLIGO 1 et 2
   delay(9200);
  motor4.run(RELEASE);
}
else if ((temps == 1300) && (seconde == 10)){
  motor4.run(FORWARD);      // CA/KH 1 (CALCIUM) + OLIGO 1 et 2
   delay(9200);
  motor4.run(RELEASE);
}
else if ((temps == 1600) && (seconde == 10)){
  motor4.run(FORWARD);      // CA/KH 1 (CALCIUM) + OLIGO 1 et 2 
    delay(9200);
  motor4.run(RELEASE);
} 
else if ((temps == 1900) && (seconde == 10)){
  motor4.run(FORWARD);      // CA/KH 1 (CALCIUM) + OLIGO 1 et 2 
    delay(9200);
  motor4.run(RELEASE);
} 

  
  if ((temps == 800) && (seconde == 10)){
  motor3.run(FORWARD);      // CA/KH 2 ( KH )+ OLIGO 3
      delay(4600);
  motor3.run(RELEASE);
  }
     else if ((temps == 1100) && (seconde == 10)){
  motor3.run(FORWARD);      // CA/KH 2 ( KH )+ OLIGO 3
      delay(4600);
  motor3.run(RELEASE);
  }
   else if ((temps == 1400) && (seconde == 10)){
  motor3.run(FORWARD);      // CA/KH 2 ( KH )+ OLIGO 3
      delay(4600);
  motor3.run(RELEASE);
  }
   else if ((temps == 1700) && (seconde == 10)){
  motor3.run(FORWARD);      // CA/KH 2 ( KH )+ OLIGO 3
      delay(4600);
  motor3.run(RELEASE);
  }
  else if ((temps == 2000) && (seconde == 10)){
  motor3.run(FORWARD);      // CA/KH 2 ( KH )+ OLIGO 3
      delay(4600);
  motor3.run(RELEASE);
  }
 
 
 if ((temps == 900) && (seconde == 10)){
  motor2.run(FORWARD);      // CA/KH 3 ( SEL SANS CHLORURE DE SODIUM ) + MAGNESIUM 2%
  delay(10400);
  motor2.run(RELEASE);
 }
 else if ((temps == 1200) && (seconde == 10)){
  motor2.run(FORWARD);      // CA/KH 3 ( SEL SANS CHLORURE DE SODIUM ) + MAGNESIUM 2%
  delay(10400);
  motor2.run(RELEASE);
 }
else if ((temps == 1500) && (seconde == 10)){
  motor2.run(FORWARD);      // CA/KH 3 ( SEL SANS CHLORURE DE SODIUM ) + MAGNESIUM 2%
  delay(10400);
  motor2.run(RELEASE);
 }
else if ((temps == 1800) && (seconde == 10)){
  motor2.run(FORWARD);      // CA/KH 3 ( SEL SANS CHLORURE DE SODIUM ) + MAGNESIUM 2%
  delay(10400);
  motor2.run(RELEASE);
 }
else if ((temps == 2100) && (seconde == 10)){
  motor2.run(FORWARD);      // CA/KH 3 ( SEL SANS CHLORURE DE SODIUM ) + MAGNESIUM 2%
  delay(10400);
  motor2.run(RELEASE);
 }
 

if ((temps == 2130) && (seconde == 10)){
  motor1.run(FORWARD);      // PHYTO / ZOO PLANCTON dosage MAX 1.5ml / J
  delay(2000);
  motor1.run(RELEASE);
}




}

djbouns:
Bonjour,

je me suis fabriquer un System de pompe de dosage pour mon aquarium.

au niveau dosage tout fonctionne correctement mais j'ai un problème avec mon horloge ...

enfaîte elle se dérègle et prend environ 1.30 minute de retard par semaine.
j'ai testé avec 3 module ds1307 venant de 2 fournisseur différent mais également sur 2 arduino différent.

j'ai aussi tester les ds1307 sur un autre projet et la ... il ne se décale pas ...

J'en suis donc arriver a la conclusion que ça devait venir de mon code

quelqu’un peut t'il m'aider pour trouver d'ou vient se phénomène svp

merci

le ds1307 est alimenté comment (par quoi ? )
c'est pas un foudre de precision mais 1'30 semaine ça derive pas mal.

A chaud , le PWM des moteurs qui perturbe l'oscillation du QZ horloger ?

le code en dehors des periodes moteurs ON ne fait que lire le DS1307(et ecrire sur le serial)
pour test je mettrais un delay de l'ordre de 450 ms en fin de boucle pour voir si la derive est identique

Bonjour,

Essaye de lisser l'alimentation du DS1307 avec un condensateur chimique au plus prés de son VCC/GND.
C'est surement les moteurs qui perturbent l'alimentation de l'oscillateur du module et le font se dérégler.

Bonsoir,
;
mon ds1307 est alimente par mon arduino lui même alimenter par un transfo 12V.
je vais ajouter se délais de 450ms.

mais a priori vous êtes d'accord pour dire que les moteur dérègle mon qz ?

djbouns:
...
mais a priori vous êtes d'accord pour dire que les moteur dérègle mon qz ?

en ce qui me concerne, je pense que c'est une possibilité relativement probable, mais surement pas une certitude :grin:

Un ds1307 c'est pas une horloge atomique!

C'est la stabilité du quartz qui conditionne sa précision.

Voir ce qui peut faire dériver un Quartz.
En premier lieu, la température.

Question subsidiaire : pourquoi le remettre à l'heure à chaque redémarage?
Il n'a pas de pile ?
La méthode utilisée est très peu précise.
Dans les exemples du logiciel arduino il y a une méthode basée sur l'horjoge du PC. Elle introduit environ 15sec de décalage mais c'est certainement mieux.

Il n'est pas remis à l'heure à chaque redémarrage, cette partie est commentée :wink:

Sinon oui c'est pas une horloge atomique mais djbouns évoque le fait que le problème est relatif à ce montage spécifiquement, donc, à priori il ne faut pas remettre en cause le module en lui même.

bonjour,
malgré le delay ajouter en fin de boucle, le dérèglement de l'horloge continu.
est t'il possible de glisser dans ma boucle un code qui, journalièrement, reculerait l'heure de quelque seconde ?

Un petit surplus de découplage sur l'alimentation du DS1307.

salut fdufnews
l'alimentation se fait par l'arduino avec un condensateur ajouté.
il n'est pas possible de glisser dans le code un "recalage" de l'heure ?

Essaye quand même avec un autre module DS1307 ... il ne devrait pas ce décaler autant c'est pas normal ...
Reculer de quelques secondes chaque heure l'horloge c'est comme vouloir mettre des rustines sur un pneu complétement crevé.

skywodd:
Essaye quand même avec un autre module DS1307 ... il ne devrait pas ce décaler autant c'est pas normal ...
Reculer de quelques secondes chaque heure l'horloge c'est comme vouloir mettre des rustines sur un pneu complétement crevé.

Bonjour skywodd

en fait tu veux amplifier son problème initial ? :grin:

elle se dérègle et prend environ 1.30 minute de retard par semaine

retour serieux 8)

faire un vrai test avec 2 modules différents pour voir les écarts de dispersion.

si ils sont de progression en valeur de perte quasi identique cela tendra à impliquer le code
si ce n'est pas le cas , regarder le hard , pour les "QZ horloger" on peu trouver de tout , faire un echange de QZ entre modules peut etre un debut de reponse

a tu essayé avec la librairie "RTClib.h" qui est bien plus pratique ?
http://www.ladyada.net/make/logshield/rtc.html

Une procédure de dépannage bête et systèmatique :

  • faire tourner le programme 24h tous moteurs débranchés
  • idem moteur 1 branché
  • moteur 2
  • etc ...

Une intuition : les PWM à 64khz, c'est un peu tenter le diable ! A peu de chose près on est au double de la fréquence du quartz.
En plus c'est un peu élevé pour un moteur . Il suffit d'être au dessus des fréquences audibles.

Artouste:
en fait tu veux amplifier son problème initial ? :grin:

elle se dérègle et prend environ 1.30 minute de retard par semaine

Oui enfin non, tu m'as compris, on recule vers l'avant quoi :grin:

alienboats:
Une intuition : les PWM à 64khz, c'est un peu tenter le diable ! A peu de chose près on est au double de la fréquence du quartz.

bonsoir alienboats
c'est peut etre pas une si mauvaise intuition , mais intuitivement j'aurais aussi tendance à penser que cela ferait avancer et pas retarder l'horloge.

un petit oscillo sur la sortie SQW out permettrais simplement de voir si il y a "decrochage" lors des phases moteurs.

par curiosité, je vais stresser un ds1307 et voir la plage qu'il accepte en entrée Oscillateur

si le problème est les interférences a 64khz, un tore de ferrite sur le cablage de l'horloge peut résoudre l'affaire ?

Il est plus simple de changer la fréquence !

Il faut les filtré au plus près du moteur avec un petit condensateur de 0,01uF les interférences.

Bonsoir,

Je vois que se sujet engendre la reflection des grand esprit :fearful:
le problème c'est que j'ai décrocher depuis le milieu de la page précédente ...
je suis pourtant sur le forum français et je lit du chinois :astonished:

qu'est que je doit faire pour cette frequence qui a l'air de vous derangez ?
quelqun peut me modifier le code et l'afficher ?