[RESOLU] interruptions appelées en boucle

Bonjour,
J’ai acheté un Uno il y a quelques jours, et je commence tout juste à jouer avec, je suis donc en pleine découverte :slight_smile:
Je comprend assez bien les aspects logiciels, mais coté électronique, je suis plutôt débutant, j’ai donc un peu de mal de ce coté là.

J’aimerais utiliser les interruptions pour détecter l’appui d’un bouton. J’ai commencé par une version avec un poussoir entre le connecteur 2 (donc interruption 0) et la masse. En mettant ce connecteur en mode “pull up”, et avec un attachInterrupt sur CHANGE, ça marche très bien.

Maintenant, j’aimerais déclencher cette interruption sur l’appui de plusieurs boutons, chacun relié à d’autres connecteurs, pour pouvoir déterminer quel bouton est appuyé.
J’ai donc effectué un montage avec un poussoir entre connecteurs 2 et 4 par exemple, mais visiblement, les écarts de tensions sont insuffisants pour déclencher l’interruption. Je me suis donc dit qu’il me fallait un montage avec un transistor, comme celui en pièce jointe (avec un bon vieux BC548B) .
Les connecteurs 2 et 4 sont mis en “pull up”, et quand je mesure la tension entre chaque connecteur et la masse, je passe bien de 5 à 0 lorsque j’appuie sur l’interrupteur, ça me semble donc correct.

Pourtant, l’interruption est appelée en rafale un peu n’importe quand. si je logue l’état des connecteurs, les valeurs sont bonnes, mais le “CHANGE” semble se déclencher n’importe quand.
Là … je sèche complètement.
Est-ce que le fait que le transistor se retrouve avec sa base “en l’air” peut entrainer ce comportement ?

schema.png

Bonjour,

piif: Est-ce que le fait que le transistor se retrouve avec sa base "en l'air" peut entrainer ce comportement ?

Normalement on met une résistance entre la base et la masse pour éviter ce genre de problème, le problème vient surement de là.

Sinon il y a une interruption sur toute les broches digital, le truc c'est que la team arduino n'as pas fait le programme pour gérer les interruptions autres que sur D2 et D3. Mais la communauté arduino a fait le bouleau pour eux ;) http://www.arduino.cc/playground/Main/PcInt

La question surtout c'est qu'est-ce que tu espérais faire avec le transistor? Parce que avec ce montage en faisant abstraction des problèmes de résistance dans la base et de support des interruptions sur toutes les entrées ne fait peut être pas ce que tu attendais. Lorsque tu fermes le contact, tu rends le transistor passant par conséquent tu génères 2 interruptions en même temps une sur l'entrée connectée à la base et l'autre sur l'entrée connectée au collecteur.

Maintenant, j’aimerais déclencher cette interruption sur l’appui de plusieurs boutons, chacun relié à d’autres connecteurs, pour pouvoir déterminer quel bouton est appuyé.

Une fonction OU (à diodes ou à circuit intégré) peut répondre à cela (sauf erreur d’interprétation de la phrase !!) Interruption ‘FALLING’ avec le schéma joint.

OU.jpg

Je ne suis pas sûr que les Pin-Change-Int soient bien gérées (faut voir, je n'ai jamais utilisé). Mais en effet, un groupe de 8 pins qui déchelchent la même int peut t'aider.

L'idée de Al1fch est bonne, une int qui va lire l'état des broches. [u]Mais attention, les diodes sont à l'envers/u tu as corrigé...

Bonjour,

skywodd: Normalement on met une résistance entre la base et la masse pour éviter ce genre de problème, le problème vient surement de là.

Mais dans ce cas, je me retrouve avec le même problème qu'au début : l'écart de tension entre P4 et la masse n'est plus suffisant à cause de cette résistance. Et là, je ne sais pas trop comment calculer la bonne valeur à cette résistance pour m'en sortir.

Mais bon, puisque les autres pattes sont également interruptibles, je vais plutôt m'orienter vers cette solution. Merci pour le tuyau.

al1fch: Une fonction OU (à diodes ou à circuit intégré) peut répondre à cela (sauf erreur d'interprétation de la phrase !!) Interruption 'FALLING' avec le schéma joint.

Ce schéma ressemble beaucoup à ce que j'avais essayé avant de passer à la version avec transistor, mais je n'avais pas mis de diodes. je ne comprend pas à quoi elles servent ? Autre question : est-ce qu'on peut activer les "pull up" internes à la place de toutes ces résistances ?

(désolé d'insister, mais je suis vraiment débutant sur ces aspects, et je sens qu'une fois que j'aurai compris ces bases, ça devrait me permettre d'avancer beaucoup plus facilement)

les diodes permettent de transmettre au fil 'interruption' l'état bas provoqué par chaque bouton SANS créer de liaison directe entre boutons.

les résistances du schéma peuvent être celles des pull-up internes. cependant vu la valeur élevée de ces pull-up je préfère mettre des résistances de valeur moyenne (4,7k ou 10k) si les boutons sont un peu éloignés du microcontrolleur pour réduire la 'récolte' des parasites et les interruptions non désirées.

Avec le schéma de al1fch, ça marche nickel. Et effectivement, je n'avais pas fait attention au fait que sans diodes, dès que j'appuie sur un bouton, tous les autres sont reliés entre eux.

Merci beaucoup, j'ai appris plein de choses grâce à ces quelques échanges, maintenant, je peux me lancer dans mon premier bricolage maison ;-)

à suivre ...

piif: Autre question : est-ce qu'on peut activer les "pull up" internes à la place de toutes ces résistances ?

http://www.arduino.cc/en/Tutorial/DigitalPins (3eme paragraphe)

Bonjour à tous, j'ai un problème similaire.

J'utilise les 6 interruptions de ma Arduino Méga sur front descendant (FALLING) (un bouton = une interruption)

les résistances du schéma peuvent être celles des pull-up internes. cependant vu la valeur élevée de ces pull-up je préfère mettre des résistances de valeur moyenne (4,7k ou 10k) si les boutons sont un peu éloignés du microcontrolleur pour réduire la 'récolte' des parasites et les interruptions non désirées.

C'est justement ce qui se produit, je récolte des impulsions non désirer du à l'éloignement de mes boutons par rapport au microController. J'ai mis des résistance de valeur moyenne (10K) et c'est vrai que j'en ai moins ; mais j'en ai toujours. C'est pas énorme, mais ça fausse mes données. Comment éviter ces parasites ?

Si ça peut t'aider, on retrouve souvent cette question sur les parasites...

http://arduino.cc/forum/index.php/topic,78406.0.html

Super Tuto. Merci.