Bienvenu(e)! Identification Créer un nouveau profil

Recherche avancée

Gamepad HID (32Buttons)

Envoyé par ironglove 
Gamepad HID (32Buttons)
mercredi 13 avril 2011 20:30:44
Bonjour à tous,

voila je me heurte à un problème, je dois réaliser un module permettant jusqu'à 32 entrées (des boutons donc digital)
qui simule un Pad (donc en gros faire une grosse manette de 32boutons) en USB.

Je me suis tourné vers le 18F4550 mais je n'arrive pas à le faire reconnaitre en HID par le pc...

Concernant le matériel, je n'ai que les 2 condos, l'USB alimenté en USB et un quartz de 20Mhz.
Je programme avec un PicKit2 et je code avec MikroC Pro 4.6

J'ai recréé un fichier de description pour le firmware mais il contient toujours quelques erreurs...

Il me dit que :
typedef union
{
        unsigned char byte;
        byte_bits bit;
}byte;
Est un Inconsistent type et :

typedef struct
{
        POV:4;
        B4:1;
        B5:1;
        B6:1;
        B7:1;
}byte_bits;

typedef union
{
        unsigned char byte;
        byte_bits bit;
}byte;
char read[64],write[64];
unsigned char temp,pov;
char x_axis,y_axis,throttle=0;

void interrupt(void)
{
        USB_Interrupt_Proc();
}

void main(void)
{
        byte buttons;

        buttons.byte=0;

        //Initialize ports
        TRISB=255;  //Set port b to inputs - Port b samples all the digital switches

        HID_Enable(read,write);

        while(1)
        {
            /////////////////////////////////
            //Joystick buttons
                /////////////////////////////////
                //Button 1
             if (PORTB.RB0)
                buttons.bit.B4=1;
                else
                    buttons.bit.B4=0;
                //Button 2
            if (PORTB.RB1)
                buttons.bit.B5=1;
                else
                    buttons.bit.B5=0;
                //Button 3
               if (PORTB.RB2)
                buttons.bit.B6=1;
                else
                    buttons.bit.B6=0;
                //Button 4
               if (PORTB.RB3)
                buttons.bit.B7=1;
                else
                    buttons.bit.B7=0;
                    
                //USB
                write[0]=buttons.byte;

                while(!HID_Write(write,1))
                ;
        }
}
Pour ceci il me met :
42 402 ; expected, but 'bit' found JoystickTest.c
ou bien
44 316 Identifier expected, but 'bit' found JoystickTest.c

Pourriez vous m'éclairer un petit peu? Même ne fut ce qu'un coup de pouce pour me faire avancer sad smiley

Merci smiling smiley

Re: Gamepad HID (32Buttons)
mercredi 13 avril 2011 21:31:02
Salut,

Tu ne peux pas donner comme nom de variable le mot bit et byte. Ce sont des mots réservés par le compilateur.

Change les et ça devrait marché.

Pour ton circuit, l'as tu déjà essayé avec un firmware qui marche? Quels sont les capacités que tu as mis? (valeur et connexion)


Bonne programmation ;-)

Benjamin

.: [www.roboticus.org] :. Control your own world !
Re: Gamepad HID (32Buttons)
jeudi 14 avril 2011 06:12:37
Merci pour ta réponse smiling smiley

Alors, je l'ai testé avec les exemples de mE et j'arrivais à écrire dessus.
Mes capacités sont 22nF en // pour le Quartz mais aucune pour l'USB, est ce grave?

Voila le code actuel, il compile
typedef struct
{
        B4:1;
        B5:1;
        B6:1;
        B7:1;
}byte_bits;

typedef union
{
        unsigned char byte_but;
        byte_bits bit_but;
}byte;
char read[64],write[64];
unsigned char temp,pov;
char x_axis,y_axis,throttle=0;

void interrupt(void)
{
        USB_Interrupt_Proc();
}

void main(void)
{
        byte buttons;

        buttons.byte_but=0;

        //Initialize ports
        TRISB=255;  //Set port b to inputs - Port b samples all the digital switches

        HID_Enable(read,write);

        while(1)
        {
            /////////////////////////////////
            //Joystick buttons
                /////////////////////////////////
                //Button 1
             if (PORTB.RB0)
                buttons.bit_but.B4=1;
                else
                    buttons.bit_but.B4=0;
                //Button 2
            if (PORTB.RB1)
                buttons.bit_but.B5=1;
                else
                    buttons.bit_but.B5=0;
                //Button 3
               if (PORTB.RB2)
                buttons.bit_but.B6=1;
                else
                    buttons.bit_but.B6=0;
                //Button 4
               if (PORTB.RB3)
                buttons.bit_but.B7=1;
                else
                    buttons.bit_but.B7=0;
                    
                //USB
                write[0]=buttons.byte_but;

                while(!HID_Write(write,1))
                ;
        }
}

Mais l'USB n'est même pas reconnu par windows sad smiley
Merci de ton aide smiling smiley
Re: Gamepad HID (32Buttons)
jeudi 14 avril 2011 11:04:29
Aie Aie Aie Aie Aie ! ;-)

Regarde le schéma sur cet article, c'est la base minimum pour faire de l'usb
[www.roboticus.org]

Tu dois mettre absolument une capacité de 470nF sur Vusb, c'est obligatoire!!!!!

Et éventuellement suivant la configuration de ton firmware, une résistance entre MCLR et VCC

En ce qui concerne ton programme, je ne connais pas les librairies de MikroC, mais dans ton programme je ne vois jamais dans ta boucle une mise a jour de la communication usb. En regardant dans les exemples sur le net tu devrais mettre queqlue chose du style : USB_Polling_Proc(); // Call this routine periodically

Qui permet à la puce de maintenir la connexion usb.

Je suis sur que ça marchera apres ça winking smiley

Benjamin

.: [www.roboticus.org] :. Control your own world !
Re: Gamepad HID (32Buttons)
jeudi 14 avril 2011 11:45:20
Okay, dés que j'aurais le temps de passer au magasin d'électronique (si il est ouvert ...) j'irai en prendre 2-3 winking smiley

Concernant le code, je vais essayer de m'inspirer d'un exemple du web comme tu le suggères smiling smiley

Si tu en as quelques uns en stocks qui sont intéressants, je suis preneur smiling smiley

Merci pour tout winking smiley

PS: je tiendrai ce post à jour en fonction de mon avancée winking smiley
Re: Gamepad HID (32Buttons)
jeudi 14 avril 2011 19:02:41
Super! tiens nous au courant,

Au passage, j'ai pas fait attention, mais sur ton quartz c'est 22pF qu'il faut mettre, pas 22nF... j'espere que c'était une erreur de frappe, sinon prend aussi des 22pF au magasin winking smiley

Benjamin

.: [www.roboticus.org] :. Control your own world !
Re: Gamepad HID (32Buttons)
vendredi 15 avril 2011 07:19:16
Bonjour !

Correction : il s'agit bien de 22pF winking smiley Faute de frappe :p

Je vais normalement chercher les composants fin d'après midi.

Donc le post sera tenu à jour par mes échecs/réussites d'ici fin du week end winking smiley
Re: Gamepad HID (32Buttons)
samedi 16 avril 2011 12:51:02
Bonjour !

Décidément rien ne va ... J'ai réussi à faire reconnaître mon montage avec un bootloader mais ... Pas moyen de lui faire comprendre que c'est un joystick...

Avec quel éditeur travailles-tu?

Tu n'aurais pas quelques samples de codes ou des liens qui t'ont aidés par le passé?

Merci smiling smiley
Re: Gamepad HID (32Buttons)
samedi 16 avril 2011 15:21:37
Salut,

Perso, j'utilise les firmwares proposés par microchip et le compilateur C18 de microchip en version academic (gratuite, mais pas forcément la plus simple)

Dans les exemples de code, il y a un gamepad. Je viens de le tester et ça marche. J'ai juste du modifier le pid (variable MY_PID en 0005). ce qui arrive des fois, c'est quand tu proposes un mauvais VID/PID, windows l'attribue a un autre drive et il ne parvient pas à communiquer avec.

Tu peux trouver tous les exemples de microchip ici:
[www.microchip.com]

Je vais essayer d'écrire un article qui explique comment on le met en oeuvre, mais il me faut un peu de temps pour ça ;-)

Benjamin

.: [www.roboticus.org] :. Control your own world !
Re: Gamepad HID (32Buttons)
samedi 16 avril 2011 22:55:22
Salut,

je me replanchais justement sur le dernier framework usb de microchip ce soir, et je constate sous windows seven que j'ai beaucoup de mal à faire fonctionner les demo si j'utilise le bootloader. Sous windows XP j'ai pas de probleme.

Essaye un peu ta démo sans le bootloader?

Benjamin

.: [www.roboticus.org] :. Control your own world !
Seuls les utilisateurs enregistrés peuvent poster des messages dans ce forum.

Cliquez ici pour vous connecter