Publié le 22 février 2014 - par

Un module RTC à base de DS1302 pour le Raspberry Pi

RTC_module_DS1302_250pxRemettons tout de suite les pendules à l’heure ! ( 😆 ) Notre framboise314 n’a pas eu droit à un « garde-temps » ou horloge RTC.

Le maintien du prix le plus bas possible explique ce choix technique. D’ailleurs les plus anciens se souviendront (avec nostalgie) que sur les IBM-PC originaux les premières commandes au démarrage du DOS étaient…  date  et  time !

Horloge RTC DS1302 pour le Raspberry Pi

Pour le Raspberry Pi 1

Attention !
Cet article s’applique au Raspberry Pi 1. Les adresses des E/S sont différentes selon les SOC. Voir par exemple http://www.framboise314.fr/utiliser-lhorloge-rtc-1302-sur-le-b/

Le premier PC

En effet le PC à ses débuts (malgré son prix élevé) n’était pas non plus doté d’une horloge RTC. La solution est venue en ajoutant des cartes ISA comportant un circuit d’horloge et… une ou plusieurs piles ou batteries cadmium nickel. Par la suite, les circuits d’horloge ont été intégrés à la carte mère, ainsi que les batteries de sauvegarde (IBM PC/AT en 1984, utilisant un circuit intégré RTC Motorola MC146818 )

Le protocole NTP

Le Raspberry Pi, lorsqu’il est relié à un réseau (Ethernet ou WIFI) se connecte à un serveur de temps pour récupérer l’heure. C’est le protocole NTP (Network Time Protocol = Protocole de synchronisation de temps sur réseau) qui est mis en œuvre.

L’architecture NTP repose sur une arborescence de serveurs. Les serveurs de niveau I sont synchronisés par une horloge atomique, ce qui garantit la précision de l’heure pour l’ensemble du réseau.

ntp.conf

Si on jette un coup d’oeil à /etc/ntp.conf, on voit que ce sont les serveur ntp de Debian qui sont sollicités.

pi@raspberrypi /etc $ cat ntp.conf
# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

.../...

# pool.ntp.org maps to about 1000 low-stratum NTP servers.  Your server will
# pick a different set every time it starts up.  Please consider joining the
# pool: <http://www.pool.ntp.org/join.html>
server 0.debian.pool.ntp.org iburst
server 1.debian.pool.ntp.org iburst
server 2.debian.pool.ntp.org iburst
server 3.debian.pool.ntp.org iburst

.../...

En France vous pouvez remplacer ces quatre lignes par

server 0.fr.pool.ntp.org iburst dynamic
server 1.fr.pool.ntp.org iburst dynamic
server 2.fr.pool.ntp.org iburst dynamic
server 3.fr.pool.ntp.org iburst dynamic

L’option iburst signifie qu’en cas d’indisponibilité du serveur, ntp essaiera plusieurs fois avant d’abandonner. L’option dynamic permet de conserver dans la configuration les serveurs indisponibles, au cas où ils seraient à nouveau accessibles plus tard. (d’après Debian).

La carte RTC

RTC_module_DS1302C’est la carte à base de DS1302 que j’ai choisie. Elle vient de chez Hobby Electronics où on la trouve pour 4.20£ (5,10€). Je vous l’avais présentée dans une sélection de cartes RTC pour le Raspberry Pi il y a quelques mois. Et puis rédaction du livre oblige, j’ai dû mettre pas mal de projets en sommeil, dont celui-ci.

La carte est munie de cinq contacts qui vont permettre de la relier au GPIO du Raspberry Pi. J’ai utilisé des petits cordons femelle-femelle pour ces essais.

Elle comporte un circuit intégré DS1302+, un quartz horloger et une pile CR2032, un grand classique des piles de sauvegarde sur PC.

DS1302

Le DS1302 monté sur le Raspberry est un DS1302+ (sa gamme de température de fonctionnement va de 0°C à 70°C). Attention si vous prévoyez une utilisation à l’extérieur dans des conditions hivernales (station météo à Mouthe par exemple 😥 ), il faudra prévoir de maintenir la température du circuit.

Ce circuit intègre une horloge/calendrier et 31 octets de RAM statique, sauvegardés par la pile. (Eh oui c’est dans ces octets qu’un PC sauvegarde son setup). La communication avec le microprocesseur se fait en communication série. Seuls 3 fils sont nécessaires pour faire communiquer le DS1302 : CE (RST), I/O (DATA) et SCLK (Serial Clock).

ds1302_chronogrammePour les techniciens ce chronogramme indique la méthode pour lire ou écrire le DS1302. Pour les autres pas d’inquiétude un programme fourni par HobbyTronics va faire le boulot.

Le DS1302 peut être alimenté entre 2 volts et 5,5 volts. Il se comportera donc parfaitement sous 3,3 volts, et il n’y aura aucun problème d’adaptation entre sa sortie et l’entrée GPIO auquel il sera relié. Prévoyez quand même une résistance de tirage entre la borne DATA et le + 3,3 volts (10 à 33 kΩ feront l’affaire – j’ai utilisé une 22 kΩ).

Pile CR2032

Le DS1302 conserve les données et maintient l’heure avec une puissance inférieure à… 1µW. La notice technique indique un courant de maintien sur la pile entre 0,3 et 1µA selon la tension.

La pile CR2032 a une capacité d’environ 200mAh, et à mon avis, elle mourra de vieillesse avant de mourir d’épuisement !

Quartz et précision

Le quartz est un quartz horloger de fréquence 32,768 kHz. La précision de l’horloge dépend de sa précision.

Les cristaux ordinaires (c’est certainement le cas de celui-ci) ont une précision de +/- 50ppm environ, ce qui représente 0,005%… Pour obtenir une meilleure précision, il faut mettre en œuvre des moyens disproportionnés avec le prix de la carte RTC…

Si vous faites le calcul vous parvenez à une dérive maxi de 2 minutes par mois lorsque le Raspberry n’est pas relié au réseau. A vous de voir si cela vous convient. Il est possible également de recaler l’horloge de temps en temps si cette précision est insuffisante pour votre application.

La connexion au Raspberry Pi

Pour la rédaction de cet article, j’ai utilisé des fils de liaison femelle-femelle pour carte prototype  afin de relier les picots du GPIO de la framboise314 à ceux de la carte RTC. Toujours pour les tests la résistance de tirage a été simplement enfoncée a l’arrière des connecteurs pour établir le contact. Bien entendu pour un montage définitif, il conviendra de sécuriser l’ensemble…

connexionLe programme rtc-pi.c

Ce programme est fourni par HobbyTronics. Il faudra le compiler pour l’utiliser mais cela ne pose pas de problème particulier. Autant vous le dire tout de suite, le programme de HobbyTronics est prévu pour le Raspberry Pi V1. Il faudra donc le modifier pour pouvoir l’utiliser avec la V2 de notre framboise314. En effet sur cette version 2, le GPIO 27 a remplacé le GPIO 21 et il faut modifier le programme en conséquence.

D’autre part après modification du programme, la mise à l’heure de mon Raspberry Pi renvoyait obstinément une date et une heure de 2013, et comme je n’habite pas à proximité d’une faille spatio-temporelle, j’en ai déduit que c’était l’écriture dans le DS1302 qui ne se faisait pas correctement.

Relecture de la notice du bestiau pour m’apercevoir qu’il y a un registre qui permet d’autoriser l’écriture. Sur certains forums Arduino il est précisé que parfois ce registre est positionné et empêche l’écriture dans l’horloge.

Connexion du module RTC à un Raspberry Pi V1

Connexion du module RTC à un Raspberry Pi V1

Retour dans le programme pour m’apercevoir que ce registre n’est pas dans la liste des déclarations. L’auteur est tombé sur un DS1302 qui acceptait l’écriture est ne s’en est pas inquiété. J’ai donc ajouté cette autorisation d’écriture et cette fois mon DS1302 a sagement accepté de se mettre à l’heure.

