Comment controler courant charge batterie HORLOGE RTC 1302

Bonjour à tous,

Voilà, j'ai des horloges RTC 1302 avec non pas une pile, mais un super condensateur ( qui fait office de pile )

j'ai téléchargé la library rctlib, je sais le mettre a l'heure ainsi que lire l'heure avec ce circuit. ( RAS )

mais lorsque je coupe l'alimentation, mon circuit ne garde pas l'heure car le super condensateur n'est pas chargé. j'ai vu dans le data sheet de ce circuit, il fallait envoyer une instruction au circuit pour commander la "puissance" de charge de la batterie. ( avec ajout d'une resistance et 1 ou 2 diodes ? ? ou ils sont intégré au circuit ? ? ? pas très bien compris )

avez vous des infos, pour activer cette fonction ? ? ?

( pour l'instant, j'ai court-circuité cette fonction avec une résistance de 1 Mhom du plus 5v à la batterie
cela fonctionne, mais j'aimerai utilisé le circuit tel qu'il a été conçu )
merci

La datasheet du composant sur le site de Maxim. Il doit sans doute y avoir des librairies qui existent.

EDIT: Dans le gestionnaire de librairie, cherche 1302. Il y a une librairie qui gère ta RTC ainsi que la configuration de son mode de charge.

bonjour
dans la datasheet du ds1302 c'est très clair voir table 2 pour les registres et figure 5 pour le schéma interne.

Merci de vos réponses, j'ai bien vu ces documents qui parlent du registre de charge.
mais pour moi, c'est pas clair ? ? ? je ne sais pas comment l'utiliser.

il faut rajouter 1 ou 2 diodes ? ? 1 résistances ? ? ? si oui, on les branche comment ? ? ?

la library que j'utilise est RTClib, qui fait bien son job ! ! mais possède t elle la fonction recharge ? ? ? ( je suppose que oui ? ? ? mais comment l'utiliser dans le programme ? ? ? )

avez vous un programme arduino, qui utilise cette fonction comme exemple ? ? ?
cela serai bien plus simple pour moi.
merci

j'ai trouvé cela :

Un schéma de circuit typique du chargeur d'entretien est illustré à la figure 1. Un motif spécifique à quatre bits dans le quartet supérieur du registre du chargeur d'entretien est utilisé pour activer le chargeur d'entretien. Les quatre bits inférieurs sont utilisés pour sélectionner une diode de chute de tension et une résistance de limitation de courant. Dans le schéma ci-dessous, une diode ou aucune diode peut être insérée dans le chemin de charge, et les valeurs de résistance qui peuvent être sélectionnées sont 250 Ω, 2 kΩ ou 4 kΩ. Certains appareils offrent différentes configurations de diodes et de résistances (consultez la fiche technique de l'appareil pour plus de détails). Le condensateur est connecté de VBACKUP à la masse

( donc les composants diodes et resistances sont en interne du circuit )

L'utilisateur détermine la sélection de la diode et de la résistance en fonction du courant maximum requis pour la charge du condensateur. Contactez le fabricant du condensateur ou consultez la fiche technique du condensateur pour connaître les limites de courant de charge.

Calculs du courant de charge
Le courant de charge maximum peut être calculé comme suit: supposons qu'une alimentation système de 3,3 V est appliquée au VCC et que le chargeur de maintien a été activé sans diode et avec une résistance de 2 kΩ. Le courant maximal, lorsque la tension du condensateur est nulle, serait calculé comme suit:

IMAX = (VCC - chute de diode) / R2
= (3,3 V - 0 V) ​​/ R2
≈ (3,3 V - 0 V) ​​/ 2 kΩ
≈ 1,65mA

Lorsque la tension sur VBACKUP augmente, le courant de charge diminue.

Calcul du temps de sauvegarde
Nous devons maintenant déterminer la taille du condensateur. Compte tenu du temps de sauvegarde souhaité, nous devons connaître plusieurs autres paramètres: la tension de début et de fin sur le condensateur, la consommation de courant du condensateur et la taille du condensateur.

Si nous supposons que le RTC tire un courant constant lors de l'exécution à partir de VBACKUP, le calcul du temps de sauvegarde le plus défavorable en heures utiliserait la formule:

[C (VBACKUPSTART - VBACKUPMIN) / IBACKUPMAX] / 3600

