Étape 13 : Horloge en temps réel DS1307 IC
http://www.Maxim-IC.com/datasheet/index.MVP/ID/2688
Lire la fiche technique, il contient les commandes pour la puce et d’autres détails. Vous aurez besoin de connaître ce genre de choses quand vous regardez mon code source afin que vous sachiez ce qui se passe.
Que fait-elle ? Il suit le temps, donc votre microcontrôleur n’est pas. Il va suivre même temps à l’aide d’une pile bouton tandis que son alimentation principale est coupée, si vous n’obtenez pas ce classique 12:00 clignotant qui arrive à vieux réveils lorsque la panne. Oh et il suit la date de trop.
Notez qu’il existe des alternatives beaucoup mieux pour le DS1307 aujourd'hui avec de meilleures fonctionnalités, cependant, j’ai trouvé cette puce dans ma collection de pièces étranges, alors je vais l’utiliser.
Cette puce nécessite les choses suivantes autour d’elle : un cristal de montre, une batterie de secours (cellule de pièce 3V de la volonté de magasin du dollar depuis 9 ans), une alimentation et un condensateur de découplage.
Le microcontrôleur communiquera à la DS1307 via le bus I2C (inter integrated circuit). Le bus I2C est également connu sous le nom de TWI (deux câbles d’interface, il n’utilise que deux fils). Il est conçu pour la communication entre plusieurs circuits intégrés. Veuillez vous reporter à l’annexe D en savoir plus sur I2C et TWI.
Ce que nous devons faire avec le DS1307 est simple, il suffit de régler l’heure et lire l’heure.
Le DS1307 conserve ses données dans plusieurs registres. Reportez-vous à la feuille de données, tableau 2, page 8. Il montre les données étant stockées sous forme décimale codée en binaire qui notre code source va coder et décoder. Nous allons écrire à ces registres lorsque nous avons mis le temps et lire les mêmes registres pour récupérer le temps.
Une bonne description du bus I2C est donnée à la page 10 de la feuille de données. La section de caractéristiques électriques AC de la fiche technique dit que notre bus I2C doit fonctionner à 100 KHz ou moins (c’est configurable à l’intérieur de notre code source), tenez-en compte. L’adresse de la DS1307 est 1101000, n’oubliez pas que trop.
Par exemple, nous voulons définir les secondes, si le Registre est 0 x 00. Nous avons tout d’abord envoyer via I2C
0b11010000
Ceci résout le DS1307 et dit que nous souhaitons écrire
puis nous envoyer
0 x 00
pour indiquer le registre 0 x 00
puis nous envoyer le numéro que nous voulons créer, codé sous forme décimale codée en binaire
Alors, si nous voulons lire retour les secondes, le Registre est encore une fois, 0 x 00, nous avons tout d’abord envoyer
0b11010000
Notez qu’il s’agit de l’adresse, mais nous sommes toujours spécifier que nous voulons écrire
Pourquoi préciser « écrire » quand on veut lire ? Parce que nous n’avons pas dit le DS1307 où nous voulons lire (configuration de l’adresse de Registre à l’intérieur du DS1307). Donc, nous envoyer
0 x 00
puis nous terminons le transfert de données
Ensuite, envoyer
0b11010001
maintenant nous sommes abordant le DS1307 et indiquant que nous voulons lire
Nous nous dirigerons ensuite l’horloge à relire les données, ce qui le DS1307 placera sur la ligne de données pour nous. Nous pouvons alors décoder les données format décimale codée en binaire.
Il est important de comprendre que parce que nous utilisons le module intégré de TWI notre AVR pour la communication I2C, il sait pour libérer automatiquement la ligne SDA lorsque nous indiquons « lire » dans le premier octet que nous envoyer. Les matériels et logiciels (nous utilisons des « twi.c » de la bibliothèque de « Fils » de l’Arduino). TOUT est automatisé, même les accusés de réception.
Pour nos fins, nous lire et écrire tous les paramètres de temps en une seule fois, pour l’efficacité. Les détails de comment cela fonctionne est dans la feuille de données. Vous pouvez aussi voir mon code source plus tard. L’idée est la même pour un registre, mais nous avons à plusieurs reprises en lecture/écriture sans terminer le transfert. Vous verrez comment cela fonctionne par le biais de la feuille de données, mon code source et mes signaux d’analyseur logique.
Une démonstration d’un programme simple qui définit le temps et puis affiche l’heure sur votre écran LCD est jointe. Il démontrera en empruntant l’autobus TWI pour effectuer des opérations de lecture/écriture simples/multiples octet (Découvre les formes d’ondes que j’ai fournis).
Introduire le DS1307 en premier dans votre circuit selon mon schéma. Une image de résolution supérieure se trouve la. Package ZIP. Le point important est que le DS1307 doit 5V, et nous avons modifié le Teensy ++ de fonctionner à 3.3V, le diagramme vous indique où trouver 5V de la Teensy ++.
Vous aurez besoin de l’écran LCD toujours connecté si vous voulez voir le fonctionnement de l’horloge. Le terminal série montrera encore que vous les messages de débogage.
J’ai inclus les formes d’onde de l’analyseur logique que vous puissiez voir clairement ce que dirait I2C, le datasheet du DS1307 montre aussi des formes d’ondes similaires, étudier les formes d’onde ensemble tout en examinant également les données échangées (par exemple quelle commande est envoyé, ce qui a été la réponse), essayez correspondant à des événements aux points dans le code source.