|
Publicité ' | ||||||||||||||||||||||||
|
|
#21 |
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Salut ,
1- As-tu un appareil et une appli pour tester ton port série. Es-tu certain que c'est le COM1 ? Reponse: Je crois que je travaille avec le COM1 de mon pc, car c´est avec ce port serie que j´ai effectue les tests avec le microcontrôleur et Hyperterminal. Je vais tout de même me renseigner aupres d´un technicien de l´institut. 2-PS. Peux-tu vérifier ce que tu as dans la base de registres dans HKLM\Hardware\Devicemap\SerialComm ? Reponse: J´ai clique sur demarrer ---> executer -----> en suite j´ai entre le raccourci suivant: HKLM\Hardware\Devicemap\SerialComm . Mais mon pc m´informe que ce raccourci n´existe pas. J´essaie actuellement d´effectuer le test que tu m´as conseille. Lors du test j´ai remarque que le microcontrôleur attends que les bytes arrivent dans le buffer UDR0 de l´USART0. Mais UDR0 ne recoit rien. Pour l´envoie des bytes pour le test, j´ai tout simplement deboggue le programme que tu m´as suggere. Es-ce que le debogguage du programme est suffisant pour declencher l´envoie des bytes ? Ou bien une autre procedure est necessaire pour activer le transfert des bytes. Je travaille avec L´IDE code:blocks sous windows XP. Merci d´avance arthurdubois |
|
|
00
|
|
|
#22 |
|
Membre émérite
![]() Inscription : août 2010 Messages : 529 ![]() |
Oui le debug suffit.
Mais je comprends pas, comment tu fais pour tester si le CreateFile échoue ? Le but du test était justement de voir si la connexion est établie. Vérifie dans la doc du µC que tu fais bien tout le nécessaire pour activer l'USART. Et pour la base de registre, je voulais que tu exécutes "regedit" et que tu regardes dans l'arborescence : HKEY_LOCAL_MACHINE -> HARDWARE -> DEVICEMAP -> SERIALCOMM pour voir quels ports sont définis. |
|
|
00
|
|
|
#23 |
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Okay, je vais a nouveau verifier l´USART du microcontrôleur et ensuite j´effectuerais le test de l´echo.
J´ai reussis a avoir acces a l´aborescence que tu m´as divulgue. D´apres l´aborescence, les ports series COM1, COM2 et COM5 sont definies dans mon PC. |
|
|
00
|
|
|
#24 | ||||
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Bonsoir Hibernatus34,
J´espere que ton week-end s´est bien deroule et que ta semaine a bien commencee. Quant-a moi, j´ai passe mon temps a essayer d´avancer dans mes travaux et j´ai quand même un peu progresse. Comme convenu j´ai effectue le test de l´echo pour etablir la communication entre le pc et le microcontrôleur. J´ai obtenu le resultat suivant: Code :
Puis-je maintenant passer au test de l´envoi des positions x et y du fichier texte au microcontrôleur ? Qu´en penses-tu ? Ou dois-je encore ameliorer certains aspects. Le code c du microcontrôleur qui m´a permis d´effectuer le test d´echo est le suivant: Code :
arthurdubois |
||||
|
|
00
|
|
|
#25 |
|
Membre émérite
![]() Inscription : août 2010 Messages : 529 ![]() |
On a déjà un petit problème de décalage.
Tu peux tester avec un timeout plus long pour voir ? (25 au lieu de 10) Sinon, pour le programme complet, il faut que je relise un peu ce qu'on avait dit. Qu'est-ce qui est le mieux pour toi ? - Que le PC envoie tout déjà formaté comme "#2C\r" ? - Ou bien que le PC envoie seulement X,Y et que ça soit le µC qui transforme ça en 2 messages ? |
|
|
00
|
|
|
#26 |
|
Expert Confirmé Sénior
![]() Développeur informatique Inscription : novembre 2006 Messages : 4 445 ![]() |
Salut pour tout ce qui est communications soit par les ports soit via réseau tu est quasi obligé de faire une architecture en multithreading
Parce que sinon tu vas faire une boucle infinie avec un while() et tu n'auras pas la main dessus. Le mieux c'est de créer des EVENTS avec CreateEvent(),SetEvent/ResetEvent de mettre les fonctions de lecture et écriture sur le port série dans un thread avec CreateThread(). |
|
|
01
|
|
|
#27 |
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Bonjour,
concernant le programme complet, j´aimerais qu´on envoie uniquement les positions x, y et ensuite le microcontroleur se chargera de transformer cela en deux messages. Je vais de ce pas modifier le timeout comme tu me le suggeres afin d´observer si le decalage disparait. Merci bien |
|
|
00
|
|
|
#28 | |
|
Expert Confirmé Sénior
![]() Développeur informatique Inscription : novembre 2006 Messages : 4 445 ![]() |
Citation:
Lorsque tu appelles une instruction "envoie sur le port série X et Y", le programme exécuté traite en quelques ms ton instruction et l'envoie au microcontroleur via le port-série. Cette opération d'envoyer des données par le port-série puis le traitement par le micro C peut prendre plusieurs ms voire des secondes |
|
|
|
01
|
|
|
#29 | ||
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Salut,
Code :
Merci bien. |
||
|
|
00
|
|
|
#30 | |
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Citation:
|
|
|
|
00
|
|
|
#31 | |
|
Membre émérite
![]() Inscription : août 2010 Messages : 529 ![]() |
Citation:
Merci de ne pas brûler les étapes. Par ailleurs, dans mon idée il n'y avait pas de raison que des opérations aussi simples puissent prendre tant de temps. D'ailleurs la cause du décalage pourrait être une erreur de développement, n'ayant jamais eu à développer les 2 bouts, et sachant qu'il peut y avoir du contrôle de flux... Sinon, pour le choix du format, c'est surtout si le µC est censé connaître les moteurs et pas le PC. Apparemment c'est pas le cas vu qu'on calcule le pas moteur sur le PC. Convertir les commandes me paraît être un boulot suffisamment simple pour un µC, n'exagérons pas. C'est juste ajouter quelques caractères, qu'on envoie de toute façon, donc ça ne fait que rallonger un peu le code. |
|
|
|
00
|
|
|
#32 |
|
Membre émérite
![]() Inscription : août 2010 Messages : 529 ![]() |
Je vais essayer de comprendre cet après-midi. Mais en désespoir de cause, essaie sans time-out ou avec un très gros time-out (3000). Et tu "kill" le programme si ça ne répond pas au bout de 2 secondes. Je veux être sûr de pas chercher pour rien.
|
|
|
00
|
|
|
#33 | |
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Salut,
Citation:
Merci. |
|
|
|
00
|
|
|
#34 | ||
|
Expert Confirmé Sénior
![]() Développeur informatique Inscription : novembre 2006 Messages : 4 445 ![]() |
Citation:
Si tu fais un while(1) infini tu vois bien que ton programme va boucler indéfiniment ! Citation:
J'ai déjà travaillé sur des projets pros et je vois parfaitement que ça ne peut pas fonctionner Ensuite si tu ne reçois pas de réponse comment veux-tu être synchro ? Lorsque tu fais de la programmation des E/S tu est confronté à des tâches asynchrones |
||
|
|
00
|
|
|
#35 | |
|
Expert Confirmé Sénior
![]() Développeur informatique Inscription : novembre 2006 Messages : 4 445 ![]() |
Citation:
mais ça sera imprécis tu risques de dépasser le temps alloué pour le contrôle. Un thread c'est une sorte de programme qui va s'exécuter parallèlement à ton programme principal là où il y a ton main() Donc dans ce programme parallèle fils tu vas appeler une instruction qui va te retourner un code comme quoi la transmission des données a bien été effectuée. De cette manière tu pourras arrêter une transmission de données si elle est trop longue Regarder cet exemple du MSDN http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx Canceling Synchronous I/O |
|
|
|
01
|
|
|
#36 |
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Salut,
Hibernatus34, j´ai suivis tes instructions. Helas le decalage est toujours present. |
|
|
00
|
|
|
#37 |
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Salut Mat.T,
Merci pour les conseils. Je vais jetter un coup d´oeil au lien que tu as poste. |
|
|
00
|
|
|
#38 | |
|
Membre émérite
![]() Inscription : août 2010 Messages : 529 ![]() |
Citation:
SetTimer c'est complètement hors de propos car on n'a pas de boucle de messages pour l'instant, et c'est une très mauvaise idée de toute façon (de même que Sleep). Quant à l'exemple "Canceling Synchronous I/O", je préfère très largement la simplicité d'un time-out, même en multithread, ou bien simplement un polling en attendant une réponse (il y a une fonction pour récupérer le nombre d'octets reçus mais je connais pas bien l'API Win32 pour ça), ou encore WaitCommEvent. Mais ça c'est pour plus tard... (même pas sûr, selon le boulot qui est demandé à arthur) |
|
|
|
00
|
|
|
#39 |
|
Membre émérite
![]() Inscription : août 2010 Messages : 529 ![]() |
arthurdubois : tu peux poster les 2 codes sources que tu as testés ? (test.c sur le µC et main.cpp sur le PC)
|
|
|
00
|
|
|
#40 | ||||
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Bonsoir,
desole pour le retard de mon message. il a fallu que j´aille a mon rendez-vous chez le dentiste. En piece jointe se trouve les deux codes sources. Je m´escuse encore pour le retard de mon message. test.c sur le microcontrôleur: Code :
Code :
|
||||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com