je suis debutant dans la programmation de microcontrôleur et j´espere que je pourrais trouver de l´aide aupres des membres du forum.
En fait, je bosse avec l´atmega644p. L´atmega644p possede deux USARTs. A savoir l´USART0 (RS232) et l´USART1(RS485). L´USART0 de l´atmega644p receptione les donnees ou les commandes qui lui sont envoyes par le pc sous la forme "/n X,Y /r".
\n ----> represente le debut de la commande
X -----> represente la position X
, -----> sert a separer la position X et Y
Y -----> represente la position y
\r-----> Fin de la commande
Concernant la reception des commandes "/n X,Y /r" a partir de L´USART0, je n´ai pas de probleme. tout se passe bien.
Cependant l´USART1 (RS485) de l´atmega644p permet d´envoyer uniquement les positions X et Y vers deux moteurs de commande identique. Chaque moteur de commande possede une entree RS485 pour receptionner les commandes envoyees par l´atmega644p. Lorsqu´un moteur de commande receptionne une commande, alors le moteur de commande doit retourner automatiquement une reponse a l´atmega644p via l´USART1, pour confirmer si la commande receptionnee est valide ou invalide.
Exemple: Commande envoyee au moteur de commande -------------------------------------> "#1A\r"
Reponse du moteur de commande si la commande receptionnee est valide -----> "1A\r" ---> commande valide
Reponse du moteur de commande si la commande receptionnee est invalide ---> "1A?\r" --> commande invalide
Le moteur de commande ne peut que recevoir et comprendre les commandes qui sont sous forme ASCii, c-a-dire sous la forme "#1p2\r"
Explications: "#1p2\r"
# ---------------> Marque le debut d´une commande
1 ---------------> Represente l´adresse du moteur de commande
p2 --------------> Represente le mode de travail du moteur de commande
\r --------------> Represente la fin d´une commande
Voici en quelques mots la maniere donc mon atmega644p a ete programme:
- Quand on reçoit \r sur l'USART0, au lieu de renvoyer ACK à la fin, on stocke les échos(Reponses moteurs) qu'on attend dans des chaînes statiques.
- Quand on reçoit \n sur l'USART0, on vide ces chaînes (machaîne[0] = 0). C'est pour le cas d'un redémarrage.
- Quand on reçoit quelque chose sur l'USART1, on le compare à l'écho attendu, et quand on l'a reçu, on envoie un ACK sur l'USART0.
ACK ---> signifie que l´envoi a ete un sucess et ensuite on peut passer a l´envoi de d´autres positions.
- Si on reçoit autre chose que ce qui était attendu, je pense qu'il faut l'ignorer.
J´ai programme avec l´aide de certaines personnes mon atmega644p afin de realiser mon experience. Helas mon programme ne marche pas. Pourriez-vous, s´il vous plaît me donner un coup de main. En fait je crois que mon stress vient des fonctions ISR(USART0_RX_vect), ISR(USART1_RX_vect) et ParametrageMoteur().
Mon code se trouve en piece jointe
Merci.
