Sur la même pin: analogRead ne fonctionne pas, digitalRead aucun soucis

Bonjour,

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 ...

Merci de votre aide !

D'après ce que tu dis rien ne prouve (encore) que l'ADC ne fonctionne pas.

  1. 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)

  2. 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 !

si tu utilises la ref interne de 1.1V, tout ce qui est au dessus est ignoré "ecreté". 1023 = 1.1V

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.

bonjour
en complement des reponses déjà données

avec ton uno
tu dispose de 3 points et demi :grin: faciles pour injecter une valeur sur un pin ana
5V
3.3V
GND
En l'air

il te suffit juste de connecter ton A0 ou autre Ax
et de lire par serial ce qui sort
lorsque tu connecte ton Ax sur ces 3,5 points

La pin AREF est relié à la masse, du coup j'ai 0V et non 1.1V, normal non ? J'ai bien mis analogReference(INTERNAL);

L'alim AVCC est bien à 5V sur la pin du boitier.

Je crois que mon ADC est HS :-s :frowning: ??

tibo7:
La pin AREF est relié à la masse, du coup j'ai 0V et non 1.1V, normal non ? J'ai bien mis analogReference(INTERNAL);

L'alim AVCC est bien à 5V sur la pin du boitier.

Je crois que mon ADC est HS :-s :frowning: ??

je ne comprend pas bient ton cablage
pourquoi relier AREF à GND ?
avec ça il est sur que tu ne lira rien d'autre que 1023

il y a des chances qu'avec cette manip INTERNAL et pin AREF sur GND , le CAD en "pris un coup derrière la tête" 8)

laisse AREF en l'air (non connecté)
suprrime toutes notions à AREF dans ton programme
et fais le test que j'ai exposé au dessous

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.

AHAHAHA ça marche :smiley:

Bon je vais me faire taper sur les doigts !

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 !)

Du coup, j'ai mis la patte en l'air et bingo :smiley:

MERCII !!!!!!!!!!!!!!!

Tu as de la chance d'être loin sinon il y aurait promesse de mariage entre la pointe de ma chaussure et tes fesses :grin: .
Un Atmega c'est costaud :slight_smile: .

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.

Merci pour tout !