Bonjour
Je cherche à créer un programme sous dos d'aquisition de signal via port parallèle (pour une expérience physique). Je voudrais chronométrer chaque interval de temps entre chaque changement d'état du port (des durées de l'ordre de 100ms qui doivent être calculée pour être stockée dans des listes). Je ne veux pas faire appel à chaque fois à un nouveau "chrono", mais plutot utiliser une variable de temps "globale", c'est à dire un choromètre qui "s'allume" au lancement et qui reste le même pour touts les cycles de mesures (pour ne pas cumuler des petits décalages entre chaque changement du port).
Voici ce que j'ai déja fait en programme de test et qui ne convient pas (utilisation de l'unité sdelay plus performante que le delay de ctr)
J'ai fait ce programme pour tester la précision de mesure:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 program etatport; uses Sdelay; var n:real; begin n:=0 ; while (PORT[$379] = 63) do MilliDelay(500) ; while (PORT[$379] = 127) do MilliDelay(500) ; while (PORT[$379] = 63) do begin MilliDelay(500); n:=n+5 end ; while (PORT[$379] = 127) do begin MilliDelay(500); n:=n+5 end ; writeln(n); {renvoi une période en milliseconde} end.
j'ai branché un bouton poussoir avec une resistance entre le port 10 et la masse, le programme est scendé mesuré la durée durant laquelle:
1) on appuie sur l'interupteur (127->63)
2) on relache (63->127)
3) on réapui (127->63)
Resulat: la durée mesurée par le programme (sous dos bien sur!) est différente à quelques dizaines de pourcents de la durée réelle
Sous windows avec Delphi, j'avais la viable Gettickcount qui simplifie le problème (le resultat est moyen car windows perturbe le fonctionnement en temp réel), sous turbo pascal je n'ai rien trouvé de tel...
Que faire?
Merci d'avance pour vos conseils
Etienne
Partager