DS1307 + Pile sauvegarde

Bonsoir,
j'ai acheté une carte à base de DS1307 sur futurlec

Cette carte possède une pile bouton pour sauvegarder l'heure en cas de coupure de courant enfin je pense.
Car lorsque je coupe l'alim et que je la rallume l'heure n'est pas sauvegardée elle reprend à l'heure que j'ai réglé dans le programme.

Y a t 'il une fonction à mettre dans le programme pour ne pas perdre l'heure ??

Merci

elle reprend à l'heure que j'ai réglé dans le programme

Ton programme écrase l'heure a chaque démarrage .. ?
Il faut réglé l'heure une fois et ensuite lire uniquement l'heure.
Par exemple si la date et heure = 0000... c'est que le composant n'est pas initialisé alors dans ce cas tu règle l'heure ensuite si tu lis qu'elle est dans des valeurs cohérentes, plus besoin de réglé l'heure.

A+ Teiva


www.Zartronic.fr : Votre source Arduino en France

Salut,

En effet, la pile de 3V permet de laisser tourner l'horloge quand le circuit n'est pas alimenté. Vu que ça consomme 500nA (nano-ampères !), ça peut tenir très longtemps. Il y a la même chose sur les cartes mères de PC, si tu regardes bien. Sur Mac aussi bien sûr... :slight_smile:

Si l'heure ne se mémorise pas, ça peut être simplement un problème de pile HS. Mais vu que la carte à l'air neuve et que la pile dure très longtemps, j'ai des doutes. J'en ai encore plus en lisant : "elle reprend à l'heure que j'ai réglé dans le programme" ! :wink:

En fait, vu que tu as une horloge, pourquoi régler l'heure dans le programme ? Le DS1307 n'est-il pas justement là pour ça ?

En fait, il faut envoyer l'heure une première fois depuis l'Arduino pour la mise à l'heure. Et c'est tout. Il ne faut plus y toucher (sauf pour corriger un éventuel décalage). Bien évidement, il ne faut pas que l'Arduino ai une heure codée en dur dans son programme.

Il y a des exemples très faciles à utiliser ici :
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1191209057/0

Peux-tu nous en dire plus sur ton programme, et surtout ce que tu appelles "l'heure que j'ai réglé dans le programme". Je pense que ton problème est là. Mais en aveugle, c'est pas non plus garanti...

Bonne continuation !
Frédéric

Merci beaucoup pour vos réponses.
J'ai trouvé mon erreur.
Il faut programmer le ds1307 une fois pour toute puis commenter la fonction réglage dans le programme et reprogrammer.

1ere programmation

  RTC.stop();
  RTC.set(DS1307_SEC,00);        //réglage secondes
  RTC.set(DS1307_MIN,50);        //réglage minutes
  RTC.set(DS1307_HR,9);         //réglage heures
  RTC.set(DS1307_DOW,1);         //réglage jour de la semaine
  RTC.set(DS1307_DATE,6);       //réglage date
  RTC.set(DS1307_MTH,12);         //réglage mois
  RTC.set(DS1307_YR,10);          //réglage année
  RTC.start();

2eme programmation avec la fonction réglage commentée

/*RTC.stop();
  RTC.set(DS1307_SEC,00);        //réglage secondes
  RTC.set(DS1307_MIN,50);        //réglage minutes
  RTC.set(DS1307_HR,9);         //réglage heures
  RTC.set(DS1307_DOW,1);         //réglage jour de la semaine
  RTC.set(DS1307_DATE,6);       //réglage date
  RTC.set(DS1307_MTH,12);         //réglage mois
  RTC.set(DS1307_YR,10);          //réglage année
  RTC.start();
*/

Maintenant en cas de coupure de courant ou de reboot, l'heure reste en mémoire.

Bonjour,

Ce sujet m'intéresses également.

Que ce passe t-il si coupure de courant il y a et que la pile est plate ?

Bien sur il faudra mettre une nouvelle pile mais il faudra donc également ré envoyer l'heure exact dans le DS1307... ?

oui c'est ça
il faudra enlever les commentaires pour le reglage de l'heure, programmer pour mettre la bonne heure et de nouveau reprogrammer en ayant pris soin de recommenter le tout

Alors voici ma dernière question.

Pour ne pas devoir changer la pile ou/et re-régler l'heure. Y a t-il possibilité de mettre une petite batterie (voir un condensateur) à la place de la pile qui se chargerais lorsqu'il y a du courant et qui se déchargerais dans le cas contraire ?
De cette façon, plus de problème de pile plate...?

Tout ceci en rajoutant l'électronique adéquat pour que cela fonctionne bien sur.

Sachant que la pile va durer des années, tu as largement de quoi couvrir les coupures de courant.

En effet la pile peut durer des années, et si ta carte est alimenté par l'arduino tu peux changer la pile sans problème.
Les piles lithium (pas lipo) sont faites pour ça, par contre elles ne sont pas rechargeable.
Les batteries (nicd, li-ion, etc ...) ont une durée de vie inférieur aux piles lithium, aussi ce n'est pas un avantage d'être rechargeable.

Par contre la précision fait qu'il y a toujours une dérive de l'heure, c'est un peu comme les montres électronique on a tous l'heure précise mais pas la même ... :smiley:

Aussi il faut prévoir de remette à l'heure régulièrement, tous les mois par exemple si tu veux une précision à la seconde/minute.
Il existe aussi la technique de synchronisation par l'horloge radio en allemagne ou par réseau le protocol ntp.
Tu peux aussi programmé ta synchronisation dans ton application avec ton pc qui lui se synchronise par le réseau grâce à ntp.

Ne pas oublier aussi le changement d'heure hivers/été qui peut aussi changer ...

A+ Teiva


www.Zartronic.fr Votre source Arduino en France

Je pensais que les modules RTC avaient peu de dérive :/.

Quand tu dois avoir un timestamp précis, sans accès à un serveur ntp, tu fait comment ?

Je pensais que les modules RTC avaient peu de dérive :/.

Laisse tourner ton pc pendant un mois sans accès à internet et tu verras ... :wink:

Dallas semi, étant le spécialiste de ce genre de circuit, je te laisse lire leur excellent conseil.
Leur dernière génération "RTC/TCXO/Crystal Integration " peut atteindre une précision de ±2.0ppm from 0°C to +40°C soit ±1.0 minute each year, généralement on s'en contente.

Mais c'est un véritable problème pour des longs voyages (comme aller sur Mars :slight_smile: , il y a surement des solutions plus précise, mais peut être pas à la porté de l'amateur :wink:

A+ Teiva


www.Zartronic.fr : Votre source Arduino en France.

Bonjour,

En effet, il y a "peu de dérive". Ça ne veut pas dire qu'il n'y en a pas, eh eh. Tout dépend de la précision du quartz (de sa fréquence propre) et des conditions d'utilisation (la fréquence doit varier en fonction de la température, je pense). Dans tous les cas, la dérive n'est pas catastrophique.

Au lieu de mettre en commentaire le réglage de l'heure, prévoyez plutôt une fonction dans votre programme qui permet le réglage. Par exemple avec un LCD (c'est presque donné sur eBay) qui affiche l'heure du DS1307 et qui permet de modifier ces valeurs avant de les réenregistrer. C'est pas aussi simple que les commentaires dans le code, mais c'est plus pratique à l'usage...

Sinon, un GPS pour avoir l'heure, ou un décodeur DCF77 ? :wink:

Fred

Aussi non, y a ça comme composant qui est plus précis non ?
=> ChronoDot_LRG - DS3231

HS : Un peu de Césium et roule ma poule ;D

Aussi non, y a ça comme composant qui est plus précis non ?
=> ChronoDot_LRG - DS3231

Tout à fait, ce composant est compensé en température et sa dérive est d'environ 1 minute par an (comme indiqué d'ailleurs dans le lien AppNote Maxim donné par teiva)
Il a été placé au coeur du ChronoDot

Ici une démo live d'un DS3231 qui a été synchronisé en 2005

B@tto, j'adore cette horloge, discrète, un peu polluante mais top précision :smiley:

Donc en précision pour nos budget on tourne à 2ppm soit 1 min/an maxi, comment ils ont fait chez maxim pour ne pas avoir de dérive depuis 5 ans : c'est eux qui font le chip :wink:
Plus sérieusement il doit être dans un environnement protégé des fluctuations de température et autres, car le changement de température est l'ennemi de la précision électronique.

Au fait profitez-en Maxim envoi des échantillons gratuits du chip ( 8 au maximum ), peut être Snootlab pourrais faire un beau circuit bleu pour le recevoir :wink:

A+ Teiva


www.Zartronic.fr :Votre source Arduino en France

Bonjour,

Dans le cas d'une application necessitant une meilleur precision :

  • Comme decris precedement, utiliser des elements compense en temperature est essentiel.

  • Faire un montage avec deux cartes, ou bien une carte qui a deux "RTC" chips.

  • connecter periodiquement a un reseau afin de profiter de "ntp".

-Utiliser les info de radio signal tel que "DCF77", "WWV", "TDF", "CHU", "HBG" (plus pour longtemps).

  • Un montage avec un recepteur "GPS".

=> Teiva,

comment ils ont fait chez maxim pour ne pas avoir de dérive depuis 5 ans...
Plus sérieusement il doit être dans un environnement protégé des fluctuations de température...

Il est fort probable qu'un producteur de tel circuit a tout interet a presenter un test avec les meilleurs resultat.
"L'horloge" est probablement dans un environement clos. Avec control permanent des differents parametre exterieur (temperature, pression, humidite,...).

Utiliser les info de radio signal tel que "DCF77", "WWV", "TDF", "CHU", "HBG" (plus pour longtemps).

En dehors du DCF77, en voila plein que je ne connais pas, une petite présentation serait la bienvenue :slight_smile:

A+ Teiva


www.Zartronic.fr : Votre source Arduino en France

Desole, on sort un peu du sujet, ceci est une reponse a Teiva.

Il y a pas mal d'information sur Wikipedia. Ne pas oublier les links en bas de pages.
J'ai aussi indique des site en Anglais, car il y a parfois plus dinformation, aussi des images et diagrams non present sur Wikipedia francophone.

Les sites suivant ont une partie de leurs services qui est dedie aux signaux horaire.

Horloge radio-pilotée

Time signal

(Anglais)

DCF77

DCF77

(Anglais)

Émetteur d'Allouis

Émetteur d'Issoudun

ALLISS

(Anglais)
Télé Distribution Française

(Anglais)

Émetteur HBG de Prangins

HBG (time signal)

(Anglais)

CHU (radio station)

(Anglais)

WWV (station de radio)

WWV (radio station)

(Anglais)
WWVB

(Anglais)