Les pins analogiques de l'Arduino sont-ils liés ?

Bonjour,

Je viens ici vous demander quelques conseils,
car j'ai un problème avec mon Arduino Uno,
plus particulièrement avec les pins analogiques.

Je vous explique:

Je souhaite savoir si la tension qui rentre dans un de mes pins de mon Arduino est de 5 volts.
Pour cela, j'utilise les pins analogiques, qui me renvoient une valeur entre
0 et 1023 (de 0v à 5v).

Jusqu'à là, pas de problème, quand je branche un fil du pin 5v au pin A0 de l'Arduino, le
pin A0 me renvoie la valeur 1023 dans mon moniteur série. PARFAIT me direz-vous ?

Et bien non, le problème, c'est que j'ai l'impression que tous les pins analogiques de mon Arduino sont liés.

Je m'explique : quand je branche le 5v sur le pin A0, ce dernier me renvoie bien la
valeur 1023, mais tous les autres pins (A1, A2, A3, A4, A5), me renvoie aussi cette valeur
(du moins une valeur qui oscille entre 1000 et 1023).

Est-ce normal que tous les pins analogiques réagissent entre eux comme ça ?
Ou c'est peut-être moi qui est mal fait quelque chose.

Normalement, seul le pin A0 devrait me retourner une valeur entre 1000 et 1023, et tous les
autres pins devraient me retourner une valeur entre 0 et 200.

Mais il me renvoie tous une valeur entre 1000 et 1023.

Voici le code que j'utilise :

const int analogPin0 = A0;
const int analogPin1 = A1;

int valueAP0 = 0;
int valueAP1 = 0;

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

void loop() {

  valueAP0 = analogRead(analogPin0); // +5 volts 
  valueAP1 = analogRead(analogPin1);

  Serial.println(valueAP1);

  delay(2);
}

Si il vous faut plus d'infos, n'hésiter pas.
Merci d'avance pour le temps que vous m'accorderez.

Cdt. Dember

Bonjour UnMecRandom

avez vous branché quelque chose sur les pins (A1, A2, A3, A4, A5)?

Cordialement,
bidouilleelec

Bonjour,

Non, je n'ai rien branché sur les autres pins

UnMecRandom:
Bonjour,

Non, je n'ai rien branché sur les autres pins

C'est bien le problème, les pins sont "en l'air" du coup c'est de vrais antennes et donc très sensible aux perturbations exterieures

Branche les autres sur GND, tu verra la différence.

Et pour répondre: non elles ne sont pas connectées entre elles

Normalement, seul le pin A0 devrait me retourner une valeur entre 1000 et 1023, et tous les
autres pins devraient me retourner une valeur entre 0 et 200.

Oui, si elles ne sont pas en l'air. Ce sont des entrées de relativement haute impédance.
D'autre part, lorsque l'on change de canal ADC il est préférable de faire une lecture pour rien.

  analogRead(analogPin0);
  valueAP0 = analogRead(analogPin0); // +5 volts 
  analogRead(analogPin1);
  valueAP1 = analogRead(analogPin1);

@+

Bonjour hbachetti

hbachetti:
D'autre part, lorsque l'on change de canal ADC il est préférable de faire une lecture pour rien.

Pouvez vous détailler le phénomène et ses raisons?

Cordialement,
bidouilleelec

La carte UNO par exemple dispose des broches A0 à A5 qui ne sont pas a la base analogique.

Il y a derrière un commutateur qui change de position pour diriger la broche choisie vers le convertisseur analogique - numérique.

Le fait de commuter provoque des fluctuation et donc influe sur la mesure.

Le fait de faire une première mesure permet placer le commutateur sur la broche voulue et lance une mesure qui est soumise a cette fluctuation, la mesure est faussée.

Cependant, à la 2eme mesure, le commutateur n'as pas besoin de manœuvrer puisqu'il est deja en place, le phénomène est élimine et la mesure bien meilleure

En changeant de canal, l'entrée de l'ADC reste "chargée" avec la tension précédente. Ceci est dû à la haute impédance de l'entrée et à sa capacité.
Fais une recherche sur le forum. ICI par exemple.

@+

Merci à tous pour vos réponses.

Sujet résolu pour ma part.

Les différentes raisons sont expliquées dans le chapitre sur l'ADC de la datasheet du micro.

Il n'y a qu'un seul convertisseur. Les entrées "dites" analogique sont 6 entrées numériques qui sont aussi raccordées à un multiplexeur analogique dont la sortie est reliée à l'ADC.
Important à retenir : On peut les utiliser aussi bien en numérique qu'en analogique.

Ce qu'il faut retenir de la lecture de la datasheet c'est que quoi que tu modifies dans l'ADC ou dans le multiplexeur (changement d'entrée à mesurer par exemple) il faut rejeter systématiquement la première mesure.

Atmel est très clair sur ce point.

UnMecRandom:
Merci à tous pour vos réponses.

Sujet résolu pour ma part.

Il serait agréable de connaître ce qui vous incite à juger le problème résolu.

Cordialement,
bidouilleelec

Merci pour toutes vos réponses,

Le sujet est, pour ma part résolu.

J'ai effectivement déclaré dans mon code tous les pins analogiques et
branché les pins que je n'utilise pas sur le GND.

Pour éviter les interférences, j'ai aussi laissé un pin vide entre chaque branchement.

Tout cela à résolu mon problème.

Bonjour 68tjs et hbachetti

Merci de vos réponses.

68tjs:
Ce qu'il faut retenir de la lecture de la datasheet c'est que quoi que tu modifies dans l'ADC ou dans le multiplexeur (changement d'entrée à mesurer par exemple) il faut rejeter systématiquement la première mesure.

Atmel est très clair sur ce point.

Tout ce que j'ai vu dans le datasheet c'est :

When the bandgap reference voltage is used as input to the ADC, it will take a certain time for the voltage to stabilize. If not stabilized, the first value read after the first conversion may be wrong.

Il est alors possible d'attendre la stabilisation?

Cordialement,
bidouilleelec

Il y est dit aussi quelque chose comme (je n'ai pas la datasheet sous la main) que quand tu lance une mesure sur une nouvelle entrée il est possible que l'adc soit déjà déjà en train d'en faire une sur une autre entrée. Cette mesure en cours sera fausse puisque répartie sur les deux entrées : le mux et l'adc sont indépendant l'un de l'autre.

Certes la première et la seconde mesure seront souvent identiques mais c'est largement plus simple de rejeter la première mesure comme le demande Atmel plutôt que vérifier si tous les critères sont remplis pour valider la mesure.

Autre point au lancement de l'ADC sa toute première mesure est plus longue que les suivantes.

Bonjour 68tjs,

68tjs:
Il y est dit aussi quelque chose comme (je n'ai pas la datasheet sous la main) que quand tu lance une mesure sur une nouvelle entrée il est possible que l'adc soit déjà déjà en train d'en faire une sur une autre entrée. Cette mesure en cours sera fausse puisque répartie sur les deux entrées : le mux et l'adc sont indépendant l'un de l'autre.

Effectivement, il est possible de sélectionner un autre canal pendant une conversion.
C'est l'objet du §28.5 "Changing Channel or Reference Selection".

Cependant, il me semble que ce même paragraphe explique comment gérer ce cas.

J'ai écrit un sketch qui effectue en boucle une seule lecture successivement sur toutes entrées Ai.
Je ne constate pas de mesure hérétique.

Cordialement,
bidouilleelec