Fonctions RTC M41T56

M41T56 est une puce d'horloge en temps réel, qui est un analogue du populaire DS1307. Et même si le brochage du microcircuit est le même, ils présentent des différences importantes, dont je vais essayer de parler.

Brève description


Je ne m'attarderai pas sur le fonctionnement du bus IIC, je constate juste que les deux puces ont l'adresse 0xd0. Pour travailler avec le temps, le microcircuit contient sept registres de comptes et un registre de contrôle. Les registres de comptes contiennent des nombres au format décimal binaire, cependant certains bits ont une signification particulière.

Registres
xxx - la valeur du bit n'est pas définie.
fonctionindexbitsvaleurs possibles
76543210
secondes0x00STdes dizaines de secondesunités de secondes0 - 59
minutes0x01xxxdes dizaines de minutesunités de minutes0 - 59
la montre0x02SebSBdes dizaines d'heuresunités d'heures0 - 23
jour0x03xxxxxxxxxxxxxxxjour de la semaine1 - 7
jour du mois0x04xxxxxxdes dizaines de joursunités du jour1 - (28 | 29 | 30 | 31)
mois0x05xxxxxxxxxdesunités du mois1 - 12
année0x06des dizaines d'annéesunités de l'année0 - 99
registre de contrôle0x07OUTFTSmontant de la correction-

Bits
x - après la mise sous tension, l'état du bit peut être quelconque.
un peuaprès réinitialisationla description
STxLors de l'écriture de 1 sur ce bit, le générateur s'arrête
CEBxLorsque le bit CEB (Century Enable Bit) est défini, puis lorsqu'un nouveau siècle est atteint, le bit CB (Century Bit) modifie la valeur à l'opposé.
CBx
OUT1Lorsque les bits OUT (niveau de sortie) et FT (test de fréquence) sont égaux à zéro, la broche FT / OUT est enfoncée au sol. Avec FT = 1, la sortie FT / OUT est de 512 Hz et le bit OUT n'a pas d'importance.
FT0
SxMarque d'étalonnage de course RTC.

Les différences commencent dans l'affectation des bits 7, 6 et 5 du registre d'horloge. Dans le M41T56, les bits 7 et 6 sont utilisés pour indiquer la transition vers le nouveau siècle, et les bits 5 et 4 sont utilisés pour compter des dizaines d'heures. De plus, le comptage des heures n'est possible qu'en mode 24, le mode AM / PM n'est pas disponible. Dans DS1307, le bit 7 n'est pas utilisé, un zéro dans le bit 6 indique que le mode de comptage 24 est utilisé, et dans ce cas, les bits 5 et 4 contiennent des dizaines d'heures. Si le bit 6 est égal à un, le bit 5 devient l'indicateur AM / PM et le bit 4 contient des dizaines d'heures.

Des différences importantes se trouvent dans le registre de contrôle, qui contient le mot de correction de course.

Correction de cap


Le M41T56 vous permet de compenser l'erreur du résonateur à quartz dans la plage de -62 à +124 ppm, ce qui donne un écart ne dépassant pas ± 5 secondes par mois. Pour la compensation, les six bits les moins significatifs du registre de contrôle sont responsables. Les bits 4-0 contiennent un entier non signé de la valeur de correction et le bit 5 définit la direction de correction. Si le bit 5 contient zéro, la course ralentit par incréments de 2,034 ppm, sinon RTC accélère par incréments de 4,068 ppm. Ceci n'est pas pratique, j'ai donc esquissé quelques fonctions simples pour convertir de ppm en mot de correction et vice versa.

/*        . */ #define MASK_CALIBR ((1 << 4) | (1 << 3) | (1 << 2) | (1 << 1) | (1 << 0)) /*        . */ #define MASK_CALIBR_SIGN (1 << 5) /** *    . * @param caliber    RTC. * @return    ppm. */ int8_t caliber_to_ppm(uint8_t caliber) { int8_t result = caliber & MASK_CALIBR; result = (uint8_t) result * 2; if ((caliber & MASK_CALIBR_SIGN) != 0) { result = -result; } else { result = (uint8_t) result * 2; } return result; } /** *   . * @param ppm    ppm. * @return    RTC. */ uint8_t ppm_to_caliber(int8_t ppm) { uint8_t result; if (ppm < 0) { result = (uint8_t) (-ppm + 1) / 2; result |= MASK_CALIBR_SIGN; } else { result = (uint8_t) (ppm + 2) / 4; } return result; } 

Détection de panne


Ni le DS1307, mais le M41T56 ne peuvent détecter les échecs de génération, mais ils garantissent qu'à la mise sous tension, certains bits seront dans un certain état. M41T56 lorsqu'il est activé dans le registre de contrôle sera 10xxxxxx. Pour suivre les plantages de programmes, vous pouvez utiliser l'algorithme suivant. Si, lorsque le microcontrôleur est allumé, le registre de contrôle RTC contient 10xxxxxx, alors il y a eu une panne de courant et une valeur doit être écrite dans le registre dont les bits hauts ne sont pas égaux à 10. Le plus simple est d'écrire le mot de correction avec les bits 7 et 6 égaux à zéro.

Littérature


Source: https://habr.com/ru/post/fr457796/


All Articles