Reset RTC DS3231

Bonjour à tous,

J'utilise un shield RTC à base de DS3231 Parfois, lors du demarrage de mon montage, ce dernier me renvoie une date/heure farfelue

Débrancher et rebrancher la pile remet généralement les choses en ordre. Par contre, faire simplement un reset de mon ESP12e ne change rien (reset fait en ayant connecté la pin reset à un gpio et en activant ce dernier, je vois bien l'ESP qui reboote)

J'en arrive à la conclusion que c'est le shield RTC lui meme qui parfois ne démarre pas correctement.

Je cherche donc un moyen de le reseter

Je vois deux options - Soit il existe une commande à envoyer sur le bus I2C mais je n'ai rien trouvé dans ce sens. - Soit alimenter le Vcc du RTC à travers un transistor dont la base serait commandé par un GPIO de l'ESP ce qui me permettrait de déclencher logiciellement un resert du RTC

Avez vous connaissance d'une commande I2C pour cela ?

Merci d'avance

Lisez cet article en anglais

Merci beaucoup,

C'est très interessant et je vais essayer de ce pas :)

Bonsoir,

Malheureusement, ça ne fonctionne pas Mon DS3231 s'entete à me renvoyer une date/heure farfelue et je ne parviens meme plus à forcer la mise à l'heure J'ai egalement essayé de faire un reset du shield en enlevant la pile 1min ou deux mais rien n'y fait

Auriez vous une piste ?

Merci beaucoup

vous avez un deuxième shield RTC identique pour tester si ce n'est pas un pb matériel? vous avez bien validé les connexion? les GND sont bien connectés?

En effet, j'en ai d'autres mais ca sera en dernier recours car je ne suis plus sur la breadboad mais soudé sur une plaque à pastille

Je vais vérifier le routage des broches, vous avez raison. Je vais aussi vérifier côté soft si les #define de sda et slc sont bon car il se peut que ce soit pensé pour les pins de l'arduino alors que je suis sur un ESP

Dans tous les cas, je vérifie tout ca demain et je vous tiens informé

Merci et bonne journée

Dans quel état est la pile de sauvegarde ?

De mes premiers essais avec un DS1307 j'avais conclu qu'il fonctionne très bien sans pile (mais pas de sauvegarde) ou avec une pile non épuisée. Mais qu'il ne fonctionne pas si la tension de la pile est trop basse ce qui était mon cas. Après avoir changé la pile (chinoise) d'origine tout est rentré dans l'ordre. Je suppose qu'il en est de même avec le DS3231.

Merci pour cette piste que j'ajoute à la liste des tests: Essayer de le faire fonctionner sans pile

Comme pour les autres pistes, je teste demain et vous dis ce qu'il en est :)

Bonjour

Qu'appelles-tu date/heure farfelue exactement ?

Ne serait-ce pas 165:165:165 ?

Non, ce n'est pas cette valeur. Je ne l'ai pas sous les yeux, mais dès que je peux je vous la poste (de mémoire je dirais un truc du genre 65/20/2009 pour la date...)

S’il y a du 165 ou du 65 (qui est en fait un 165 tronqué du chiffre des centaines lors de son affichage), la plupart du temps cela veut dire :

  1. que la communication avec le RTC ne se fait pas
    L’arduino ou l’ESP “capte” alors des octets à 255=0b11111111, qu’il traite quand même comme si c’était une valeur codée en DCB ce qui donne 0b111110+0b1111=1510 + 15 = 165

Ce problème est typique d’un bus I2C sans résistances de pull up sur SDA et SCL

  1. que le programme côté Arduino ou ESP ne gère pas correctement les codes erreurs remontés par le routines I2C qu’il appelle

Un grand merci pour ces nouvelles pistes

Je vérifierai aussi s'il y a bien des résistances de pull up sur le bus

Coté programme, il s'agit d'une lib que j'ai dupliquée pour y apporter quelques modifications dans la classe DateTime (en fait séparation en une classe Time et une DateTime qui fait appel à la précédente).

Mais la partie gestion I2C est restée identique à la source

Comme je disais depuis tout à l'heure, je me pourrai vérifier tous ces points que demain mais j'ai plein de pistes à explorer donc ça devrait tomber en marche :)

Encore merci pour vos aides

wAx:
Je vais aussi vérifier côté soft si les #define de sda et slc sont bon car il se peut que ce soit pensé pour les pins de l’arduino alors que je suis sur un ESP

Effectivement c’est “prevu” selon le pinout d’une arduino uno/nano.

Cependant, le transposition fait que SCL => A5 => GPIO5 et SDA => A4 => GPIO4, donc c’est transparent pour l’utilisation.

Tu peux toujours utiliser le constructeur de classe:

Wire.begin(int sda, int scl);

Malheureusement la très grande majorité des exemples de programmes I2C (et même des lib RTC) que l'on trouve sur le net ne gèrent pas correctement les codes erreurs remontés suite aux problèmes de transmission.

Je ne sais pas pour l'ESP, mais par exemple sur arduino on ne devrait jamais trouver un code digne de ce nom, qui utilise Wire.endTransmission() sans tester la valeur retournée par cette fonction.

Jambe: Effectivement c'est "prevu" selon le pinout d'une arduino uno/nano.

Cependant, le transposition fait que SCL => A5 => GPIO5 et SDA => A4 => GPIO4, donc c'est transparent pour l'utilisation.

Tu peux toujours utiliser le constructeur de classe:

Wire.begin(int sda, int scl);

Il faut surtout que je vérifie sur quelles pins je suis reellement connecté. Puisque sur l'ESP chaque pin peut etre utilisée pour l'I2C, il faut que je vérifie ça

bricoleau: Malheureusement la très grande majorité des exemples de programmes I2C (et même des lib RTC) que l'on trouve sur le net ne gèrent pas correctement les codes erreurs remontés suite aux problèmes de transmission.

Je ne sais pas pour l'ESP, mais par exemple sur arduino on ne devrait jamais trouver un code digne de ce nom, qui utilise Wire.endTransmission() sans tester la valeur retournée par cette fonction.

Pour info, je suis parti de la RTC lib by Makuna...

Bonjour à tous

Problème résolu pour les questions d'heure farfelue

En effet, en restant les pistes, j'avais la piste SDA qui faisait plus de 1MOhm... En la refaisant, j'obtiens des choses bien plus cohérentes.

J'ai l'impression que l'horloge se décale de plusieurs minutes par jour mais à vérifier avant d'aller plus loin

Il me reste à controler un probleme de consommation, puisque mon montage semble avoir vidé une pile 9V neuve en 3j

En tous cas, comme d'habitude, un grand merci à vous tous

J’ai l’impression que l’horloge se décale de plusieurs minutes par jour mais à vérifier avant d’aller plus loin

Ce serait surprenant avec la technologie utilisée dans le 3231.
Le quartz est incorporé au boîtier et “asservi” en température.

quartz_ds3231.png
Il faut lire sa datasheet.

Et si la pile bouton etait faiblarde ?

Ds3231 je ne sais pas,
DS1307, comme je l’ai déjà écrit par expérience personnelle le DS1307 ne fonctionne pas et refonctionne en retirant pile mais plus de sauvegarde.
La différence entre les deux circuit c’est principalement la gestion du quartz donc ce devrait être pareil.