Lenteur programme de pilotage du port parallèle [Résolu]

Signaler
Messages postés
4
Date d'inscription
dimanche 1 juillet 2007
Statut
Membre
Dernière intervention
4 décembre 2007
-
Messages postés
4
Date d'inscription
dimanche 1 juillet 2007
Statut
Membre
Dernière intervention
4 décembre 2007
-
Bonjour à toutes et à tous.

Voila, je poste car étant débutant en programmation, j'ai un petit soucis.
Je développe actuellement un petit programme en vb.net pour piloter une matrice de Leds par le port parallèle.
Je pilote le port parallele grace à la dll inpout32, et le programme marchera de cette facon :
J'écris un mot de 8 bits sur le port parallèle, j'attends un temps T1 ( ou 1 est le numero de la led ) d'environ quelques dizaines de microseconde, puis j'écris un autre mot en attendant cette fois-ci T2.
Je fais ceci 288 fois, et je boucle le tout.

Pour tester, je passe les 8 bits à l'état 1, j'attends avec sleep et je passe les 8bits à 0, et j'attends avec sleep, puis je boucle.

Mon premier problème est que lorsque je démarre la boucle, l'interface se gel. Je pense que l'on peut résoudre ça avec un thread, mais malgrès mes nombreuses recherches et essai, je n'ai pas réussi à l'utiliser.
Mon deuxième problème est que je ne peux pas générer une fréquence superieur à 250Hz environ, car le sleep ne permet des pause que d'1 milliseconde minimum, et il me faudrait entre 10 et 20 microsecondes.
Pour résoudre cela j'ai entendu parlé du Queryperformancecounter, mais là encore malgrès mes nombreux essaies, rien n'y fait. Mais même dans ce cas j'ai peur que ca ne marche pas, car si je fais la boucle sans mettre de timer, j'obtiens une fréquence qui passe de 1Khz à 500Hz sans arrets.

Je ne vois vraiment pas comment faire, je cherche depuis plus d'une semaine sur google mais rien à faire. De même sur ce site, et pourtant j'ai épluché un paquet de post et d'articles :/

Voila j'espère que vous pourrez m'aider et me conseiller.
Bonne fin de journée à vous ;)

5 réponses

Messages postés
14683
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
3 août 2020
144
Bonjour

De toute façon, le changement de thread (quand tu fais un Sleep), est d'environ 15ms sur un XP (pour les autres je ne sais pas, mais ça doit être approchant).

Si tu veux vraiment de la performance, sort de .NET et passe au C++ voire au C (mais pas sur la plateforme .NET).

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
14683
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
3 août 2020
144
Bonjour

En passant par une DLL peut-être, mais ne compte pas sur .NET (pas forcément VB) pour avoir des performances record.

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
4
Date d'inscription
dimanche 1 juillet 2007
Statut
Membre
Dernière intervention
4 décembre 2007

Pardonnez moi, je ne sais aps pourquoi tout le texte s'est détraqué et aparament il n'est pas possible d'éditer un message, je recommence donc.

Bonjour à toutes et à tous.

Voila, je poste car étant débutant en programmation, j'ai un petit soucis.
Je développe actuellement un petit programme en vb.net pour piloter une matrice de Leds par le port parallèle.
Je pilote le port parallele grace à la dll inpout32, et le programme marchera de cette facon :
J'écris un mot de 8 bits sur le port parallèle, j'attends un temps T1 ( ou 1 est le numero de la led ) d'environ quelques dizaines de microseconde, puis j'écris un autre mot en attendant cette fois-ci T2.
Je fais ceci 288 fois, et je boucle le tout.

Pour tester, je passe les 8 bits à l'état 1, j'attends avec sleep et je passe les 8bits à 0, et j'attends avec sleep, puis je boucle.

Mon premier problème est que lorsque je démarre la boucle, l'interface se gel. Je pense que l'on peut résoudre ça avec un thread, mais malgrès mes nombreuses recherches et essai, je n'ai pas réussi à l'utiliser.
Mon deuxième problème est que je ne peux pas générer une fréquence superieur à 250Hz environ, car le sleep ne permet des pause que d'1 milliseconde minimum, et il me faudrait entre 10 et 20 microsecondes.
Pour résoudre cela j'ai entendu parlé du Queryperformancecounter, mais là encore malgrès mes nombreux essaies, rien n'y fait. Mais même dans ce cas j'ai peur que ca ne marche pas, car si je fais la boucle sans mettre de timer, j'obtiens une fréquence qui passe de 1Khz à 500Hz sans arrets.

Je ne vois vraiment pas comment faire, je cherche depuis plus d'une semaine sur google mais rien à faire. De même sur ce site, et pourtant j'ai épluché un paquet de post et d'articles :/

Voila j'espère que vous pourrez m'aider et me conseiller.
Bonne fin de journée à vous ;)
Messages postés
4
Date d'inscription
dimanche 1 juillet 2007
Statut
Membre
Dernière intervention
4 décembre 2007

Ok merci beaucoup.

Donc si j'ai bien compris, je dois passer au C, et ne pas utiliser d'interface graphique VB.

On ne peut vraiment pas exectuer l'envoi de bits en C, et l'interface graphique en VB ?
Merci, je vais commencer à travailler en C.
Messages postés
4
Date d'inscription
dimanche 1 juillet 2007
Statut
Membre
Dernière intervention
4 décembre 2007

Ok donc je vai trouver autre chose pour faire une interface graphique en C. J'ai vu que certains logiciels le faisaient très bien.

Je vais essayer de comprendre le C et je fais ca. Je posterai quand j'aurai trouvé, ou un problème :)

Merci à toi ;)