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


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
Logged

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

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

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

Il est plus simple de changer la fréquence !
Logged

Paris
Offline Offline
Full Member
***
Karma: 1
Posts: 175
Beyond the possible...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

The Mind is like a parachute it works best when opened.

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

Bonsoir,

Je vois que se sujet engendre la reflection des grand esprit   smiley-eek-blue
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  smiley-eek

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

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

Normal, tu as assisté à une discussion sur le sexe des anges  smiley-eek

Faut revenir aux principes de base :
1) séparer l'alimentation de la logique de celle des moteurs
2) tester méthodiquement

Pour bien faire :
- transfo secteur->12v (secondaire isolé, écran si possible)
- un redresseur suivi d'une capa de 100µF et d'une autre de 100nF vers l'arduino,
- un autre redresseur suivi d'une capa de 470µF ou plus et si possible un filtre ferrite vers les moteurs,
- une capa de 100nF sur chaque moteur.

Reste à savoir si les shields moteurs permettent une alimentation séparée ?

Les moteurs à balais/collecteurs sont de puissants emetteurs de parasites dans une gamme de fréquence très étendue.

Le plus simple des tests consiste à faire tourner le montage moteurs débranchés.

Après, il faudra commencer à s'interroger pour savoir ce qu'il y a sous la jupe des anges smiley-mr-green   
Logged

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

jy comprend rien  smiley-sad
personne ne peut me donne rune combine pour avancer de 10 / 15 seconde tout les jour ?
Logged

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

jy comprend rien  smiley-sad
personne ne peut me donne rune combine pour avancer de 10 / 15 seconde tout les jour ?
Lire l'heure, faire +10 aux secondes et reprogrammer l'heure.

Un truc dans ce genre :
Code:
DateTime t = rtc.now().unixtime() + 10;
rtc.adjust(t);

Après je pense pas que ce soit la solution de rajouter des secondes comme ça ...
Logged

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

Offline Offline
Full Member
***
Karma: 2
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
a mon avis il est tres peu probable qu'une perturbation, qui est aleatoire par definition, te donne une derive de 15 secondes par jour systematiquement.

Fais comme on te l'avait demande :
- des test systematiques avec tes 2 modules puis, si tu constates une difference, inverser les quartz et recommencer
- pour eliminer completement le risque, un test sans alimenter tes moteurs.

Si j'etais a ta place, je placerais une boucle d'attente dans ton programme afin de ne pas aller lire l'heure des centaines de fois par seconde. Inutile dans ton cas et peut etre pas apprecie par le DS1307.

Si tu me communiques ton adresse privee, je peux t'envoyer un ou 2 quartz pour completer tes essais.

Bonne journee

Jacques
Logged

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

bonjour,

comment mettre ton code dans le mien j'ai l'impression que sa ne va pas avec mon rtc non ?

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



Code:
DateTime t = rtc.now().unixtime() + 10;
rtc.adjust(t);

merci
« Last Edit: April 17, 2013, 02:17:27 am by djbouns » Logged

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

J'étais parti sur la RTClib d'Adafruit.

Pour toi c'est :
Code:
RTC.set(DS1307_SEC, RTC.get(DS1307_SEC, true) + 10);
Logged

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

Pages: 1 [2]   Go Up
Jump to: