Communication USB - Hub USB

1
Bonjour,
Depuis que j'ai repris l'exemple de communication USB, développé par Martin en 2013, entre le logiciel Jedicut et les électroniques, il y a un problème de communication pour les équipements travaillant à une vitesse supérieur à 1KHz (steps envoyé aux drivers).
Un jour par mégarde (heureuse), j'ai branché mon électronique sur un Hub USB et le problème de communication était réglé. Dans les lectures sur internet je n'ai pas trouvé d'explications.
Martin avait développé une passerelle USB pour commander les équipements dotés de moteurs de 50pas/tour, ou des vis de plus grand pas, Je comprends pourquoi il avait limité la valeur de division du timer à 63 dans son sketch car le problème survient pour des valeurs inférieures. (63 : valeur du coefficient de vitesse que l'on indique dans la vue de config machine dans Jedicut). C'est le paramètre "F" transféré par la "dll".

C'est pour cela que je demande dans mes notices d'utiliser un hub USB lorsque l'on a besoin d'utiliser le paramètre "F" inférieur à 63.

Aujourd'hui, je suis équipé d'un oscilloscope autonome ce qui est beaucoup plus pratique qu'un oscilloscope logiciel sur PC. Je me suis donc mis à la recherche d'une anomalie éventuelle.

Voici ce que j'ai relevé sans Hub USB
Voie jaune --> debug4 -->interruption timer "F" = 63 Sans hub USB
Voie bleue -->debug3 --> interruption Usart.

Image

La fréquence des interruptions du timer est bonne:
62500/(63+1) = 976.56 Hz

Ce qui est frappant, ce sont les salves de 4 données seulement sur l'Usart. Elles semblent synchronisées sur le timer.

====================================================
Voici ce que j'ai relevé avec le Hub USB
Voie jaune --> debug4 --> interruption timer "F" = 63 Sans hub USB
Voie bleue --> debug3 --> interruption Usart.

Image


Lorsque l'on met le hub, nous obtenons les données les unes à la suite des autres. Nous remarquons sur les interruptions du timer, une impulsion est décalée par rapport à la ligne du curseur de droite. Ceci est dû à une interruption de l'Usart qui est en cours.

======================================================

Beaucoup plus de précision dans ce document :
Jedicut_ComUSB_Analyse.zip
(1.41 Mio) Téléchargé 8 fois
Conclusion :
Le sketch semble fonctionner correctement, la découpe est possible USB à 250000 bauds. Il n'y a aucun signal émanent du sketch qui pourrait provoquer ce défaut de salves de 4 données à la fréquence de 1kHz.
Je ne suis pas spécialiste des liaisons USB et de création de plugin "xxx.dll". Si des spécialistes lisent ces lignes je les remercie de bien vouloir nous donner des informations ou des solutions à ce problème rencontré.

Bonne lecture à tous.
Alain

Re: Communication USB - Hub USB

2
Bonjour Alain,

Très belle analyse, tu as l'air de bien t'amuser avec ton oscillo ! Tu as acheté quel modèle ?

Je ne pourrai pas t'aider sur la partie électronique, je pars de trop loin pour essayer de comprendre. Sur la partie dll, il faut imaginer qu'elle sont décomposer en 2 grandes parties :
- la partie codée par des membres de la communauté, dont moi, c'est celle qui est partagée sur Github (code open source)
- la partie codée par des tiers de type éditeur logiciel, ce sont les librairies systèmes qu'on utilise dans notre code.

La partie développée par nous est plutôt simple et brève, surtout le plugin USB. Ce dernier est très optimisé, ce qui le rend un peu plus complexe, mais les méthodes sont très courtes. Les plugin pour le port parallèle sont plus complexe d'un point de vue algorithme, car il font une partie du travail du sketch.

Pour le plugin USB, il n'y a rien dans notre code qui provoquerait ce comportement d'une manière intentionnelle.

Ce qui m'interpelle, c'est la solution au problème : utiliser un HUB. Un hub n'est pas une simple multi prise, et un signal en sortie du HUB doit forcément différent de la sortie du PC. Un signal amplifié peut être ? ou il y a un petit buffer ?

X(
Jerome

Re: Communication USB - Hub USB

3
Bonjour,
Pour ce qui est de l'oscilloscope, c'est un 2 voies 100MHz. La capture d'écran est très simple, tu mets une clé USB en façade, lorsque tu veux copier une image, tu appuies sur une touche, l'image est figée et enregistrée, un dossier est créer avec un N° d'ordre. vraiment très simple.

https://www.amazon.fr/dp/B087R1ZYPP/ref ... s9dHJ1ZQ==

Pour la dll, lorsque la notice Jedicut sera terminée, je verrai cela.
`); }); })(jQuery, window, document, phpbb);