Go Down

Topic: DS1307 + Pile sauvegarde (Read 4685 times) previous topic - next topic

masterbalby

Bonsoir,
j'ai acheté une carte à base de DS1307 sur futurlec
http://www.futurlec.com/Mini_DS1307.shtml

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

Teiva

Quote
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


www.Zartronic.fr : Arduino & Robotique

Blob

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... :-)

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" ! ;-)

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

masterbalby

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
Code: [Select]

 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
Code: [Select]

/*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.

NotBad

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

masterbalby

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

NotBad

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.

mahth

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

Teiva

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 ...  :D

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


www.Zartronic.fr : Arduino & Robotique

mahth

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 ?

Teiva

Quote
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 ...  ;)

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.
http://www.maxim-ic.com/app-notes/index.mvp/id/3566

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

A+ Teiva


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



www.Zartronic.fr : Arduino & Robotique

Blob

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

Fred

NotBad

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

B@tto

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

Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Snootlab

#14
Dec 15, 2010, 09:53 am Last Edit: Dec 15, 2010, 09:55 am by snootlab Reason: 1
Quote
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
http://www.maxim-ic.com/products/timers/DS3231_demo/
- Distributeur officiel Arduino - France

Go Up