SDA et SCLA en input ?

Bonjour à tous

Ayant un DUT en électronique et une licence en informatique je suis en train de m'essayer à l'Arduino et je trouve ca génial !

Pour un de mes projets j'ai acheté un Arduino Mega mais je rencontre un petit problème, les pins 20 et 21 (SDA et SCL) ne semblent pas vouloir se configurer en inputs. Dès que je passe ces pins en input elles se mettent à l'état haut.

Est-ce normal ?

Bonjour,

Qu'est ce que tu appelles elles se mettent à l'état haut? Si ce sont des entrées non reliées elles sont à un potentiel indéterminé.

kamill:
Bonjour,

Qu'est ce que tu appelles elles se mettent à l'état haut? Si ce sont des entrées non reliées elles sont à un potentiel indéterminé.

Y a peut etre du pull-up qui traine ? :grin:

Arf, cette réponse me faire peur ...

Il faut que j'en dise plus de mon projet :
Le but est de créer un testeur de câble "harting" 19 contacts. Donc l'idée c'est que j'ai 19pins reliées à un bout du câble et 19 pins reliées à l'autre bout. J'envois un état haut sur les 19 premières pins une à une et scan à chaque fois toutes les 19 autres pins pour vérifier que j'ai un état haut au bon endroit.

Par soucis de simplicité j'ai osé espéré que ca puisse fonctionner sans résistances de tirage, et ca semble se confirmer sauf pour SDA et SCL ... Je parle d'état haut car je mesure 5V au multimètre. Mais je vais donc essayer d'ajouter des résistance de tirage pour voir si ça résout le problème.

GrosRems:
Arf, cette réponse me faire peur ...

Il faut que j'en dise plus de mon projet :
Le but est de créer un testeur de câble "harting" 19 contacts. Donc l'idée c'est que j'ai 19pins reliées à un bout du câble et 19 pins reliées à l'autre bout. J'envois un état haut sur les 19 premières pins une à une et scan à chaque fois toutes les 19 autres pins pour vérifier que j'ai un état haut au bon endroit.

Par soucis de simplicité j'ai osé espéré que ca puisse fonctionner sans résistances de tirage, et ca semble se confirmer sauf pour SDA et SCL ... Je parle d'état haut car je mesure 5V au multimètre. Mais je vais donc essayer d'ajouter des résistance de tirage pour voir si ça résout le problème.

il me semble que les sorties les pin I²C sont en pullup interne
methode bourrin : inverse tes pins en input en ouput et vice versa

Ca se tient ...
Pour la méthode bourrin ca ne marchera pas non plus parce qu'enfait sur les 2*19pins que j'utilise il n'y a toujours qu'une à la fois qui est en OUTPUT pour que les autres "outs" soient en haute impédance. Sans cette haute impédance je perd en précision de diagnostique.

Je crois effectivement me rappeler que l'I2C est toujours en pullup... Mais du coup on considère que SDA et SCL ne sont pas vraiment utilisables en INPUT ou bien?

Et sinon à votre avis, des résistances de tirage sont nécessaire sur les autres sorties ?

Merci de vos réponses =)

GrosRems:
Ca se tient ...
Pour la méthode bourrin ca ne marchera pas non plus parce qu'enfait sur les 2*19pins que j'utilise il n'y a toujours qu'une à la fois qui est en OUTPUT pour que les autres "outs" soient en haute impédance. Sans cette haute impédance je perd en précision de diagnostique.

Je crois effectivement me rappeler que l'I2C est toujours en pullup... Mais du coup on considère que SDA et SCL ne sont pas vraiment utilisables en INPUT ou bien?

Et sinon à votre avis, des résistances de tirage sont nécessaire sur les autres sorties ?

Merci de vos réponses =)

si tu mets des pullup sur tous les pins le controle devient une verif par injection d'etat bas , ce n'est qu'une convention logique.

il y a eu un projet de testeur de cable ici

il me semble que les sorties les pin I²C sont en pullup interne

Je ne le pense pas. Elles sont activées par la bibliothèque TwoWire.
Assurément le micro de la UNO/Nano/mini-pro et les cartes associées ne se comportent pas comme cela.
Rien trouvé à ce sujet dans la datasheet du micro de la méga. L'I2C reste une "alternate function" des pins PD0 et PD1. Donc tant que l'I2C n'a pas été lancée ces E/S restent des E/S numériques tout ce qu'il y a de classique.
Rien trouvé à ce sujet sur le schéma électrique de la carte Méga.

Qu'elle est l'origine de la carte ? As tu son schéma électrique ?
N'y aurait-il pas un module I2C qui aurait été oublié et qui serait resté raccordé ?

C'est un Arduino Mega 2460 que j'ai acheté sur Amazon. C'est celui-ci.

Et non pas de module I2C de branché, juste un écran avec boutons pour afficher les erreurs et naviguer dans les menus.

Au final je saute SDA et SCL, ca ma valu de devoir modifier mon programme, je suis obligé de déclarer mon tableau de "outputs" à la main au lieu de faire une bête boucle. Mais ca ne fait qu'une différence idéologique ^^

Puis je vais faire les choses bien, résistance de 100 ohms en série sur chaque sortie pour protéger contre les court-circuit et résistance de 10kohms de tirage à la masse pour chaque entrée.

Je pense qu'avec ca je devrais être bien. Qu'en pensez-vous ?

Euhhh... Ton écran avec bouton, il ne serait pas en i2c par hasard ? Un lien vers cet écran ?

C'est celui-ci

Tu as essayé d'enlever l'écran pour voir si le problème ne vient pas de là ?

Bonsoir
pour simple test de verification
avec le code ci-dessous
j'ai bien du "5V" sur 20 et 21 d'une mega
0V si je teste par exemple sur 8 et 9

void setup() {
  // put your setup code here, to run once:
pinMode(20, INPUT);
pinMode(21, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:

}

Vu.
Artouste tu as raison SDA et SCL sont indisponibles en E/S normale mais uniquement de la faute de ces *£$#&§ de chez Arduino.
Dans un coin du schéma électrique, complètement isolé du reste du schéma et bien éloigné de tout liens avec l'I2C ou des pin PD0 et PD1 (20 et 21 arduino) j'ai trouvé ça :

mega_i2c_debile.png
C'est débile !

@GrosRems
Ces résistances ne servent à rien (a part faire ch*er) puisque tous les modules I2C ont déjà les leurs.
Si elle te coince tu peux les exploser à la pince coupante.

68tjs:
Vu.
Artouste tu as raison SDA et SCL sont indisponibles en E/S normale mais uniquement de la faute de ces *£$#&§ de chez Arduino.
Dans un coin du schéma électrique, complètement isolé du reste du schéma et bien éloigné de tout liens avec l'I2C ou des pin PD0 et PD1 (20 et 21 arduino) j'ai trouvé ça :

mega_i2c_debile.png
C'est débile !

+1
chez moi c'est le reseau de R10K qui gere çà

68tjs:
Ces résistances ne servent à rien (a part faire ch*er) puisque tous les modules I2C ont déjà les leurs.

Non, pas forcément. Et du coup, il y a des cas où ces résistances simplifient la vie puisque ça évite de les rajouter.

Si sur les 3 R il y en une indispensable on ne peut plus EXPLOSER le réseau.
Dommage je n'ai pas de Mega mais cela m'aurais fait plaisir.

Qu'elle idée pourrie !

Il y a au moins 10 pins du micro qui ne sont pas utilisées donc perdues.
Au lieu de doubler 20 et 21 avec SDA et SCL ils ne pouvait pas envoyer PD0 et PD1 que sur SCL et SDA et sortir 2 pins inutilisées : tiens au hasard le deuxième accès du comparateur analogique et une interruption supplémentaire.

3Sigma:
Non, pas forcément. Et du coup, il y a des cas où ces résistances simplifient la vie puisque ça évite de les rajouter.

Je suis plutot du meme avis que 68tjs
mais le vrai probleme à mon sens est que tu peux te retrouver avec des resistances en // sans le savoir
et te retrouver avec un montage "instable"

sur une base I²C uno tu peux avoir qq chose qui fonctionnera bien avec des R sur un des dispositifs I²C et mal lorsque tu transposera sur mega à cause de ces R implantées sur le maega.

68tjs:
Si sur les 3 R il y en une indispensable on ne peut plus EXPLOSER le réseau.
Dommage je n'ai pas de Mega mais cela m'aurais fait plaisir.

Non, pas forcément. Et du coup, il y a des cas où ces résistances simplifient la vie puisque ça évite de les rajouter.

Tu connais des modules I2C qui n'ont pas déjà pas les résistances incorporées ?
Pour faciliter un cas d'utilisation qui par hasard pourrait éventuellement se présenter c'est mieux de perdre deux pins sur une carte dont l'intérêt principal est justement le nombre E/S !

Je veux bien imaginer le cas où ces résistances seraient oubliées : cela ne fonctionnerait pas parce que les collecteurs des transistors de sortie ne seraient pas chargés.
Mais ce cas est déjà prévu dans la classe TwoWire qui met en service les résistances internes du micro. 50 k c'est trop élevé pour avoir un signal correct mais le fonctionnement n'est pas bloqué.

Et puis, mais ça c'est plus technique, pour la qualité du signal de commande les résistances doivent être au plus prés de l'utilisation c'est à dire sur le module I2C.
L'I2C ne supporte pas les grandes longueurs de fils, ce n'est pas la peine d'ajouter du stress aux signaux et c'est ce qui est fait partout, sauf chez arduino.