OVH Cloud OVH Cloud

Timer

5 réponses
Avatar
Bob
Bonjour,

Existe-t-il quelque chose de semblable au Timer habituel de la boite à
outils de VB, mais qui puisse etre parametre avec des durees de l'ordre de
la milliseconde. (le Timer de VB ne descend pas en dessous 15 millisecondes
avac ma machine).
Utilisation : générer une sorte d'interruption soft pour executer des choses
a intervalles reguliers et précis.

Merci

5 réponses

Avatar
LE TROLL
Bonjour, ben le timer descend à 1/1.000/s mais le temps ensuite de
l'écrire si tu le testes, ce doit être ça qui prend 15 ms, ou encore
l'exécution de quelque chose derrière...
---------------

"Bob" a écrit dans le message de news:
41f5fff7$0$26129$
Bonjour,

Existe-t-il quelque chose de semblable au Timer habituel de la boite à
outils de VB, mais qui puisse etre parametre avec des durees de l'ordre de
la milliseconde. (le Timer de VB ne descend pas en dessous 15
millisecondes avac ma machine).
Utilisation : générer une sorte d'interruption soft pour executer des
choses a intervalles reguliers et précis.

Merci





Avatar
François Picalausa
Hello,

Effectivement, le timer VB a du mal a descendre a de trop petits intervals
de temps.
Tu peux à la place utiliser les API du mutlimedia timer. Tu peux jeter un
oeil sur vbAccelerator:
http://www.vbaccelerator.com/home/VB/Code/Libraries/HiResTimer/article.asp

--
François Picalausa

"Bob" a écrit dans le message de news:
41f5fff7$0$26129$
Bonjour,

Existe-t-il quelque chose de semblable au Timer habituel de la boite à
outils de VB, mais qui puisse etre parametre avec des durees de
l'ordre de la milliseconde. (le Timer de VB ne descend pas en dessous
15 millisecondes avac ma machine).
Utilisation : générer une sorte d'interruption soft pour executer des
choses a intervalles reguliers et précis.

Merci


Avatar
Bob
Bonjour,

En effet, on peut passer un valeur inférieure a 15 dans le paramètre
"Intervall", mais le cycle d'exécution mesuré ne descendra pas en dessous de
15 ms (sur ma machine).

Les observations ont été faites avec un oscilloscope, calibré, en
manoeuvrant un bit du port imprimante de 0 vers 1 puis de 1 vers 0 au moyen
de 2 timers en cascade.

Le but de la manoeuvre est bien évidemment d'executer du code un fois toutes
les 1 ou 2 ou 3 ms suivant le cas.
Sur un PC qui tourne a plus de 100 Mhz, et même plus de 1GHz, il est
certainement possible d'executer quelque chose toutes les 2 ms.
Sachant qu'1ms = 1 Khz, pour aller a 1Ghz, il y a de la marge 1 000 000 de
fois).
Il y a un certain nombre d'années, j'avais réalisé un truc à base de Z80
(microprocesseur 8 bits tournant à 3MHz) et il y avait des routines
d'interruption pilotées par une base de temps à 16 KHz, et ça marchait.
Donc ce n'est qu'une histoire de savoir comment rapatrier un truc qui me
déclenche une routine a intervalles réguliers.
@+ et merci en attendant

"LE TROLL" <le a écrit dans le message de news:
%
Bonjour, ben le timer descend à 1/1.000/s mais le temps ensuite de
l'écrire si tu le testes, ce doit être ça qui prend 15 ms, ou encore
l'exécution de quelque chose derrière...
---------------

"Bob" a écrit dans le message de news:
41f5fff7$0$26129$
Bonjour,

Existe-t-il quelque chose de semblable au Timer habituel de la boite à
outils de VB, mais qui puisse etre parametre avec des durees de l'ordre
de la milliseconde. (le Timer de VB ne descend pas en dessous 15
millisecondes avac ma machine).
Utilisation : générer une sorte d'interruption soft pour executer des
choses a intervalles reguliers et précis.

Merci









Avatar
LE TROLL
Salut, suite,

Oui, peut être que c'est possible par certaines méthodes, ou
branchements, mais là tu as une application, elle prend du temps, ton objet
prend du temps pour fonctionner, le processeur en prend, la mémoire aussi,
d'autres applies peuvent prendre du temps, le matériel, etc; et si jamais ça
passe par le disque, là tu te ramasses au moins 10, 15 ms en supplément,
donc par cette méthode il n'est pas possible à mon sens d'avoir la ms...

Soit dit en passant, on ne voit pas trop dans 99% des applications,
pourquoi il faut une précision du millième, dans la mesure ou l'oil voit
seulement entre 200 à 300 millièmes de secondes ???
----------

"Bob" a écrit dans le message de news:
41f6399f$0$29104$
Bonjour,

En effet, on peut passer un valeur inférieure a 15 dans le paramètre
"Intervall", mais le cycle d'exécution mesuré ne descendra pas en dessous
de 15 ms (sur ma machine).

Les observations ont été faites avec un oscilloscope, calibré, en
manoeuvrant un bit du port imprimante de 0 vers 1 puis de 1 vers 0 au
moyen de 2 timers en cascade.

