DS1307

Je vient d'acheter un module DS1307, le quartz 32.768 MHZ, une pile 3V CR2032 et son coupleur.
J'ai tout installer avec les deux résistances de 10k entre les bornes 7 et 8 et l'alimentation 5V.
La borne 7 est relié au port numérique 0 et la borne 8 au port numérique 8.

J'ai installer ces librairies.
J'ai juste modifier la ligne:
#include <../Wire/Wire.h>
par
#include <Wire.h>

Et essayer le ds1307_test qui y est associer.
Il compile, nickel!

Maintenant mon problème c'est que cela ne marche pas!
Je pense qu'il s'agit probablement d'un problème de paramétrage de mes entrée numérique 0 et 1 mais je ne vois pas où il faut que je modifie le code dans le test.

Je vous avait prévenu je débute, depuis deux semaines! :wink:

Salut nico,

Pour ma part j'ai utilisé la libraire DS1307 :

http://code.google.com/p/ds1307/

voici le code que j'utilise :

#include <DS1307.h>
#include <WProgram.h>
#include <Wire.h> 

// Pour l horloge
int rtc[7];
int heure;
int minute;
int seconde;
int jour;
int mois;
int annee;
int calendrier;


void setup() {
 //reglage horloge 
 /* 
  RTC.stop();
  RTC.set(DS1307_SEC,1);
  RTC.set(DS1307_MIN,46);
  RTC.set(DS1307_HR,18);
  RTC.set(DS1307_DOW,2);
  RTC.set(DS1307_DATE,3);
  RTC.set(DS1307_MTH,8);
  RTC.set(DS1307_YR,10);
  RTC.start();
 */
}

void loop() {
 RTC.get(rtc,true);
    for(int i=0; i<7; i++)
      {
      heure=rtc[2];   
      calendrier=rtc[3];
      jour=rtc[4];
      mois=rtc[5];
      annee=rtc[6];
      minute=rtc[1];
      seconde=rtc[0];
      }
Serial.print(" ");
    if (jour < 10)
      {
      Serial.print("0");
      }
    Serial.print(jour);
    Serial.print(" ");
    if (mois < 10)
      {
      Serial.print("0");
      }
    Serial.print(mois);
    Serial.print(" ");
    Serial.print(annee);
    Serial.print("   ");
    if (heure < 10)
      {
      Serial.print("0");
      }
    Serial.print(heure);
    Serial.print(":");
    if (minute < 10)
      {
      Serial.print("0");
      }
    Serial.print(minute);
    Serial.print(":");
    if (seconde < 10)
      {
      Serial.print("0");
      }
    Serial.print(seconde);
    Serial.println("   ");
delay(1000);

}

Pour le montage, pas besoin de resistance,
regarde ce topic:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1191209057/90

Envoi moi un mp si t'as des soucis

@+
Benoit

Envoi moi un mp si t'as des soucis

Ouai c'est sympa pour lui mais en même temps le principe des forums c'est de partager ses problèmes/solutions pour en faire profiter le plus grands nombre. Si vous continuez dans votre coin peut être demain (ou après demain) un autre va passer et reposer la même question ou retomber dans le même piège.

Merci pour ton intervention très à propos et complètement en rapport avec le sujet mais sache qu'on communique sur un autre forum dédié aux orchidées. Ton intervention est très constructive. Merci.

Je te ferai remarquer que j'ai répondu et indiqué la librairie, le code et les sources que j'ai utilisé.

Bien Cordialement.

Bien Cordialement.

:wink: pas si cordial

Ma remarque c'était juste pour dire que si nicop rencontre un problème un autre peut aussi le rencontrer et que donc c'est plus constructif de continuer sur le forum. C'est tout et on en reste là.

Re,

Je comprends ta remarque, mais si tu as 2 minutes à perdre (ou pas), tu peux jeter un coup d'oeil au sujet que j'ai ouvert concernant mon projet

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1274796681

Et tu pourras constater par toi même que j'ai systématiquement rendu public, les solutions aux problèmes que j'ai pu rencontrer. D'autre part, j'ai été modérateur de plusieurs forum et donc je connais très bien leur vocation. Mais, Merci de m'avoir rafraichit la mémoire.

Pour ce qui est de la cordialité, tu pourras voir que je commence tous mes posts par un bonjour et les termine par un merci en signant. Ce n'était pas vraiment le cas dans ton intervention.

Ceci dit je suis entièrement d'accord avec toi, on peut refermer la parenthèse. :wink:

@+
Benoit

Bon j'ai résolu le problème! :smiley:

Il s'agissait effectivement comme je le présentais d'une erreur de branchement sur les ports de l'arduino.

Le connecteur 7 de l'horloge doit être mis sur le port analogique 5.
Le connecteur 8 doit être mis sur le port analogique 4.

Part contre le code que tu m'a donner Poliben ne fonctionne pas chez moi. J'ai utilisé celui qui se trouve avec les librairies dans le lien que tu m'a mis dans ta première réponse. J'ai d'ailleurs finalement utilisé les librairies de ce lien à la place des librairies que j'avais trouvé précédemment.

Merci au passage à tous de votre aide. :slight_smile:

En fait non, cela ne fonctionne pas encore correctement.
L'heure va beaucoup trop vite.
Après 10 minute elle avance d'environ 3 minutes.

Cela viendrait'il de mon quartz 32.768 MHZ et d'un réglage à réaliser quelque part?

Cela viendrait'il de mon quartz 32.768 MHZ et d'un réglage à réaliser quelque part?

L'erreur semble trop importante pour que se soit une dérive du quartz.

En jetant un oeil à la doc du DS1307 http://pdfserv.maxim-ic.com/en/ds/DS1307.pdf, je vois 2 possibilités:

  1. quartz mal adapté. La précision de oscillateur intégré au DS1307 est garantie si celui-ci et couplé avec un quartz ayant des caratéristiques bien définies (voir la doc).
  2. ils évoquent une possibilité d'accélération de l'horloge si il y a un couplage entre l'oscillateur à 32768Hz et du bruit généré par les circuits voisins.

Les causes les plus probables de bruit peuvent être:

  1. Proximité avec un circuit "bruyant"
  2. Bruit réinjecté par les alimentations
  3. Mauvaise implantation du quartz 32768Hz.

Pour le 1 et le 2, l'horloge de l'arduino peut être la cause du bruit. Il faut commencer par regarder si l'alimentation de ton DS1307 est bien découplée, condensateur d'environ 10nF sur ses broches d'alimentation. Eviter de placer le DS1307 trop près du quartz de l'arduino.

Pour le 3, liaison entre ton quartz 32768 et le DS1307 la plus courte possible.

Sur la broche 7 du DS1307 tu peux aiguiller une division de la fréquence générée par l'oscillateur. Si tu peux avoir accès à un fréquencemètre cela te permettrait de vérifier la fréquence de l'oscillateur.

Après avoir avancé, l'horloge s'est mis à prendre du retard puis finalement l'heure et la date ont été réinitialisé. l'horreur quoi!

Il n'y a pas de condensateur sur les broches d'alimentation de mon DS1307. Je n'avait vu nulle part qu'il fallait en mettre. Je suis quitte à allez en acheter. Donc condensateur 10nF, polarisé j'imagine?

La liaison entre mon quartz et le DS1307 est très courte.

J'ai pris ce quartz de 32,768 MHZ.
Il ne convient pas?

le DS1307 est à 3 / 4 cm de l'arduino, il est utile que je l'éloigne davantage?

Il n'y a pas de condensateur sur les broches d'alimentation de mon DS1307. Je n'avait vu nulle part qu'il fallait en mettre. Je suis quitte à allez en acheter. Donc condensateur 10nF, polarisé j'imagine?

Je pense que c'est la première chose à faire.
10nF céramique non polarisé

Le quartz semble adapté puisque dans la doc Maxim ils indique une charge de 15pF

Condensateur 10nF céramique non polarisé commandé!
Suite fin de semaine prochaine.

J'ai fait un essais avec une alimentation 5V externe à l'Arduino, donc à priori sans bruit.

Cela ne fonctionne toujours pas. >:(

Mon quartz est énorme comparé à ceux que j'ai vu sur les photos de montage disponible sur google, donc je vais aussi en commander d'autres modèles (pas disponible en magasin) pour faire des essais.

c'est pas 32kHz plutot que 32 Mhz ? ::slight_smile:

Bien vu Gosaki, tu vient de trouver mon erreur!
Merci beaucoup! :-*

Je doit être blond, ce n'est pas possible de faire une erreur aussi grossière. >:(

En tout cas je conserve l'idée du condensateur, vue nul part ailleurs, cela limiteras peut être les dérives du au bruits.

Pour clore ce post je met une image capturé sur Google du montage théorique sans condensateur et je remet le lien donné par Poliben plus haut pour les librairies et le code ainsi qu'un lien pour le téléchargement de la notice de ce composant:

Et au moins ceux qui taperont DS1307 dans le moteur de recherche français sauront ce qu'il faut faire et surtout ce qu'il ne faut pas faire. :wink:

c'est pas 32kHz plutot que 32 Mhz ? Roll Eyes

Bien vu Gozaki. On ne lit jamais avec assez d'attention :-[

en fait, j'y croyais pas trop mais bon parfois ...

Bon j'ai installer le bon quartz en début de semaine et cela fonctionne avec cependant une dérive importante.
En fin de semaine j'ai installer le condensateur 10nF céramique non polarisé et cela à bien amélioré la dérive. Plus que quelques secondes par jour.

J'arrive sans problème à afficher l'heure et la date mais maintenant je bloque pour programmer des action en fonction de l'heure, je n'arrive pas à déclencher une action en fonction de l'heure.

Vous auriez un exemple de code à me proposer pour que je m'en inspire.

C'est bon j'ai réussi! :smiley:

Merci à tous de votre aide précieuse. :-* :-*

Développe ... ::slight_smile: