Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 42

Joystick USB valeurs instables



  1. #1
    inoxxam

    Joystick USB valeurs instables


    ------

    Bonjour, j'ai créé un périphérique de jeux USB à base d'un PIC18F4553, et ce dernier fonctionne... A peu près.

    Premièrement, jetez donc un œil par ici pour voir l'intégralité de la phase théorique du projet.

    En effet, plusieurs problèmes se posent: les valeurs récupérées par les CAN sont loin d'être stables, que celà oscille de quelques bits (résolution 12 bits) ne me dérange pas outre mesure, mais là c'est d'une amplitude allant jusqu'à +/- 300 bits! En suite autre problème lorsque je donne une valeur à une entrée analogique, les entrées à côté se retrouvent affectées. Par exemple si je mets la voie A à 4095 (à fond donc), la voie B se retrouve par exemple à 1500-2000 alors qu'il n'y a aucune entrée. Autre problème avec ma matrice de boutons, dès lors que j'active un bouton, il faut un petit bout de temps avant qu'il se remette à zéro quand je le relâche.

    Si quelqu'un a une idée d'où vient mon problème?

    -----

  2. Publicité
  3. #2
    jiherve

    Re : Joystick USB valeurs instables

    Bonsoir,
    un petit schéma serait le bienvenu!
    JR
    l'électronique c'est pas du vaudou!

  4. #3
    inoxxam

    Re : Joystick USB valeurs instables

    Excusez-moi, j'ai oublié de mettre le lien vers le projet:
    http://www.racingfr.com/forum/index.php?showtopic=32867

  5. #4
    jiherve

    Re : Joystick USB valeurs instables

    Bonsoir,
    comme ton lien va se faire désintégrer :
    http://forums.futura-sciences.com/el...-sabonner.html.
    Place un VRAI schéma.
    JR
    l'électronique c'est pas du vaudou!

  6. A voir en vidéo sur Futura
  7. #5
    inoxxam

    Re : Joystick USB valeurs instables

    OK pas de problème.
    Le schéma est en pièce jointe et voilà respectivement mes report descriptors et mon code:
    Code:
        0x05, 0, 0x01, 0,                    // USAGE_PAGE (Generic Desktop)
        0x15, 0, 0x00, 0,                    // LOGICAL_MINIMUM (0)
        0x09, 0, 0x04, 0,                    // USAGE (Joystick)
        0xa1, 0, 0x01, 0,                    // COLLECTION (Application)
        0xa1, 0, 0x00, 0,                    //   COLLECTION (Physical)
        0x09, 0, 0x30, 0,                    //   USAGE (X)
        0x09, 0, 0x31, 0,                    //   USAGE (Y)
        0x09, 0, 0x32, 0,                    //   USAGE (Z)
        0x09, 0, 0x33, 0,                    //   USAGE (Rx)
        0x09, 0, 0x34, 0,                    //   USAGE (Ry)
        0x09, 0, 0x35, 0,                    //   USAGE (Rz)
        0x09, 0, 0x36, 0,                    //   USAGE (Slider)
        0x09, 0, 0x37, 0,                    //   USAGE (Dial)
        0x15, 0, 0x00, 0,                    //   LOGICAL_MINIMUM (0)
        0x26, 0, 0xff, 0, 0x0f, 0,                   //   LOGICAL_MAXIMUM (4095)
        0x75, 0, 0x0c, 0,                    //   REPORT_SIZE (12)
        0x95, 0, 0x08, 0,                    //   REPORT_COUNT (8)
        0x81, 0, 0x02, 0,                    //   INPUT (Data,Var,Abs)
        0xc0, 0,                             // END_COLLECTION
        0x05, 0, 0x09, 0,                    //   USAGE_PAGE (Button)
        0x19, 0, 0x01, 0,                    //   USAGE_MINIMUM (Button 1)
        0x29, 0, 0x20, 0,                    //   USAGE_MAXIMUM (Button 32)
        0x15, 0, 0x00, 0,                    //   LOGICAL_MINIMUM (0)
        0x25, 0, 0x01, 0,                    //   LOGICAL_MAXIMUM (1)
        0x75, 0, 0x01, 0,                    //   REPORT_SIZE (1)
        0x95, 0, 0x20, 0,                    //   REPORT_COUNT (32)
        0x81, 0, 0x02, 0,                    //   INPUT (Data,Var,Abs)
        0x05, 0, 0x01, 0,                    // USAGE_PAGE (Generic Desktop)
        0x09, 0, 0x39, 0,                   //   USAGE (Hat switch)
        0x15, 0, 0x01, 0,                   //   LOGICAL_MINIMUM (1)
        0x25, 0, 0x08, 0,                   //   LOGICAL_MAXIMUM (8)
        0x35, 0, 0x00, 0,                   //   PHYSICAL_MINIMUM (0)
        0x46, 0, 0x0e, 0, 0x01, 0,                   //   PHYSICAL_MAXIMUM (270)
        0x65, 0, 0x14, 0,                   //   UNIT (Eng Rot:Angular Pos)
        0x75, 0, 0x04, 0,                   //   REPORT_SIZE (4)
        0x95, 0, 0x01, 0,                   //   REPORT_COUNT (1)
        0x81, 0, 0x02, 0,                   //   INPUT (Data,Var,Abs)
        0x75, 0, 0x01, 0,                   //   REPORT_SIZE (1)
        0x95, 0, 0x04, 0,                   //   REPORT_COUNT (4)
        0x81, 0, 0x03, 0,                   //   INPUT (Data,Cnst,Abs)
        0xc0, 0                            // END_COLLECTION
    Code:
    unsigned short read[1],write[17];
    int i=0, x=0, y=0, az=0, arx=0, ry=0, rz=0, slider=0, dial=0, pov=0;
    
    void interrupt(void)
    {
            HID_InterruptProc();
    }
    
    void main(void)
    {
      HID_Enable(&read, &write);
    
      ADCON1 = 0b00000111;
      CMCON = 0x07;
      
      TRISA = 255;
      TRISE = 255;
      TRISB=0b11110000;
      PORTB=0b00000000;
    
      TRISD=0xff;
      TRISC=0xff;
      
            while(1)
            {
                x=Adc_Read(0);
                y=Adc_Read(1);
                az=Adc_Read(2);
                arx=Adc_Read(3);
                ry=Adc_Read(4);
                rz=Adc_Read(5);
                slider=Adc_Read(6);
                dial=Adc_Read(7);
    
                write[0]=x;
                write[1]=((y<<4)+(x>>8));
                write[2]=y>>4;
                write[3]=az;
                write[4]=((arx<<4)+(az>>8));
                write[5]=arx>>4;
                write[6]=ry;
                write[7]=((rz<<4)+(ry>>8));
                write[8]=rz>>4;
                write[9]=slider;
                write[10]=((dial<<4)+(slider>>8));
                write[11]=dial>>4;
    
          PORTB=0b00000001;
          write[12]=PORTD;
    
          PORTB=0b00000010;
          write[13]=PORTD;
    
          PORTB=0b00000100;
          write[14]=PORTD;
    
          PORTB=0b00001000;
          write[15]=PORTD;
    
          pov=PORTC.RC0*1+PORTC.RC1*2+PORTC.RC2*4+PORTC.RC6*8;
    
          if(pov==0b00000001)
          {
              write[16]=1;
          }
          else if(pov==0b00000011)
          {
              write[16]=2;
          }
          else if(pov==0b00000010)
          {
              write[16]=3;
          }
          else if(pov==0b00000110)
          {
              write[16]=4;
          }
          else if(pov==0b00000100)
          {
              write[16]=5;
          }
          else if(pov==0b00001100)
          {
              write[16]=6;
          }
          else if(pov==0b00001000)
          {
              write[16]=7;
          }
          else if(pov==0b00001001)
          {
              write[16]=8;
          }
          else
          {
              write[16]=0;
          }
    
          while(!HID_Write(&write,17));
            }
    }
    Images attachées Images attachées  

  8. #6
    inoxxam

    Re : Joystick USB valeurs instables

    Petit remontage en première page, plus question additionnelle.

    Est-ce que celà peut influencer que mes pistes soient relativement fines (à l'oeil 0,5 mm)?

  9. Publicité
  10. #7
    DAUDET78

    Re : Joystick USB valeurs instables

    Sur le plan hard :
    1/ Pas de découplage de la tension Vcc (au moins 100µF avec des 0,1µF
    2/ Pas de résistance de PullDown sur SW33 SW34 SW35 SW36 (et si ça marche actuellement .... le port correspondant est en "out bas" ... et ce n'est pas bon !)
    3/ Sur la matrice SW1 à SW32, il devrait y avoir 4 ou 8 résistances de pullDown ou de PullUP (je ne sais pas si c'est scruté en 8x4 ou 4x8)

    PS: si tes pistes de 0V et 5V sont en 0,5 mm ......c'est pas bon !
    J'aime pas le Grec

  11. #8
    inoxxam

    Re : Joystick USB valeurs instables

    Salut, tout d'abord merci de ta réponse. Ensuite, si je ne me trompe pas il me semble qu'il y a déjà des résistances de tirage "intégrées" dans le pic. Enfin je vais de toute manière reconcevoir un circuit imprimé, donc par précaution je vais en ajouter. Pour ton information, puis-ce que tu te posais la question, c'est le côté 8 bits de la matrice qui est scruté. Au sujet du découplage de la tension, j'ai du mettre un schéma un tout petit peu ancien, j'ai mis deux condensateurs en parallèle de valeurs 470nF et 10µF, sur le conseil d'un ami. Aurai-je mal été conseillé?

    Merci d'avance et à bientôt!

  12. #9
    DAUDET78

    Re : Joystick USB valeurs instables

    Citation Envoyé par inoxxam Voir le message
    Ensuite, si je ne me trompe pas il me semble qu'il y a déjà des résistances de tirage "intégrées" dans le pic.
    Il y a des PullUP de fortes valeur sur certain port (et il faut les valider!), mais pas de PullDown ! et tu en as besoin sur SW33 SW34 SW35 SW36
    Pour ton information, puis-ce que tu te posais la question, c'est le côté 8 bits de la matrice qui est scruté
    et tu attends des niveau bas ou haut si un bouton est appuyé? Pour info, si tu as 3 boutons d'appuyés, tu en lis un quatrième ! il manque des diodes anti-retours
    . j'ai mis deux condensateurs en parallèle de valeurs 470nF et 10µF, sur le conseil d'un ami. Aurai-je mal été conseillé?
    non, mais un ou deux 0,1µF de plus, ça ne mange pas de pain

    Si tu refais un cuivre, fait un plan de masse et le Vcc en gros !
    J'aime pas le Grec

  13. #10
    inoxxam

    Re : Joystick USB valeurs instables

    Ok donc en gros je vais tâcher de reconcevoir un cuivre avec des pulldown partout (du moins sur les entrées concernées). En ce qui concerne les boutons, en principe seul un, grand maximum deux peuvent être activé en même temps (pas par des contraintes physiques, mais par l'utilisation). Un bouton pressé correspondra à un niveau haut.
    Par contre qu'entends tu par plan de masse?

  14. #11
    DAUDET78

    Re : Joystick USB valeurs instables

    Tout ce qui est libre sur ton circuit imprimé est rempli par de la masse. Tu peux donner un fichier.JPG de ton cuivre actuel ?
    J'aime pas le Grec

  15. #12
    inoxxam

    Re : Joystick USB valeurs instables

    Oui pas de problème... Par contre il est tout à l'opposé des critères sus-cités!
    Images attachées Images attachées  

  16. Publicité
  17. #13
    DAUDET78

    Re : Joystick USB valeurs instables

    M'étonne que tu ais des problèmes ......
    Avec du 0V en fil de canne à pêche ... pas de découplage 0,1µF à ras du PIC (pin 31 32)

    C1 C2 C3 ne sont pas reliés au OV !!
    J'aime pas le Grec

  18. #14
    inoxxam

    Re : Joystick USB valeurs instables

    Si si, ils sont bien reliés au 0V, ce doit (encore une fois) être un vieux typon, je ne sais pas ou est l'actuel, mais ca tu ne pouvais pas le deviner évidemment, je m'en excuse. Enfin bon celà dit l'actuel est du même acabit. Enfin celà dit je travail sur un nouveau circuit, plus propre et plus épais, le découplage et les résistances PullDOWN. Je le mets en ligne dès la fin de mon travail.

  19. #15
    DAUDET78

    Re : Joystick USB valeurs instables

    J'ai un gros doute ....
    Regarde dans ton soft si les broches en "input" le sont bien ......en "input"

    Pour lever le doute, tu places un pont diviseur 1K et 1K entre le 5V et le OV. Tu as donc 2,5V au milieu. Tu branches cette tension sur une broche "input". Si la tension passe à 0V ou à 5V ...... ce n'est pas une broche en "input" , erreur de soft!
    J'aime pas le Grec

  20. #16
    inoxxam

    Re : Joystick USB valeurs instables

    Les inputs semblent bien être en input: je n'avais pas de résistances sous la main, alors j'ai essayé avec une alimentation stabilisée de mettre plusieurs valeurs (entre 0 et 5V bien-sur), et les valeurs affichées à l'écran semblaient cohérentes (à peu près les valeurs voulues, aux perturbations près).

    J'ai également retravaillé mon circuit, je n'ai pas encore fait le typon. Mais voilà en pièce jointe le schéma avec les modifications.

    S'il y a des remarques je prends bien évidemment!

    Merci d'avance et à tantôt!

    PS: J'utilise un autre logiciel (Eagle) parce que je suis chez moi (vacances) donc je n'ai pas à portée de main Proteus. Celà dit, très bon logiciel ce Eagle!
    Images attachées Images attachées  

  21. #17
    DAUDET78

    Re : Joystick USB valeurs instables

    Citation Envoyé par inoxxam Voir le message
    Les inputs semblent bien être en input: je n'avais pas de résistances sous la main, alors j'ai essayé avec une alimentation stabilisée de mettre plusieurs valeurs (entre 0 et 5V bien-sur),
    C'est la meilleur manière de tuer une broche qui aurait été en "output". Il obligatoirement limiter le courant injecté avec une résistance.
    J'aime pas le Grec

  22. #18
    inoxxam

    Re : Joystick USB valeurs instables

    Aye je ne savais pas. Bon par chance tout était bon et donc rien n'a cramé, merci du tuyau.

    Petite question subsidiaire, sur le PIC18F4553, il y a deux PINS VDD (11 et 32) et deux PINS VSS (12 et 31). Est-ce que je dois les connecter entre elles ou elles sont connectées entre elles à l'intérieur du PIC?

  23. Publicité
  24. #19
    DAUDET78

    Re : Joystick USB valeurs instables

    A ton avis? pourquoi microchip a mis deux pins pour Vdd et pour Vss ?
    1/ Pour faire beau
    2/ Il avait deux broches qui servaient à rien
    3/ Pour diminuer l'inductances d'alimentation
    4/ Pour poser une question au millionnaire de TF1
    J'aime pas le Grec

  25. #20
    jiherve

    Re : Joystick USB valeurs instables

    Bonsoir,
    Pour les problèmes de diaphonie entre canaux AD je suis étonné de ne pas trouver de specs dans la data sheet.
    JR
    l'électronique c'est pas du vaudou!

  26. #21
    inoxxam

    Re : Joystick USB valeurs instables

    Bon, ca y est j'ai refait un typon. Il est en pièce jointe.

    Qu'en pensez-vous? Ai-je plus de chances de succès?

    Merci d'avance et à bientôt!
    Images attachées Images attachées  

  27. #22
    inoxxam

    Re : Joystick USB valeurs instables

    Citation Envoyé par DAUDET78 Voir le message
    A ton avis? pourquoi microchip a mis deux pins pour Vdd et pour Vss ?
    1/ Pour faire beau
    2/ Il avait deux broches qui servaient à rien
    3/ Pour diminuer l'inductances d'alimentation
    4/ Pour poser une question au millionnaire de TF1
    En faite je me suis dit que peut-être c'était un moyen d'apporter l'alimentation d'un côté à l'autre du PIC, lorsqu'on doit l'utiliser en plein d'endroits différents, celà éviterait les "zig zags" des pistes de cuivre.

    Sinon je dirais la 3!

  28. #23
    DAUDET78

    Re : Joystick USB valeurs instables

    C'est bien la 3 .....
    Sur ton cuivre (je n'ai pas tout vérifié !)
    - Mettre un 0,1µF à raz des pins d'alimentation 11 et 12
    - Mettre un 0,1µF à raz des pins d'alimentation 32 et 31
    - Mettre un strap (sous le PIC) pour relier directement le 0V (pin 12) au 0V (pin 31)
    - Le routage de la pin 25 me semble limite (entre pin 22 et 23) et près de 21
    - Pour la prise USB, il n'y a pas des résistances de tirage à mettre ? (à vérifier ??)

    PS : Sur 39 et 40, je mettrais bien deux p'tites LEDs (avec résistance série de 1K au 5V) . C'est toujours sympa de pouvoir faire bagoter un p'tit voyant pour la mise au point (ou pour dire que le programme n'est pas bloqué, ou que l'alimentation est bonne, ou que l'on peut utiliser pour accrocher une sonde de scope pour vérifier qu'on passe bien dans la routine d'interruption)
    J'aime pas le Grec

  29. #24
    inoxxam

    Re : Joystick USB valeurs instables

    Ok merci des conseils. Pour les 0,1µF à raz des pins d'alim, je les mets en plus de ceux que j'ai déjà proches de l'USB ou j'en rajoute en plus?
    Le strap pas de problème.
    Concernant le routage de la pin 25 qu'est-ce qui ne va pas? Il est trop en zig zag?
    Après quelque renseignement, il ne semble pas nécessaire d'ajouter de résistance de tirage à l'USB.

    Pourquoi mettre les LEDs sur 39 et 40? Ce sont des pins particulières du PIC ou je les active manuellement dans le programme pour dire que tout va bien?

    Merci d'avance et à bientôt!

  30. Publicité
  31. #25
    DAUDET78

    Re : Joystick USB valeurs instables

    Citation Envoyé par inoxxam Voir le message
    Pour les 0,1µF à raz des pins d'alim, je les mets en plus de ceux que j'ai déjà proches de l'USB ou j'en rajoute en plus?
    Tu as de la place, mets les en plus
    Concernant le routage de la pin 25 qu'est-ce qui ne va pas?
    l'isolation. une piste moins large ?
    Pourquoi mettre les LEDs sur 39 et 40? Ce sont des pins particulières du PIC ou je les active manuellement dans le programme pour dire que tout va bien?
    Exactement ! Suppose que ton PIC ne démarre pas? tu le programmes avec un soft tout simple qui fait clignoter une LED (et dont tu es sûr). Tu le poses sur ton hard.
    • La LED clignote ?, c'est donc un problème de Soft.
    • La LED ne clignote pas ? C'est un problème de Hard (ou de programmateur)
    J'aime pas le Grec

  32. #26
    inoxxam

    Re : Joystick USB valeurs instables

    Ok, merci, tu m'es de précieux conseils, car il est vrai que c'est des choses qui ne me viennent pas à l'idée toutes seuls, je te remercie donc. Je suppose que pour le piste de la pin 25, c'est le passage entre les pins 21 et 22. Qu'est-ce qui est le plus judicieux: un rétrécissement local, ou le rétrécissement de toute la piste?

  33. #27
    DAUDET78

    Re : Joystick USB valeurs instables

    Le plus simple ....
    J'aime pas le Grec

  34. #28
    inoxxam

    Re : Joystick USB valeurs instables

    Voilà, j'ai apporté les modifications nécessaires pour que cela corresponde à tes recommandations, c'est évidemment en pièce jointe. J'ai mis le typon, ainsi que la version avec les composants dessus.

    Merci beaucoup.
    Images attachées Images attachées

  35. #29
    DAUDET78

    Re : Joystick USB valeurs instables

    Le strap, tu l'as mis sur le 5V, il faut le mettre sur le 0V pour relier la pin 12 à 31 au plus court.
    Ce n'est pas des PullDown de 1Mo, mais de 10K

    Pour R8 à R1, il y a des réseaux de résistance, Tu peux prévoir une double implantation en rajoutant un trou dans l'alignement des 8 trous de droite
    J'aime pas le Grec

  36. #30
    inoxxam

    Re : Joystick USB valeurs instables

    Voilà c'est fait. Pour les résistances de PullDown, de manière générale, comment choisit-on leur valeur? De même pour les condensateurs de découplage, c'est une habitude de mettre ces valeurs ou cela dépend du contexte?

    Concernant les réseaux de résistances j'ai pris la liberté d'en mettre un pour les résistances de tirage du SV3.

    Autre question, côté software maintenant. Est-il possible de faire agir une sortie en parallèle de l'exécution du programme, c'est à dire envoyer une trame bien particulière, à une fréquence particulière, jusqu'à réception d'une information extérieure par exemple, ou la fin d'une temps, en même temps que le programme continue à s'exécuter?

    Merci.
    Images attachées Images attachées  
    Dernière modification par inoxxam ; 25/02/2010 à 15h14. Motif: J'avais oublié de joindre le typon!

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Noyaux Instables et demi-vie
    Par clearwater dans le forum Chimie
    Réponses: 2
    Dernier message: 10/02/2010, 18h37
  2. Commandez un mini moteur par usb et par joystick?
    Par thomas5701 dans le forum Électronique
    Réponses: 6
    Dernier message: 03/09/2008, 21h15
  3. Radioactivité - Noyaux instables ?
    Par slouch dans le forum Physique
    Réponses: 1
    Dernier message: 24/11/2007, 19h03
  4. Saba TX92x chaines instables
    Par MICHKA-B dans le forum Dépannage
    Réponses: 3
    Dernier message: 30/12/2005, 21h07
  5. Joystick USB
    Par Bourkanieche dans le forum Électronique
    Réponses: 3
    Dernier message: 05/04/2005, 14h00
Découvrez nos comparatifs produits sur l'informatique et les technologies.