Go Down

Topic: Setup des pins analogiques (Read 141 times) previous topic - next topic

MrFlo666

Bonjour à toutes et tous,

Je capte un signal d'un micro de gutiare que j'amplifie via un AOP (avec les résistances qui vont bien) pour ensuite lire sa valeur via la pin A0. Jusqu'à ce jour, mon montage fonctionnait bien et j'obtenais des valeurs correcte.

J'ai voulu initialiser ma pin (allez savoir pourquoi) et depuis il me lit uniquement une valeur aux alentours de 127.
Le code complet est le suivant, je pense que l'erreur est dans le setup, mais je ne sais pas où... Si vous pouvez m'aider, ce serait top. Merci par avance.

Code: [Select]

void setup() {
  pinMode(A0, INPUT);
  analogWrite(A0, 0);

  Serial.begin(9600);
}

void loop() {
  int val0 = analogRead(A0);

  Serial.print(val0);
  Serial.println(";");
  delay(10);
}

al1fch

Bonsoir

Quote
Code: [Select]
analogWrite(A0, 0);
?? utilité ?

elektrax

n'est-ce pas le pinMode(A0, INPUT); qui met A0 en entrée digitale ?
lorsqu'on utilise analogRead(A0), il ne faut pas déclarer la pin dans le setup
AnalogWrite est pour les pins pwm,
je conçois que çà prete à confusion
les broches analogiques de l'arduino sont des entrées (ou des i/o digitales) mais jamais des sorties analogiques
 
déclarer une entrée et écrire sur une entrée n'est pas tres logique

68tjs

#3
Aug 19, 2019, 08:53 am Last Edit: Aug 19, 2019, 08:55 am by 68tjs
Il peut éventuellement y avoir conflit avec pinMode(x, INPUT) et analogWrite qui est en mode sortie.
Tout dépend du contenu de la partie de code "anticonnerie" des fonctions arduino.
Normalement elles sont bien faites de ce coté et c'est le dernier ordre qui est pris en compte.

Par contre il y a effecivement confusion de ta part : analoWrite() ne s'applique qu'a des pins spéciales : celle qui peuvent être controlées par un Timer. Elles sont souvent appellée "pin PWM" bien qu'elles puissent faire plus que de la PWM et sont souvent repérée par un tilde ˜ .

La PWM est un signal numérique d'amplitude 5V, ce n'est pas un signal analogique tant qu'elle n'a pas subit un traitement par filtrage passe bas.

Il est étonnant que cela ait pu fonctionner dans le passé, tu as probablement changé de pin dans tes modifs.

MrFlo666

Quote
?? utilité ?
"Initialiser" à 0, mais manifestement inutile :)

Quote
déclarer une entrée et écrire sur une entrée n'est pas tres logique
Exact !

Quote
Il est étonnant que cela ait pu fonctionner dans le passé, tu as probablement changé de pin dans tes modifs.
En fait inialement il n'y avait rien d'autre dans le setup() que le Serial.begin(9600)
Je voulais initialiser ma pin pour "faire ça propre", mais ce n'est apparemment pas utile.

Par contre comment remettre ma pin dans un mode par défaut ? J'ai l'impression que pinMode(A0, INPUT); suffit ?

kamill

Bonjour,

Quand on analyse le code de analogWrite() on voit que ça commence par mettre la pin en sortie, même si la pin n'est pas capable de faire du pwm.

La sortie entre donc en conflit avec la tension d'entrée. Il est donc tout à fait normal que la valeur lue soit modifiée. Il est même possible de détruire l'électronique de mesure et/ou la pin de l'arduino.

kamill

Par contre comment remettre ma pin dans un mode par défaut ? J'ai l'impression que pinMode(A0, INPUT); suffit ?
Le mode INPUT est le mode par défaut au reset.
pinMode(A0, INPUT) ne fait donc rien, mais ne perturbe pas pour la suite.

MrFlo666

ok merci pour les réponses !

Go Up