Principe de l'autocalibration des joysticks ???

Salle dedieé aux péripheriques : Joystick, palloniers, Track-Ir

Topic author
gladiator62
Apprenti-Mécano
Apprenti-Mécano
Messages : 235
Inscription : 04 décembre 2003

Principe de l'autocalibration des joysticks ???

#1

Message par gladiator62 »

Salut ,

Je recherche des infos sur comment réaliser l'autocalibration des Joysticks (principe , algo .......). :sad:

J'ai réalisé à l'aide d'un PIC 18f2550 un petit interface USB qui me permet de commander un joystick muni d'un "vieux" port jeu (FlightStick de CH Products). J'ai recablé les potentiomètres pour récuperer les tensions variables comprise entre 0 et 5V (X , Y et Throttle) et les transmettre à mon interface.

Ces tensions sont converties sur 10 bits et sont ensuite transmises à Windows. Windows reconnait bien le joystick et celui ci fonctionne bien. :yes:

Cependant j'aimerais comprendre ce qu'est l'autocalibration pour voir si celui ci est nécessaire pour mon interface. :huh:

Par avance , Merci :yes:

NN_Apache
Apprenti-Mécano
Apprenti-Mécano
Messages : 397
Inscription : 07 mars 2004

#2

Message par NN_Apache »

Si je comprend bien tu as fait une interface ( port midi <--> usb )
ou as tu trouvé le schéma? ça m'intéresse
Comment est reconnu le joy?
Si il apparait dans "panneau de conf/ contrôleurs de jeux" c'est windob qui le calibre dans proprieté. Me trompje? :huh:
Avatar de l’utilisateur

-=COS=-LeBorgne
Jeune Pilote
Jeune Pilote
Messages : 1362
Inscription : 12 avril 2006

#3

Message par -=COS=-LeBorgne »

autocalibrage=autocentrage ?

question : à combient revien le montage , car on trouve des adaptateur DB15 vers USB pour moins de 20 € et ca doit faire exactement la meme chose non ?

Pour ma part j' ai un vieux palonier Thrustmaster Gameport et j' aimerais bien m' en resservir :tongue:
Image

Sokol1
Nouvelle Recrue
Nouvelle Recrue
Messages : 128
Inscription : 21 novembre 2005

#4

Message par Sokol1 »

Gladiator,

Vous construire un circuit USB comme Mjoy, BU0836, Plasta V2?
Et ré-fil entier vous CH?
Pots et boutons à nouveau circuit?

Je pense que l'autocalibration est inhérent à PIC a utilisé.

S'il vous plaît, afficher photos de votre "bébé". :)

S!

Sokol1

Topic author
gladiator62
Apprenti-Mécano
Apprenti-Mécano
Messages : 235
Inscription : 04 décembre 2003

#5

Message par gladiator62 »

Exact , Sokol1 :yes:

Mon montage est une sorte de clone du BU0836 ( le circuit utilisé est le même , en l'occurence un PIC 18f2550 ) mais je n'ai actuellement pas encore implémenté toutes les fonctions, ni réalise de schéma :crying: .


Le PIC gére 3 axes , X (branché sur la pin2 ) , Y (sur la pin 3) et Throttle ( pin 4) ainsi que 8 boutons (en faite 1 bouton blanc sur la photo ) qui sont reliés au 8 lignes du portB du PIC configuré en entrée (pin 21 à 28). :cowboy:

Actuellement à titre expérimental , le bouton blanc commande les 8 lignes du port B.

Bien évidemment j'ai modifié le cablâge du joystick , à savoir pour chaque potentiometre , une broche à 0V , une broche à 5 V et la broche centrale (la resistance variable) sur l'une des entrées (pin2 , 3 , 4 ) du PIC.


Le convertisseur analogique/numérique du PIC converti cette tension en une valeur actuellement comprise entre 0 et 255 (il est possible d'utiliser une plage de 0 à 1024) et le transmet via le bus USB à windows XP.

Le PIC est automatiquement reconnu (classe HID) , paramétrable et utilisable par windows.

le descripteur HID

Code : Tout sélectionner

const char USB_CLASS_SPECIFIC_DESC[] = { 0x05, 0x01, // Usage Page = Generic Desktop 0x09, 0x04, // Usage = Joystick 0xa1, 0x01, // Collection = Application 0x05, 0x02, // Usage Page (Simulation Controls) 0x09, 0xBB, // Usage (Throttle) 0x15, 0x00, // Logical Minimum (0) 0x26, 0xFF,0x00 // Logical Maximum (255) 0x35, 0x00, // Physical Minimum (0) 0x46, 0xFF,0x00, // Physical Maximum (255) 0x75, 0x08, // Report Size (8) 0x95, 0x01, // Report Count (1) 0x81, 0x02, // Input (Data,Var,Abs) 0x05, 0x01, // Usage Page = Generic Desktop 0x09, 0x01, // Usage (Pointer) 0xA1, 0x00, // Collection (Physical) 0x09, 0x30, // Usage (X) 0x09, 0x31, // Usage (Y) 0x15, 0x81, // Logical Minimum (-127) 0x25, 0x7F, // Logical Maximum (+127) 0x95, 0x02, // Report Count (2) 0x81, 0x02, // Input (Data,Var,Abs) 0xC0, // End_Collection 0x05, 0x09, // Usage Page (Button) 0x19, 0x01, // Usage Minimum (Button1) 0x29, 0x08, // Usage Maximum (Button8) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x01, // Logical Maximum (1) 0x35, 0x00, // Physical Minimum (0) 0x45, 0x01, // Physical Maximum (1) 0x95, 0x08, // Report Count (8) 0x75, 0x01, // Report Size (1) 0x65, 0x00, // Unit (None) 0x81, 0x02, // Input (Data,Var,Abs) 0xC0 // End Collection };


une partie de programme du PIC :

Code : Tout sélectionner

while (TRUE) { if(usb_enumerated()) //si le PicUSB a été configuré { // Lecture des entrées analogiques set_adc_channel( 0 ); // Selection Voie 0 delay_us(40); Buffer = Read_ADC(); // Lecture du Canal 0 : X X = Buffer -128 ; // Centrage de l'axe à 2.5V set_adc_channel( 1 ); // Selection Voie 1 delay_us(40); Buffer = Read_ADC(); // Lecture du Canal 1 : Y Y = Buffer -128 ; set_adc_channel( 2 ); // Selection Voie 2 delay_us(40); Throttle = Read_ADC(); // Lecture du Canal 2 : Throttle set_adc_channel( 3 ); // Selection Voie 3 delay_us(40); Buffer = Read_ADC(); // Lecture du Canal 3 : Rudder Rudder = Buffer - 128 ; set_adc_channel( 4 ); // Selection Voie 4 delay_us(40); Buffer = Read_ADC(); // Lecture du Canal 4 : Axe ? Trim[1] = Buffer - 128 ; delay_us(40); // Lecture des entrées numériques Boutons = input_b(); // Envoie des entrées sur le port USB usb_put_packet(1, TxUSB, 4, USB_DTS_TOGGLE); //envoie d'un paquet de 4 octets sur EP1 vers le PC delay_ms(10); } }

Concernant le prix , bein dans l'état actuel des choses , un PIC + un quartz + quelques condos , je dois pas être loin des 15 euros TTC :crying:
Pièces jointes
Interface01.JPG
Joy03.JPG
Joy02.JPG
Joy01.JPG
Avatar de l’utilisateur

-=COS=-LeBorgne
Jeune Pilote
Jeune Pilote
Messages : 1362
Inscription : 12 avril 2006

#6

Message par -=COS=-LeBorgne »

C' est malheureusement le problème , en fesant cela soit meme on arrive vite au dela de l' économiquement rentable , mais il y a toujours la satisfaction d' avoir trouvé la solution tout seul et ca peut servir dans un projet de plus grande envergure . En tout cas bravo :usflag:
Image

Topic author
gladiator62
Apprenti-Mécano
Apprenti-Mécano
Messages : 235
Inscription : 04 décembre 2003

#7

Message par gladiator62 »

NN_Apache , oui le Joy est calibré par windows et il fonctionne parfaitement :usflag:

Si tu regardes le code tu remarqueras pour les axes X et Y que je soustrais 128 , ce qui correspond au centrage du potentiometre ( le joy relaché on doit mesurer une tension de 2.5V sur X et Y).

Alors si il existe un jeu mécanique ou si le pot présente un defaut ,la tension mesurée au repos par le convertisseur sera différente de 2.5V , donc mon -128 risque de ne plus être représentatif (je suis pas sur d'être clair là :blink: ) . D'où mon inquiètude , et le sujet de post :helpsmili



Il faudrait que je trouves une methode qui me permette d'autocalibrer le joy (connaître les limites mini, maxi, la position centrale et ...........bein je cherche ... :crying: )

Gladiator62
Pièces jointes
Joywin02.jpg
Joywin01.jpg

NN_Apache
Apprenti-Mécano
Apprenti-Mécano
Messages : 397
Inscription : 07 mars 2004

#8

Message par NN_Apache »

Chapeau bas Gladiator
Si la tension au borne de tes potars est bien de 5V, ton curseur donnera les 2.5v que si le potar est centré lorsque le joy est au neutre. C'est juste?
Ton seul recour sera de centré le potar mecaniquement.
Sinon en mettant une résistance variable en amont ou en aval du potar, en cas de tension < ou > à 5V .
De toute façon le curseur ne fait pas toute la course du potar, le plus simple à mon avis c'est de recentrer les potars.

NN_Apache
Apprenti-Mécano
Apprenti-Mécano
Messages : 397
Inscription : 07 mars 2004

#9

Message par NN_Apache »

LE BORGNE ne t'embete pas avec le port game de ton palonier.
Cela fait longtemps que j'en ai un et je l'ai tout de suite coupé pour le càbler en direct dans mes joys successif ( MS FF2 , X45 , COUGAR )
Il te faudra peut être changer le potar en fonction de ton joy.
Quel est ton joy ? il doit bien y avoir un potar à recupérer?
Avatar de l’utilisateur

-=COS=-LeBorgne
Jeune Pilote
Jeune Pilote
Messages : 1362
Inscription : 12 avril 2006

#10

Message par -=COS=-LeBorgne »

Pour ma part je suis équipé du X45 de chez saitek . j' ai essayé d' intercaller le palonier entre la MDG et le Stick en espérant que cela vienne remplacer la palette de la MDG mais sans résultats .

MDG : Manette Des Gaz
Image

NN_Apache
Apprenti-Mécano
Apprenti-Mécano
Messages : 397
Inscription : 07 mars 2004

#11

Message par NN_Apache »

Il faut jouer du fer a soudé :yes:
ça serait trop facile sinon :sad:
J'ai vue sur un site espagnole, je crois, tout les détails pour faire la manipe.
Je n'ai plus mon X45, je ne peux plus dire sur quel fil il faut câbler ton palonier.
Mais le montage marchait a merveille :yes:
Avatar de l’utilisateur

-=COS=-LeBorgne
Jeune Pilote
Jeune Pilote
Messages : 1362
Inscription : 12 avril 2006

#12

Message par -=COS=-LeBorgne »

bah ca doit pas etre compliqué , j' avais bien réussi a faire un palonier avec le pédalier d' un volant Mad Catz ! lol , pas top mais pour commencer ca m' avais bien sevi !
Image
Avatar de l’utilisateur

dimebug
Pilote d'essais
Pilote d'essais
Messages : 6900
Inscription : 18 août 2001

#13

Message par dimebug »

pour ce qui est des routine d'autocallibration comme tu les trouves dans les joysticks du marché y'a plusieurs methodes.

Deja il faut savoir que le fabricant sait parfaitement ce qu'il va obtenir aux bornes du potentiometre et ca ca change tout. Son autocallibration va donc en réalité se contenter d'absorber les defauts du systeme :
les varations de specs des potars au seins d'une meme série
les jeux mecaniques.

La plupart des produits du commerce integre une deadzone hard... dans le cas de ton echantillonage entre 130 et 126 par exemple. Avec ca tu as ton neutre d'office, ton autocallibration va donc s'echelonnée sur les valeurs min et max. Regarde comment se comporte un Cyborg evo au branchement, la routine d'autocallibration est assez grossiere et on voit parfaitement les erreurs d'evaluation de position du manche tant que les valeur min et max de chaque axe n'ont pas étés atteintes.

Autre methode simple pour determiner ton neutre : tu supposes que le neutre est la valeur de l'axe au moment ou tu branches le joy sur le port USB...
Premiere valeur lu = valeur du neutre... apres tu n'a plus qu'a mesurer ton min et ton max.
La vrai difficulté n'est donc pas le neutre, mais une bonne quantification de ta resolution sur l'ensemble de ta plage de courant disponible.

Pour fiabiliser les mesures, tu peux avoir recours a un compteur/ caclulateur qui te donnera une valeur moyenne de mesures pour tes valeur max et min ce qui fiabilisera le tout.
Image Dresseur de cochon (sauvage)

Topic author
gladiator62
Apprenti-Mécano
Apprenti-Mécano
Messages : 235
Inscription : 04 décembre 2003

#14

Message par gladiator62 »

Merci Dimebug,


Je vais tenter la deuxième solution , mesure du neutre au branchement du controleur et mesures successives du Max et du Min pour en faire une moyenne.

Je vous tiens au courant. :yes:
Avatar de l’utilisateur

-=COS=-LeBorgne
Jeune Pilote
Jeune Pilote
Messages : 1362
Inscription : 12 avril 2006

#15

Message par -=COS=-LeBorgne »

ouep c' a m' intéresse ! Mine de rien t' est en train de faire la même chose que Léo Bodnar ........... et c' est particulièrement intéressant .
Image
Avatar de l’utilisateur

C6_Trollbug
Jeune Pilote
Jeune Pilote
Messages : 1306
Inscription : 25 juillet 2005

#16

Message par C6_Trollbug »

Je ne voudrais pas paraître rabat-joie , mais si ton montage , avec seulement le PIC et quelque condos te revient déjà à 15 euros , une fois que tu auras rajouté ton circuit imprimé et la connectique , tu ne seras pas loin des 26 euros que coûte la carte Leo Bodnar , non ?
Ceci dit , la valeur ajoutée par le fait que ce sera toi et nul autre qui l'aura faite est inestimable , elle , je serais bien mal placé pour ne pas le reconnaître ...

Est-ce qu'avec ce type de puce , il serait possible d'émuler un clavier ?
Boîtier Cosmos1000, CARTE_MERE ASUS ROG STRIX X470-F GAMING, AMD Ryzen 7 2700X , 32Go Corsair DDR4, SSD M2 2To , Raptor 300 Go + 1 To, GTX1660 TI 6Go ASUS, Corsair TX 850W, écran incurvé AOC 27" , palo Virpil VPC Interceptor , embase Virpil MongoosT-50 CM3 , grip TM F/A 18 , throttle Virpil MongoosT50-CM3
Avatar de l’utilisateur

-=COS=-LeBorgne
Jeune Pilote
Jeune Pilote
Messages : 1362
Inscription : 12 avril 2006

#17

Message par -=COS=-LeBorgne »

Ca me semble à priori possible , fonce sur le site de microchip et épluches les PIC , tu y trouvera des modèles aux capacitées particulières ( USB 2.0 , PS2 .... ) . Pour ce genre d' application , il faudra beaucoup d' entrées/sorties ( a vue de nez autant que ceux que proposent les CI des calviers ( 18+8 ) Après c' est une question de programation ......
Image
Avatar de l’utilisateur

C6_Trollbug
Jeune Pilote
Jeune Pilote
Messages : 1306
Inscription : 25 juillet 2005

#18

Message par C6_Trollbug »

Sois raisonnable , Leborgne . Mes compétences en électronique sont dépassées dès qu'on va au-delà du contact on/off ... :crying:
Boîtier Cosmos1000, CARTE_MERE ASUS ROG STRIX X470-F GAMING, AMD Ryzen 7 2700X , 32Go Corsair DDR4, SSD M2 2To , Raptor 300 Go + 1 To, GTX1660 TI 6Go ASUS, Corsair TX 850W, écran incurvé AOC 27" , palo Virpil VPC Interceptor , embase Virpil MongoosT-50 CM3 , grip TM F/A 18 , throttle Virpil MongoosT50-CM3
Répondre

Revenir à « salle: Periphériques: Hotas, Joysticks, Track-IR »