Pages: [1] 2   Go Down
Author Topic: probleme ds1307 dérèglé  (Read 1856 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 160
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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);
}




}
Logged

Offline Offline
Faraday Member
**
Karma: 34
Posts: 5154
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Full Member
***
Karma: 0
Posts: 160
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

Offline Offline
Faraday Member
**
Karma: 34
Posts: 5154
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

...
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
Logged

Offline Offline
Full Member
***
Karma: 3
Posts: 136
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3735
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il n'est pas remis à l'heure à chaque redémarrage, cette partie est commentée smiley-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.
Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 160
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3612
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Full Member
***
Karma: 0
Posts: 160
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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é.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Faraday Member
**
Karma: 34
Posts: 5154
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-cool

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

Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 91
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

a tu essayé avec la librairie  "RTClib.h" qui est bien plus pratique ?
http://www.ladyada.net/make/logshield/rtc.html
« Last Edit: April 10, 2013, 09:33:00 am by peuch88 » Logged

Offline Offline
Full Member
***
Karma: 3
Posts: 136
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Pages: [1] 2   Go Up
Jump to: