DLL timer ultra precis

Résolu
deusyss Messages postés 11 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 5 mars 2007 - 4 mars 2007 à 18:36
deusyss Messages postés 11 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 5 mars 2007 - 5 mars 2007 à 19:45
       Bonjour, à tous (et à toutes...).

   Voilà, je suis à la recherche d'une <layer id="google-toolbar-hilite-1" style="background-color: Fuchsia; color: black;">DLL</layer> possédant un <layer id="google-toolbar-hilite-0" style="background-color: Yellow; color: black;">timer</layer> ultra précis (d'environ 1µs). Je dois en effet gérer des signaux à des fréquences élevés, et j'aurais besoin de précision. Quelqu'un (ou quelqu'une) aurait-il une idée à ce sujet?

15 réponses

deusyss Messages postés 11 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 5 mars 2007
5 mars 2007 à 19:45
   Merci beaucoup rt15 pour ton aide. Je crois que je vais arreter les frais avec ta dll. Et si ça ne marche pas, eh bien je changerais de langage.

   Donc, je croise les doigts, et je vous remrcie pour votre aide
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 mars 2007 à 18:46
Bonjour,

la plus "fine" est la fonction QueryPerformanceFrequency  de la librairie Kernell32 de l'Api de Windows, mais :

- elle n'ira pas jusqu'à la nano seconde
- sa précision dépendra de ta machine

Quelle que soit la précision (même la miilliseconde), elle sera toujours meilleure que celle de ton affichage !
0
deusyss Messages postés 11 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 5 mars 2007
4 mars 2007 à 18:51
   Bonjour,

   Merci d'avoir repondu si vite. Cette solution me semble parfaite à un détail près: Voilà, il faut que le signal soit identique d'une machine à une autre, autrement dit, que ce soit independant de la machine. De plus, il me faut pouvoir gérer ce timer à la µs près

   Bien entendu, on sous entend, que le logiciel ne tournera pas sous des machines agées. Donc, environ 1,1.5GHZ minimum

   Cela étant, cette solution conviendrait-il ou non?
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 mars 2007 à 18:56
Honnêtement ?

Non, si tu dois afficher (entre autres mais surtout) !
Pense à la vitesse de ta carte graphique et surtout à celle de ton écran ....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
deusyss Messages postés 11 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 5 mars 2007
4 mars 2007 à 19:00
   En fait il s'agit de générer des trames numérique via la carte son. J'utilise port.dll pour envoyer des données sur la carte son. Le problème c'est le cadencement du signal, plus que l'affichage, car ce dernier ne sera mis à jour que toutes les seconde dans le mode automatique (il y a un mode pas à pas). Donc, pas de problème d'affichage, mais plutot de cadencement du signal.

   Je sais que ça peut paraitre exigeant comme système, mais je n'ai pas trop le choix. Au départ, je suis parti sur les oscilloscope par carte son, qui doivent relevé la tension sur la carte son à interval régulier, mais de mon côté, je n'ai pas trouvé d'info.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
4 mars 2007 à 19:11
salut,
QueryPerformanceFrequency renvoie une valeur, on ne peut QUE l'utiliser pour mesurer un temps entre chacun appel, en aucun cas tu ne pourras retourner d'évènement.
pour un timer "ultraprécis" (millième de seconde), il faut utiliser les api midi de WinMM, voir 6e commentaire de cette source

++
PCPT  [AFCK]
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 mars 2007 à 19:15
Je crains fort que le "motif et la punition" ne soient là les mêmes ...
Le temps de la seule exécution de la commande de cadencement sera très probablement supérieur à la µs...
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 mars 2007 à 19:21
Mais ce n'est pas des milliçres de secondes, qu'il veut utuliser, mais des µs  (10-6
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 mars 2007 à 19:22
Pardon pas des millièmes mais des microsecondes (10 à la puissance -6)
0
deusyss Messages postés 11 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 5 mars 2007
4 mars 2007 à 19:39
   C'est cela, oui, des micro secondes, 10-6 secondes
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
4 mars 2007 à 20:14
lis le commentaire indiqué, regarde dans les sources de l'auteur du commentaire, et après on chipotera sur micro nano

(çà me semblait plus judicieux de te montrer où sont les limites du millième plutôt que d'épiloguer sur des puissances trop lointaines.....)
bonne lecture
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 mars 2007 à 22:04
Pas plus de QueryPerformanceCounter que qlq autre fonction de Windows car c'est un système multi tache préemptif, pas du tout fait pour le temps réel.

ciao...
BruNews, MVP VC++
0
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
4 mars 2007 à 23:25
A la limite en augmentant la priorité du processus... Après il faut bien gérer son application, pour pas qu'elle se gèle et gèle avec elle tout Windows, mais si tu compte dédier ton pc à cette tache le fait d'augmenter la priorité PEUT aider.
C'est sur qu'en VB tu n'auras pas la plus grande rapidité possible

- MadMatt -
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
5 mars 2007 à 12:10
Normalement tu ne peux pas esperer une grande precision avec Windows. Déjà pour plus de precision laisse tomber VB et passe en C.

Ensuite, généralement les temps utiliser avec Windows sont de l'ordre de la ms. Certaines api descende bien entendu en dessous, mais les temps ne sont pas garantis, de part le fonctionnement même de Windows.

S'il te faut absolument des temps garantis tant sur la précision que sur le déclenchement precis, il va te falloir te tourner vers des solutions "Noyau Temps réel". La seule que je connaisse (et utliser pendant plusieurs années) sous Windows est la solution proposée pas Ardence (ex VenturCom).
Sinon faut oublier windows et se tourner vers des os temps réels tel que Pharlaps et autres UNIX RTX, .....

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
5 mars 2007 à 15:24
Salut,


VB est effectivement pas idéal pour ça.

C ou ASM (Ou Delphi )


En ASM, y a l'instruction RDTSC qui renvoie la valeur d'un compteur
64bits qui s'incrémente à chaque front d'horloge du processeur. Sur un
1GHz, il s'incrémente donc toutes les nano secondes... encore que le
lire coûte des fronts. (La plupart des compilos C permette de faire de
l'ASM au milieux du C, et Delphi aussi). Ca permet d'executer du code à
une fréquence très élevée... tant que c'est notre thread qui est dans
le proce ! (cf le multi plus haut).


Mais pour ce qui est de la micro secondes, y a éventuellement ma dll.
Les fonctions qui t'intéresserait dedans sont en
QueryPerformanceFrequency, donc pas aussi précise que le registre
TSC... Mais toutes les convertions sont gérés par la dll : donc ça ne
te prendrait pas trop de temps pour la tester je pense.


Petit rappel :


fréquence   période

1Hz            1
s (10^0)
               


1kHz          1 milliseconde (10^-3)

1MHz        1 microseconde (10^-6)

1GHz        1 nanoseconde (10^-9)
0
Rejoignez-nous