[RESOLU] branchement module DS1307 RTC sur leonardo

Salut,

Effectivement sur la Leonardo les broches SDA et SCL sont respectivement sur D2 et D3. Par contre je ne vois pas à quoi correspond ton "setsyncprovider". Quelle bibliothèque utilises-tu ? Au cas où, il existe la bibliothèque RTClib d'Adafruit...

++

Ne pas oublier que pour que l'I2C fonctionne il faut aussi 2 résistances de pull-up, une pour chaque signal SDA et SCL (4K7 c'est pas mal).

alors, dans un premier temps voici les parties de codes qui concernent l'heure :

#include <Time.h>  
#include <Wire.h>  
#include <DS1307RTC.h>  // a basic DS1307 library that returns time as a time_t

[...]

void setup() {
  [...]
  // setup RTC clock
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
  [...]
}

j'ai bien sur une boucle loop dans mon code, mais c'est le setup qui bloque au niveau de la fonction "setSyncProvider(RTC.get)"

pour le cablage, sur l'arduino leonardo il y a deux entrées : sda et scl que j'ai reliées directement aux entrées correspondantes sur le module RTC
(celui que j'ai pris est celui-ci, pour ce qui est du cablage et du code j'ai suivi ce tuto)

voilà, pour ce qui est des résistances de pull-up je viens de voir à quoi cela correspond, j'espère que je n'ai pas fait de bêtises à brancher en direct...

edit : je viens de jeter un œil au travail d'adafruit, je vais essayer de charger ce code voir ce que ça donne...

cannard:
voilà, pour ce qui est des résistances de pull-up je viens de voir à quoi cela correspond, j'espère que je n'ai pas fait de bêtises à brancher en direct...

Pas d’inquiétude, cela empêche juste la liaison de fonctionner. pas de risque.

Il est possible que le fait que la liaison ne fonctionne pas bloque la lecture de la RTC ce qui bloque setSyncProvider()

Tu peux essayer tout d'abord la fonction RTC.get() toute seule dans le loop pour essayer de lire la RTC.
Elle renvoi un entier long (time_t == unsigned long) qui s'incrémente toute les secondes.

ouf :cold_sweat:, si déjà je n'ai pas tout cramé c'est bien...

donc avant de refaire (potentiellement mal), je dois donc faire un montage de ce type :

avec à la place des entrées analogiques les entrées sda et scl du leonardo

et pour les résistances il faut donc 4KOhm, c'est ça ?

C'est cela, sans oublier que le GND du DS1307 doit aussi être relié au GND de l'Arduino : continuité des masses

ça c'était déjà fait pour la masse, donc tip top

me reste plus qu'à chasser de la résistance de 4KOhm dans mon matériel de récup...

je mettrais des news quand ce sera fait :wink:

n'importe quoi entre 2K2 et 10K devrait faire l'affaire sur une courte distance

si en plus ça tolère autant c'est top :smiley:

par contre il faut deux résistances identiques je suppose ?

edit : 2KOhm ça passe ou c'est vraiment pas assez ?

même pas,mais reste sur des valeurs proches

Bonjour,

De mémoire la librairie Wire (enfin la librairie TWI qui est caché derrière Wire) active les résistances de pull-up intégré à l'arduino.
Par contre sur l'ATmega32u4 je sait pas si les pull-up sont disponible en mode I2C ...

Ta mémoire est bonne, mais des résistances internes de tirage au +5v qui peuvent faire jusqu'à 70kohms -> pour de l'I2C bof.......
il est quand même préférable de prendre les valeurs indiquées par Barbudor.

une dernière question :

si je branche sur le 3.3V au lieu du 5V, est-ce qu'une résistance comprise entre 1.5KOhm et 6.5KOhm fera l'affaire ?

(nota : 3.32.2/5=1.5 et 3.310/5=6.5)

au vu de mes faibles connaissances en élec je dirais que oui, mais je ne comprends à vrai dire pas trop à quoi servent ces résistances (imposer une certaine intensité dans le circuit ? ou une certaine tension ?)

Il faut que les résistances tirent vers la même tension qui alimente les 2 composants, soit 5V pour une Arduino standard, et j'espère que ton DS est aussi alimenté en 5V.

Ces résistances de pull-up sont nécessaires car les signaux I2C ne sont bidirectionnels. Les composants se contentent de tirer vers le bas ou de laisser le signal en l'air. Il faut donc une résistance pour rappeler le signal au niveau haut pour signifier niveau haut.
Cela est pour éviter que par suite d'une erreur 1 composant tire le signal en bas et qu'un autre le pousse en haut, résultant en une destruction.

Tu trouves rien dans tes tiroirs ?

d'accord je comprends mieux, donc branchement sur le 5V obligatoire vu que le module RTC est aussi alimenté en 5V et que je n'ai, à première vue, vu aucune résistance sur ce circuit...

en fait je fais au maximum avec du matériel de récup, et j'ai un peu de tout mais pas grand chose entre 2,2 et 10 KOhm...

ce que j'ai de plus rapprochant pour l'instant est 2KOhm, si c'est encore tolérable ça m'arrangerais, mais sinon je commencerais de nouvelles fouilles dans la benne de matériel électrique de la déchetterie :grin:...

2K ?
Parfait
Va'z'y

super, bah je fais ça en rentrant du travail et je vous dirais ce qu'il en est :wink:

au final je n'ai pas eu besoin de le faire, j'ai juste relié les deux moitiés de mon cerveau...

je m'explique, dans mon premier message j'ai mis :

cannard:
[...] prise SDA et SCL du leonardo (apparemment reliées au entrées D2 et D3 [...])

mais là où j'ai fait très fort c'est que j'utilisais D2 (c'est pour ça que mon écran n'affichait pas ce que je voulais, donc je l'ai vu tout de suite), mais aussi et c'est là que c'est plus drôle D3 (qui me servait d'entrée pour un interrupteur...) et je viens seulement de m'en rendre compte...

du coup je confirme les dires de skywodd, à savoir :

skywodd:
[...] De mémoire la librairie Wire (enfin la librairie TWI qui est caché derrière Wire) active les résistances de pull-up intégré à l'arduino. [...]

et là ça fonctionne sans problème (même si ce n'est peut être pas optimum), du coup je vais rester comme ça (j'aime la facilité :grin:)

en tout cas merci à tous pour vos réponses :wink:

P.S : la morale de l'histoire serait peut-être : ne pas confondre un leonardo et un UNO, qui bien que paraissant identiques pour un novice comme moi induisent un câblage différent...

d'ailleurs, quid des shields communiquant en I2C avec un leonardo, ça doit être un sacré bazar du coup ?

cannard:
P.S : la morale de l'histoire serait peut-être : ne pas confondre un leonardo et un UNO, qui bien que paraissant identiques pour un novice comme moi induisent un câblage différent...

Bonne vision des choses effectivement :wink:

cannard:
d'ailleurs, quid des shields communiquant en I2C avec un leonardo, ça doit être un sacré bazar du coup ?

Exact, c'est même plus qu'un "sacré bazar", c'est une incompatibilité quasi totale avec la plupart des shields.

Comme le dirai maitre yoda :
"Mon coup de gueule en milieu d'article tu liras" :wink: