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

Recherche avancée

18f4550 + 2 boutons en mode HID

Envoyé par linuxien 
18f4550 + 2 boutons en mode HID
vendredi 2 mars 2007 09:39:32
Bonjour à tous,

Votre site est très intéressant et je vous remercie des information mise en ligne. Cela m'aide déjà beaucoup.
A la base, je suis informaticien pas électronicien mais à la force des choses, on y devient petit à petit !
Voila, je vous brosse rapidement le probléme rencontré ce qui me ménera ensuite à vous présenter le projet en cours.
Actuellement mon service enregistre des conférences avec des magnétophones analogiques de type Revox B77. Des personnes assurent la transcription des enregistrements en ré-écoutant les bandes. Les Revox sont pilotés par un pédalier assurant le "play" et le "recul rapide" afin de laisser libre les deux mains de l'opérateur pour assurer la transcription dans un éditeur de texte.
Le problème actuel est que ces magnétophones deviennent vétustes et il est très difficile de trouver des pièces détachée pour en assurer la maintenance, même auprès du fabriquant qui est d'origine suisse.

L'idée et le projet actuel est de modifier les pédaliers existants de ces magnétohpones en ne conservant que les deux inverseurs (fonction play et recule rapide) et de les connecter à un Pic18f4550 pour récupérer par le port USB l'état de ces capteurs. Le dialogue avec le Pic est en mode HID (non RS232). Le pic enverrai une trame USB à chaque changement d'état des inverseurs.

Voila le hic ! Etant informaticien et n'étant pas habitué à jouer avec ces milles pattes, je cherche de l'aide afin d'écrire le programme réalisant ces fonctions dans le fichier user.h.
Le schéma proposé sur ce site présente un interrupteur S2 et le texte qui accompagne son utilisation correspond, je pense, à ce que je souhaite réaliser. Cela est il juste en sachant que je serai obligé d'en remetre physiquement un second sur la carte de test ?
Quelqu'un peut-il m'assurer son aide dans l'écriture du "User.h" ?

Je dispose déjà d'un programmateur pour ces pics ainsi que de 3 exmplaires obtenu en échantillon. Ma carte électronique est réalisée et je vais essayer ce week-end de la faire reconnaitre par Windows en utilisant le Hex (à mettre dans le pic) trouvé sur un autre site (mais en englais)
Sur mon PC, j'ai déjà installé Mplab + C18 et l'intégration de C18 dans MPlab est correcte car j'arrive à la compilation sans erreur des exemples HID et CDC de chez Microchip.
Côté soft, j'ai installé aussi la version personnelle de Delphi 2005 pour développer un éditeur de texte simple intégrant un lecteur audio (mp3 ou wave) que pilotera ce pédalier. La partie Editeur de texte est déjà terminée, me reste à faire la gestion des fichiers audio + pédalier USB.

Vous savez tout de ce projet et je ne serai pas contre une publication sur ce site en échange de l'aide que je souhaiterai que vous m'apportiez.
François

Re: 18f4550 + 2 boutons en mode HID
vendredi 2 mars 2007 13:12:47
Salut,

Enfait ton probleme n'est pas très compliqué, si je comprends bien tu veux avoir deux boutons poussoir (tout ou rien) au lieu d'un seul...

tu as deux possibilités pour ça, à toi de voir en fonction du résultat désiré pour ton applications...

Soit, tu envoies en continu l'état des capteur, par exemple toute les dix millisecondes...

Dans ce cas, tu configures le port sur lequel est connecté les deux boutons en entrée donc par exemple, si connecté sur RC0 et RC1 tu mets que TRISC=0x00000011; qui configure le registre... et alors dans la tache principale ça devrait donner plus ou moins ceci (non essayé):


void ProcessIO(void)

{   

	int i;

	static pressed=0;





   if (HIDRxReport(Buffer,PacketSize ) > 0) // USB receive buffer has data

    {	// rien à faire pour le moment...

}



Delay10KTCYx(10ms_constante);

	Buffer[0]=255;  // par exemple pour indentifier la trame et faire joli

         Buffer[1] = PORTC ; // copie l'état du port C dans le buffer

if(!mHIDTxIsBusy()) {                // blocking

        	HIDTxReport(Buffer, PacketSize );   // transmit packet

}

}//end ProcessIO


deuxieme possibilité, c'est de faire comme le programme d'exemple en mettant deux fois le code:

if (PORTCbits.RC2 == 0) {

		if (!pressed) {



			Buffer[0]=255;

			Buffer[1] = 1 ;

			 if(!mHIDTxIsBusy()) {                // blocking

        		HIDTxReport(Buffer, PacketSize );   // transmit packet

				pressed=1;

			}

		}

	}

if (PORTCbits.RC3 == 0) {

		if (!pressed2) {



			Buffer[0]=255;

			Buffer[1] = 2 ;

			 if(!mHIDTxIsBusy()) {                // blocking

        		HIDTxReport(Buffer, PacketSize );   // transmit packet

				pressed2=1;

			}

		}

	}



	if (PORTCbits.RC2 == 1) {

		pressed=0;

	}

	if (PORTCbits.RC3 == 1) {

		pressed2=0;

	}

dans ce cas il t'enverra un messageà chaque fois que l'interrupteur sera poussé... tu comprendras aisément que ce n'est pas difficile à modifier et d'en faire ce que tu veux, il faut juste ne pas oublier de configurer correctement ton registrer d'entrée afin que celui ci ne soit pas configuré en sortie... (ps: tu n'es pas obligé de te servir du portc tu peux aussi utiliser le portb ou le portd)

Voilà, j'espere que ça a clarifié ton idée... N'hésite pas à venir partagé ta création c'est toujours intéréssant de voir ce qui se développe

Bonne continuation

Benjamin


PS: si tu as du mal a comprendre ce que sont les registres, je te conseil de faire un tour du coté de chez bigonof et son cours sur les pics : [abcelectronique.com]

Re: 18f4550 + 2 boutons en mode HID
vendredi 2 mars 2007 17:25:22
Bonsoir,

Merci beaucoup pour ce début de solution. C'est bien cela, je souhaite deux boutons poussoirs dont l'état est envoyé par le pic au programme logiciel (sous Windows) à chaque fois que l'un ou l'autre est appyué.
En effet, sur ma maquette mes deux poussoirs sur connecté sur un autre port que celui de votre schéma. Il sont à redéclarer correctement dans le fichier I/O.
Je regarde cet exemple ce week-end et je vous tiendrai au courant de la réussite ou des problèmes rencontrés.

Dès que ce projet sera terminé, j'en aurai un second qui sera beaucoup plus complexe au niveau logiciel pour le 4550 mais l'electronique sera très simple. Je dispose déjà d'un source qui fonctionne pour un 18f452 écrit en asm dont le liaison PC interface se fait par port //. Le but est de passer du parrallèle à l'USB en donnant la possibilité de connecter plus d'une interface USB au PC. Pour cela, j'ouvrirai un autre post dans quelques semaines (le temps de terminer le soft que va piloter ce pédalier)
Encore merci à toi Benjamin
J'ai déjà lu la documentation de Bigonof mais je vais en profiter pour m'y replonger.
Francois
Re: 18f4550 + 2 boutons en mode HID
vendredi 2 mars 2007 21:00:18
Bonsoir Benjamin

J'ai voulu intégrer le code que vous m'avez proposez cet après-midi dans le fichier user.c téléchargé sur votre site dans le fichier "Hid.zip".
Dans un premier temps, j'ai voulu compiler vos sources sans rien y avoir modifié et j'ai des messages d'erreur au niveau des bits de configuration du pic. Vous trouverez ci-dessous ces deux messages d'erreurs.

MPLAB C18 v3.10 (demo)
Copyright 1999-2005 Microchip Technology Inc.
Days remaining until demo becomes feature limited: 60
G:\Pédalier\roboticus\hid\main.c:160:Error [1224] configuration setting 'FCMEM' not recognized
G:\Pédalier\roboticus\hid\main.c:165:Error [1225] configuration value '28' not recognized for configuration setting 'BORV'


PS : la compilation s'arrêtant là, je ne peux assurer qu'il n'y en ai pas d'autres par la suite. Je n'ai trouvé aucun message sur ce forum traitant de ce problème de compilation des exemples.


Autre question : Dois-je bien ajouter le code que vous avez écrit :
* dans le fichier user.c de l'exemple de votre zip HID à télécharger ou bien
* dans le fichier user.c du répertoire "hid" fournis dans le "MCHPFSUSB" de microchip en sachant que je ne devrait plus utiliser la DLL "mcHID" écrite par Mécanique mais celle proposé par Microchip.

Merci de nouveau pour votre aide.
François


Re: 18f4550 + 2 boutons en mode HID
vendredi 2 mars 2007 21:28:38
Salut,

Premierement il faut bien mettre le code dans le fichier user.c de l'archive téléchargée sur ce site (remplacer le code du process IO par celui-ci)

Deuxiement les erreurs que tu obtiennes ne sont pas due au code, mais à une erreur due à la configuration, j'ai déjà vu cette erreur elle est assez embettante... Essaye un peu de compiler le code dispo ici :

[www.roboticus.org]

enfait au bas de main.c dans la version original on a la configuration de tous les fusible du pic et je pense que y'a un probleme avec le compilateur mais je sais plus vraiment à quoi c'est du désolé... Dans la version ci-dessus les fusibles ont été inscrit dans le projet et non le main.c ...

A+
Re: 18f4550 + 2 boutons en mode HID
vendredi 2 mars 2007 21:44:59
Bonsoir,

Je viens d'essayer de nouveau avec cet exemple, l'erreur est toujours présente.
Cela ne viendrai t-il pas de la version du MCC18 de chez Microchip que j'utilise ?
François
Re: 18f4550 + 2 boutons en mode HID
vendredi 2 mars 2007 22:18:21
Hey oui c'est encore moi mais peut être avec une solution !
j'ai trouvé ce post sur le forum [www.roboticus.org]
qui correspond en quelque sorte à mon problème.

Si je mets en commentaire toutes les lignes de configuration et que je lance une compilation de ton exemple HID sans rien y toucher, la compiltion va jusqu'au bout avec un message "Build Succeeded".

Ensuite, lors de la programmation du Pic, je pourrai avec le logiciel du programmateur (je crois qu'il y a un écran pour cela) mettre les bonnes valeurs de configuration pour que lors de sa programmation, la configuration nécessaire notée dans le main.c soit effective.

Cela est-il envisageable pour que je puisse modifier mon source du pic + tests et avancer le développment de l'éditeur de texte sous Delphi?

Je chercherai par la suite sur les forums le pourquoi ces configurations ne sont pas prises en compte lors de la compilation et ouvrirai un post sur ce forum pour ne tenir informé d'autres personnes qui souhaiteraient commencer avec un 18f4550.

A+
François
Re: 18f4550 + 2 boutons en mode HID
samedi 3 mars 2007 11:57:13
Tu peux directement configurer les fusibles dans MPLAB dans configure-> configure Bits

Mais je sais pas si winpic800 met priorité au bit tel qu'ils sont configuré dans winpic ou tel qu'ils sont dans le fichier hex.... C'est un peu bete mais a partir du moment ou le firmware a fonctionner chez moi y'a certaine question que je me suis arreté de me poser winking smiley

A+

Benjamin
Re: 18f4550 + 2 boutons en mode HID
samedi 3 mars 2007 12:50:50
Bonjour,

Pour le problème rencontré de FCMEME et la valeur du BORV, j'ai ouvert un autre post donnant la solution.
C'est bien ma première idée qui était la bonne. Ces bits de configuration ont évolués également avec l'update de la version de MCC18.
Avec la version que j'utilise actuellement (3.10 Student), il faut modifier ces valeurs comme indiqué dans le post intitulé "pb de compilation avec FCMEM et BORV dans les exemples"
Je me suis épaté sur ce coup là !
A+
François
Re: 18f4550 + 2 boutons en mode HID
samedi 3 mars 2007 14:40:56
Bonjour Benjamin,

Depuis cet A-M, j'ai entrepis d'ajouter le code au fichier User.c + configurer le port et ses bits.
Mes poussoirs sont connectés, sur ma platine d'essai, en RB2 et RB4 du 18f4550.

J'ai choisi la seconde solution proposée dans ton premier post qui est de copier le code du bouton et d'en attribuer un autre bit du port B (-> RB4) (en modifiant également le code d'origine sur un autre bit du port B ->RB2)
Cela est fait.

J'ai cherché dans le fichier io_cfg.h la déclaration de ton port C. Je n'y ai rien trouvé alors que ce fichier est fait pour cela normalement (c'est ce que j'ai lu sur la plupart des autres forums).

Malgré que mon portB n'est pas déclaré en sortie, ni en mode pull-up (j'ai des résistances de tirage à l'extérieur du pic) et en plus je viens de lire sur le datasheet que RB0 à RB4 sont configurés en mode analogique au reset, le programme se compile sans erreur

Je pense que la configuration du port C a été faire dans le fichier user.c par
void UserInit(void)
{
Trisc =252;
PORTC=0;
} // End Userinit

Ma conclusion est-elle correcte ?

Et comment faire pour mon port B avec ses entrées analogiques ?

J'ai vraiment pas choisis les bons bits du port B !

Merci
François
Seuls les utilisateurs enregistrés peuvent poster des messages dans ce forum.

Cliquez ici pour vous connecter