Salut,
J'ai à faire une application utilisant ce convertisseur, mais j'avoue être dans le brouillard pour la partie USB. Il faut dire que je découvre ce protocole (j'ai réalisé quelques applis qui utilisent RS232, mais les communications sont loin d'être ma spécialité) et j'ai du mal à faire le lien entre les différentes docs que je consulte :
http://abcelectronique.com/acquier/USB.html
http://www.motrona.eu/PDF/Uz210_f.pdf
http://www.motrona.eu/PDF/Serpro_e.pdf
http://www.developpez.net/forums/d12...ipherique-usb/
Prises individuellement et du point de vue théorique, elles me paraissent claires (bien que je découvre que l'USB est bien plus complexe que le RS232 !), mais quand j'essaie de voir comment je pourrais faire pratiquement, j'ai l'impression qu'il me manque un paquet de choses essentielles ! Est-ce seulement parce que, je l'avoue, je n'ai pas pris le temps de lire toute la première doc, et d'en avoir pris seulement ce qui me semblait indispensable ? Si je ne doute pas qu'une lecture plus assidue me serait très bénéfique, je n'ai pas l'impression qu'elle m'aidera beaucoup sur le plan pratique...
Ce que j'ai à réaliser est simple :
Récupérer sur l'USB les données converties de l'entrée analogique pour les afficher sous forme de courbe. Peu importe de les récupérer "à la volée" ou par échantilonnage. Cela doit tourner sous Linux (je développe sur Ubuntu 12.04) et je pensais utiliser libusb.
Mais voilà : je ne parviens pas à voir comment "traduire" le protocole décrit par Motrona en code C qui, via libusb, fera le dialogue avec l'UZ210...
D'abord, me faut-il un driver ? Je pensais qu'avec libusb c'était inutile, mais les explications de djuju me mettent un doute... Si je dois en utiliser un, comment le générer ?
Ensuite, comment faire les requêtes ? J'ai un peu de mal à retrouver, dans les exemples que j'ai, la relation entre les appels de fonction qui sont faits et la théorie. J'ai fait quelques analyses avec wireshark, et j'ai là aussi du mal à retrouver les bmRequestType, bmRequest, wValue, wIndex, wLength... Il y a plusieurs cas où l'ordre ou la taille des données semble différent... Bref, quelque chose m'échappe, mais je n'arrive pas à voir quoi exactement... Y aurait-il un exemple qui se rapprocherait plus de ce que je dois faire ?
Ce que j'ai quand même réussi à faire
J'ai réalisé il y a quelque temps une commande d'un bras robotisé KSR10. Bon, je n'ai pas eu grand mal : je suis parti d'un script python que j'ai trouvé sur le net, et pour la partie USB je me suis contenté de recopier les appels à libusb. Cela me paraissait assez simple et clair : après recherche du bras et obtention du handle, tout ce qu'on fait est d'envoyer une série de bits sur 3 octets, chacun commandant un moteur :
J'arrive aussi, en réutilisant le même code d'initialisation, à obtenir un handle pour l'UZ210. Mais après, je suis bloqué ! Je ne suis pas arrivé à faire la moindre récupération de données qui fonctionne... Je ne sais même pas que faire de la commande de lecture donnée dans la doc de l'UZ210 et ne comprends pas pourquoi elle n'a aucun rapport avec ce qui est décrit dans le site d'abcelectronique.com...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 r = libusb_control_transfer(devh, 0x40, //uint8_t bmRequestType, 6, //uint8_t bRequest, 0x100, //uint16_t wValue, 0, //uint16_t wIndex, cmd, // Les 3 octets de la commande CMD_DATALEN, 0 );
Si quelqu'un pouvait m'indiquer une doc, un exemple ou autre qui me mette le pied à l'étrier...
Partager