|
Publicité ' | ||||||||||||||||||||||||
|
|
#61 |
|
Membre Expert
![]() Inscription : août 2010 Messages : 533 ![]() |
Je parle des réponses du moteur, donc à priori pas des messages de la forme "#2x\r", mais "#1x\r" (en considérant que ton µC prenne le numéro 1).
Non ? En fait, je voulais savoir si le moteur répondait aux commandes par un acquittement, un peu comme notre écho. Il y a des machines qui répondent ACK/NAK pour des commandes à sens unique (sans retour de données), il y en a aussi qui répondent quelque chose longtemps après avoir reçu la commande, car l'opération a pris du temps (mécanique), etc. Mais de toute façon je ne pourrai regarder ça que demain ou après-demain, donc je jetterai un oeil à la doc d'ici là. |
|
|
00
|
|
|
#62 | |
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Salut,
Citation:
Bref je tenais tout simplement a te decrire l´autre partie de mon travail. Mais a ce que je sache, je ne pense pas que les deux moteurs pas a pas que j´utilise retourne des reponses. La marque de mes moteurs pas a pas est la suivante: QMot.eu 50-0035 QSH5718-51-28-101 Comme moteur de commande, j´utilise deux moteurs de commande identique de nanotec nommes SMCI33-2 . Bonne soiree. |
|
|
|
00
|
|
|
#63 |
|
Membre Expert
![]() Inscription : août 2010 Messages : 533 ![]() |
OK. Je pensais que c'était comme certaines machines qui utilisent l'adresse 1 par défaut pour le maître, et 2, 3, 4... pour les machines. J'avais vu ça sur des monnayeurs par exemple.
J'ai pas encore lu la doc, cet après-midi peut-être. |
|
|
00
|
|
|
#64 | |
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Bonjour,
Citation:
|
|
|
|
00
|
|
|
#65 |
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Bonjour hibernatus34,
as-tu fait des progres avec la doc ? Ou es-tu encore tres occupe ? J´essaie de mon côte d´ameliorer la configuration du microcontrôleur. Bon apres midi. |
|
|
00
|
|
|
#66 |
|
Membre Expert
![]() Inscription : août 2010 Messages : 533 ![]() |
Salut,
Je suis désolé, mais j'ai eu plus de boulot que prévu. Je viens de jeter un oeil, et les réponses à mes questions sont en page 10 de la doc, dans le paragraphe "Controller response". On peut transférer bêtement ces réponses vers le PC pour les gérer plus facilement, mais du coup à quoi servira le µC, à part fournir son interface RS-485 ? Ce projet est un exercice de style ou bien il répond à un vrai besoin ? J'aimerais t'aider aujourd'hui mais je n'aurai probablement pas le temps. Ca attendra la semaine prochaine, si personne d'autre ne t'aide d'ici là. |
|
|
00
|
|
|
#67 | |||
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Bonjour,
Citation:
Citation:
Citation:
|
|||
|
|
00
|
|
|
#68 | ||
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Bonsoir Hibernatus,
J´ai essaye vendredi d´effectuer un echo test en envoyant les position x, y vers le µC, afin de verifier l´envoi des donnees. Helas sa n´a pas marche. Voici le programme: Code :
Bonne soiree. |
||
|
|
00
|
|
|
#69 | ||
|
Membre Expert
![]() Inscription : août 2010 Messages : 533 ![]() |
Citation:
Citation:
Que veux-tu dans la version finale ? |
||
|
|
00
|
|
|
#70 | ||
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Bonjour,
Citation:
Citation:
|
||
|
|
00
|
|
|
#71 |
|
Membre Expert
![]() Inscription : août 2010 Messages : 533 ![]() |
Je viens de réaliser que pour l'écho tu n'as pas récupéré le code où j'utilisais l'interruption sur UDRE0. Mais tu auras besoin de l'interruption sur UDRE1 pour le programme final, donc c'est mal parti si tu n'as pas pu faire fonctionner un programme de test l'utilisant.
|
|
|
00
|
|
|
#72 | |
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Citation:
|
|
|
|
00
|
|
|
#73 |
|
Membre Expert
![]() Inscription : août 2010 Messages : 533 ![]() |
OK, donc il suffit de remplacer la file de transfert par un buffer de commande.
Je te rappelle que dans ton fichier texte il y a des valeurs supérieures à 255 même après conversion en pas moteur, donc il ne faut pas considérer que X ou Y peut tenir dans un octet. Le format des commandes est totalement libre, mais j'aime bien l'ASCII pour la possibilité d'avoir un caractère de contrôle à tout moment. Donc je te propose : - "\n" : démarre une commande (vide le buffer) - "42,51" : X et Y en ASCII, séparés par une virgule - "\r" : termine et exécute une commande Si une commande reçue est invalide, on renvoie NAK sur UDR0. Sinon on exécute la commande sur le moteur et on renvoie ACK sur UDR0. Dans le µC : - à la réception d'un \n je vide le buffer. - à la réception de \r je traite la commande (en différé si c'est long, mais je ne pense pas que ça soit nécessaire), j'alimente une file d'émission pour UDR1 et je vide le buffer. - à la réception d'autre chose je stocke dans le buffer. (et si ça dépasse la taille du buffer je ne fais rien) - J'émets sur UDR1 le contenu de la file, de la même manière que dans mon écho. (interruption sur UDRE1) Sur le PC : - pour chaque paire x,y j'envoie "\n42,51\r" puis j'attends la réponse ACK ou NAK. C'est pas forcément parfait, je rappelle que j'ai peu d'expérience, mais ça devrait fonctionner. |
|
|
00
|
|
|
#74 | |
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Citation:
Merci. |
|
|
|
00
|
|
|
#75 | ||||
|
Membre Expert
![]() Inscription : août 2010 Messages : 533 ![]() |
Pas la peine de me flatter.
Voici du code approximatif comme d'habitude, car je n'ai pas de compilo C++ aujourd'hui non plus : Microcontrôleur : Code :
Code :
N'hésite pas à poser des questions et à corriger mes erreurs. |
||||
|
|
00
|
|
|
#76 | ||
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#77 | ||||
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Bonjour Hibernatus,
j´ai en même temps lu et essaye de comprendre le programme du pc et du µC. Apres avoir lance le debuggage, l´IDE m´a signale plusieurs fautes. J´ai corriges les fautes, mais j´ai toutefois quelques questions. Code: Code :
Citation:
Citation:
Tu as declare la variable i et ensuite definis comme suit: Code :
i = (usart0_tx_buffer_size + usart0_tx_buffer_start) % usart0_tx_buffer_max_size; Au depart, usart0_tx_buffer_size = 0 et usart0_tx_buffer_start = 0. mais usart0_tx_buffer_max_size = 64u ou ???. Ensuite tu incrementes usart0_tx_buffer_size et les autres variables ne changent pas. |
||||
|
|
00
|
|
|
#78 | ||||
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Bonjour Hibernatus,
j´ai en même temps lu et essaye de comprendre le programme du pc et du µC. Apres avoir lance le debuggage du programme du µC, l´IDE m´a signale plusieurs fautes. J´ai corriges les fautes, mais j´ai toutefois quelques questions. Code: Code :
Citation:
Citation:
Tu as declare la variable i et ensuite definis comme suit: Code :
i = (usart0_tx_buffer_size + usart0_tx_buffer_start) % usart0_tx_buffer_max_size; Au depart, usart0_tx_buffer_size = 0 et usart0_tx_buffer_start = 0. mais usart0_tx_buffer_max_size = 64u ou ???. Ensuite tu incrementes usart0_tx_buffer_size et les autres variables ne changent pas. Je me trompe ou bien mon raisonement est ok ? Bref je me demande bien pourquoi tu utilises la variable i de cette maniere !!!! |
||||
|
|
00
|
|
|
#79 | ||||
|
Invité régulier
![]() arthur Étudiant Inscription : mars 2012 Messages : 110 ![]() |
Hello,
Code :
Code :
|
||||
|
|
00
|
|
|
#80 | ||
|
Membre Expert
![]() Inscription : août 2010 Messages : 533 ![]() |
Concernant les "...max_size" j'ai oublié en cours de route que j'en avais défini une pour les 2 buffers. Donc remplace usart0_tx_buffer_max_size et usart1_tx_buffer_max_size par usart_buffer_max_size.
Concernant le "i", le modulo est là pour une bonne raison : Je veux gérer une file, c'est à dire un buffer où les premiers octets entrés sont les premiers sortis (FIFO). Pour ça j'implémente un buffer circulaire basique : http://fr.wikipedia.org/wiki/Buffer_circulaire La variable "..._start" (désolé pour les noms à rallonge, mais j'ai voulu respecter ton style) sert à connaître le début de la file dans le buffer. Donc, quand le 1er élément de la file sort, on avance "..._start" au lieu de décaler toutes les données du buffer. Maintenant, si tu prends un buffer de 8 octets, avec le début à la position 4, et tu le remplis de A, B, C, D... ça donne : Code :
Comment tu transformes 9 en 1 ? 9 % 8 = 1. J'utilise 64u parce que c'est une puissance de 2 et les 2 opérandes seront non-signées, et je compte donc sur le fait que le compilo transformera l'opération en "& 63". (plus rapide) Donc évidemment ta correction ne fonctionnera pas. Sinon, j'ai corrigé mon code entre temps, il manquait un "+ 1" à la ligne 146. PS. J'ai corrigé vite fait le code du µC ci-dessus. Ca reste très sujet aux fautes de frappes, j'ai modifié dans le navigateur directement. |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com