Les broches appelées A0 à A5, qui peuvent, dans un usage numérique, tout à fait officiellement s'appeler D14 à D19 sont individuellement reliées :
- soit au port C,
- soit à une entrée du multiplexeur analogique à 10 entrées interne à la puce du micro.
Cet aiguillage est commandé par des registres.
Ce sont les fonctions digitalWrite/digitalRead d'une part, et analogRead d'autre part qui écrivent les bonnes valeurs dans les registres.
Ce qu'il faut retenir, c'est que dans un microcontrôleur, il n'y a qu'un seul ADC associé à un multiplexeur analogique.
On n'a pas à se soucier de ce multiplexeur, ses performances sont prises en compte dans la datasheet, c'est réglé par Atmel.
La seule chose dont on a à se soucier, c'est que quand on change d'entrée au niveau du boîtier il faut systématiquement rejeter la première mesure, j'ai déjà expliqué pourquoi.
Un Convertisseur Analogique Digital (CAD ou ADC) fonctionne selon un principe de charge de condensateurs internes.
Pour que, ce ou ces condensateurs (je ne connais pas le fonctionnement interne) aient le temps de se charger completement (circuit RC) il faut que l'impédance de sortie du générateur connecté à une entrée soit compatible avec la fréquence d'échantillonage.
Il n'y a pas une valeur max unique pour la résistance, il y a des couples (impédance du signal/frequence d'échantillonage)
Il y a un fichier Arduino qu'on ne voit jamais, mais qui s'exécute systématiquement au démarrage du micro : le fichier init() (voir dans les fichiers de l'IDE le fichier main.cpp).
C'est dans ce fichier qu'Arduino fait des configurations des différents périphériques internes.
Par exemple, c'est dans ce fichier que sont configurées les PWM à environ 1kHz et environ 500 Hz, alors que la PWM peut aller jusqu'à 62,5 kHz.
De la même façon, la fréquence d'échantillonnage de l'ADC est choisie la plus basse parce que cela permet de ne pas avoir de contrainte sur la résistance du générateur d'entrée.
De mémoire, c'est très loin pour moi maintenant, avec le réglage arduino on devrait pouvoir accepter jusqu'à un megohm => à vérifier ! !
Donc oui s'il y a un problème avec l'ADC le micro atmega328p peut faire mieux que ce que lui fait faire Arduino.
Mais avant de se lancer dans des grandes manœuvres il faut faire la preuve que l'existant est insuffisant.
Parce là c'est :
- lecture de la datasheet.
- Décorticage du fichier init() [il faut déjà réussir à le trouver] pour trouver les configurations Arduino.
Ou faire un petit programme qui lit tous les registres qui concernent l'ADC
- A partir de la valeur des registres déterminer les choix Arduino en comparant les valeurs Arduino des registres avec la datasheet.
- Déterminer des nouveaux réglages plus performant , mais également contrôler qu'ils sont compatibles avec le restant de l'électronique.
C'est du très lourd, il est préférable de bien réfléchir avant et de faire l'effort de donner des temps en secondes plutôt qu' "en virons". Le "viron" n'est pas une bonne unité.
Une info qui peut être utile : impédance de sortie d'un potentiomètre.
L'impédance max de sortie d'un potentiomètre est égale au 1/4 de la valeur du potentiomètre.
Elle correspond à la position milieu du curseur.
Exemple potentiomètre 10 k, la valeur max vue du curseur sera égale à 2,5 k.
Cette impédance est nulle quand le curseur est à la masse ou à Vcc.
Autre point :
Le premier problème est la carte UNO qui est très mal conçue pour les mesures analogiques.
À cause d'une mauvaise implantation et d'un mauvais choix de brochage, la mesure analogique est très bruitée et il faut faire un moyennage sur au moins 10 mesures : c'est ballot pour aller vite.
La carte nano est mieux implantée, si tu tiens a conserver la UNO je peux t'indiquer "un truc" : souder un condensateur de 100 nF sur le support du micro (c'est à dire au verso) entre la broche correspondant à Aref (celle du micro bien sûr, pas celle de bord de carte) et la broche voisine Gnd.
Étonnant Atmel, sachant cette partie de circuit délicate, a placé une sortie masse juste à côté de Aref pour créer les conditions idéales de filtrage et Arduino a placé le condensateur à l'autre bout de la carte !