Go Down

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

Artouste



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

peuch88

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 ?

alienboats

Il est plus simple de changer la fréquence !

-Standby

Il faut les filtré au plus près  du moteur avec un petit condensateur de 0,01uF les interférences.
The Mind is like a parachute it works best when opened.

djbouns

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 ?

alienboats

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: 

djbouns

jy comprend rien  :(
personne ne peut me donne rune combine pour avancer de 10 / 15 seconde tout les jour ?

skywodd


jy comprend rien  :(
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: [Select]
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 ...
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

JMe87

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

djbouns

#24
Apr 17, 2013, 08:57 am Last Edit: Apr 17, 2013, 09:17 am by djbouns Reason: 1
bonjour,

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

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




Code: [Select]

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


merci

skywodd

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

Pour toi c'est :
Code: [Select]
RTC.set(DS1307_SEC, RTC.get(DS1307_SEC, true) + 10);
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Go Up