cipango
Messages postés26Date d'inscriptionmardi 13 janvier 2004StatutMembreDernière intervention29 juillet 2007
-
29 oct. 2006 à 21:53
cipango
Messages postés26Date d'inscriptionmardi 13 janvier 2004StatutMembreDernière intervention29 juillet 2007
-
30 oct. 2006 à 17:49
Bonjour à tous,
<!--[if !supportEmptyParas]--> <!--[endif]-->
J’ai un problème avec la fonction SLEEP : Quand je
fais « SLEEP 1 » 20 fois de suite
sur 20 lignes de code, c’est plus long que lorsque je fais « SLEEP
20 ».
Pourtant 20 fois une milliseconde, ça fait bien 20
millisecondes, non ??? Y-a-t-il un « temps d’accès » non
négligeable à chaque lignes de codes ?
Vais-je devoir reprendre les antiques boucles de
temporisation pour temporiser mes instructions ?
<!--[if !supportEmptyParas]--> <!--[endif]-->
Je suis allé voir les codes liés à « sleep » dans
vbfrance. Apparemment, c’est normal que la fonction sleep « de
base », ( Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds
As Long) ) ne fonctionne pas avec des temps proche de la milliseconde. On
propose plein de trucs, mais franchement, je n’y comprends pas grand chose. Je
ne sais pas comment installer les fonctions proposées.
J’aimerais simplement avoir une fonction sleep qui
fonctionne même à 1 milliseconde.
cipango
Messages postés26Date d'inscriptionmardi 13 janvier 2004StatutMembreDernière intervention29 juillet 20071 29 oct. 2006 à 22:31
Je cherche à envoyer des signaux ( 0 V - 5 V ) à l'aide du port parallèle, pour allumer des leds. Tout marche bien sauf que quand je veux faire clignoter les leds rapidement, en intercalant par exemple un "sleep 1" entre chaque allumage de la led, et bien ça dure beaucoup plus longtenps qu'une milliseconde.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 30 oct. 2006 à 07:59
"Je veux qu'il y ai exactement 1 milliseconde ou 2 millisecondes par exemple entre chaque allumage d'une led."
Tu n'y parviendras jamais, quelle que soit la méthode utilisée (y compris l'utilisation d'APIs beaucoup plus "fines") car :
Autant il est toujours possible de maitriser le moment du départ d'une instruction,
autant il ne l'est pas de "compter" la durée d'exécution de la dite instruction ... durée qui, en ce qui te concerne, dépendra de surcroît (en plus du reste) de la vitesse des dispositifs d'affichage présentes sur ta machine !
cipango
Messages postés26Date d'inscriptionmardi 13 janvier 2004StatutMembreDernière intervention29 juillet 20071 30 oct. 2006 à 10:16
Merci jmfmarques,
J'avais déjà lu le sujet sur l'oscillo avec le port série. Mais pour un oscillo, on a besoin de temporiser à la micoseconde près ( au moins... ) alors que pour mon bricolage je n'ai besoin que de la milliseconde. Si chaque "accès" au port parallèle prends 30 µs comme avec le port série, ce qui est probable, ce n'est pas dramatique devant une ms. Je pourrai corriger les éventuels et légers retards ou avances par d'autres moyens.
D'ailleurs, je suis en train d'essayer avec des temporisation du type for i = 0 to 10000000 : next i, et ça marche presque, même si ça n'est pas très élégant... et difficilement transposable d'un PC à l'autre.
Je crois, disons j'espère qu'il est possible de compter une durée de l'ordre d'une ms avec un PC. Parce que la ms, c'est quand même très long pour des instructions, non ? Même les antiques ports série et parallèle ne demande que 30 µs, apparemment...
Ce que j'aimerais pour le moment, c'est savoir utiliser les API "plus fines", comme tu les nommes justement.
Par exemple, j'ai trouvé une API sleep qui serait plus performante que la classique sleep de kernel32. Première chose, s'il existe une fonction sleep plus fine, pourquoi la précédente Kernel32 n'a-t-elle pas aussitôt disparu ? Et pourquoi est-ce aussi compliqué de l'installer. J'ai essayé en copiant la déclaration
"Public
Declare
Function
Sleep Lib <var>"EX_Time.dll"</var>
Alias <var>"EXtmr_Sleep"</var> (ByVal lpEX As
String
, Optional
ByVal nTime As Long = 0) As Long
" dans un module ou dans une feuille et ça ne marche pas.
Avec l'ancienne Sleep il suffisait pourtant de copier simplement "Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)" dans un module et ça roule...
Je ne suis qu'un débutant, mais je ne comprends pas qu'on conserve par exemple une fonction sleep qui marche mal alors qu'il en exiiste une plus fine mais inabordable à un programmeur débutant.
Encore merci.