Pages: [1] 2   Go Down
Author Topic: DS1307 + Pile sauvegarde  (Read 4350 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 89
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

France, Nice
Offline Offline
Full Member
***
Karma: 3
Posts: 194
www.Zartronic.fr
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


www.Zartronic.fr : Arduino & Robotique

0
Offline Offline
Newbie
*
Karma: 0
Posts: 26
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 89
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 89
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Newbie
*
Karma: 0
Posts: 45
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

France, Nice
Offline Offline
Full Member
***
Karma: 3
Posts: 194
www.Zartronic.fr
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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-grin

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
Logged


www.Zartronic.fr : Arduino & Robotique

0
Offline Offline
Newbie
*
Karma: 0
Posts: 45
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

France, Nice
Offline Offline
Full Member
***
Karma: 3
Posts: 194
www.Zartronic.fr
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ...  smiley-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.
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  smiley , il y a surement des solutions plus précise, mais peut être pas à la porté de l'amateur  smiley-wink

A+ Teiva

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


www.Zartronic.fr : Arduino & Robotique

0
Offline Offline
Newbie
*
Karma: 0
Posts: 26
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3733
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged


Toulouse / France
Offline Offline
Full Member
***
Karma: 5
Posts: 241
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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/
« Last Edit: December 15, 2010, 03:55:41 am by snootlab » Logged

- Distributeur officiel Arduino - France

Pages: [1] 2   Go Up
Jump to: