Librairie Makuna Freez

ah les datasheet! la 1ère que tu lis, elle fait mal à la tête, et après on peut plus s'en passer!
ça m'a fait pareil avec le mode d'emploi des processeurs d'ailleurs. Un jour tu sais meme pas que ça existe, et puis tu tombes sur un article de Locoduino ( :smiling_face_with_three_hearts:) qui te dit que tu peux configurer les ports de ta UNO en écrivant direct dans les registres, et là tu penses plus qu'à ça!

En tout cas, on voit bien 2 groupes se distinguer: les gens qui vont profiter de la facilité d'arduino pour monter des projets concrets en électronique et programmation sans avoir besoin de connaissances approfondies (et là, merci les bibliothèques, histoire d'avoir du I2C qui fonctionne, des écrans qui s'allument et des moteurs qui tournent à la bonne vitesse), et puis il reste les geeks, les nerds, les otakus, qui peuvent pas supporter que quelque chose marche sans qu'ils aient compris pourquoi!!

Il y a une voie centrale : ceux qui ne veulent pas systématiquement refaire, d’ailleurs ils n’en ont pas forcément les connaissances, mais qui cherchent à comprendre.

Et il y a les pro et anciens pro qui ont de grosses facilités d’adaptation, pour qui la lecture d’une bibliothèque est de la rigolade et qui ne voient pas toujours les difficultés.

Ok, donc si je comprends bien, désolé je suis un peu vieux et des phrases courtes sans contexte, moi je n'y comprends rien.
tu fais tourner ton code qui récupère le dateTime et la température sur le RTC et qui affiche uniquement la température, puis une ligne qui s'incrémente de 0 à 10 en boucle.
Le moniteur série affiche tout ça un certains nombre de fois puis cette ligne "test cycles" et plus rien d'autre?

Soit le même comportement que si tu retirais l'alimentation de ta carte Uno ?

" Le moniteur série affiche tout ça un certains nombre de fois ... "test cycles" et plus rien d'autre"
oui plus de défilement sur le terminal de l'IDE lorsque le +5volt du module RTC est débrancher.
(mais peu être que seule le port série est gelé, le Loop tourne tourne toujours ? une led blink à placé)

J'ai regarder du coté de RobTillaart avec le super boulot de qualité pour c Lib
https://github.com/RobTillaart/Arduino/tree/master/libraries
mais rien du coté RTC.

alors direction l’Italie , Petre Rodan a des bon retour, je teste en fin de journée
https://github.com/rodan/ds3231

Mais d'abord j'ai un système d'inter a placé entre le support de pile et la pile du modul RTC, pour des test :wink:

des infos top top https://lastminuteengineers.com/ds3231-rtc-arduino-tutorial/
..info sur Pile ou Accu , durée de vie de la Pile (un module pas sous tension , on retire la pile , ou insère un plastique entre les contact :slight_smile:

après l'Italie
l'Espagne :slight_smile: Naguissa https://github.com/Naguissa ma futur .... lib ???

hello
exact,j'ai répondu un peu vite.
je me referais au ZS-042,ICI son circuit de charge se limite à une résistance suivie d'une diode.
schéma en #2 de ce post

Je n'ai pas regardé, donc c'est que des suspposition.
Mais comme tu coupe l'alimentation de ton module, forcément il ne va pas te répondre.
D'ailleurs pourquoi tu fais ça?
Du coup si les fonctions de lecture sont en attente sans timeout, tu reste sur ta fonction de lecture.

Si tu donnais ta sortie Moniteur, ça serait peut être plus simple.

Il faudrait savoir sur quel fonction tu reste bloqué.
Mais là comme ça, je dirais que c'est surement normale comme comportement, tu voudrait quoi comme comportement?

... la suite :slight_smile:

donc d'autres librairie de testé, et c fascinant cette bio diversité pour un simple module RTC.
et toujours le même problème , le croquis est bloquer "Loop Freez " sur perte de l'alim du module.
certain Lib bloque sur perte de la com i2c, d'autres le dise .

"D'ailleurs pourquoi tu fais ça?" ?? ... une déformation professionnelle, des nuits a tester la mis en service de nouvelle Automate, nouvelle installation , mode dégradé , passage en manu des Equipements sur perte Com et autres vices .

Alors retour a Makuna :slight_smile:

Voila la fonction qui cause problème, l’appelle de Rtc.GetDateTime();
j'ai essayé de l'isolé dans un coin du programme, une boucle For, mais pas bon.

la un problème similaire, enfin presque. https://arduino.stackexchange.com/questions/45310/adafruit-rtc-ds3231-crashing-arduino-uno
le problème résolu avec ajout d'un return (j'ai pas compris)

...... bip bip suis perdu dans l'espace

un reEdit , pour la Lib Adafruit , cella peut être util.
https://arduino.stackexchange.com/questions/45224/adafruit-rtc-begin-not-returning-false

info:

.... suite et Fin

je reste sur la Makuna, une des rares qui redémarre sur perte de com i2c.
qui me donne les messages d’erreurs Com ou dateheure invalides et pas de conflit avec MySensors :slight_smile:
Et Aucunes Lib me donne l'info du niveau de la tension batterie, et en regardant la page 11 du
Datasheet, le DS3231 a seulement deux Registres Control et Status .

A+

Et la marmote ...

Une BIBLIOTHEQUE qui gère un DS3231 gére un DS3231, elle ne gère pas l'alimentation.
C'est à toi de la gérer.

Il ne t'es pas interdit de cabler deux résistances et de relier le point milieu sur une E/S capable de mesures analogiques.

Et les registres calendaires et horaires ils sont où ?

Bizarre les autres utilisateurs n'ont pas tes problèmes.

Je n'ai pas encore trouvé de CI plus simple qu'un DS1307 ou DS3231 (ils ont les mêmes registres).
Le seul point légèrement délicat est le codage BCD. Il suffit d'ouvrir une bibliothèque et copier les deux lignes qui font la conversion BCD vers décimal et décimal vers BCD.

Mouai, mais du coup tu t'attends à quoi ?
Tu veux que la fonction de dise, ca ne marche pas?
Tu veux que la fonction de renvois l'heure?
A quel cas précis cela correspond t-il du coup ?

Si tu as des risques de bloquer sur une fonction et que ton programme n'a pas un besoin absolue de l'heure, tu met un timer avant, qui te sors de la fonction le cas échéant.

@68tjs 8heure post#29 .... les vocalismes du matin avec la grosse voix, aller on recommence, on inspire!

Bah la Marmotte elle me le dit lorsque lorsque elle a un problème, mais les modules a base DS3231 ne renvoie aucune info. et les Lib font avec
Oui seulement deux registres pour la gestion, hormis les autres qui son l'utilité 1er de cette puce.

pour le "...les autres n'ont pas tes problèmes" cella viendra :slight_smile:

@Terwal Oui c'est la solution, utilisé la librairie TimeLib de GitHub - PaulStoffregen/Time: Time library for Arduino avec la fonction requestTime(receiveTime) de MySensors
c'est jouable, et pour l'utilisation du module DS3231 c poubelle, je vais peut être contacter Makuna.

ah oui tes questions:
Mouai, mais du coup tu t'attends à quoi ? = un module externe qui ne bloque pas le reste du programme sur un saut d'humeur.
Tu veux que la fonction de dise, ca ne marche pas? = ne marche pas c pas grave,bien que.., mais que je n'ai pas a me dire tien la bat est peut être vide et je risque de perdre l'heure .
Tu veux que la fonction de renvois l'heure? = la sauvegarde du temp , la fonction 1er le pourquoi elle est vendue.
A quel cas précis cela correspond t-il du coup ? lorsque un neutrinos la traverse ou manque 5volt

ReEdit pour RTC DS3231 battery status - adafruit industries

ReEdit2 : un pont diviseur + sonde de température du module DS3231 pour
compensé la dérives des valeurs, la sortie (entré) Bat du module sur une IA de l'arduino et c bon : lire en 7.1 de RitonDuino: Alimenter un ARDUINO sur Pile ou Batterie
merci Riton :slight_smile:

Pourquoi poubelle?

Ou tu déclenche toi même un timer, c'est toi qui vois.

Pour le coup, ce n'est pas le module qui pose problème, c'est ta librairie qui est bloquante :slight_smile:

Ca c'est deux chose différentes, comme le précise @68tjs , tu dois pouvoir gérer le niveau de la batterie, si le module ne le fait pas.
Si tu n'a pas changer la batterie à temps et que tu as une coupure du 5V, qui d'ailleurs à forte chance aussi d'impacter ton µC, tom programme peut-il fonctionner sans l'heure?

