Je travaille sur la carte UNO, j'ai brancher un potentiomètre sur la broche A0.
Quand je fait analogRead(A0), j'ai toujours 1023 d'afficher.
Lorsque je fais digitalRead(A0) et que je tourne mon potentiomètre, les valeurs passent bien à 0 ou 1.
Je ne comprends pas pourquoi mon ADC ne fonctionne pas ...
D'après ce que tu dis rien ne prouve (encore) que l'ADC ne fonctionne pas.
Potentiomètre
Détails stp. Valeur ?
As tu vérifié la valeur de la tension avec un voltmètre avant de l'appliquer sur A0?
Pour un Vcc= 5V le seuil de commutation de l'entrée numérique est autour de 2,4V ( pour des valeurs plus précises voir la datasheet de l'Atmega328p)
ADC
Qu'elle est la référence de tension utilisée ?
Standard = Vcc
Externe -> valeur = ?
Interne -> 1.1 V
Le mauvais fonctionnement se produit-il sur toutes les entrées ou sur la seule A0 ?
Remarque importante : Dans la datasheet il est spécifié que dès qu'on modifie quoi que soit dans la configuration de l'ADC il ne faut jamais conserver la première mesure analogique, en cas de doute toujours doubler la mesure.
J'ai une tension qui varie de 0 à 5V au borne de ma pin A0 sur l'atmega328. Je sais donc que mon potar fonctionne nickel.
Je n'ai pas touché à la référence de tension. D'après la doc, il y'aurai une valeur "par défaut" analogReference() - Arduino Reference
Donc 5V !
Ca se produit sur toutes les broches en effet, j'ai fait le test.
C'est la première fois que je vois ça. Mon UNO est neuf, c'est surprenant quand même !
Le potar est hors de cause, le câblage devrait être bon.
Petite manip supplémentaire :
Dans la datasheet du micro (la bible absolue) on lit que la tension réelle de la référence interne est disponible sur la broche Aref du micro.
Par chance arduino n'a pas renommé cette connexion.
Je te propose de passer en réf interne (sans rien mettre sur les entrées Ax) et de mesurer la valeur de la tension sur Aref. Tu devrais trouver entre 1V et 1,2V.
Si c'est 0V soit l'ADC est HS soit l'ADC n'est pas alimenté.
Si tu mesure une tension nulle tu prend le schéma de la carte et tu mesures si tu as bien 5V sur la patte AVCC du micro, attention la mesure est à faire sur le boîtier du micro.
L'alimentation de l'ADC est totalement indépendante du reste du micro, y a peut être une mauvaise soudure.
Il faut être précis :
C'est à cause d'un court-circuit sur le circuit imprimé ou bien tu mesures 0V sans rien faire d'autre ?
Dans le premier cas il existe peut-être une infime chance que le circuit puisse être sauvé, dans le deuxième cas, en absence de court-circuit "mécanique", l'ADC est mort à 99,99 %.
Il faut lire la datasheet : quand la référence interne est sélectionnée on retrouve sa valeur exacte sur Aref. Si alors on applique une tension sur Aref cela détruit l'ADC. C'est écrit en toutes lettres dans la datasheet.
Laisse tomber la doc arduino et télécharge la datasheet du micro (Atmega328p).
La doc arduino c'est la datasheet comprise de travers.
En fait, c'est une carte custom que j'ai fait avec un atmega328 ! Auquel j'ai inclus un bootloader d'un UNO dessus. Problème sur mon hardware! j'ai mis AREF à la masse (j'ai zapé le condensateur comme le fait arduino ! grosse ERREUR !)
Tu as de la chance d'être loin sinon il y aurait promesse de mariage entre la pointe de ma chaussure et tes fesses .
Un Atmega c'est costaud .
Tu met immédiatement une capa sur Aref
Si tu peux te contenter de mesures à +/-20% tu peux câbler comme dans les cartes arduino, y compris en découplant Aref au bout de 10 cm (c'est du n'importe quoi !) .
Mais si tu veux faire des mesures analogiques précises :
tu soudes le condensateur de découplage de Aref à raz des pattes du micro.
tu relies AVcc à Vcc au travers d'une petite inductance, voir datasheet (-> eh oui encore une fois).
Arranges toi aussi pour que la masse des signaux analogiques que tu veux mesurer soit reliée à la masse proche de Avcc (micro).
En numérique n'importe quelle masse convient.
En analogique la masse parfaite n'existe pas et il est préférable de ne pas mélanger le numérique et l'analogique.