Lenteur programme de pilotage du port parallèle

Résolu
pit34 Messages postés 4 Date d'inscription dimanche 1 juillet 2007 Statut Membre Dernière intervention 4 décembre 2007 - 3 déc. 2007 à 18:07
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 ;)

5 réponses

NHenry Messages postés 15039 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 7 février 2023 156
4 déc. 2007 à 13:12
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
3
NHenry Messages postés 15039 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 7 février 2023 156
4 déc. 2007 à 13:48
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
3
pit34 Messages postés 4 Date d'inscription dimanche 1 juillet 2007 Statut Membre Dernière intervention 4 décembre 2007
3 déc. 2007 à 18:34
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 ;)
0
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 à 13:33
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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 ;)
0
Rejoignez-nous