Comportement suspect

Bonjour à tous.

Je disposible d'un arduino UNO.

Le comportement de certaines broches me parait suspect.

Afin de confirmer, mes soupçons, j'ai tappé le code suivant :

void setup(){
  int nIndiceBroche;
  for(nIndiceBroche=2;nIndiceBroche<14;nIndiceBroche++){
    pinMode(nIndiceBroche, INPUT);  //initialisation de la broche comme étant une entrée
    digitalWrite(nIndiceBroche,LOW);  
  }

  Serial.begin(9600);          //  initialisation de la connexion série
}

void loop(){
  int nIndiceBroche;
  int nIndiceBrocheEtatHaut = 0;    
  while(1){
    for(nIndiceBroche=2;nIndiceBroche<14;nIndiceBroche++){
        if(digitalRead(nIndiceBroche) == HIGH && nIndiceBrocheEtatHaut != nIndiceBroche){
          nIndiceBrocheEtatHaut=nIndiceBroche;
          Serial.println(nIndiceBroche);
        }
    }
  }
}

Le code affichera donc le numéro de la dernière broche passée à l'état haut (5V).

Puis je manipule :
Je passe la broche 4 à 5V (par alimentation externe ) cela affiche : 4.
Je passe la broche 4 à 0V (par un fil la reliant à GND).
Je passe la broche 3 à 5V (par alimentation externe ) cela affiche : 3 puis 2 puis 3 puis 2 etc. pendant un long moment ! C'est cela que je ne comprend pas.

Par contre, si je laisse la broche 2 à 0V (par un fil la reliant à GND), là cela affichera uniquement 3 comme convenu.

De plus le comportement étrange de la broche 3 semble se produire également sur la broche 5,6... (toutes les broches PWM~ a priori)
Mon arduino est-il défectueux ou bien une notion m'échappe ?

Merci de m'éclairer.

Peut-être une "fuite" (plusieurs mégohms, entre pistes) mais de toutes façons, laisser une entrée 'en l'air" n'est jamais très judicieux.
Essaies tout de même de nettoyer les pistes... J'ai eu récemment ce genre de panne avec mon multimètre (un Flucke pourtant) et un coup de dégraissant passé à la brosse à dent l'a remis en état.

Merci pour ta réponse.

J'ai trouvé l'explication ici :
http://arduino.cc/fr/Main/ApprendreBrochesEntreeSortie

Ceci signifie également que les broches numériques en entrées laissées déconnectées, ou câblée avec des fils qui ne sont connectés à aucun autre circuit, renverront un état de la broche changeant apparemment de façon aléatoire, attrapant le bruit électrique de l'environnement immédiat de la carte, ou couplée "capacitivement" à l'état d'une broche proche.

Et j'ai adopté la solution suivante :
J'ai donc rélié chaque broche à un conducteur ohmique (R=1MOhm) eux-même relié à la masse (GND)

Les tests se sont passés comme prévus.

Bonjour,

Mon arduino est-il défectueux ou bien une notion m'échappe ?

Réponse 2 :wink:

Les broches des micro-contrôleurs sont dites "tri states" ("trois états"), celles ci peuvent être mise à VCC, GND, ou FLOATING (Hiz = Haute impédance).
Les états VCC et GND correspondent au mode OUTPUT avec HIGH et LOW, l'état FLOATING lui correspondant au mode INPUT.

Quand une broche est en INPUT, celle ci est dite flottante ou en "haute impédance", ce qui correspond physiquement à une broche non connecté (un fils en l'air), cette broche est donc soumise à un effet d'antenne qui crée des états HIGH/LOW aléatoirement.

Pour éviter ce genre de probléme il faut toujours fixé un état par défaut, via ce que l'on appelle des résistances de tirage, "pull-up" (tirage au VCC) ou "pull-down" (tirage au GND), de cette manière il n'y a que deux états possible HIGH ou LOW et comme un faible courant passe continuellement à travers les résistances de tirage toute interférences est éliminé.

Merci pour la réponse, cela m'éclaire encore d'avantage (notament au niveau des termes)

J'ai adopté la solution "résistances de tirage pull-down" comme indiqué plus haut.

J'ai donc rélié chaque broche à un conducteur ohmique (R=1MOhm) eux-même relié à la masse (GND)

Le sujet est résolu.
Merci à tous

Juste pour correctif :
Les puces à sorties Tri-State ont été conçues pour pouvoir connecter ensemble deux ou plusieurs sorties de circuits, sans qu'il y ait de conflit entre une sortie qui serait à l'état Haut quand une autre serait à l' état Bas conduisant ainsi la destruction du circuit qui serait à l' état Bas.... C'est couramment utilisé par exemple pour relier ensemble et sur un bus les fils Data des mémoires vives ou ROM. Quand une des puces est active, les autres sont mises en l'état Hi-z. Voire même pour réaliser un "OU cablé"
Par contre en technologie MOS - contrairement à la TTL- les entrées sont toujours en haute impédance. Une simple charge électrostatique présente sur une entrée peut être interprétée comme un état indéterminé (ni haut, ni bas) appliqué sur l'entrée. Et compte tenu de la grande impédance du circuit, cette charge peut subsister relativement longtemps. Ce qui bien sûr perturbe le circuit.
Donc pour résumer, on ne peut pas dire qu'une broche INPUT puisse passer ou être mise, à l' état TriState, elle est toujours à haute impédance. C'est pourquoi les résistances vers le 1 ou le 0 logique sont indispensables.
Et quand il existe une puce capable d'avoir ses entrées commutables en TriState, alors il existe une broche de commande, nommée alors InputEnable. Mais 9 fois sur 10 ce sont les sorties que l'on force en haute impédance. (OutputEnable)

A noter que 1M? vers la masse, c'est déjà une valeur élevée et pouvant poser problème en milieu perturbé ou avec des composants gourmands en courant sur la même alimentation que le circuit.