🔌 Expansion i2c non fonctionnelle

Bonjour, allez-vous bien ?

Il y a quelque temps j'ai acheté la carte Seesaw d'Adafruit qui est une expansion i2c, en gros elle me permet de contrôler plus d'entrées/sorties que sur une Arduino Uno classique par exemple grâce au bus i2c.
Elle ressemble à ça :


J'y ai branché quelque que composants basiques du style buzzer ou leds.

Malheureusement, en mettant le programme de "Balayage i2c" (un programme qui regarde si un ou plusieurs modules i2c sont connectés au microcontroleur, trouvable facilement sur internet) la fonction WIRE.endTransmission() ne se termine pas, enfin c'est bizzarre. En gros le code s'arrete là. Demandez un screen pour plus de détails.
J'ai vérifier avec un programme de test fait par Adafruit qui permet de faire clignoter une led mais pareil, la fonction expansion.begin() ne se finit pas.

Je suis un peu inquiet concernant ça car mon projet repose en partie sur ces leds et ces buzzers.

J'espère que j'ai été clair (si il vous manque un renseignement demandez le),
Merci d'avance,
Cordialement,
Chataigne

PS : Cliquez ici pour avoir le wiki officiel d'Adafruit.

Je me pose une question : n'as tu pas mélangé des composants alimentés sous 5 V avec d'autres alimenté sous 3,3 V ?

La carte Seesaw est alimentée en 5 V mais le microcontrôleur fonctionne en 3,3 V

Since the ATSAMD09 uses 3.3V, we have included an on-board voltage regulator that will take 3-5VDC and safely convert it down. You can power from 3.3V to 5V

Je ne comprends pas trop ce que vous vulez dire.
En tout cas, la carte Seesaw est alimentée en 5v.
Ci-joint le brochage officiel d'Adafruit.

Je dis que le microcontrôleur de la carte seesaw me parait être un microcontrôleur qui ne supporte que des signaux qui ne dépassent pas 3,3 V.
J'ajoute que si tu lui appliques des signaux d'amplitude 5 V, il ne va pas aimer.
Si la carte est alimentée en 5V c'est parce que le 5 V est presque partout disponible, mais il y a un régulateur 3,3 V sur la carte et c'est lui qui alimente le microcontrôleur.

Il y a actuellement plusieurs gammes de tensions d'alimentatation et d'amplitude de signaux.

  1. La gamme "historique" 5 V, très faussement appelé TTL.
    Gamme toujours disponible, mais lentement en voie de disparition.

  2. la gamme 3,3 V. C'est actuellement la gamme qui devient prépondérante.

  3. Gammes qui commencent à pointer leur nez : 2,5 V et 1,8 V → il se passera probablement plusieurs années (>10 ?) avant qu'elles ne soient accessibles au marché "amateur", mais elles sont bien déjà là.

L'abaissement des tensions d'alimentation est la conséquence des progrès technologiques dans la finesse de gravures des circuits intégrés.
Plus on grave fin, moins on consomme et plus on peut travailler à des fréquences élevées.
L'évolution vers les tensions d'alimentation et des amplitudes de signaux toujours plus bas est inévitable.

Donc ma question est : as-tu mélangé des circuits qui délivrent des signaux 5 V d'amplitude avec des circuits qui n'acceptent qu'une amplitude de 3,3 V.

A quelle CPU la carte Seesaw est-elle branchée?

D'accord, je pourrais essayer avec un convertisseur de signaux logiques, mais avez-vous vu ci-dessus l'image fournit pas Adafruit ? Les broches 22 et 23 sont diretement connectées aux broches SDA et SCL de l'Arduino.

D'après moi non. J'ai fais ce qui est dit sur le site d'Adafruit.

Cet-Ă -dire ? A une Arduino UNO si c'est votre question.

Justement, la UNO est en interface 5V et la Seesaw en interface 3.3V

Oui, mais la carte, sur le montage en question, est une Adafruit Metro M0 Express laquelle utilise un processeur ATSAMD21G18 qui est en interface 3.3V.
Donc il n'y a pas d'incompatibilité de niveau.

Notez quand mĂŞme que les broches SDA et SCL sont compatibles 5V : Pinouts | Adafruit seesaw | Adafruit Learning System
Je cite :

  • 23 / SCL - this is the I2C clock pin, connect to your microcontrollers I2C clock line. There is a 10K pullup on this pin to 3.3V. I2C is 'open drain' which means as long as you don't add an extra pullup you can use with 5V logic devices.
  • 22 / SDA - this is the I2C data pin, connect to your microcontrollers I2C data line. There is a 10K pullup on this pin to 3.3V. I2C is 'open drain' which means as long as you don't add an extra pullup you can use with 5V logic devices.

Ah oui je n'y avais pas pensé. Je vais voir pour le convertisseur de niveaux logiques si ça résoud les problêmes.

Mais donc ? Que faire ?

Ceci n'est pas une compatibilité 5V. C'est juste que comme la sortie est en drain ouvert elle n'impose pas de potentiel hormis celui imposé par les pullups présents sur la Seesaw qui sont polarisés à 3.3V. D'ou la remarque qui dit de ne pas mettre de pullups externe (tirés à 5V).

