DLL timer ultra precis [Résolu]

Messages postés
11
Date d'inscription
vendredi 9 février 2007
Dernière intervention
5 mars 2007
- - Dernière réponse : deusyss
Messages postés
11
Date d'inscription
vendredi 9 février 2007
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?
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
Messages postés
11
Date d'inscription
vendredi 9 février 2007
Dernière intervention
5 mars 2007
3
Merci
   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

Merci deusyss 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de deusyss
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
0
Merci
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 !
Commenter la réponse de jmfmarques
Messages postés
11
Date d'inscription
vendredi 9 février 2007
Dernière intervention
5 mars 2007
0
Merci
   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?
Commenter la réponse de deusyss
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
0
Merci
Honnêtement ?

Non, si tu dois afficher (entre autres mais surtout) !
Pense à la vitesse de ta carte graphique et surtout à celle de ton écran ....
Commenter la réponse de jmfmarques
Messages postés
11
Date d'inscription
vendredi 9 février 2007
Dernière intervention
5 mars 2007
0
Merci
   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.
Commenter la réponse de deusyss
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
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
Commenter la réponse de PCPT
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
0
Merci
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...
Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
0
Merci
Mais ce n'est pas des milliçres de secondes, qu'il veut utuliser, mais des µs  (10-6
Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
0
Merci
Pardon pas des millièmes mais des microsecondes (10 à la puissance -6)
Commenter la réponse de jmfmarques
Messages postés
11
Date d'inscription
vendredi 9 février 2007
Dernière intervention
5 mars 2007
0
Merci
   C'est cela, oui, des micro secondes, 10-6 secondes
Commenter la réponse de deusyss
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
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
Commenter la réponse de PCPT
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
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++
Commenter la réponse de BruNews
Messages postés
2215
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
16 juillet 2009
0
Merci
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 -
Commenter la réponse de MadM@tt
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
0
Merci
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 #
Commenter la réponse de cs_casy
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
0
Merci
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)
Commenter la réponse de cs_rt15

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.