Go Down

Topic: Utilisation des entrées A4 et A5 (Read 387 times) previous topic - next topic

lionnfab

Nov 18, 2019, 01:57 pm Last Edit: Nov 18, 2019, 02:01 pm by lionnfab
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

hbachetti

Quote
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).
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

lionnfab

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??

hbachetti

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

Lis ceci : https://riton-duino.blogspot.com/2018/11/arduino-les-performances-de-ladc.html
A partir de : 2.1. La théorie
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

lionnfab

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à.

fdufnews

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

lionnfab

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é.

68tjs

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.

lionnfab

#8
Nov 19, 2019, 03:38 pm Last Edit: Nov 19, 2019, 03:40 pm by lionnfab
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.

hbachetti

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.

Quote
Est ce que le problème viendrait de la carte qui aurait un souci??
Est-il possible de changer de carte ?
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

kamill

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.

Alain46

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

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);
Un programme qui se compile sans erreur n'est pas forcément un programme qui fonctionne.

hbachetti

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

Code: [Select]

#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Ω.
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

68tjs

#13
Nov 20, 2019, 02:26 pm Last Edit: Nov 20, 2019, 02:30 pm by 68tjs
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.

hbachetti

Quote
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.).
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Go Up