Wait, timer, sleep d'environ 10 nano-secondes

Signaler
Messages postés
11
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
22 novembre 2005
-
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
-
Pour une application qui fait de l'acquisition de données,
j'ai besoin d'attendre pendant une période de 12 ns exactement pendant une boucle de 2^20 itérations...
en utilisant la fonction sleep, le minimum est de 1000 ns (1 milisec) ce qui donne un temps fou pour le parcours de la boucle !

Attention, je ne peux programmer qu'avec Delphi 2.0 (& oui, ce n'est pas une boite d'informatique dans laquelle je fais mon stage ;-) , donc je vous remercie de ne pas trop me proposer de fonctions compatibles avec Delhi 5.1 et +...

PS :
Ce site est très bien fait : ne connaissant que le C, j'ai pu m'initier assez facilement à Pascal & Delphi en 2 mois grâce à vous tous !
Merci

5 réponses

Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut

pour un temps d'attente de 12ns je ne vois guere autre chose qu'une
boucle for do (et à condition d'avoir un PC assez rapide!! je doute que
tu puisse descendre ausi bas sans passer par l'assembleur.

à mon avis il faudra passer par un carte d'acquition rapide.

essaie quand même cela.

var i:integer



for i:=0 to temps do begin end;



tu calibres temps à l'ouverture de l'application:

T:=time;

for i:=0 to 100000000 do ;

DT:= MilliSecondOfTheSecond(time-T);

choisis une boucle assez importante pour avoir une bonne precision.

bonne prog

@+

jlen
Messages postés
449
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
2
12 nanosecondes.... 2^20 itérations, donc un signal d'à peine 0.125 s....

delphi2....

C'est du code pour un microcontrolleur a 100 mhz ton truc ? Paske jamais t'arrivera à ca avec un pc sans taper l'assembleur.

gnh !
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
un mircocontroleur à 100mHz ne sufffira pas : a raison de 3 à 12 cycles
horloge par instruction il faudrait un micro controleur à environ 1GHz .



Les essais que j'ai fait donne ~20ns par boucle sur un PC à 2Ghz.

En assambleur il faut compter ~3 à 12 cycles horloge par
instruction comme pour le microcontroleur auquel il faudra ajouter le
temps d'appel à la fonction de traitement (empilage et depilage du
contexte: une dizaine d'instrution ) et l'exécution du traitement (je
suppose que ces iteration ne se font pas dans le vide).

la seule véritable solution c'est carte d'acquition rapide par
compteur programme. (les circuits logiques travaillant à plus de 1Ghz
ne sont pas légion!!)





jlen
Messages postés
11
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
22 novembre 2005

Merci pour vos supputations...
En fait, c'est une carte d'acquisition PCI 7296 (Adlink)
J'avais du mal à déchiffrer la doc sur les timers, mais à présent c'est bon, avec un timer bien configuré, j'arrive désormais à avoir ce que je veux...

pb : la fonction MilliSecondOfTheSecond(time-T); n'existe pas avec Delphi 2
Merci qd même pour vos solutions !

bonne prog!
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
c'est prèfèrable pour toi que tu aies une carte d'acquisition

pour la fonction la fonction MilliSecondOfTheSecond(time-T) elle
extrait les millisecondes d'un datetime (0 à 999)comme je ne connais
pas delphi 2 difficile de t'aider (je crois qu'il ne code pas le time
de la même façon)

@+

jlen