Bud Spencer a écrit :Pour te répondre concrètement, oui tu peux tout à fait envoyer tes pouet en continu sur un socket UDP. Pas la peine d’aller chercher d’autres protocoles ou d’extrapoler sur toutes un tas de grandes théories inutiles et complétement à côté du sujet, c’est ce que tu pourras faire de plus rapide en transfert de donnée. En revanche tu n’auras aucune garantie que toutes les données arrivent bien au destinataire et qu’il a pu les traiter. Le fait de demander un acquittement te permet d’aviser pour les requêtes qui n’aurait pas eus de réponse en temps voulu (c’est ce que je t’expliquais pour le timeout). Le problème, c’est que pendant ce temps tu ne peux rien envoyer d’autre sur ton socket puisque qu’il est bloqué en attente d’une réponse.
Je pense comprendre : si j'ai une requête, je peux m'assurer d'avoir une réponse ; mais sans requête, je prends ce qui passe, sans aucune garanti d'avoir ce qu'il me faut.
Bud Spencer a écrit :Perso, je ni connais rien en radar, mais j'imagine que si tu veux récupérer les infos de temps d'impulsion, c'est peut être pour pouvoir retracer (graphiquement ?) le signal enregistré. Je t'ai trouvé ca :
http://www.semageek.com/diy-un-analyseu ... n-arduino/
Ca n'est pas le même projet que toi, mais ca pourrait peut être te donner des idées .
destroyedlolo a écrit :- quel est le but ? Parce que tu nous a bien expliqué que tu mesurais les durées, mais ... quel est le but final de ton projet ? Les impacts s'ils manquent des données ?
Merci pour le lien ! J'aime bien ce blog, il est bourré d'articles intéressants qui donnent souvent de l'inspiration !
L'idée de mon outil serait d'avoir un listing des durées précisées précédemment (longueur d'impulsion et écart entre deux impulsions) afin d'analyser un signal radar, pour permettre de détecter des écarts et de les signaler. Avoir toutes les données est une contrainte imposée par mon maître de stage, et s'explique par le fait d'avoir toutes les données pour être sûr à 100 % de leur fiabilité (S'il me manque une dizaine de valeurs et que des écarts s'y trouvent, c'est problématique).
domi a écrit :Je me met à la place de Pinhapple qui a posé une question, et qui subit tout cela alors qu'il attend une assistance.
Pas de souci, ça me fait beaucoup d'informations techniques d'un coup, ce qui me fait de la lecture et du boulot !
destroyedlolo a écrit :[*]Est-ce que tu as (ou peut) atteindre ton objectif sur le signal de 4khz ?
A l'heure actuelle, j'arrive à compter les tours les impulsions grâce aux deux signaux que je lis (après traitement de signaux différentiels). De plus, à l'aide d'une bibliothèque externe, je peux mesurer à la microseconde près la durée d'une impulsion du signal A
OU du signal B, mais pas les deux en même temps (fonction bloquante ?). Le tout avec une Arduino Uno ; et j'avais suggéré d'utiliser une Arduino Due suite à une discussion sur un forum (ici ou Arduino, ça m'échappe), afin de tout faire sur l'Arduino, y compris le stockage (éventuellement shield SD) et l'affichage.
destroyedlolo a écrit :[*]Ton signal A arrivant toutes les 4s, est-ce que tu peux être moins précis que le B ?[/list]
C'est-à-dire "moins précis" ? Il faut que je les détecte tous pour savoir que je commence un nouveau tour, et connaître leur durée et les écarts les séparant.
destroyedlolo a écrit :Ensuite, si tu veux utiliser des acquittements avec tes trames UDP, peut-être devrais-tu passer au TCP qui l'implémente directement dans le protocole ...
Je prouve que c'est chaud avec l'UDP et je tente en TCP !
spourre a écrit :Comme je l'ai déjà indiqué dans d'autres fils, sauf si le choix du Raspberry était imposé et que l'on considère qu'un échec bien analysé et argumenté est formateur, on a bien mis la charrue avant les bœufs. La "bonne" pratique consiste à définir les contraintes du projet puis de choisir une architecture sinon, comme le dit l'adage, quand on a comme seul outil un marteau, tous les problèmes ressemblent à un clou
Choix du RPi imposé ! Intuitivement, ce n'est pas le support que j'aurais choisi, mais au moins j'ai essayé.
spourre a écrit :Toutes les suggestions sur les contraintes du temps réel, du déterminisme, de la latence et du traitement de tous les événements ont déjà été abordés (essentiellement par Bud et moi-même). On a réussi à passer au compilé mais en prévenant que cela ne suffirait certainement pas.
J'ai proposé des approches (et des liens) pour utiliser la bibliothèques bcm qui est plus proche du hard que la wiringpi, les extensions RT de Linux voire le passage au bare métal.
Oui, j'ai bien retenu vos interventions sur mes sujets précédents.
L'article que tu m'avais transmis sur le temps réel sur RPi était touffu mais intéressant, et concluait surtout qu'avoir de la précision en dessous de 10 µs sur RPi n'était pas possible, ou en tout cas pas expliqué dans le texte. A partir de là, comment suis-je censé avoir une précision à 1 µs près...
Pour du tout électronique, c'est la voie royale comme tu l'avais dit, mais là on sort de mes compétences pour aborder de la bonne grosse électronique, et je ne suis pas au point là-dessus (qu'on ne m'en veuille pas, je suis dév' de formation !

).
destroyedlolo a écrit :Il manque aussi une bonne "gestion projet" : ca part un peu dans tous les sens, ca manque de découpage et c'est a mon avis pour ca que ca cafouille.
Je reconnais que je suis parti dans les manipulations sans trop prendre de temps pour lister les possibilités du matériel, les contraintes techniques, etc., mais à ma décharge, j'ai dès le début émis des doutes sur les possibilités qu'a le RPi de traiter un signal "aussi rapide", mais c'est bien de pouvoir le prouver. Si en deux jours j'avais pondu un rapport ayant pour titre "comment le travail qu'on m'a donné ne peut pas fonctionner", je serais peut-être passé pour un mec qui ne veut pas bosser !
Plus sérieusement, j'exagère un peu, mais là j'ai du concret pour dire que ce n'est pas possible avec le matériel actuel et mes compétences. Avec le recul, j'aurais dû plus me renseigner en amont sur ce qu'il est possible et impossible de faire avec le RPi, en tirer les conclusions qui s'imposent, et faire remonter mon travail : si ça passe, tâche suivante ; sinon, mains dans le cambouis et je prouve la même chose en ayant manipulé.
destroyedlolo a écrit :C'est pour ca que c'est sans doute le moment de prendre du recule et surtout de se focaliser l'objectif ... (sans non plus donner forcement les solutions : ca reste un "projet scolaire"

Je vais mettre les choses au propre dans un beau document reprenant tout le travail effectué (et il y en a !), présenter les solutions suggérées et mises en place, conclure, et indiquer quelles solutions on pourrait tenter pour résoudre le problème à l'avenir.
Par curiosité, j'ai mesuré la durée d'envoi de mes paquets UDP depuis l'Arduino : pour envoyer [numéro du tour]-[nombre d'impulsions] (exemple : "1-16384") : environ 560 µs (dont 360 de
parsePacket(), et 180 µs de
beginPacket(),
print(),
endPacket()). Pour mes tests sans brancher le RPi, mon Arduino m'indique 16 384 bips par tour ; dès que je branche le RPi avec envoi de requêtes, l'Arduino m'indique 16 377 bips.
C'est pas gagné !