Pages: [1] 2 3   Go Down
Author Topic: Communication RS232 (programmation)  (Read 1751 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 108
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous,

J'ai déjà posté pas mal de fois sur ce sujet alors j'ai jugé bon de créer un nouveau topic pour la partie programmation.

Niveau hardware : pas de problème, mes deux Uno sont interfacés via deux MAX202

Je souhaite envoyé :

Code:
void setup()
{
  Serial.begin(9600);
 
}

void loop()
{
  delay(500);
  Serial.write('D');
  Serial.write(1);
  Serial.write(64);
  Serial.write(128);
  Serial.write(255);
}

Le caractère D me permet de détecter que j'envoie bien les commandes de PWM pour mes moteurs : il me sert de "top départ". J'envoie donc ensuite 4 commandes de PWM sur la liaison série et c'est ces 4 valeurs que je souhaite récupérer.

J'ai donc utilisé le code ci dessous pour les récupérer :
Code:
char message[4];
int n_octet = 5;

void setup()
{
  Serial.begin(9600);
  //pinMode(13, OUTPUT);
}

void loop()
{
  if (Serial.available()>0)
  {
    if(Serial.read()!='D')
    {
      delay(50);
    }
   
    else
    {
      for(int n=1; n<n_octet; n++)
      {
        message[n]=Serial.read();
        Serial.print(message[n]);
      }
    }
  }
}

Malheureusement, je visualise sur le port série : FF FF FF 01 au lieu du 01 40 80 FF attendu...
Je ne comprends vraiment pas pourquoi ...
Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour,

Vérifie le bon fonctionnement de ton montage à base de MAX202 en réalisant une "boucle locale".
Pour ce faire relie le Tx au Rx d'un côté et regarde si ce que tu envoi de l'autre coté te revient correctement.

Ps: Tu as bien croisé Rx et Tx entre tes deux UNO ?
Si tu ne croise pas tu auras Tx -> Tx et Rx -> Rx ce qui ne marchera pas.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Full Member
***
Karma: 0
Posts: 108
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La liaison est opérationnelle... j'ai l'impression que c'est un problème de code...
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 108
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Voila ce qu'à donné ma boucle :

mon code :

Code:
char message[4];

void setup()
{
  Serial.begin(9600);
 
}

void loop()
{
  delay(500);
  Serial.write('D');
  Serial.write(1);
  Serial.write(64);
  Serial.write(128);
  Serial.write(255);
 
  if (Serial.available() > 0)
  {
   for(int n=0; n<5; n++)
      {
        message[n]=Serial.read();
        Serial.print(message[n]);
      }
  }
  Serial.flush();
}

Et les résultats obtenus avec XCTU en PJ.

Ce que je vois :

La trame envoyée apparaît bien correctement : 44 01 40 80 FF
La trame reçue est bien identique à la trame envoyée...


* ds.bmp (799.94 KB, 457x597 - viewed 15 times.)
« Last Edit: July 16, 2012, 09:04:52 am by rhum187 » Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 108
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Le problème qu'il y a c'est que le Serial.read "rate" des octets.

Je joins deux screens pour argumenter mon propos :

Le premier [COM11] correspond aux trames envoyées
Le second [COM13] correspond aux trames reçues (puis réaffichée)

Je joins aussi les deux codes utilisés :

Code écriture :
Code:
void setup()
{
  Serial.begin(9600);
 
}

void loop()
{
  delay(500);
  Serial.write('D');
  Serial.write(1);
  Serial.write(64);
  Serial.write(128);
  Serial.write(255);
}

Code lecture :
Code:
char message[4];
int n_octet = 5;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available()>0)
  {
    if(Serial.read()!='D')
    {
     delay(50);
    }
   
    else
    {
      for(int n=0; n<n_octet; n++)
      {
        message[n]=Serial.read();
        Serial.print(message[n]);
      }
    }
  }
  Serial.flush();
}


* fg.bmp (1591.42 KB, 916x593 - viewed 15 times.)
Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Tu doit ajouter une boucle d'attente avant de lire un octet smiley-wink

Code:
// ...
while(Serial.available() < 1);
message[n]=Serial.read();
// ...
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Full Member
***
Karma: 0
Posts: 108
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bizarrement ça marche beaucoup mieux... smiley-wink

Merci (encore) Skywodd !

Encore quelques ajustements avec mes deux programmes complets mais ça devrait le faire... j'ai une bonne base maintenant !
Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bizarrement ça marche beaucoup mieux... smiley-wink
Si tu savais le temps que j'ai mis avant de trouver cette astuce au début ...
Le truc bête par excellence dont la doc arduino ne parle pas smiley-yell
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Full Member
***
Karma: 0
Posts: 108
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'en ai vraiment marre... je pensais avoir terminer mon code avec tes précieux conseils et voilà que je viens de m'apercevoir que la PWM des pins 10,9 et la PWM des pins 6,5 ne sont pas cadencés de manière identique... :/

Quand j'observe au scope j'ai une fréquence de environ 490Hz pour les pins 10 et 9 et j'ai le double pour les 6 et 5.

Alors il me vient deux quetions :

1/ Est-ce que ça sera la même chose sur la Nano (car je développe mon code sur une Uno)
2/ Est-ce que c'est possible de la changer facilement ? J'ai regardé un peu...  smiley-eek-blue

Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

1/ Est-ce que ça sera la même chose sur la Nano (car je développe mon code sur une Uno)
Oui c'est une différence logiciel liée au "core arduino", pas à la carte.

2/ Est-ce que c'est possible de la changer facilement ? J'ai regardé un peu...  smiley-eek-blue
Oui et non

Regarde ici :
http://arduino.cc/playground/Code/PwmFrequency
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Full Member
***
Karma: 0
Posts: 108
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok,

ce qui veut dire que je ne peux ni faire tomber les pins 5 et 6 à 490Hz ni monter les pins 9 et 10 à 970Hz car il manque le case 128



Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ce qui veut dire que je ne peux ni faire tomber les pins 5 et 6 à 490Hz ni monter les pins 9 et 10 à 970Hz car il manque le case 128
C'est vraiment un point critique que tes PWM est une fréquence identique ?
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Full Member
***
Karma: 0
Posts: 108
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ben je me posais la question justement...

Je pense que le composant auquel je les envoie s'en moque un peu...

EDIT : C'est la ds de mon pont en H : http://www.ti.com/lit/ds/symlink/drv8432.pdf
« Last Edit: July 17, 2012, 02:55:09 pm by rhum187 » Logged

0
Offline Offline
God Member
*****
Karma: 0
Posts: 798
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Yep!

Si çà peut aider, tu peux piloter autant de servos que tu veux avec un seul PWM et sur n'importe quelle pinoche.

Je viens de plus ou moins faire le tour ce week-end de mes servos smiley-wink

http://arduino.cc/forum/index.php/topic,114551.msg863024.html#msg863024

@+

Zoroastre.
« Last Edit: July 17, 2012, 03:18:11 pm by zoroastre » Logged

Veuillez indiquer [RESOLU] dans l'entête du titre en éditant votre premier message smiley-wink

Offline Offline
Full Member
***
Karma: 0
Posts: 108
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci zoroastre,

J'ai regardé ton topic avec beaucoup d'attention et ça pourra éventuellement m'aider smiley-wink

Logged

Pages: [1] 2 3   Go Up
Jump to: