Utilisation des entrées A4 et A5

Bonjour à tous.

Je vous expose mon problème, en espérant qu'il n'ait pas déjà été traité.

J'ai besoin d'utiliser 6 E/S analogiques, je suis donc obligé d'utiliser les entrées de A0 à A5 sur me carte arduino Uno. Je récupère 6 capteurs de ligne.

Le programme ne fonctionne pas, et en essayant d'isoler le problème, je me suis aperçu que les entrées A4 et A5 fonctionnent en parallèle.

Je m'explique : j'ai branché un potentiomètre sur A4, et j'ai bricolé un petit programme juste pour récupérer l'entrée A4 et afficher l'état des entrées A4 et A5. Et là surprise, A5 a quasiment la même valeur que A4 (à 10 près) alors qu'il n'y a rien de branché dessus. Même chose en branchant un capteur de suivi de ligne.

En cherchant un peu, il semblerait que ce soit un conflit avec le bus I2C.

Est ce que quelqu'un pourrait me donner un peu plus d'infos sur le I2C? Et est ce qu'il est possible d'utiliser A4 et A5 en shuntant le I2C?

Merci à tous et bonne journée.

Lionnfab

Je m'explique : j'ai branché un potentiomètre sur A4, et j'ai bricolé un petit programme juste pour récupérer l'entrée A4 et afficher l'état des entrées A4 et A5. Et là surprise, A5 a quasiment la même valeur que A4 (à 10 près) alors qu'il n'y a rien de branché dessus.

Rien à voir avec l'I2C.
Si tu laisses l'entrée A5 en l'air c'est normal. L'impédance est juste énorme.
Relie A5 à un potentiel connu (GND par exemple).

Merci pour ta réponse, je n'avais pas pensé à ça.

Je viens donc de mettre des résistances de tirage à chaque entrée analogiques, et pour l'essai, j'utilise deux potentiomètres.

Première étape, je ne branche pas les potentiomètres, et je scanne les entrées A0-5. Elles sont toutes à 0 sauf A5 qui affiche 18. :o :o

Ensuite je branche un ou deux potentiomètres à différentes entrées pour voir leurs comportements. Elles réagisse de manière indépendante, sauf quand j'en branche un sur A4, la sortie A5 semble couplée car elle réagit quasiment comme sa voisine.

Et quand je branche sur A5, il ne passe rien.

Est ce que le problème viendrait de la carte qui aurait un souci??

Tout dépend des valeurs de potentiomètres que tu utilises.

Lis ceci : RitonDuino: ARDUINO : les performances de l'ADC
A partir de : 2.1. La théorie

Merci pour le lien.

Si j'ai bien compris le lien, si j'ai une grosse impédance (résistance ??) sur mes potentiomètres, le temps de stabiliser la valeur, peut influencer la valeur qui sera affichée, et donner une valeur qui sera plus faible que la valeur réelle.

Je viens de mesurer mes potentiomètres, j'en ai un qui fait 10 kOhm et l'autre 90 kOhm. J'en déduit que le temps de changement est négligeable. et puis dans mon programme, j'affiche la valeur des entrées A, et je boucle. Je ne fais que çà.

Je pense donc que le problème ne vient pas de là.

Tu es certain qu'il n'y a rien d'autre connecté sur A4 et A5?

Je viens de vérifier. J'ai un cablage très simple avec uniquement des résistances de tirage et deux potentiomètres. Et je viens de tester si les fils qui arrivent sur les entrées A4 et A5 se touchent, mais il n'y a pas de contact.

Donc à priori, je dirais qu'il n'y a rien d'autre de branché.

Impédance = généralisation de la notion de résistance aux signaux non continu.

Signal continu ne veut pas dire signal toujours positif mais signal qui a toujours la même valeur. Il peut très bien être négatif, rien ne l'empêche.

Un signal numérique qui peut prendre un niveau haut et un niveau bas N'EST PAS un signal continu.

Impédance :
Prend en compte les résistances, les inductances et les condensateurs.
Il n'y a pas oposition avec la notion de "résistance" en signal continu parce que l'effet inductif est nul en continu et pour les condensateurs une fois qu'ils se sont chargés ils n'interviennent plus en continu.
C'est donc bien une généralisation.

Dans ton cas il est fort probable que tu ai un triple effet :

  • forte valeur résistive de l'impédance d'entrée du microcontrôleur (plusieurs megohms)
  • capacité parasite en entrée de microcontrôleur : il y en a toujours, elle est plus ou moins élevée selon le composant, elle dépens aussi du câblage.
  • fils de liaisons probablement long et un fil long est inductif

Il serait constructif que tu décrives précisément ton montage et les longueurs de câblage.

Merci pour l'explication sur l'impédance, c'est très clair.

Pour mon montage, j'utilise forcément une carte arduino, et je fais mon câblage par l'intermédiaire d'une plaque type labdec. J'utilise également 6 résistances de 10kOhm, deux potentiomètres (10 kOhm et 90 kOhm) pour simuler une ou deux entrées variables, et des fils de longueurs maxi 12 cm.

J'espère que ça correspond à ta demande.

Ça vient peut être du matériel que j'utilise pour le câblage, mais ce que je ne comprends pas, c'est quand j'utilise 1 ou 2 potars sur les 4 E/S A0 à A3, tout fonctionne parfaitement. Dès que je vais sur A4 ou A5, ça déconne.

