Bug fonction analogRead()

Bonjour à tous,

Je suis débutant en arduino en realisant un programme qui entre autre permet de regler un generateur de signaux avec deux potentiometre (100K et 47K) avec la fonction analogRead,
je me suis aperçu que la fonction renvoyait toujours la la tension du pin de plus haute valeur et ce quel que soit la valeur du pin passé en parametre dans la fonction et pour toute la durée d'execution du programme.

Exemple :

analogRead(A11);
analogWrite(DAC0,int(analogRead(A9)));
analogWrite(DAC1,int(analogRead(A8)));

dans les deux fonctions analogWrite, analogRead() renvoie analogRead(A11)

je n'ai pas trouvé de réponse à ce probleme ni sur le forum arduino ni sur google
J'ai essayé les technique de mettre un delay entre chaque appel mais sans resultat

Carte Arduino Due
Programme 1.5.5-r2, windows 8.1

bonsoir
Tu peux nous faire un schéma de cablage de ton potar ?

merci
A+

Le schéma est tout simple,
J'ai fait un autre test pour bien saisir le probleme
A11-->potar
A8,A9 rien

void setup() {
      analogReadResolution(12); 
      analogWriteResolution(12);
      analogRead(A11);
}

void loop() {
    analogWrite(DAC0,int(analogRead(A9)));
    analogWrite(DAC1,int(analogRead(A8)));

  }

Et la, je commande les deux sortie analogiques avec mon potar.

potar.jpg

Salut
c'est pas plutôt ça ?

void setup() {
      analogReadResolution(12); 
      analogWriteResolution(12);
      int analogPin = A11;
}

void loop() {
    analogWrite(DAC0,int(analogRead(analogPin)));
    analogWrite(DAC1,int(analogRead(analogPin)));

  }

A+

Non je ne me suis pas trompé, la ligne analogRead(A9) renvoie la valeur de analogRead(A11) si cet appel a déja été fait une fois avant dans le programme. C'est très très bizzare ...

Mettre une résistance de 10 k entre A8 et la masse.
une résistance de 10 k entre A9 et la masse.
Et tu fais un essai pour voir ce que cela dit !

antoineh38:
Le schéma est tout simple,
J'ai fait un autre test pour bien saisir le probleme
A11-->potar
A8,A9 rien

Oui et bien là tu découvres que rien n'existe pas en électronique.

Lorsque l'aiguillage est sur A11 tu charges la capa de l'échantillonneur de l'ADC à la tension présente sur A11
Lorsque l'aiguillage est sur A8 ou A9 comme il n'y a pas de potentiel appliqué, la capa conserve sa charge. Elle devrait décroître dans le temps.

+1

Les pin A8 et A9 sont alors dits "flottant". Pour résoudre cette problématique il faut alors utiliser des résistance de pull-down (comme proposé par Chabot) ou de pull-up (pareil mais au 3.3V)

J'ai essayé avec deux potar sur A10 et A11 donc en permanence deux tension différentes, pas de pin flottant sans resoudre le probleme
Les resistance de pull-up/down sont elles utile dans ce cas là ?

si je fait :

void setup() {
      analogReadResolution(12); 
      analogWriteResolution(12);
   
}

void loop() {
    analogWrite(DAC0,int(analogRead(A11)));
    analogWrite(DAC1,int(analogRead(A10)));

  }

j'ai la même tension sur les deux sorties analogiques, commandée par A11.

antoineh38:
J'ai essayé avec deux potar sur A10 et A11 donc en permanence deux tension différentes, pas de pin flottant sans resoudre le probleme
Les resistance de pull-up/down sont elles utile dans ce cas là ?

j'ai la même tension sur les deux sorties analogiques, commandée par A11.

tes 2 potentiometres reliés aux extremités à VCC GND et curseurs sur A10 pour l'un , A11 pour l'autre ?
tu obtient toujours la meme valeur ?

cette valeur sur les 2 canaux (A10 A11) ne fluctue que par action du curseur potentiometre cablé sur A11 ?
aucune influence de celui cablé sur A10 ?

