horloge ds 1307

Bonjour à tous, j'ai un problème avec mon horloge Ds 1307 (DFR0151)
Je veux afficher l'heure et la date sur un module LCD, depuis ma carte arduino uno j'ai donc commandé le tout.
J'ai relié mon écran lcd qui fonctionne parfaitement, j'affiche ce que je veux dessus.
J'ai branché mon horloge a mon arduino et installé la librairie RTClib.
Branchements :
GND => masse
Vcc=> 5v
SDA => A4
SCL=> A5
J'ai suivi un tuto sur internet et ca marchais niquel. Puis je sais pas ce que j'ai fabriqué j'ai débranché la masse de l'horloga alors qu'elle était sous tension et depuis... A marche plus... Je me suis dis que j'avais grillé un composant et j'ai donc racheté une horloge.
Nouveau test et Bim bug...
Donc j'effectue les meme branchements, j'ouvre mon exemple DS1307 de ma librairie :

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
// 2010-02-04 jc@wippler.nl http://opensource.org/licenses/mit-license.php

#include <Wire.h>
#include <RTClib.h>

RTC_DS1307 RTC;

void setup () {
Serial.begin(57600);
Wire.begin();
RTC.begin();

// following line sets the RTC to the date & time this sketch was compiled
//RTC.adjust(DateTime(DATE, TIME));
}

void loop () {
DateTime now = RTC.now();

Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();

Serial.print(" since 2000 = ");
Serial.print(now.get());
Serial.print("s = ");
Serial.print(now.get() / 86400L);
Serial.println("d");

// calculate a date which is 7 days and 30 seconds into the future
DateTime future (now.get() + 7 * 86400L + 30);

Serial.print(" now + 7d + 30s: ");
Serial.print(future.year(), DEC);
Serial.print('/');
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();

Serial.println();
delay(3000);
}

j'ouvre mon moniteur série pour voir ce que revoi mon horloge à 57600 baud et là :

2165/165/165 165:165:165
since 2000 = 443404065s = 5131d
now + 7d + 30s: 2014/1/25 23:48:15

2165/165/165 165:165:165
since 2000 = 443404065s = 5131d
now + 7d + 30s: 2014/1/25 23:48:15

Je me dis qu'il faut mettre à l'heure l'horloge.. Je decommente alors la ligne de mise à l'heure :

//RTC.adjust(DateTime(DATE, TIME));

et relance ma compilation et je reprogramme ma carte, mais non... Toujours la meme chose,

2165/165/165 165:165:165
since 2000 = 443404065s = 5131d
now + 7d + 30s: 2014/1/25 23:48:15

2165/165/165 165:165:165
since 2000 = 443404065s = 5131d
now + 7d + 30s: 2014/1/25 23:48:15

J'ai changé la pile, fait des recherches sur le net, je ne comprend pas pourquoi ca ne marche plus alors que ça fonctionnait avant...
Je me demande si je n'ai pas endomagé ma carte arduino...

MErci d'avance pour vos réponse:!

J'utilise moi même un module à base de DS1307 mais je n'utilise pas la librairie RTClib.h et je crois qu'elle a bien vieilli etles tests que j'avais fais il y a quelques semaines n'était pas concluant avec un DUE. Si tu le veux je peux te passer des bouts de codes qui marche pour moi mais sans cette librairie, juste avec Wire.h

Je veux bien effectivement... si ça fonctionne comme sans la librairie RTC....

Je veux bien essayer mais je pense que vous mes tests, c'est mon bus I2C qui est fichu...
J'ai fais le test en enlevant le modul RTC , normalement il doit m'afficher un message comme quoi le module n'est pas pret.... Et la il me met la meme chose... JE vais tenter avec ta méthode, mais j'ai pas grande grande conviction...
merci quand meme !

Salut,

Tu as mis des résistances de pullup sur SCL et SDA ?

Voici un code qui devrait fonctionner.

TestRTC.zip (1.59 KB)

Il est vrai que je n'ai pas pensé aux resistances de tirages, car sur tout les tutos que j'ai pu voir sur internet, en aucun cas ils ne parlent de mettre de résistances de tirage sur les broches SDA et SCL..

Merci pour les programmes je test ça dès cet apres midi et je viens vous en dire plus !

merci pour vos réponses!

Bonjour,

dededi13:
Il est vrai que je n'ai pas pensé aux resistances de tirages, car sur tout les tutos que j'ai pu voir sur internet, en aucun cas ils ne parlent de mettre de résistances de tirage sur les broches SDA et SCL..

Merci pour les programmes je test ça dès cet apres midi et je viens vous en dire plus !

merci pour vos réponses!

Il faudrait que tu regardes les spécifications du bus I2C et tu verras que les 2 résistances de pullup sont indispensables (because hardware).
Les tutos sur le fonctionnement du bus I2C sont légions sur le net.
Un minimum de lecture et de recherche est nécessaire pour progresser dans le monde d'Arduino.
@+

Les tutos sur le fonctionnement du bus I2C sont légions sur le net.

Sans oublier la bible:

Avec L'I2C les différents maîtres et esclaves sont tous placés en parallèle. Un moyen simple de réaliser une fonction "OU" câblée est d'utiliser des collecteurs ouverts.

Qui dit collecteurs ouverts dit résistances extérieures de ~~ pull-up ~~ de charge sinon cela ne fonctionne pas.
Plus il y a de composants I2C sur le bus plus les résistances de charges doivent être faibles.

Tout ceci est expliqué dans la "bible".

Pour les résistances, si tu as un module acheté tout fait, il y a de grandes chances qu'elles soient déjà dessus, c'était le cas pour le mien et pas mal que j'ai vu sur le net... A voir...

Oui c'est possible, je viens de regarder une des moins cher sur ebay et elles y sont.

Par contre, en chopant le schéma complet (car intrigué par ses 7 résistances...), je viens de me rendre compte que cette horloge est fourni sans pile et apparement elle est conçu pour une pile rechargeable.

Je ne sais pas si ça peut la déteriorer avec une pile non rechargeable mais c'est peut être une piste.

Bonjour,

koala:
Je ne sais pas si ça peut la déteriorer avec une pile non rechargeable mais c'est peut être une piste.

La réponse est sur le schéma :wink:

On peut avoir une photo de ton ds1307 ?

Parce que les miennes viennent d'ebay et je mets des piles non rechargeables et aucun problème ( a part qu'elles avancent de 2mn par semaine...).

Le schéma correspond à cette horloge :

Si la tienne avance c'est parce que normalement on place une capa variable sur le quartz du DS1307 pour affiner mais elle n'est pas présente sur les modules, je pense que la seule solution c'est de la remettre à l'heure régulièrement via internet.

Le problème c'est qu'elle n'est pas relié à Internet...

J'ai lu qu'il fallait changer le quartz, est-ce la solution ?

J'ai la même carte et la mienne a été fourni avec la batterie rechargeable.
Pour la justesse de l'heure, bien que j'ai prévu une remise à l'heure automatique via NTP 1 fois par semaine, je n'ai vraiment pas vu de retard ou d'avance entre temps, c'est très précis quand même et l'intervalle d'une semaine pour la mise à jour m'a parût au delà de la réelle nécessité, mais je l'ai fais pour être sure que tout ailles bien.
Sais-tu aussi que le 2ème circuit est une eeprom ?

Tu l'avais eu où ta carte DS1307 ?

Merci

Là : Module Horloge en temps réel pour Arduino
J'achète quasiment tout là et ailleurs ce qu'ils n'ont pas, en plus quand on les contacte, ils sont très répondant et aide quelques fois au niveau du code.

Merci pour le lien, effectivement les prix sont très correct.

Je mets le lien dans mes favoris.

:wink:

@gunsman76 : non il ne fautpas changer le quartz, c'est un 32768Hz

@JLuc : C'est une mémoire EEPROM de 32k utilisable indépendament de l'horloge via I2C

Pour info, on la trouve à 1€13 fdp inclu

Donc rien a faire avec mon horloge qui avance ?