Avec 90KΩ tu devrais obtenir 1% d'erreur, pas plus.
Je n'ai jamais utilisé A4 A5 comme entrée analogique, mais à priori je ne vois pas pourquoi elles réagiraient différemment.

Est ce que le problème viendrait de la carte qui aurait un souci??

Est-il possible de changer de carte ?

lionnfab:
Pour mon montage, j'utilise forcément une carte arduino, et je fais mon câblage par l'intermédiaire d'une plaque type labdec. J'utilise également 6 résistances de 10kOhm, deux potentiomètres (10 kOhm et 90 kOhm) pour simuler une ou deux entrées variables, et des fils de longueurs maxi 12 cm.

Bonjour,

A quoi servent les 6 résistances? Les deux potentiomètres suffisent.

Tu as essayé de lire 2 valeurs successives sur chaque port analogique, en ne retenant que la deuxième valeur ?

analogRead(A4);
int v_a4=analogRead(A4);
Serial.print("A4="); Serial.println(v_a4);

analogRead(A5);
int v_a5=analogRead(A5);
Serial.print("A5="); Serial.println(v_a5);

Je viens de faire un essai avec deux potentiomètres de 10KΩ sur A4 et A5.

#define VREF    5.257 // tension 5V réelle

void setup()
{
  Serial.begin(115200);
}

void loop()
{
  uint16_t v4 = analogRead(4);
  uint16_t v5 = analogRead(5);
  Serial.print("A4="); Serial.print(v4); Serial.print(" "); Serial.println(VREF / 1023 * v4);
  Serial.print("A5="); Serial.print(v5); Serial.print(" "); Serial.println(VREF / 1023 * v5);
  delay(2000);
}

Sortie :
A4=51 0.26
A5=859 4.41
A4=51 0.26
A5=858 4.41
A4=52 0.27
A5=858 4.41

Le résultat est parfaitement en accord avec ce qu'affiche le multimètre.
Aucun besoin de double lecture car j'utilise des potentiomètres de 10KΩ.

La double lecture est obligatoire quand les conversions analogiques digitales sont activées et que l'on modifie quelque chose dans le circuit (changement d'entrée ou de de tension de référence sont 2 exemples parmi d'autres).

La gestion arduino n'est pas (ou très très mal) documentée, toutefois les fonctions arduino étant ceinture + bretelles, il "semble que" le convertisseur A/N soit activé seulement par l'appel à analogRead et désactivé à la fin de son l'exécution.
Si c'est bien le cas la double lecture serait inutile, seul un examen approfondi des fonctions analogRead() et digitalRead() peut apporter une réponse claire.
Dans le doute et pour le temps que cela prend je la joue aussi "ceinture + bretelles" et je fais une double première lecture.

Si c'est bien le cas la double lecture serait inutile, seul un examen approfondi des fonctions analogRead() et digitalRead() peut apporter une réponse claire.

Oui, si l'impédance de la source à mesurer est faible < 100KΩ.

J'ai utilisé la REF 5V (après l'avoir mesurée) et mon multimètre 40000 points affiche les mêmes valeurs que celles de l'ADC.

Mais je voulais simplement démontrer l'absence de problème entre A4 et A5.
Le problème de lionnfab est ailleurs (erreur de câblage, carte défectueuse, etc.).

Bonjour

Une petite question , tu n'as rien de branché sur les broches SCL et SDA de l'arduino qui correspondent a A4 et A5 ??

Le problème de lionnfab est ailleurs (erreur de câblage, carte défectueuse, etc.).

Entièrement d'accord.
Et dans des cas pareils si au bout d'un temps raisonnable (dépendant de l'humeur du moment mais ne dépassant pas le délai d'une nuit) je décâble tout et je refais "attentivement" un nouveau câblage.

Lionnfab je te conseille dans faire autant.

Bonjour à tous, et merci pour vos réponses. Je vais essayer de répondre un peu à tout.

A quoi servent les 6 résistances? Les deux potentiomètres suffisent.

J'ai mis 6 résistances pour être sur que les entrées analogiques ne captent pas d'interférences.

Tu as essayé de lire 2 valeurs successives sur chaque port analogique, en ne retenant que la deuxième valeur ?

J'ai un programme qui lit et affiche en continu l'état des deux entrées, donc normalement je n'ai pas de souci de temps de mise à jour.

Une petite question , tu n'as rien de branché sur les broches SCL et SDA de l'arduino qui correspondent a A4 et A5 ??

Je n'ai rien de branché sur les broches SCL et SDA.

Quote

Le problème de lionnfab est ailleurs (erreur de câblage, carte défectueuse, etc.).

Entièrement d'accord.
Et dans des cas pareils si au bout d'un temps raisonnable (dépendant de l'humeur du moment mais ne dépassant pas le délai d'une nuit) je décâble tout et je refais "attentivement" un nouveau câblage.

Lionnfab je te conseille dans faire autant.

Je crois qu'en effet, le problème vient de la carte arduino. J'ai essayé de changer de carte, mais sans plus de résultats (mais la carte n'était pas neuve). Et je n'ai pas d'autre carte pour tester.
Je vais refaire tout le cablage et je vous tiens au courant.

Merci à tous.