Page 1 sur 1

Horloge DS1307 : fonctionnalités méconnues

Message non luPosté: Mer 21 Nov 2012 17:35
de SesechXP
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!

Re: Horloge DS1307 : fonctionnalités méconnues

Message non luPosté: Jeu 22 Nov 2012 17:27
de Sna
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 :)

Re: Horloge DS1307 : fonctionnalités méconnues

Message non luPosté: Jeu 22 Nov 2012 18:12
de SesechXP
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

Re: Horloge DS1307 : fonctionnalités méconnues

Message non luPosté: Jeu 22 Nov 2012 21:18
de Sna
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 :-)

Re: Horloge DS1307 : fonctionnalités méconnues

Message non luPosté: Ven 23 Nov 2012 08:19
de SesechXP
À 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.

Re: Horloge DS1307 : fonctionnalités méconnues

Message non luPosté: Sam 24 Nov 2012 10:06
de Lionel
Bravo et merci
Excellente contribution,
Mettons à jour nos librairies de ce pas !