J'ai commencé à bricoler avec l'arduino il y a peu.
Récemment j'ai voulu expérimenter l'usage des interruptions.
Sans rien brancher sur l'entrée digitale 2 (interruption 0), j'ai des changements d'état en permanence.
attachInterrupt(0,testfunction,LOW);
=> testfunction est appelée sans arret.
L'initialisation de l'entrée ne semble pas avoir d'effet:
pinMode(2, INPUT);
Ce comportement un "instable" est identique quand je tente de mettre en oeuvre avec un circuit simpliste comme celui-là:
Ne rien brancher sur une entrée c'est une fausse bonne idée. L'état de la broche est indéterminé et elle passe en permanence de 1 à 0 au grès des perturbations ambiantes.
L'initialisation de l'entrée ne semble pas avoir d'effet:
pinMode(2, INPUT);
pinMode(2, INPUT);
digitalWrite(2,HIGH); // active le pullup interne
L'activation du pullup interne peut aider. Mais c'est équivalent à une résistance très élevée en environnement bruyant il est préférable de mettre une résistance de valeur moyenne (qq kOhms) sur la broche.
Sur le montage "DigitalReadSerial" il y a déjà une résistance de pulldown en fait.
J'ai essayé d'inverser en plaçant la résistance en pullup, de mettre les 2 :~ , je ne vois pas de changement.
L'activation du pullup interne ne semble pas avoir d'effet non plus. Enfin si, d'inverser l'effet: quand je ferme le circuit, il devient instable.
J'utilise une résistance de 1k, c'est peut-être trop peu?
J'utilise une résistance de 1k, c'est peut-être trop peu?
Non, non. Ue résistance "basse" donne une meilleur immunité aux perturbations.
Il doit y avoir autre chose.
Tu utilises une poussoir pour générer l'interruption? Le poussoir est de bonne qualité?
Si le poussoir n'est pas de bonne qualité, il peut faire des rebonds, a l'appui ou au relâchement, pendant un temps assez long (à l'échelle de l'arduino c'est à dire quelques dizaines de millisecondes) et donc appeler plusieurs fois de suite la routine d'interruption. Mais dans les positions stables du poussoir il ne devrait pas y avoir d'interruptions.
J'utilise une résistance de 1k, c'est peut-être trop peu?
Non, non. Ue résistance "basse" donne une meilleur immunité aux perturbations.
Il doit y avoir autre chose.
Tu utilises une poussoir pour générer l'interruption? Le poussoir est de bonne qualité?
Si le poussoir n'est pas de bonne qualité, il peut faire des rebonds, a l'appui ou au relâchement, pendant un temps assez long (à l'échelle de l'arduino c'est à dire quelques dizaines de millisecondes) et donc appeler plusieurs fois de suite la routine d'interruption. Mais dans les positions stables du poussoir il ne devrait pas y avoir d'interruptions.
Pas de rebond, enfin peut-être mais c'est pas trop le pb pour le moment,
Avec ce petit montage et ce code, j'ai ~1000 appels/s à la fonction d'interruption quand l'interrupteur est ouvert.
Si j'active le pullup interne, la fonction n'est jamais appelée.
Je précise que j'ai fait l'essai avec 2 arduino uno V3 différents.
Tu as changé de resistance entre deux montages ???
Si la resistance est hs ou passante, ceci expliquerait le phénomène.
Si tu faisais le même montage sans la resistance de 10k, tu observerais le même problème.
Testes ta/tes resistance(s) à l'ohmètre (hors tension) !!!
Tu travailles sur un breadboard ???
@+
Zoroastre.
J'ai essayé avec quelques résistances, oui. Faut que je les vérifie ce soir... .
Je testerai aussi sans la résistance pour vérifier que ça ne change rien.
Oui je fais mes essais sur breadboard.
En admettant que ni la breadboard ni les résistances ne soient en cause, quelles autres sources de pb peuvent exister?
Ca pourrait être dû à mon usb du PC portable par exemple?
En admettant que ni la breadboard ni les résistances ne soient en cause
Commencer par éliminer les causes les plus probables c'est pas bon ça.
Écoutes bien ce que t'ont dit fdufnews, skywodd et zoroastre, ton problème sent le faux contact ou l'erreur de câblage à des lieux à la ronde. Ne bricoles pas l'existant et refais tout à partir de zéro, changes d'emplacement sur ta breadboard, tu gagneras du temps.
En admettant que ni la breadboard ni les résistances ne soient en cause
Commencer par éliminer les causes les plus probables c'est pas bon ça.
Écoutes bien ce que t'ont dit fdufnews, skywodd et zoroastre, ton problème sent le faux contact ou l'erreur de câblage à des lieux à la ronde. Ne bricoles pas l'existant et refais tout à partir de zéro, changes d'emplacement sur ta breadboard, tu gagneras du temps.
J'en conviens, j'ai au moins un doute sur la breadboard et le cablage, moins sur les résistances.
En attendant de m'y pencher ce soir avec le matériel, je me demande s'il y a encore d'autres pistes. Ca ne coute pas grand chose de les évoquer.
Ca semble marcher désormais en changeant de breadboard.
Un câblage simpliste fonctionne pourtant sur la première. :~
Pour la petite histoire, je voulais à la base reproduire un récepteur RF tel que décrit ici: http://www.practicalarduino.com/projects/weather-station-receiver
J'avais remis en cause le bon fonctionnement du matériel quand je constatais l'instabilité du récepteur avec la sortie branchée sur une interruption.
Bon, celui-là reste instable, mais semble l'être moins en alimentant en 3,3v.
Je crois que je vais finir par devoir investir dans un oscillo...