Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Interférences ou autre ...



  1. #1
    Yag0fr

    Interférences ou autre ...


    ------

    Bonjour,

    J'essaie de remplacer le clavier matriciel d'une machine par une interface graphique avec écran tactile. Pour cela j'utilise un Raspberry connecté à une petite carte électronique que j'ai confectionnée elle même connecté au CPU de la machine à la place du clavier physique. Le raspberry est connecté en HDMI à un écran sur lequel il y a une dalle tactile elle même connecté en USB.

    Le clavier est tout simple : clavier matriciel 18 touches. du coup il y a 9 fils connectés au CPU : 4 colonnes et 5 lignes.
    Voici le schéma du clavier :
    fs123.jpg
    Voici le plan de la carte :
    fs122.png


    Côté software, pour simuler l'appui sur un bouton du clavier, j'active deux transistors (1 ligne et 1 colonne) pendant 1/50 seconde ce qui ferme le circuit du point de vue du CPU comme si quelqu'un avait appuyé sur un des boutons. La machine se met alors en route etc.

    Tout fonctionne globalement très bien SAUF que de temps en temps, sans explication apparente, la machine exécute une action qui ne correspond pas au bouton dont l'appui a été simulé ! Pourtant les LED que j'ai mis sur ma carte s'allument bien en face des bon transistors.

    J'ai observé que le problème est plus ou moins fréquent en fonction de deux paramètre :
    • Type de cable utilisé pour aller de ma carte au CPU de la machine (cable blindé 9 brins ou nappe plate)
    • Ordre dans lequel j'active les transistors : colonne puis ligne ou ligne puis colonne, sachant que les deux instructions sont exécutés l'une après l'autre et que la latence entre les deux est de quelques microsecondes.

    Malgré tout le problème ne disparait jamais complètement ... c'est en train de me rendre chèvre !!!

    Pour informations, la machine est constitué d'une carte CPU à la quelle est connecté le raspberry avec un cable de 15cm environ.
    A l'intérieur de la machine il y a une carte de puissance pilotée par le CPU qui elle même commande des moteurs.

    Si vous pouviez me donner des pistes de résolution ce serait génial !
    D'avance merci de votre aide.

    -----
    Dernière modification par Antoane ; 14/12/2017 à 18h58. Motif: Rapatriement des PJ sur le serveur du forum

  2. Publicité
  3. #2
    nornand

    Re : Interférences ou autre ...

    BSR, j'aurais mis des résistance de pull up sur les collecteurs .

  4. #3
    Yag0fr

    Re : Interférences ou autre ...

    Bonsoir normand,
    Merci de ta réponse, mais peux-tu développer un peu et m'expliquer pourquoi sans ces résistances de pull up il peut y avoir des comportements aléatoires ?

  5. #4
    Murayama

    Re : Interférences ou autre ...

    Bonjour!

    peux-tu développer un peu et m'expliquer pourquoi sans ces résistances de pull up il peut y avoir des comportements aléatoires ?


    Histoire de nous éviter les réponses du genre : "va demander à ton prof, il est payé pour ça" :

    Pour simplifier, voici un petit morceau du circuit qui m'occupe actuellement.
    PB.png
    Le label PB1 est relié au processeur, le bouton d'un côté à GND, de l'autre à un pull-up.
    Il faut savoir que l'impédance côté processeur est très élevée et qu'il suffit d'un rien pour
    la mettre à 1 ou à 0.

    Avec ce circuit:
    1. Si le bouton est libre, alors la connection BTN1 est reliée à +3v3. On a donc un niveau 1 bien défini.
    2. Si on presse, comme l'impédance du bouton est très faible (quelques fractions d'ohm) par rapport à la
    résitance R1, alors la connection BTN1 est reliée à 0V.

    Maintenant imaginez qu'il n'y a pas de résistance R1. Quand on presse, il n'y a rien de changé.
    Par contre, quand on ne presse pas, BTN1 est à un potentiel indéfini et attrape toutes les influences
    extérieures, ce que vous appelez interférences. C'est pourquoi vous constatez que parfois ca marche
    mieux, parfois moins bien. Et comme vous l'avez remarqué, TOUT peut influencer le fonctionnement.
    Une connection digitale just posée sur un autre fil peut permettre de déclencher. J'ai eu le cas dans
    mon tout premier hardware, où l'horloge passait à côté du reset qui n'avait pas de pullup.
    Bref, mettez des résistances et on n'en parle plus.

    NB: Ne sortez pas votre fer à souder tout de suite, Rapsberry Pi a des pullups internes, comme la plupart
    des processeurs modernes. Vous pouvez donc programmer ces pullups, ce qui fait que dans ce cas,
    votre schéma est parfaitement valable. Je ne sais pas avec quel langage vous programmez (i.e. si vous
    êtes sur Linux ou sans, mais j'imagine plutôt avec). Il y a du code sur le net qui montre comment
    configurer les GPIO avec pullups.

    Pascal



  6. #5
    Murayama

    Re : Interférences ou autre ...

    Re!
    Je n'arrive pas à éditer mon message. Remplacer "Label PB1" par "Label BTN1".
    Pascal

  7. A voir en vidéo sur Futura
  8. #6
    bobflux

    Re : Interférences ou autre ...

    Comme ton clavier est une matrice, le cpu de la machine va mettre les lignes (ou les colonnes) à 1 (ou à 0) et puis regarder ce qui se passe sur les colonnes (ou les lignes). Il doit y avoir des pullups (ou des pulldown) sur la carte. (J'espère que j'ai été suffisamment vague )

    Bref, tes transistors mettent les lignes ou les colonnes à la masse, mais ça n'émule pas l'appui sur un bouton, qui lui, connecte une colonne et une ligne, ce qui est différent !

    Ça doit émuler l'appui sur tous les boutons d'une ligne (ou d'une colonne) en même temps, ce genre de truc.

    On ne peut pas commander un clavier multiplexé avec ce système...

    Le plus simple serait je pense de mettre 1 opto coupleur en parallèle sur chaque bouton et de les commander avec ton Pi. Ça marchera mieux si les optos sont dans le bon sens par rapport à la polarité des signaux envoyés par le cpu. Il faudrait mesurer...

    Ou sinon des 74HC4066, chaque circuit contient 4 switch analogiques, donc il suffit de les câbler de la même façon que les touches du clavier.
    Dernière modification par bobflux ; 15/12/2017 à 08h35.

  9. Publicité
  10. #7
    Yag0fr

    Re : Interférences ou autre ...

    Bonjour,

    Merci à Pascal et Bobflux pour l'intérêt que vous manifestez pour mon problème !

    La première phase de pascal m'a fait rire car à bientôt 42 ans ça fait bien longtemps que je n'ai pas vu de professeur ...
    Sinon pour ce qui est des résistances de pull up sur les connecteurs du raspberry, je suis d'accord qu'elles sont nécessaires quand les gpio sont utilisés en entrées. Dans mon cas ils sont utilisés en sorties et ils servent juste à activer les transistors (3,3v sur la base). D'ailleurs comme je le disais plus haut, tout semble fonctionner correctement sur ma carte car les LED de contrôle s'éclairent toujours correctement.

    Pour ce qui est d'utiliser des optocoupleurs plutôt que des transistors, ça me pose un problème cat aujourd'hui j'ai 18 boutons à gérer et je vais en avoir 12 de plus très prochainement. Du coup là où je me contenterai de 12 gpio pour simuler mes 30 boutons avec mes transistors, il me faudrait 30 gpio avec des optocoupleurs.

    Ce qui me chagrine c'est que ça fonctionne presque tout le temps ... Il doit y avoir moins de 5% d'erreur : inversion de 2 boutons.
    D'autre part il semble que les lignes ne soient jamais inversées, mais que ce ne sont que les colonnes qui le sont.

    Voici ce que je mesure aux bornes du clavier sur le CPU : mesures effectués entre la masse de la carte CPU et chacune des bornes du clavier.
    Capture d’e?cran 2017-12-14 a? 18.57.27.jpg

    Si je branche le clavier d'origine et que j'appuie sur un bouton alors les tensions mesurées entre la masse du CPU est chacune des bornes du clavier sont les suivante :
    • Aux bornes du bouton pressé : 5,04v devient 0,455v et 3,81v devient 0,409v
    • Aux bornes des autres boutons : 5,04v partout même ou j'avais 3,81v avant !

    Est-ce que ça vous inspire quelque chose ?

  11. #8
    freepicbasic

    Re : Interférences ou autre ...

    les pull up se mettent sur les entrées , pas sur les sorties, sur le schéma il n'y en a pas !
    A mon avis 51k, c 'est pas assezfaible, il faut des 1K en milieu pollué.
    Et Raspberry ça rayonne beaucoup...

    Avec des 51k ou plus, 10cm de câble ramasse tout ce qui traine , ou alors avec des câble blindés.
    Le mieux est de mettre des résistances suffisamment faibles pour absorber tous les parasites et suffisamment forte pour ne pas atténuer trop le signal.

    .
    A+, pat

  12. #9
    Yag0fr

    Re : Interférences ou autre ...

    Bonjour,

    Je suis tout a fait d'accord que les pull up se mettent sur les entrée et non les sorties.

    Côté raspberry il n'y a que des sorties.
    Côté CPU de la machine là c'est différent, mais ce n'est pas ma carte du coup je ne peux pas la modifier ...

    Les mesures effectuées aux bornes du clavier au repos et lors de l'appuie sur une touche donnent les mêmes résultats que branche le clavier d'origine ou la carte avec le raspberry.

    Je rappel l'objectif de mon projet : remplacer le clavier matriciel d'une machine (clavier à membrane) par un raspberry.
    Mon soucis : tout semble marcher à merveille sauf dans de rares cas où la machine ne fait pas ce qui correspond à la touche "simulée" par le raspberry.

    Merci encore pour votre aide, je suis un piètre électronicien amateur et j'avoue ne pas comprendre grand chose ...

  13. #10
    nornand

    Re : Interférences ou autre ...

    BSR: les collecteurs sont bien en entré coté CPU , me semble t'il .

  14. #11
    Yag0fr

    Re : Interférences ou autre ...

    Bonsoir nornand,

    Effectivement ce sont des entrées pour la carte CPU de la machine.
    Mais alors si je connecte des résistances de pull-up à chacun des collecteurs, à quoi devrais-je connecter ces résistances de l'autre côté ? A une alimentation, mais laquelle ?

    Je suis désolé de poser des questions qui peuvent vous paraitre idiotes ... mais j'aimerai un peu plus de détails pour mieux comprendre.

    D'avance merci,
    Marc-Antoine.

  15. #12
    freepicbasic

    Re : Interférences ou autre ...

    3V3
    Sur le post 4 le bouton poussoir équivaut à un transistor collecteur ouvert.
    La résistance envoie 3.3v au repos et 0v lorsqu'on appuie.
    A+, pat

  16. Publicité

Discussions similaires

  1. Une autre mathématique sur un autre monde...
    Par Horlem dans le forum Discussions scientifiques
    Réponses: 225
    Dernier message: 30/05/2017, 14h09
  2. Faire sa deuxieme année de BTS ABM dans une autre région (autre établissement)
    Par LumieNaissante dans le forum Orientation après le BAC
    Réponses: 2
    Dernier message: 09/03/2014, 11h25
Découvrez nos comparatifs produits sur l'informatique et les technologies.