Donc effectivement cela devrait fonctionner avec la UNO, tant que l'on ne configure pas ces 2 broches en sortie.

Bien vérifier le câblage de la breadboard. Celles-ci ne sont pas exemptes de mauvais contacts.

Fonctionnait-il à l'époque ou est-il resté dans un placard ?

Quelques suggestions :

  • essayer en n'utilisant que des programmes dont on sait qu'ils fonctionnent avec ce circuit
  • essayer avec un autre Arduino, Ă©ventuellement en 3.3V
  • essayer avec d'autres pĂ©riphĂ©riques I²C pour "vĂ©rifier le bus"
  • essayer avec une autre carte Seesaw ($5 + port...)

Ça c'est pour le composant de la seesaw.

Il ne faut pas oublier ce que les bibliothèques font de leur côté et notamment la bibliothèque dîte "Wire". Le monde Arduino est pire que Dallas !

Précision mineure mais quand même :
La classe de la bibliothèque ne s'appelle pas Wire mais Two-Wire.
Wire n'est qu'un objet de classe Two-Wire instancié dans la bibliothèque.
Ça commence dans le flou !

Ensuite, cela dépend de la version de la bibliothèque Two-wire → il y a une version propre à chaque type de microcontrôleur.

Au moins pour les microcontrôleurs avr la bibliothèque active d'office les pull-up au 5 V des sorties SDA et SCL. Donc gros problème potentiel. Grosse vérif à faire.

Qu'a choisi Arduino pour les ARM SAMD ?
Qu'a choist ST pour ses ARM STM32 ?
Qu'a choisi Espressif pour les ESP32 ?

Ce n'est spécifié nulle part, il faut fouiller dans les fichiers des bibliothèques.
La solution que j'ai choisi est de jouer la sécurité et de tout uniformiser en alimentation 3,3 V.

Et aussi de vérifier le schéma électrique des modules afin de vérifier qu'il n'y a pas déjà de translateur de niveaux.

Dernièrement j'ai approvisionné des capteurs sur Ali express.
Capteur avec des circuits intégrés 3,3 V, donc je prends un ESP32 pour les tester.

Aucun capteur ne fonctionnait.
Je cherche, je trouve que c'étaient des clones d'Adafruit.
Je trouve le schéma Adafruit et je vois : un régulateur 3,3 V et une translation de niveaux sur SDA et SCL 5 V→ 3,3 V.
Je sors une nano 5 V → ils fonctionnent parfaitement.

Sur un autre capteur, je trouve des clones Adafruit et des clones SparkFun.
Chat échaudé, craignant l'eau froide, je scrute les photos et je cherche les schémas électriques avant de passer commande :

  • Adafruit mĂŞme conner*e, rĂ©gul 3,3 V et translateur de niveau sur SDA et SCL.
  • Sparkfun : Ok tout en 3,3 V.

Euh je l'ai acheté il y a deux semaines et je l'avais pas testé avant.

J'ai déjà quasiment tout fait.

Donc ce que je viens de comprendre c'est que lĂ  il faut essayer en 3v3 ?
Et pour info j'ai une Arduino r3.
En tout cas merci pour cette explication.

Je n'ai pas dit ça.
J'ai dit que pour ne pas se prendre la tĂŞte, c'est plus simple de choisir des composants qui fonctionnent sous la mĂŞme tension.

Tu dis que tu as "Une arduino R3"
C'est pas comme les voitures une Renault R8
Arduino c'est le nom de la marque, pas le nom du modèle
R3 c'est la version 3 soit d'une carte Arduino UNO, soit d'une carte Arduino Mega.

Donc, tu as soit une UNO R3, soit une Mega R3.
Les deux carte utilisent chacune un microcontrĂ´leur de marque Microchip (ce n'est pas le mĂŞme dans les deux cartes), mais qui dans les deux cartes fonctionne sous 5 V.

Si tu veux t'en servir pour commander des composants qui tournent sous 3,3 V, il faut que tu approvisionnes des petits modules pour translater les niveaux.
Genre :

Faire attention de bien prendre un modèle qui est spécifié pour l'I2C.

Dans mon cas j'ai celui lĂ  :
https://learn.sparkfun.com/tutorials/txb0104-level-shifter-hookup-guide

Ce n'est pas certain, il faut trouver écrit dans la datasheet que le CI est compatible avec l'I2C. Je te laisse chercher.

L'I2C utilise des collecteurs ouverts.
C'est-à-dire que l'étage de sortie est un montage émetteur commun dont la résistance entre le collecteur du transistor et le Vcc n'est pas incluse dans les composants. Il faut la placer en extérieur du composant.
Attention : les modules ne sont pas des composants, ils incluent le composant et les résistances sur SDA et SCL.

Si cette résistance est commune à tous les modules I2C connectés sur le bus, l'ensemble fait une fonction OU par câblage.
Cette fonction est indispensable pour l'I2C.

Pour que cela fonctionne, il faut que toutes les résistances que d'aucun nomme "pull-up" soient bien en parallèle.
Il faut donc s'assurer que les circuits intégrés d'adaptation le permettent.
Le montage rudimentaire que je t'ai montré le permet.