Je cherche à comprendre le comportement erratique des analogread sur plusieurs pins.
(de A0 à A3).
Je veux lire 4 potars 10k pour agir sur différentes variables (rien que de très simple a priori).
sortie +5V sur chaque patte droite des potars, gnd sur celle de gauche et Ax sur la centrale.
Sauf que: Les valeurs lues sont - la plupart du temps - toujours à 1023 Faire varier les potars ne donnent 9 fois sur 10 aucun changements de valeur.
J'ai lu que c'est un pb récurrent dès qu'on utilise 2 ports Analogiques et qu'il faudrait faire 2 lectures séparées de qq ms pour laisser le temps à l'Arduino.
Soit, j'ai fais ca sans plus de succès (j'ai pensé que mes potars étaient morts, mais non).
d'ailleurs meme avec seulement A0 branché c'est pareil..
J'ai lu que c'est un pb récurrent dès qu'on utilise 2 ports Analogiques et qu'il faudrait faire 2 lectures séparées de qq ms pour laisser le temps à l'Arduino.
Avec des potentiomètres de 10K : inutile.
Avec des potentiomètres de 100K, je ne dis pas non.
void setup() {
//start serial connection
Serial.begin(9600);
pinMode (A0, INPUT_PULLUP);pinMode (A1, INPUT_PULLUP);pinMode (A2, INPUT_PULLUP);pinMode (A3, INPUT_PULLUP);
pinMode(cmdPin, INPUT); // recevra le signal GO/STOP
pinMode(timeLed, OUTPUT); // à faire clignoter quand fin de cycle timer ou Stop
// pinMode(Out5VPin, OUTPUT); // sortie permanente 5V HIGH pour test
// digitalWrite(Out5VPin, HIGH);
pinMode(DIRControl, OUTPUT); // DIR du driver moteur
pinMode(PWM_drive, OUTPUT); // PWM du driver moteur
// init tout est stoppé
/*digitalWrite(timeLed, LOW);
digitalWrite(timeLed, timeLedState); // led verte éteinte
analogWrite(PWM_drive, PWM_Value);*/
ThiscmdPin = digitalRead(cmdPin);
prevGo = ThiscmdPin; // en principe à LOW au démarrage
Serial.println("cmdPin ");
Serial.println(digitalRead(cmdPin));
Serial.println("------------");
}
Encore et toujours le problème de lecture analogique.
Pourtant la documentation est claire quand on prend la peine de lire la seule qui soit sérieuse : la datasheet du microcontroleur qui n'est ni un arduino ni un Adafruit qui ne font que vendre des cartes, mais un Atmega 328p conçu et fabriqué par Microchip/Atmel.
Que dit la datasheet ?
La datasheet dis que dès que l'on modifie quoique ce soit dans la chaîne de mesureanalogique il faut rejeter la première mesure qui suit.
La chaîne analogique c'est quoi ?
C'est un seul et unique convertisseur analogique digital qui est précédé par un multiplexeur analogique.
Modifier quoi ?
soit changer d'entrée analogique
soit changer la référence de tension
soit le réglage du convertisseur
Pourquoi il faut rejeter ?
Parce qu'au moment du changement une acquisition était probablement en train de se faire et que si, par exemple elle a commencé sur une entrée et qu'elle se termine sur une autre le résultat sera obligatoirement faux.
Le convertisseur analogique digital fonctionne sur le principe de charges de condensateur.
Le réglage fait par l'IDE du convertisseur est ultra conservateur et prudent, c'est ceinture plus bretelles. En particulier la vitesse d’échantillonnage qui est la plus basse que permet le microcontrôleur. Par conséquence la valeur du potentiomètre importe peu dans une grande plage de valeur.
Les résultats aléatoires présentés ne peuvent être que la conséquence d'un mauvais câblage style grands fils formant de grandes boucles pour faire des perchoirs à mouche ou d'un non respect de la consigne de rejet de la première mesure après modification de la chaîne de mesure analogique.
Conseils : pour connecter un potentiomètre il faut 3 fils : masse, alim, curseur.
S'ils sont longs Il faut les torsader ensemble pour éviter de former des boucles qui sont des antennes de réception de tous les bruits ambians.
pour les tests des potars je l'ai fait uniquement sur le port usb de mon pc sans cette alim générale qui sera utilisée en vrai ensuite (j'ai déja un même autre montage opérationnel avec UN seul potar)
c'est si sensible que ca ?? du coup on peut rien fair en Analogique ..
On peut parfaitement lire plusieurs entrées analogiques en tout cas.
Ta photo aide peu. Un schéma serait plus lisible.
Si le problème était dû à la capacité d'entrée, les mesures seraient légèrement fausses, mais pas 1023, certainement pas.
J'ai déjà testé ici avec différentes impédances la mesure sur deux entrées analogiques : arduino-les-performances-de-ladc
Paragraphe 2.2. Impédance source faible
Avec un ponts diviseur 10K + 4.7K la double mesure n'apporte rien, ce qui est normal étant donné que la constante RC formée par l'impédance de la source + capacité d'entrée est faible.
As-tu vérifié la tension réelle sur les pins A0 à A3 ?
Vous êtes bien sûr ? sur la photo on a vraiment l'impression que le "trou" sur la breadboard en face de Vin est vide et que vous êtes sur le trou de Aref... peut-être un effet d'optique
Résultats avec mesure simple :
Voltage A0: 2.26
Voltage A1: 1.04
Voltage A0: 2.26
Voltage A1: 1.05
Voltage A0: 2.26
Voltage A1: 1.04
Résultats avec double mesure :
Voltage A0: 2.26
Voltage A1: 1.04
Voltage A0: 2.26
Voltage A1: 1.05
Voltage A0: 2.26
Voltage A1: 1.04
Je suis pratiquement certain que la masse de tes potards n'est pas reliée au GND de la carte.
Résultats avec mesure simple :
Voltage A0: 2.27
Voltage A1: 1.19
Voltage A0: 2.16
Voltage A1: 1.17
Voltage A0: 2.09
Voltage A1: 1.19
Résultats avec double mesure :
Voltage A0: 2.27
Voltage A1: 1.03
Voltage A0: 2.27
Voltage A1: 1.03
Voltage A0: 2.26
Voltage A1: 1.03
La différence est faible, mais elle existe.
Le problème est ailleurs ...
Pour info (datasheet AtMega328) :
The ADC is optimized for analog signals with an output impedance of approximately 10k or less. If such a source is used, the sampling time will be negligible.
If a source with higher impedance is used, the sampling time will depend on how long time the source needs to charge the S/H capacitor, with can vary widely. The user is recommended to only use low impedance sources with slowly varying signals, since this minimizes the required charge transfer to the S/H capacitor.
Donc pour des potards de 10K, une seule mesure suffit.
Mais je dirais que si on veut simplement mesurer des potards, deux mesures et même douze mesures ne vont pas déranger.