Pilotage alimentation de laboratoire avec Shield RS232

Bonjour,

C'est la première fois que je poste un topic sur le forum, donc bonjour à tout le monde =)

Voilà mon problème depuis une semaine, j'essaie de piloter une alimentation Velleman LABPS3005D à travers une liaison RS232.

Pour se faire, j'utilise une arduino Mega avec une shield RS232 de chez joy-it. J'utilise RX1 et TX1 pour communiquer avec l'alimentation.

Le COM setting de l'information sont les suivants :
Baud rate : 9600
Parity bit : None
Data bit : 8
Stop bit : 1
Data flow control : None

void setup() {

  Serial.begin(9600);
  Serial1.begin(9600,SERIAL_8N1);

}

void loop() {

 
  Serial1.println("VSET1:2.25");
  
  delay(10);


}

Ce bout de code me permet de modifier paramètres la tension à 2,25V sur l'alimentation.

par exemple :
3. VSET:
Description:Sets the output voltage. Example VSET1:20.50
Sets the CH1 voltage to 20.50V

J'ai essayé à l'aide d'un Hyperterminal (MTTTY) en USB (cette fois, et non en RS232, pas sur mon PC) en envoyant un fichier text avec la commande VSET1:2.25, j'arrive à changer la tension sur l'alimentation.

Si quelqu'un à déjà eu une expérience similaire son aide serait la bienvenue, car je ne parviens à communiquer avec l'arduino et l'alimentation.

Bonjour,

Tu fais un "retour chariot" avec Hyperterminal?

As tu tenté simplement de faire Serial1.print("VSET1:2.25"); (sans ln donc)

Sur l'hyperterminal, je fais que envoyé un fichier .txt, ce fichier contient juste : VSET1:2.25 (sans retour à la ligne, car avec ca ne fonctionne pas).

J'ai essayé :
-Serial1.print("VSET1:2.25");
-Serial1.println("VSET1:2.25");
-Serial1.write("VSET1:2.25");
-Serial1.print("VSET1:2.25",BIN);
-byte tension[10]={'V', 'S', 'E', 'T', '1', ':', '2', '.', '2', '5'};
for(int i;i<10;i++){
Serial1.write(tension*);*
}
J'ai trouvé en plus cette doc qui explique le protocole à suivre pour communiquer avec l'alimentation, disant qu'il faut envoyer un string, ce que je fais, mais je sèche ...

Normalement le Serial1.print("VSET1:2.25"); devrait faire l'affaire puisque l'alimentation attend une chaîne de caractères.

Par contre,

void loop() {
  Serial1.println("VSET1:2.25");
  delay(10);
}

c'est peut-être un peu violent d'envoyer une commande toutes les 10 millisecondes. Pour commencer, tu devrais placer cette commande à la fin du setup() et ne rien faire d'autre ou mettre un while(1); à la fin de loop().
Sans compter que 10ms c'est environ le temps pour envoyer ta chaîne de caractères. Autant dire que tu dois saturer l'alimentation de messages (et peut-être même l'arduino au bout d'un moment)

Bonjour

peut être une absence de connection entre RX1/TX1 du Mega2560 (Serial1) et RX/TX du Max232 présent sur le shield. Ce shield permet, par cavalier, des liaisons avec D0 à D7, pas au delà , donc pas D18 ou D19 (Serial1).

RS232.jpg

Module basé sur un MAX232 permettant d’ajouter une liaison RS232 à une carte Arduino ou compatible.
Sélection des ports de communication par cavaliers (choix de deux broches de l’Arduino entre D0 à D7).

->Supprimer les 2 cavaliers et relier par fils RX à D19, TX à D18
(Autre solution : utiliser un SoftSerial utilisant les broches D2 à D7 et positionner en conséquence les 2 cavaliers)

al1fch:
Bonjour

peut être une absence de connection entre RX1/TX1 du Mega2560 (Serial1) et RX/TX du Max232 présent sur le shield. Ce shield permet, par cavalier, des liaisons avec D0 à D7, pas au delà , donc pas D18 ou D19 (Serial1).

RS232.jpg
->Supprimer les 2 cavaliers et relier par fils RX à D19, TX à D18
(Autre solution : utiliser un SoftSerial utilisant les broches D2 à D7 et positionner en conséquence les 2 cavaliers)

J'utilise deux câbles pour relier RX1 et TX1 de l'arduino Mega à la Shield RS232. J'ai essayé avec le SoftSerial, en choisissant D2(Rx) et D3(Tx), et j'ai obtenu le même résultat : pas de réponse de l'alimentation.

fdufnews:
Normalement le Serial1.print("VSET1:2.25"); devrait faire l'affaire puisque l'alimentation attend une chaîne de caractères.

Par contre,

void loop() {

Serial1.println("VSET1:2.25");
  delay(10);
}



c'est peut-être un peu violent d'envoyer une commande toutes les 10 millisecondes. Pour commencer, tu devrais placer cette commande à la fin du setup() et ne rien faire d'autre ou mettre un while(1); à la fin de loop().
Sans compter que 10ms c'est environ le temps pour envoyer ta chaîne de caractères. Autant dire que tu dois saturer l'alimentation de messages (et peut-être même l'arduino au bout d'un moment)

Les 10 ms, c'est effectivement trop, j'ai ajouté un while(1).

Je ne comprends pas moi non plus pourquoi un simple Serial1.print("VSET1:2.25") ne suffit pas. Qu'est ce que l'hyperterminal fait de plus?

Si le shield n'est pas enfiché sur votre MEGA, comment l'alimentez vous? les GNDs sont ils reliés? quelle est la position des cavaliers et sur quelles pins avez vous branché vos fils?

Bonjour,

Tu es sur de ton cable RS232? C'est un cable droit ou croisé?

Juste une petite chose !!!

Il se pourrais que l'alimentations a commander attent un signal RS232 12 Volt et non pas TTL comme nos arduinos fournissent.

Un PC de bureau généralement sort en 12 V mais un portable est bien souvent en 5 V!

Peut-être faut il voir sa ?

Il se pourrais que l'alimentations a commander attent un signal RS232 12 Volt et non pas TTL comme nos arduinos fournissent.

Le shield utilisé, avec son circuit intégré Max232, fait l'interface entre les niveaux TTL et niveaux RS232

oups pas vu !!!

:wink:

J-M-L:
Si le shield n'est pas enfiché sur votre MEGA, comment l'alimentez vous? les GNDs sont ils reliés? quelle est la position des cavaliers et sur quelles pins avez vous branché vos fils?


kamill:
Bonjour,

Tu es sur de ton cable RS232? C'est un cable droit ou croisé?

Voici le lien du cable sur Conrad.
J'ai en plus essayé de croisé ou non le tx et rx, sans succès

J'ai essayé un code tout simple en C++ sur Xcode, et envoyé un portSerial << "VSET1:2.25"
Ça fonctionne tout bien.

Et j'ai trouvé sur un forum, un utilisateur qui a réussi à le faire fonctionner sur une arduino.