Horloge DS1307 : fonctionnalités méconnues

Un log shield sur carte SD avec horloge RTC et zone de prototypage à pastilles carrées

Horloge DS1307 : fonctionnalités méconnues

Message non lude SesechXP » Mer 21 Nov 2012 17:35

Bonjour,

Les utilisateurs du shield Mémoire connaissent bien le DS1307 et exploitent sa fonction première d'horloge temps réel. Mais beaucoup moins exploitent sa mémoire vive et son générateur de signal d'horloge. Ces deux fonctionnalités sont d'ailleurs inconnues de la plupart des bibliothèques telles que la RTClib de JeeLabs ou son fork d'Adafruit.

En partant de ce constat, j'ai crée un fork dans le but d'ajouter quelques méthodes à la RTClib. Ces méthodes ont été réintégrées à la version originale de JeeLabs suite à ma pull request.

La mémoire vive du DS1307 est certes très limitée avec 56 octets mais elle présente l'avantage d'être sauvegardée en cas de coupure de l'alimentation (pour peu que la pile de sauvegarde soit présente). Voici un sketch d'exemple dans lequel on écrit quelques octets dans la RAM du DS1307 avant de les relire puis de les transmettre sur la liaison série :
Code: Tout sélectionner
// RAM read and write functions using a DS1307 RTC connected via I2C and Wire lib.
// 2012-11-06 www.idreammicro.com 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();
   
    // Write bytes in RAM.
    uint8_t data[13] = {
        'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', '\n',
    };
    RTC.writeBytesInRam(0x08, 13, data);
}

void loop () {
    // Read bytes in RAM.
    uint8_t data[13] = { 0 };
    RTC.readBytesInRam(0x08, 13, data);
   
    // Print bytes on Serial.
    Serial.write(data, 13);
    delay(5000);
}

Le générateur d'horloge est quand à lui capable de fournir un signal d'horloge de différentes fréquences (1 Hz, 4,096 kHz, 8,192 kHz ou 32,768 kHz) à un autre composant.
Voici un sketch d'exemple dans lequel le DS1307 génère un signal d'horloge à la fréquence d'1 Hz :
Code: Tout sélectionner
// SQW/OUT signal functions using a DS1307 RTC connected via I2C and Wire lib.
// 2012-11-14 idreammicro.com 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();
   
    // Set SQW/Out signal frequency to 1 Hz.
    RTC.setSqwOutSignal(RTC_DS1307::Frequency_1Hz);
}

void loop () {
    // Nothing to do.
}


Afin d'être complet, je vous propose deux articles sur le sujet :
- Utilisation du Square-Wave Output du DS1307
- Utilisation de la RAM du DS1307

Enjoy!
Dernière édition par SesechXP le Ven 23 Nov 2012 16:21, édité 2 fois.
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: Horloge DS1307 : fonctionnalités méconnues

Message non lude Sna » Jeu 22 Nov 2012 17:27

Un enorme merci pour ca, ce sont des fonctionnalites bien utiles
Pour la frequence d'horloge, si j'ai bien lu la doc, l'arduino est aussi capable de fournir ca non? est ce que la frequence de la RTC est plus précise que la fonction de l'arduino lui meme?

Le top, c'est la ram, 56 octets c'est pas grand chose mais c'est une ram, pas une eeprom, pas de limite d'ecriture, yahooooo :)
Sna
 
Messages: 9
Inscription: Sam 10 Nov 2012 13:45

Re: Horloge DS1307 : fonctionnalités méconnues

Message non lude SesechXP » Jeu 22 Nov 2012 18:12

Content que ça intéresse et que ça puisse servir à d'autres :P

A quelle fonction de l'Arduino penses-tu ? J'avoue ne jamais avoir joué avec :oops:

Par contre j'ai mesuré la précision de l'horloge du DS1307 (voir captures d'écran ici) :
- Théorie -> pratique
- 1 Hz -> 1 Hz
- 4096 Hz -> 4098 Hz
- 8192 Hz -> 8196 Hz
- 32768 Hz -> 32680 Hz

D'après le signal que j'ai observé, l'erreur vient essentiellement de la montée du signal d'horloge qui n'est pas franche. Par exemple à 32,768 kHz :

Image
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: Horloge DS1307 : fonctionnalités méconnues

Message non lude Sna » Jeu 22 Nov 2012 21:18

Tu va loin dans tes recherches dis moi, je suis loin d'en être a ce point ;-)
Je me demandais juste quel intérêt d'utiliser une horloge qu'une autre, a moins peut être de demander une précision diabolique

Au niveau de la ram, c'est un endroit parfait pour stocker durablement ma variable que j'update toutes les 5minutes sans flinguer l'eeprom, c'est encore mieux que la SD :-)
Sna
 
Messages: 9
Inscription: Sam 10 Nov 2012 13:45

Re: Horloge DS1307 : fonctionnalités méconnues

Message non lude SesechXP » Ven 23 Nov 2012 08:19

À mon sens le principal intérêt à utiliser le signal d'horloge du DS1307 est qu'il est totalement autonome. On le configure une bonne fois pour toute et après il fait sa vie dans son coin. Et pendant ce temps on ne mobilise pas les ressources du microcontrôleur.
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: Horloge DS1307 : fonctionnalités méconnues

Message non lude Lionel » Sam 24 Nov 2012 10:06

Bravo et merci
Excellente contribution,
Mettons à jour nos librairies de ce pas !
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse


Retourner vers Mémoire

Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 1 invité