Modification de la version 1 à la version 2 :

Cherchez les lignes

#define : SCLK_OUTPUT, SCLK_HIGH and SCLK_LOW

Remplacez les par les lignes ci-dessous qui contiennent les valeurs correctes pour l’utilisation du programme avec un Raspberry Pi V2.

#define SCLK_OUTPUT *(gpio+GPIO_SEL2) &= 0xFF1FFFFFL; *(gpio+GPIO_SEL2) |= 0x00200000L

#define SCLK_HIGH *(gpio+GPIO_SET) = 0x08000000L

#define SCLK_LOW *(gpio+GPIO_CLR) = 0x08000000L

Modification pour assurer l’écriture dans le DS1302

Dans la partie

/* RTC Chip register definitions */
#define SEC_WRITE    0x80
.../...
#define YEAR_READ    0x8D
#define WR_ENABLE    0x8E

Ajoutez la dernière ligne #define WR_ENABLE 0x8E qui définit l’adresse du registre.

Avant que les données soient écrites dans le DS1302, ajoutez la ligne permettant de configurer le registre WR_ENABLE :

/* Got valid input - now write it to the RTC */
/* The RTC expects the values to be written in packed BCD format */
/* Mettre le bit write protect à 0 */
write_rtc(WR_ENABLE, 0);
write_rtc(SEC_WRITE, ( (second/10) << 4) | ( second % 10) );
write_rtc(MIN_WRITE, ( (minute/10) << 4) | ( minute % 10) );
write_rtc(HOUR_WRITE, ( (hour/10) << 4) | ( hour % 10) );
write_rtc(DATE_WRITE, ( (day/10) << 4) | ( day % 10) );
write_rtc(MONTH_WRITE, ( (month/10) << 4) | ( month % 10) );
write_rtc(YEAR_WRITE, ( ((year-2000)/10) << 4) | (year % 10) );

La version mise à jour

Enfin si vous ne vous sentez pas d’humeur à aller modifier des lignes de programme, vous pouvez simplement télécharger la version modifiée (Raspberry Pi V2) que je mets à votre disposition sur framboise314…

Téléchargez l’archive sur framboise314 :

pi@raspberrypi ~ $ wget http://www.framboise314.fr/docs/rtc-pi_V2.zip
--2019-10-30 20:54:38--  http://www.framboise314.fr/docs/rtc-pi_V2.zip
Résolution de www.framboise314.fr (www.framboise314.fr)... 88.190.253.244
Connexion vers www.framboise314.fr (www.framboise314.fr)|88.190.253.244|:80...connecté.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: 7850 (7,7K) [application/zip]
Sauvegarde en : «rtc-pi_V2.zip»

100%[======================================>] 7 850       --.-K/s   ds 0,004s

2019-10-30 20:54:49 (1,71 MB/s) - «rtc-pi_V2.zip» sauvegardé [7850/7850]

Vous pouvez extraire les fichiers (il y le fichier source et l’exécutable)

pi@raspberrypi ~ $ unzip rtc-pi_V2.zip
Archive:  rtc-pi_V2.zip
creating: rtc-pi_V2/
inflating: rtc-pi_V2/rtc-pi
inflating: rtc-pi_V2/rtc-pi.c

Si vous voulez compiler le fichier source :

pi@raspberrypi ~/rtc-pi_V2 $ cc rtc-pi.c

Vous obtenez un fichier a.out qu’il suffira de renommer rtc-pi pour pouvoir l’utiliser.
(le programme exécutable fourni dans l’archive sera écrasé).

pi@raspberrypi ~/rtc-pi_V2 $ mv a.out rtc-pi
pi@raspberrypi ~/rtc-pi_V2 $ ls -al
total 32
drwxr-xr-x 2 pi pi  4096 oct.  30 21:00 .
drwxr-xr-x 3 pi pi  4096 oct.  30 20:57 ..
-rwxr-xr-x 1 pi pi 10852 oct.  30 21:00 rtc-pi
-rw-r--r-- 1 pi pi 10940 févr. 21  2014 rtc-pi.c

Utilisation de rtc-pi

Le programme rtc-pi peut

  • Configurer l’heure système et l’horloge RTC
  • Configurer l’heure système à partir de l’horloge RTC

Mise à l’heure du système et de l’horloge RTC

La mise à l’heure consiste à fournir au programme la date et l’heure sous la forme :

YYYYMMJJHHNNSS

avec :

  • YYYY    L’année exprimée avec 4 chiffres   (2014)
  • MM        Le mois exprimé avec 2 chiffres (02=février)
  • JJ          Le jour exprimé sur 2 chiffres
  • HH         L’heure exprimée sur 2 chiffres
  • NN         Les minutes exprimées sur 2 chiffres
  • SS         Les secondes exprimées sur 2 chiffres

Exemple :

pi@raspberrypi ~/rtc-pi_V2 $ sudo ./rtc-pi 20140221195045
Date-Heure positionnée.

NOTA : L’utilisation de sudo est obligatoire pour accéder aux ports du GPIO.
J’ai ajouté dans le programme un message qui confirme le réglage de l’heure.
La date : 21 février 2014 à 19H50mn45s

Mise à l’heure du système à partir de l’horloge RTC

Si vous souhaitez mettre le système à l’heure à partir de l’heure sauvegardée par l’horloge RTC:

pi@raspberrypi ~/rtc-pi_V2 $ sudo ./rtc-pi
 pi@raspberrypi ~/rtc-pi_V2 $ date
 vendredi 21 février 2014, 19:53:08 (UTC+0100)

Date permet de vérifier la date système.

Automatisation de la mise à l’heure système au démarrage

L’intérêt de cette carte est de mettre à l’heure un système qui démarre sans être connecté au réseau. Il faut pour cela ajouter à /etc/rc.local notre programme rtc-pi.

Celui-ci va récupérer l’heure de l’horloge RTC, maintenue par la pile CR2032, et va configurer l’heure système lors de chaque démarrage du Raspberry Pi.

Ouvres /etc/rc.local avec sudo nano /etc/rc.local et ajoutez le programme rts-pi avec son chemin absolu.

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi

# Mise à jour de l'horloge système à partir du module RTC
/home/pi/rtc-pi_V2/rtc-pi

Pour les tests, débranchez votre Raspberry Pi du réseau (ou enlevez la clé WIFI). Attendez un moment et redémarrez le. L’heure système devrait être correcte.

D’autre modèles de carte RTC à base deDS1302

En fait, tout modèle conçu à partir d’un DS1302 se comportera exactement comme celui-ci. Le DS1302 est tellement « simp  le » (du point de vue connectique) qu’on ne peut pas vraiment faire autrement que suivre le schéma de la documentation technique…

schema_DS1302Voici quelques modèles glanés sur le web, mais vous en trouverez sans doute d’autres…

7056

RTCDS1302_DX

DS1302_hqew

Conclusion

Pour tous ceux qui utilisent un Raspberry Pi non connecté à Internet, l’horloge RTC offre une solution fiable pour maintenir l’heure. Les systèmes mobiles en particulier pourront bénéficier de cette solution (s’ils ne sont pas équipés d’un GPS…).

Je vais également creuser un peu du côté ds 31 octets disponibles dans le DS1302 pour y stocker des infos qui seraient sauvegardées par la pile. Une espèce de setup du Raspberry Pi…

Comme toujours vos remarques, commentaires et suggestions seront les bienvenus !

Share Button

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. .

32 réflexions au sujet de « Un module RTC à base de DS1302 pour le Raspberry Pi »

  1. Ping : Un module RTC à base de DS1302 pour le R...

  2. gayrard

    Merci pour votre article
    je me demandais juste si il fallait charger les modules kernel concernat l’IIC qui ne sont pas chargé par defaut , ou bien si le code se debrouille sans
    merci
    didier GAYRARD

    Répondre
  3. R.Chabot

    Bonjour, et merci pour vos informations. Une petite remarque, le fichier PDF ne contient pas toutes les informations de cet article.

    Répondre
    1. admin Auteur de l’article

      Bonjour
      oups! merci de me prévenir
      le plugin a dû être perturbé…
      je vais voir si je peux vider le cache???
      Cordialement
      François
      ps : j’ai effacé le cache pdf de WP Post to PDF mais ça n’a rien changé
      si un utilisateur averti de WordPress peut m’aider????

      Répondre
  4. Jérôme BALLEYDIER

    Bonjour,
    Vous avez un fort joli blog, et votre maîtrise du Raspberry ainsi que vos connaissances en électronique m’amènent à vous solliciter. Je développe un projet de timelapse longue durée avec transmission de photos par 3G à base de Raspberry et de Gopro, le tout autonome en énergie (panneaux solaires et batteries fonctionnant en 5V et en 3.7V). Le Raspberry servant à la transmission de quelques photos par jour via une clé 3G. Il faut qu’il démarre environ toutes les 2 heures (mais cela peut varier), afin de récupérer la dernière photo sur la carte sd de la gopro, et de l’envoyer, puis de s’éteindre complètement (pour des raisons d’économie d’énergie). Comment réaliser l’automatisation du démarrage du Pi?
    Salutations.
    Jérôme

    Répondre
    1. admin Auteur de l’article

      Bonjour Jérôme
      Si vous éteignez complètement le Raspberry Pi il faudra prévoir un système externe chargé des opérations.
      L’arrêt peut se faire en envoyant une impulsion sur un port GPIO, mais le système s’arrête seulement, le Raspberry ne s’éteint pas…
      Par contre il redémarre si on met un poussoir, un relai ou un contact quelconque sur le Reset (http://www.framboise314.fr/ma-framboise314-fait-risette-ajouter-un-bouton-de-reset-au-rasperry-pi-version-b/)
      il faudrait mesurer la consommation lorsque le système est en mode Halt pour voir si c’est intéressant.
      Si vous voulez une extinction complète, il faut gérer l’arrêt du système (il n’aime pas forcément les arrêts brutaux) puis le coupure d’alimentation un peu après. La remise sous tension du système le fera redémarrer 2 heures plus tard.
      Je ne sais pas si ces explications ont pu vous aiguiller, n’hésitez pas à me recontacter si besoin.
      François

      Répondre
  5. asez73

    Bonjour,
    J’ai donc finalement trouvé le bon article pour vous faire part des modifications que j’ai apporté à ce logiciel:
    +ajout de la détection automatique de la carte Raspberry Pi V1/V2
    +ajout de l’accès à la SRAM intégrée en lecture et écriture
    +quelques fonctions supplémentaires en ligne de commande

    Voyez le dépôt ci-dessus sur bitbucket.
    Cordialement
    Alain

    Répondre
      1. asez73

        Etonnament donc, j’ai bien du mal à mettre en ligne ce que je veux…
        Pourtant, j’ai bien démarré avec une sauvegarde sur K7!
        Donc voilà le dépôt bitbucket correspondant au RTC DS1302:
        https://bitbucket.org/asezille/raspberry-pi-rtc-ds1302 qui est public donc sans login (normalement).
        J’ai 2 autres dépôts en préparation pour un CI apte à recevoir cette carte et faire de la teleinfo et du one wire en plus.

        Cordialement
        Alain

        Répondre
        1. PhilG

          Bonjour,

          J’ai du changer la ligne 99 qui ne reconnaissait pas correctement la version de ma raspberry et donc ne fonctionnait pas.
          C’est la conversion hexa vers int qui posait pb.
          Avec cette ligne cela fonctionne bien :
          revision = strtol(strcpy(revision_string, strchr(line, ‘:’) + 2),NULL,16);
          au lieu de :
          revision = atoi(strcpy(revision_string, strchr(line, ‘:’) + 2));

          Ma revision_string était ‘000e’.

          Répondre
          1. asez73

            Effectivement, la conversion hexa vers int était fausse… Un Pull request sur le dépôt Bitbucket sera certainement le bienvenu.

  6. tuxun

    ha, nickel j’ai justemment recu des modules comme ceux ci, par contre le programme est fourni sans licence… puis-je le poster sur notre wiki? etc?

    Répondre
    1. admin Auteur de l’article

      bonjour tuxun
      vouiii ce qui est publié sur le site (sauf indication contraire) est sous licence CC v3 comme indiqué en bas de la page. Donc…. pas de problème !
      cordialement
      François

      Répondre
  7. Auxonnais

    Bonjour,
    Pour RASPBERRY B+ , RTC1302 et utilisation des GPIO rarement utilisés :
    J’ai du me plonger dans toute la doc mais j’ai modifié le programme pour utiliser les GPIO 20, 21 et 26 (broches 38, 40, 37) et ainsi libérer la place pour d’autres extensions.
    J’envoie le source à l’admin François.

    Je cherche à savoir comment mettre à jour le RTC lors de l’extinction du raspberry (à partir de ntp ?, …)
    Merci à vous

    Répondre
  8. Ping : Utiliser l’horloge RTC 1302 sur le B+ | Framboise 314, le Raspberry Pi à la sauce française….

  9. FS

    Bonjour.
    Pour un PI V2 vous proposez GPO17 (11)-RST GPO18 (12)-DAT GPO27 (13)-CLK.
    Si ces broches ne sont pas disponibles, est-il possible d’utiliser GPIO7 (26) – GPIO8 (24) – GPIO11 (23) (en modifiant naturellement rtc-pi.c) ?
    Les broches 11-12-13 font parties du GPIO et 23-24-26 du bus SPI et en principe toutes les broches sont reconfigurables (sauf 8-10). Cette reconfiguration est-elle complexe ?
    Par avance merci pour votre aide (et merci aussi pour le site).
    François S.

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour François
      oui c’est possible
      Voyez par exemple le programme dans cet article http://www.framboise314.fr/utiliser-lhorloge-rtc-1302-sur-le-b/. C’est un programme modifié par Philippe un lecteur du blog, pour utiliser les dernières broches du GPIO d’un B+. Je pense que vous pourrez vous en inspirer. Vous me direz….
      Pour les autres broches (I2C, SPI…) il suffit de ne pas charger le module qui les gère et elles sont disponibles comme E/S
      Bonne journée
      Cordialement
      François

      Répondre
      1. FS

        Merci pour votre réponse. J’ai commandé le module (en Chine avec un petit délai de 20 jours).
        En faisant quelques recherches, je suis tombé sur ce site :
        Low Level Programming of the Raspberry Pi in C
        http://www.pieter-jan.com/node/15
        Cet article donne des indications très précieuses et peut, peut être, intéresser d’autres amateurs de framboises. Je vous tiendrai informé de mes tests.
        Cordialement.
        François S.

        Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Phil
      Vous avez raison mais… je pense que c’est un réflexe de vieil électronicien 😉
      J’aime pas voir un fil en l’air… même si on me dit que….
      Cordialement
      François

      Répondre
  10. Alain

    Bonjour et merci pour cet article avec toujours autant de clarté que sur le reste du site !

    je débute dans le monde des raspberry… et je commence avec un A+ et du coup j’ai un petit « trouble » avec les notions de « v1 » ou de « v2 »
    Ma Revision (/proc/cpuinfo) est « Revision : 0012 », donc une « v1 » d’apres ce que je crois comprendre, exact ?

    une question « hors contexte », pourquoi les RaspBerry Pi A+ sont si peut « couvertes » dans les différents articles/montages etc etc… ?
    Même sur le site officiel, beaucoup de docs pour les A, B, B+ mais pratiquement rien sur la A+
    car, du coup, pour un débutant, il est assez difficile de s’y retrouver en terme de « compatibilité » avec les autres cartes.

    y a t’il, et quelles sont, les différences à prendre en compte pour cette « A+ » (GPIO etc…)

    merci d’avance et bravo pour vote site très clair

    Répondre
  11. Mollkov

    bonsoir,

    je viens de finir ce tuto assez facile à suivre, mais j’ai quand même un problème quand je fais sudo reboot sans être connecté à internet, et si ensuite je fais la commande date j’ai cette date qui s’affiche : Tue Nov 30 00:00:36 CET 1999 . j’ai télécharger la version V2 et je suis sur un rasp b+. pouvez vous m’aider a résoudre ce problème ?

    merci d’avance.

    Répondre
    1. esd

      Bonjour,
      Comme Mollkov, j’ai essayé ce tutto. Tout fonctionne sans problème avec une raspberry V1, mais avec une V2, c’est une autre chose. La date reste inchangée et indique Tue Nov 30 00:00:41 CET 1999 .
      J’ai pourtant changé les lignes comme indiqué et vérifié mainte fois mon code mais rien n’y fait. Quelqu’un a t-il la solution?

      Répondre
        1. pascal_frigoriste

          Avec mon raspberry B+ v2 ça fonctionne mais visiblement l’heure doit être enregistré quelque part. Car même déconnecté il raffiche l’heure au moment de l’arrêt. (Raspian jessy)

          Répondre
  12. Ping : Maintenir Domoticz à l'heure - BassignyElectro

  13. Michael

    Bonjour,

    Je ne parviens pas à utiliser le DS1302 sur mon Rpi3.
    J’ai bien essayé de mettre mon nez dans le code en C mais je n’ai pas assez de connaissance de ce langage pour faire des tests et bien diagnostiquer.

    Je suis bloqué :-/

    Avec le code que j’ai récupéré je parviens à mettre à jour l’horloge du rpi avec l’heure passée en paramètre.
    Par contre je n’ai pas la certitude que ça écrive bien sur la puce DS1302.

    En mode « read » (sans argument), la fonction me renvoie une erreur : Unable to change the system time. Did you run as an administrator ? The operation returned the error message « invalid argument ».
    J’ai essaye d’afficher la valeur année censée être lue sur la puce. Il me renvoie 255 …

    Si quelqu’un peut me filer un coup de pouce … Moi je suis vraiment coincé sur ce coup !

    Répondre
    1. Michael

      Je me réponds tout seul.

      Pour résoudre mon problème, je me suis référé à un commentaire de la page suivante : http://www.framboise314.fr/utiliser-lhorloge-rtc-1302-sur-le-b/

      où il est indiqué :

      Dans le programme remplacez
      #define GPIO_ADD 0x20200000L // physical address of I/O peripherals on the ARM processor
      par
      #define GPIO_ADD 0x3f200000L // physical address of I/O peripherals on the ARM processor

      Aprés avoir modifié ceci dans le code C, j’ai compilé et tout fonctionne à merveille.

      Merci pour ces articles

      Répondre
      1. François MOCQ Auteur de l’article

        Bonjour Michael
        J’adore quand les lecteurs répondent eux-même à leur question 🙂
        surtout s’ils trouvent la réponse sur framboise314 😉
        oui, les adresses des registres diffèrent selon les SoC et il faut parfois adapter…
        cordialement
        François

        Répondre
        1. Michael

          Héhé en effet ça peut paraitre comique de voir mes deux commentaires consécutifs. En vérité, ça fait au moins 5 ou 6 fois que je me colle sur le cablage / paramétrage du module (je ne compte pas la lecture de cet article qui a précédé l’achat du module). Ce coup-ci, je l’ai eu !!

          Répondre
          1. François MOCQ Auteur de l’article

            non non, pas comique, simplement ça prouve que vous savez chercher une solution et ce que vous dites montre votre persévérance… deux qualités indispensables en informatique 🙂
            avec le fait de garder son calme en toute circonstance 😉
            bonne continuation !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.