Le but de la manoeuvre est bien évidemment d'executer du code un fois
toutes les 1 ou 2 ou 3 ms suivant le cas.
Sur un PC qui tourne a plus de 100 Mhz, et même plus de 1GHz, il est
certainement possible d'executer quelque chose toutes les 2 ms.
Sachant qu'1ms = 1 Khz, pour aller a 1Ghz, il y a de la marge 1 000 000 de
fois).
Il y a un certain nombre d'années, j'avais réalisé un truc à base de Z80
(microprocesseur 8 bits tournant à 3MHz) et il y avait des routines
d'interruption pilotées par une base de temps à 16 KHz, et ça marchait.
Donc ce n'est qu'une histoire de savoir comment rapatrier un truc qui me
déclenche une routine a intervalles réguliers.
@+ et merci en attendant

"LE TROLL" <le a écrit dans le message de news:
%
Bonjour, ben le timer descend à 1/1.000/s mais le temps ensuite de
l'écrire si tu le testes, ce doit être ça qui prend 15 ms, ou encore
l'exécution de quelque chose derrière...
---------------

"Bob" a écrit dans le message de news:
41f5fff7$0$26129$
Bonjour,

Existe-t-il quelque chose de semblable au Timer habituel de la boite à
outils de VB, mais qui puisse etre parametre avec des durees de l'ordre
de la milliseconde. (le Timer de VB ne descend pas en dessous 15
millisecondes avac ma machine).
Utilisation : générer une sorte d'interruption soft pour executer des
choses a intervalles reguliers et précis.

Merci













Avatar
Bob
De Bob, suite

LE TROLL
Salut, suite,
Oui, peut être que c'est possible par certaines méthodes, ou branchements,
mais là tu as une application, elle prend du temps, ton objet prend du
temps pour fonctionner, le processeur en prend, la mémoire aussi, d'autres
applies peuvent prendre du temps, le matériel, etc; et si jamais ça passe
par le disque, là tu te ramasses au moins 10, 15 ms en supplément, donc
par cette méthode il n'est pas possible à mon sens d'avoir la ms...
Soit dit en passant, on ne voit pas trop dans 99% des applications,
pourquoi il faut une précision du millième, dans la mesure ou l'oil voit
seulement entre 200 à 300 millièmes de secondes ???



Absolument d'accord pour tout.
Mais il faut comparer des choses comparables et leur donner leur vrai
grandeur.
Je laisse de côté le Timer fourni dans VB. Il marche comme ça et nous ne le
changerons pas.
Mais pour le principe général, une Interruption cyclique toutes les 1 ou 2
ms n'est pas nuisible au bon fonctionnement d'un programme qui ne fait rien
de compliqué, à part de la saisie de données via le clavier, de la recherche
pour comparer les données saisies avec les données déja en mémoire ou sur
disque.
Dans la procédure d'Interruption, toutes les 1 ou 2 ms, (qui ne sera
autorisée que dans certains cas bien précis), il n'y a pas grand chose à
faire : incrémenter un compteur, regarder si sa valeur courante a atteint un
seuil, et si oui, positionner un drapeau à 1. C'est tout.
Sachant que pour calculer 6 600 fois (six mille six cent) le cosinus d'un
nombre, il faut aussi 1 ms. (sur ma machine), donc, pas de soucis, le corps
du programme ne sera pas pénalisé par la perte de temps dans la routine
d'IT.

En ce qui concerne la précision, allons droit au but :
Je désire générer du morse (en tout ou rien) au travers d'1 bit du port
imprimante en le positionnant à 1 puis à 0.
La durée d'un point, la durée d'un intervalle entre 2 éléments d'une lettre,
la durée d'un trait, l'intervalle entre 2 lettres etc... doivent être liés
entr'eux par une constante qui est la durée du point ou un de ses multiples.
Si on accélére la vitesse de manipulation, tous ces rapports évoluent de la
même façon.
En ce qui concerne la rapidité :
En manipulation rapide, il est courant de trouver la durée du point égale à
40 ms ou moins.
Donc, comme je l'ai appris il y a bien longtemps, pour obtenir une bonne
répétitivité, il est nécessaire d'échantillonner 10 fois plus vite que ce
que l'on désire traiter, on se retrouve donc avec une IT à 4 ms.
La marge de 4 à 1 ou 2 est la sécurité.

Ce système fonctionne déjà, en VB5, mais le temps pendant lequel le bit doit
rester à 1 est perdu dans une boucle (do loop) qui décrémente un registre,
et là c'est 1000 fois pire, puisque le programme est paralysé dans la boucle
tant qu'elle n'est pas terminée.
Le diagramme de charhe du CPU dans le gestionnaire des tâches est sufisament
parlant.

Je ne me pose aucune question sur la faisabilité de ce programme. C'est une
version qui tourne depuis 1985, sur des cartes à base de Z80, (voir message
précédent), sur PC à base de 8088 et MS DOS.
Ce qui me manque, c'est la façon de me dérouter périodiquement en VB5.
Salut, Bob