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

Messages postés
4
Date d'inscription
dimanche 1 juillet 2007
Statut
Membre
Dernière intervention
4 décembre 2007
- - Dernière réponse : pit34
Messages postés
4
Date d'inscription
dimanche 1 juillet 2007
Statut
Membre
Dernière intervention
4 décembre 2007
- 4 déc. 2007 à 19:53
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 ;)
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
14590
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 novembre 2019
136
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 206 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
14590
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 novembre 2019
136
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 206 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
4
Date d'inscription
dimanche 1 juillet 2007
Statut
Membre
Dernière intervention
4 décembre 2007
0
Merci
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 ;)
Commenter la réponse de pit34
Messages postés
4
Date d'inscription
dimanche 1 juillet 2007
Statut
Membre
Dernière intervention
4 décembre 2007
0
Merci
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.
Commenter la réponse de pit34
Messages postés
4
Date d'inscription
dimanche 1 juillet 2007
Statut
Membre
Dernière intervention
4 décembre 2007
0
Merci
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 ;)
Commenter la réponse de pit34