Le problème n'est pas la sauvegarde du temps, ton problème est que si ton module n'est pas alimenter, forcément il ne fonctionne pas et ne peux pas te renvoyer l'heure, même si il a une batterie de sauvegarde de l'heure non?
en gros le module doit être alimenter par autre chose que la batterie, pour te répondre ?
après que suite à ça il te renvois la bonne heure est un autre problème.

Dans ce cas, ton µC, ne sera pas plus alimenté ?

Désolé, ca fait beaucoup de référence et de questions.
Mais j'ai du mal à suivre ta logique et donc je cherche à comprendre ce que tu attends :pray:

"Pour le coup, ce n'est pas le module qui pose problème, c'est ta librairie qui est bloquante" ... oui toute :slight_smile:

"... tu as une coupure du 5V, qui d'ailleurs à forte chance aussi d'impacter ton µC, tom programme peut-il fonctionner sans l'heure?" ... pour l'utilisation voulue Oui , repartir sur une Horaire fausse c pas le but :slight_smile:

un truc que j'ai peut être pas vue:
la pile CR1220 sur le module Adafruit , lorsque le module n'est pas sous tension, la batterie est vide au bout de 5ans ??? ou 3mois ??

avec une LIR2032 l'autonomie et plus ??
http://tiptopboards.free.fr/arduino_forum/viewtopic.php?t=5&p=5

un arduino sur batterie et plus de problème :slight_smile:
https://fr.jf-parede.pt/arduino-mains-failure-battery-backup-circuit

Une pile CR1220 a une capacité d'environ 38mAh
Le DS3231 consomme entre 0.8 et 3µA en mode backup.
Si on prend la valeur moyenne de 2µA cela donne une autonomie de plus de 2 ans.

En principe, un système avec une RTC n'a pas vocation à fonctionner pendant des jours ou des semaines sans alimentation. Donc il faut bien se dire que la pile va avoir une durée de vie beaucoup plus importante que les 2 ans calculés. Tu peux très bien prévoir en maintenance préventive de changer la pile tous les 2, 3 ou 5 ans.

Les batterie de la famille LIRxxxx ont en générale une capacité plus faible que les piles CRxxxx
Par exemple une LIR1220 est donné pour une capacité entre 8 et 15mAh. Et elles ne vieillissent pas toujours très bien.

Discussions · Makuna/Rtc · GitHub is a better place to ask this question. I don't monitor the Arduino forum and I am unsure if you @Makuna it will notify me in a way that I could come respond.

..... c'est en court.

@fdufnews merci pour les explications clair et nette

Just a note for information for others not specific to Rtc Library, but more about the use of the standard WIRE library this the Makuna RTC library relies on.

The default for WIRE when it is disconnected seems to have been to lock up. But the Wire API has changed, and you can call setWireTimeout() and you can read about it here.

This timeout feature is not universal across platforms. So, it will just lock up if it doesn't find the device is normal operating procedure from WIRE. They seem to have a plan for cross platform in compatibility as outlined in the link above. But at this time, related to the use with this library and probably others, calling this is going to be left up to the sketch writer to add after calling begin() on the library. In the case of RTC by Makuna, you can check for timeout error after methods by calling rtc.LastError() and checking the return value.

des infos, pour les Futurs créateurs de librairie

un peux d'histoire
2018

Un défaut connu dans le code Arduino I2C provoque des problèmes de raccrochage

https://www.fpaynter.com/2018/08/known-defect-in-arduino-i2c-code-causes-hangup-problems/

2019

Bibliothèque I2C / Wire: modifications

https://github.com/arduino/ArduinoCore-avr/pull/107

2020

Document Wire timeout API

https://github.com/arduino/reference-en/issues/895

------- lue sur ---
"les bibliothèque Wire semble manquer les nouvelles fonctionnalités de temporisation actuellement présentes dans GitHub - arduino/ArduinoCore-avr: The Official Arduino AVR core qui est venu avec la dernière version de la version 1.8.3.
Ces changements permettent aux communications I2C de fonctionner sans risque de verrouiller tout votre firmware lorsque quelque chose d'inattendu se produit dans le bus et résout des dizaines de ( centaines? ) d'étranges insectes signalés au cours de la dernière décennie.

La nouvelle bibliothèque Wire a vu son API étendue pour inclure les nouvelles fonctions suivantes pour gérer la fonction de délai d'expiration."

 void setWireTimeout(uint32_t timeout = 25000, bool reset_with_timeout = false);
    bool getWireTimeoutFlag(void);
    void clearWireTimeoutFlag(void);

A+

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.