Go Down

Topic: probleme ds1307 dérèglé (Read 2026 times) previous topic - next topic

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


Code: [Select]
#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);
}




}

Artouste


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

skywodd

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.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

djbouns

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 ?

Artouste


...
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  :smiley-mr-green:

alienboats

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.

B@tto

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

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.
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

djbouns

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 ?

fdufnews

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

djbouns

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 ?

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é.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Artouste


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  ?  :smiley-mr-green:
Quote
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


peuch88

#12
Apr 10, 2013, 04:25 pm Last Edit: Apr 10, 2013, 04:33 pm by peuch88 Reason: 1
a tu essayé avec la librairie  "RTClib.h" qui est bien plus pratique ?
http://www.ladyada.net/make/logshield/rtc.html

alienboats

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.

skywodd


en fait tu veux amplifier son problème initial  ?  :smiley-mr-green:
Quote
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 :smiley-mr-green:
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up