Où:
C est la valeur du condensateur en farads
VBACKUPSTART est la tension initiale en volts (la tension appliquée à VCC, moins la chute de tension des diodes, le cas échéant, utilisées dans le circuit de charge)
VBACKUPMIN est la tension finale en volts (la tension de fonctionnement minimale de l'oscillateur)
IBACKUPMAX est la fiche technique maximale du courant VBACKUP en ampères

Étant donné que C = 0,2 F, VBACKUPSTART = 3,3 V, VBACKUPMIN = 1,3 V et IBACKUPMAX = 1000 nA, alors:

Heures = [0,2 (3,3 - 1,3) / (1e - 6)] / 3600 = [0,2 (2,0) / (1e - 6)] / 3600 = 111,1

Si nous voulons savoir quel devrait être le temps de sauvegarde typique, nous substituerions la valeur typique IBACKUP (IBACKUPTYP) au maximum IBACKUP (IBACKUPMAX).

Par conséquent, si VBACKUPTYP est de 3,3 V (type) et IBACKUPTYP est de 600 nA (type), alors:

Heures = [0,2 (3,3 - 1,3) / (600e - 9)] / 3600 = [0,2 (2,0) (600e - 9)] / 3600 = 185,2

Ces calculs supposent que IBACKUP est constant, quelle que soit la tension sur VBACKUP. L'oscillateur sur les RTC Maxim a tendance à agir plus comme une résistance, de sorte que le courant de secours a tendance à diminuer avec la tension de secours. Il devrait donc être possible de calculer un temps de sauvegarde plus réaliste.

==> tout cela est bien jolie, mais on l'utilise comment ? ? ? tel est ma question ! ! ! !
un programme svp
merci

j’ai bien trouvé ce programme, mais je n’y comprends rien ? ? ? ?

#include <ErriezDS1302.h>

// Connect DS1302 data pin to Arduino DIGITAL pin
#if defined(ARDUINO_ARCH_AVR)
#define DS1302_CLK_PIN      2
#define DS1302_IO_PIN       3
#define DS1302_CE_PIN       4
#elif defined(ARDUINO_ARCH_ESP8266)
// Swap D2 and D4 pins for the ESP8266, because pin D2 is high during a
// power-on / MCU reset / and flashing. This corrupts RTC registers.
#define DS1302_CLK_PIN      D4 // Pin is high during power-on / reset / flashing
#define DS1302_IO_PIN       D3
#define DS1302_CE_PIN       D2
#elif defined(ARDUINO_ARCH_ESP32)
#define DS1302_CLK_PIN      0
#define DS1302_IO_PIN       4
#define DS1302_CE_PIN       5
#else
#error #error "May work, but not tested on this target"
#endif

// Create DS1302 RTC object
DS1302 rtc = DS1302(DS1302_CLK_PIN, DS1302_IO_PIN, DS1302_CE_PIN);



void setup()
{
    DS1302_DateTime dt;

    // Initialize serial port
    Serial.begin(115200);
    while (!Serial) {
        ;
    }
    Serial.println(F("DS1302 RTC trickle charger example\n"));

    // Initialize RTC
    rtc.begin();

    // Make clock and RAM registers writable
    rtc.writeProtect(false);

    // Check RTC write protect state
    if (rtc.isWriteProtected()) {
        Serial.println(F("Error: DS1302 not found"));
        while (1) {
            ;
        }
    }

    // Read TCS register
    Serial.print(F("TCS reg: 0x"));
    Serial.println(rtc.readClockRegister(DS1302_REG_TC), HEX);

    // Write TCS register
    // Please refer to the datasheet to set charge current
    rtc.writeClockRegister(DS1302_REG_TC, DS1302_TCS_DISABLE);

    // Read TCS register
    Serial.print(F("TCS reg: 0x"));
    Serial.println(rtc.readClockRegister(DS1302_REG_TC), HEX);
}

void loop()
{

}

Bonjour,

La bibliothèque de Rinky Dink de Henning Karlsen contient les commandes pour la gestion de la charge du condensateur.

http://www.rinkydinkelectronics.com/library.php?id=5

J'utilise d'autres bibliothèques Rinky Dink,Henning Karlsen fait vraiment du bon travail.

roro_manche:
j'ai bien trouvé ce programme, mais je n'y comprends rien ? ? ? ?

Il s'agit juste d'écrire une valeur dans le registre TC pour activer le circuit de charge.

    // Write TCS register
    // Please refer to the datasheet to set charge current
    rtc.writeClockRegister(DS1302_REG_TC, DS1302_TCS_DISABLE);

Il faut remplacer DS1302_TCS_DISABLE par la valeur qui va bien
Regarde dans la doc les valeurs à mettre en fonction de ton besoin.
Il s'agit juste de sélectionner 1 résistance parmi 3 et déterminer si on chute la tension d'alimentation d'un seuil de diode ou de deux (ce qui va modifier le courant de charge). En fin de compte c'est l'application pratique des calculs que tu as présentés plus haut.

fdufnews:
Il s'agit juste d'écrire une valeur dans le registre TC pour activer le circuit de charge.

    // Write TCS register

// Please refer to the datasheet to set charge current
   rtc.writeClockRegister(DS1302_REG_TC, DS1302_TCS_DISABLE);



Il faut remplacer DS1302_TCS_DISABLE par la valeur qui va bien
Regarde dans la doc les valeurs à mettre en fonction de ton besoin.
Il s'agit juste de sélectionner 1 résistance parmi 3 et déterminer si on chute la tension d'alimentation d'un seuil de diode ou de deux (ce qui va modifier le courant de charge). En fin de compte c'est l'application pratique des calculs que tu as présentés plus haut.

Bonjour
oui
En gardant à l'esprit que le DS1302 est quand même relativement mauvais (meme ordre que le DS1307) en ce qui concerne la stabilité de son oscillateur

Soit utiliser l'option charge de maintien avec les parametres mini (une R faible , une diode de chute) ou encore plus simple : raccorder le + du supercap à l'alim du MCU maitre quand il est actif (phase lecture actif)

Tant que le V residuel du supercap ne tombera pas au dessous de 2.0V (tirage conso 300 nA) ,l'oscillateur fonctionnera

Plus le supercap sera chargé à un V élevé lors de la suppression de l'alim "principale" sur le DS1302 , plus il mettra de temps à se rapprocher du 2.0V fatidique

merci a vous deux.

j'ai un circuit avec un super condensateur de 0.2F

si je comprend bien, il me faut une deuxième bibliothèque ???
( ou pas car elle sont similaire ? ? ? même date de creation ? ? même nombre d'octets ? ? )

j'ai essayé avec cette commande :
rtc.writeClockRegister(90h, 167);

erreur de compilation sur rtc.writeClockRegister ? ? ?

je vais laisser tomber, et prendre ma résistance de 1 M du +5 au condo, c'est plus simple et cela fonctionne

encore merci de votre aide

On se décourage vite.....

rtc.writeClockRegister(90h, 167);

ne peut pas fonctionner 90h est inconnu pour le compilateur C
Il faut écrire

rtc.writeClockRegister(0x90, 167);

Ne pas perdre de vue que la super cap va mettre un certain temps pour se charger quand même.

les diodes et les résistances sont intégrées.
En écrivant dans le registre 90h on selection la config voulue. avec 167 c’est 1 diode et 8 k.

IMAX = (5.0V – diode drop) / R1 ≈ (5.0V – 0.7V) / 8kΩ ≈ 0.54mA

Ici 8k me semble élevé. Je choisirais 2 ou 4 k

Attention à la tension de service de la supercap. Cela conditionne aussi le choix d'une ou de deux diodes.

merci les amis,
oui, je me décourage peut être vite pour le temps je j’y ai déjà passé pour ci peu de résultat ( nul )! ! !

nota : j’ai essayé cela => rtc.writeClockRegister(0x90, 167);

toujours une erreur de compilation ! ! ! ( et pourtant j’ai la bonne library ? ? ? ) j’ai l’impression qu’il refuse writeClockRegister car cela reste en écriture noire dans le programme ? ? ?

cela fait environ 50 h que je cherche, il n’y a rien ou si peu d’infos ( c’est même curieux, qu’il n’y a rien dessus dans les programmes avec 1302, normalement c’est une fonction qui devrait être toujours utilisé ? même avec une pile lithium ( cela évite la décharge suivant la doc ) et pourtant aucune de ces lignes dans tous les programmes d’horloge ? ? ? si c’était si simple cela se saurai ? ? non ? ? ? ) encore merci de votre aide.

j’ai soudé une diode avec une résistance => 5 minutes et c’est bon ! ! ca marche.
( dans l’affaire, j’ai “perdu” 49h55mn pour rien ! ! ! , juste pour faire plus “fun” dans mon programme )