Exemple DS1307

Exemple avec l’esclave DS1307

Le circuit Dallas DS1307 est une horloge temps réel (Real Time Clock), qui fournit secondes, minutes, heures, jours, dates, mois et années.

Les années bissextiles sont prises en compte (jusqu'en 2100).

Le DS1307 travaille dans le mode standard (fréquence d'horloge de 100kHz).

L'adresse I2C (7 bits) du DS1307 est : 1101000 (adresse fixée par le constructeur et non modifiable).


Exemple d'écriture du DS1307

L'émetteur est le maître et le récepteur est l'esclave.

Le registre d'adresse 04h du DS1307 contient la date (voir datasheet du DS1307).

Pour régler le calendrier au 27 du mois, il faut écrire la donnée 27 (en code BCD) dans le registre d'adresse 04h du DS1307.


Le bus I2C utilise le protocole suivant :

    1. Pour initier le dialogue, le maître crée une condition Start.

    2. Le maître envoie l'adresse de l'esclave (1101000) suivi du bit 0 (bit Write).

    3. L'esclave répond (accusé de réception : bit ACKnowledge).

    4. Le maître envoie l'adresse du registre (04h) à écrire.

    5. L'esclave répond (accusé de réception : bit ACKnowledge).

    6. Le maître envoie la donnée (27) à écrire.

    7. L'esclave écrit la donnée puis envoie un accusé de réception (bit ACKnowledge).

    8. Le maître termine le dialogue avec une condition Stop.


Le bus I2C est maintenant libre (SCL = 1, SDA = 1 = niveaux de repos).


Chronogramme complet de l’échange sur bus I2C avec l’esclave DS1307


Question : D’après l’exemple ci-dessus, combien de temps faut-il pour le transfert en écriture ?

La fréquence est de 100kHz, il faut donc pour le transfert :


Exemple de lecture du DS1307

L'émetteur est l'esclave et le récepteur est le maître.

Les registres d'adresses 00h à 06h du DS1307 contiennent respectivement les secondes, minutes, heures, jours, dates, mois et années (voir datasheet du DS1307).

Voici comment lire, d'une seule traite, le contenu des registres d'adresses 00h à 06h du DS1307 :



Chronogramme correspondant :

Chronogramme complet de l’échange sur bus I2C avec l’esclave DS1307


    1. Pour initier le dialogue, le maître crée une condition Start.

    2. Le maître envoie l'adresse de l'esclave (1101000) suivi du bit 1 (bit Write).

    3. L'esclave répond (accusé de réception : bit ACKnowledge).

    4. Le maître envoie l'adresse du registre (0x00) à lire.

    5. L'esclave répond (accusé de réception : bit ACKnowledge).

    6. Le maître émet une condition Repeated Start.

    7. Le maître envoie l'adresse de l'esclave (1101000) suivi du bit 1 (bit Read).

    8. L'esclave répond (accusé de réception : bit ACKnowledge).

    9. L'esclave envoie le contenu du registre d'adresse 0x00 au maître.

    10. Le maître répond (accusé de réception : bit ACKnowledge).

    11. L'esclave envoie le contenu du registre d'adresse 0x01 (automatiquement incrémenté) au maître.

    12. Le maître répond (accusé de réception : bit ACKnowledge).

    13. L'esclave envoie le contenu du registre d'adresse 0x02 (automatiquement incrémenté) au maître.

    14. Le maître répond (accusé de réception : bit ACKnowledge).

… 

    21. L'esclave envoie le contenu du registre d'adresse 0x06 (automatiquement incrémenté) au maître.

    22. Le maître répond (accusé de réception : bit Not ACKnowledge).

    23. Le maître termine le dialogue avec une condition Stop.


Le bus I2C est maintenant libre (SCL = 1, SDA = 1 = niveaux de repos).


Question : Essayer de retrouver précisément la date et l’heure à l’aide du chronogramme complet de l’échange sur bus I2C avec l’esclave DS1307.


Le contenu du registre d'adresse 0x00 du DS1307 est 00000110 (codage BCD : 06 secondes).

Le contenu du registre d'adresse 0x01 est 0x56 (c'est-à-dire 56 minutes).

Le contenu du registre d'adresse 0x02 est 0x09 (c'est-à-dire 09 heures).

Le contenu du registre d'adresse 0x03 est 0x03 (c'est-à-dire Mardi).

Remarque : pour les américains Sunday = 1.

Le contenu du registre d'adresse 0x04 est 0x20 (c'est-à-dire 20ème jour du mois).

Le contenu du registre d'adresse 0x05 est 0x05 (c'est-à-dire mois de mai).

Le contenu du registre d'adresse 0x06 est 0x08 (c'est-à-dire année 2008).

Mardi 20 mai 2008, 9 heures 56 minutes et 6 secondes

Créé avec HelpNDoc Personal Edition: Créer des aides HTML, DOC, PDF et des manuels depuis une même source