c'est une carte officielle ou un clone asia ?

ça donne quoi à l'ohmetre carte completement deconnectée entre A10 et A11 ?

a l'oeil : les soudures vers A10 A11 semblent "belles" ?

C'est exactement ça !
La carte est officielle et les soudures semblent correctes.
J'ai essayé avec les entrées A8/A9 avec le même probleme.
Entre A10 et A11 je mesure environ 1 M?.

antoineh38:
C'est exactement ça !
La carte est officielle et les soudures semblent correctes.
J'ai essayé avec les entrées A8/A9 avec le même probleme.
Entre A10 et A11 je mesure environ 1 M?.

ok
ça donne quoi avec ce test ?

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

void loop() {
  
  analogReadResolution(12);
  Serial.print(", 12-bit : A10 ");
  Serial.print(analogRead(A10));

 
  analogReadResolution(12);
  Serial.print(", 12-bit : A11 ");
  Serial.print(analogRead(A11));

  
  delay(100);
}

Ça ne marche pas mieux...
Extrait de ce que j'obtient dans le moniteur série en ne modifiant qu'un seul potar :

, 12-bit : A8 3, 12-bit : A9 1
, 12-bit : A8 2, 12-bit : A9 0
, 12-bit : A8 1, 12-bit : A9 1
, 12-bit : A8 1, 12-bit : A9 1
, 12-bit : A8 3, 12-bit : A9 2
, 12-bit : A8 5, 12-bit : A9 6
, 12-bit : A8 23, 12-bit : A9 719
, 12-bit : A8 898, 12-bit : A9 2097
, 12-bit : A8 2196, 12-bit : A9 3053
, 12-bit : A8 3105, 12-bit : A9 3637
, 12-bit : A8 3747, 12-bit : A9 4042
, 12-bit : A8 4058, 12-bit : A9 4095

Du coup je pense que je vais mettre un commutateur.

antoineh38:
Ça ne marche pas mieux...
Extrait de ce que j'obtient dans le moniteur série en ne modifiant qu'un seul potar :

, 12-bit : A8 3, 12-bit : A9 1

, 12-bit : A8 2, 12-bit : A9 0
, 12-bit : A8 1, 12-bit : A9 1
, 12-bit : A8 1, 12-bit : A9 1
, 12-bit : A8 3, 12-bit : A9 2
, 12-bit : A8 5, 12-bit : A9 6
, 12-bit : A8 23, 12-bit : A9 719
, 12-bit : A8 898, 12-bit : A9 2097
, 12-bit : A8 2196, 12-bit : A9 3053
, 12-bit : A8 3105, 12-bit : A9 3637
, 12-bit : A8 3747, 12-bit : A9 4042
, 12-bit : A8 4058, 12-bit : A9 4095




Du coup je pense que je vais mettre un commutateur.

tente encore qq manips avec le code de test

  • inverse les 2 potentiometre
  • utlise un seul pot et mets alternativement une des voies à GND
  • idem en mettant alternativement une des voies à VCC

C'est très bizarre ... Il n'y a que sur A9 et A8 que ça le fait ou c'est la même chose quelles que soit les entrées ?

C'est ce que je dit : c'est très bizzare.
J'ai testé les autres pin avec des resistances sur gnd/3,3v et ça le fait à chaque fois
A7:gnd
A6:gnd
A5:3,3v
12-bit : A7 4095, 12-bit : A6 4095, 12-bit : A5 4095

antoineh38:
C'est ce que je dit : c'est très bizzare.
J'ai testé les autres pin avec des resistances sur gnd/3,3v et ça le fait à chaque fois
A7:gnd
A6:gnd
A5:3,3v
12-bit : A7 4095, 12-bit : A6 4095, 12-bit : A5 4095

pourquoi des resistances ?

fais donc déjà des tests en appliquant (sans potentiometres, ni resistances) VCC et GND directement aux entrées Ax
fais déjà un test en mettant une voie Ax à GND et l'autre à VCC
et ensuite inverse la situation