Go Down

Topic: Newbie et Carte relais rs-485 (Read 2587 times) previous topic - next topic

zoroastre

Apr 23, 2010, 06:08 pm Last Edit: Apr 23, 2010, 06:42 pm by zoroastre Reason: 1
Bonjour,

Tout nouveau dans le monde Arduino, je m'éclate avec ma Mega...
Pourtant, je suis face à une difficulté relative au protocole rs-485.

J'ai fait l'acquisition de deux cartes relais rs-485 à 8 canaux sur le sîte de sigma-shop : http://www.sigma-shop.com/product/47/rs485-8-channel-relay-controller-12vdc-rs485-bus-id-01-relays-1-8.html

8 data, no parity, 1 stop bit

J'ai fait different essais, de cablage, de programation...je suis perdu.
La commande semble relativement simple :

Relay 1 commands:
OFF command : FF 01 00 (HEX) or 255 1 0 (DEC)
ON command : FF 01 01 (HEX) or 255 1 1 (DEC)

J'ai tenté le port serie 3 et 2, avec differentes commandes du type :
  Serial3.println('FF 01 01', HEX);

...mais rien n'y fait !!!

Si quelqu'un possède une telle carte relais ou a la possibilité de m'aider, je suis preneur...

Gné! ;)

Bidouille

Bonjour,

Comment as tu branché ton interface sur la méga-arduino ?
Je ne suis pas certain mais j'ai l'impression que la Méga Arduino n'a que des ports serie type RS232.
Si c'est bien le cas, les signaux ne sont pas compatibles et il faut passer par un driver type 75176.

A+

Bidouille

Ca se confirme : je viens de regarder le schéma de la carte sur le site : http://arduino.cc/en/Main/ArduinoBoardMega et j'ai aussi trouvé ça sur le forum : http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1242053267

A+

zoroastre

Merci pour ta réponse.

En effet, je me suis posé la question de la compatibilité. La carte relais posséde pourtant un chip SN75176BP (sur la petite carte controler) couplé avec un chip ATMEL ATTINY2313-20PU (pour la gestion du canal, je suppose)

En effet, peut-être un problème de cablage. quoique je penche de plus en plus vers un souci de programation, je doute sur la trame à envoyé.

Je completerais le sujet avec schema et code au plus tôt...

@+
Gné! ;)

zoroastre

#4
Apr 24, 2010, 12:54 am Last Edit: Apr 24, 2010, 01:21 am by zoroastre Reason: 1
Schema ici :: http://guilde.cwahi.net/

code :




Code: [Select]
// "TEST DES CARTES RELAIS RS-485"

// "Communication Parameters :"
// "8 Data, 1 Stop, No Parity"
// "Baud rate : 9600"

// "Commands :"
// "OFF command : FF 01 00 (HEX) or 255 1 0 (DEC)"
// "ON command : FF 01 01 (HEX) or 255 1 1 (DEC)"

#define Rx 15
#define Tx 14

int inbyte = 0;

void setup(void)
{
 Serial.begin(9600);
 Serial3.begin(9600);
 
 pinMode(Rx, INPUT);
 pinMode(Tx, OUTPUT);
 
 digitalWrite(Tx, LOW);
 digitalWrite(Rx, LOW);
 
 Serial.println("Setup ok");
}

void loop()
{
 digitalWrite(Tx, HIGH);
 Serial.println("init");
 delay(1000);
//  if (Serial3.available() > 0){
//    Serial.println("loop");
   delay(10);
   Serial3.print('FF 01 01', HEX);
   Serial3.println();
   delay(100);
   digitalWrite(Tx, LOW);
   delay(1);
   digitalWrite(Rx, HIGH);
   delay(1);
   inbyte = Serial3.read();
   Serial.println(inbyte, DEC);
   delay(100);
   Serial3.flush();
   digitalWrite(Rx, LOW);
 }
//}

   


Gné! ;)

startx

#5
Apr 26, 2010, 11:42 pm Last Edit: Apr 26, 2010, 11:42 pm by startx Reason: 1
J'ai essayé vite fait de brancher directement la carte relais sigma sur les I/O numérique de l'arduino et j'ai remarqué que l'intensité ne semblait pas suffisante. ll faut brancher 2 entrées/sorties par relais. Est-ce que par hasard  tu aurrais essayé zoroastre ?  ;)

zoroastre

Salut Startx,

Je ne comprends pas trop comment tu branches tes 2 entrées/sorties par relais ???

Un shema me parlerais plus ??? As-tu déjà réussi à piloter ces cartes relais ???

@+
Gné! ;)

startx

#7
Apr 28, 2010, 12:16 pm Last Edit: Apr 28, 2010, 12:22 pm by startx Reason: 1
je dispose de celle en RS232 (carte relais + carte RS232) : http://www.sigma-shop.com/product/8/-usb-eight-channel-relay-controller-rs232-serial-controlled-12v.html
Je n'ai pas la carte devant moi mais si mes souvenirs ne me jouent pas des tours ....
Comme j'ai une Arduino Mega avec suffisamment d'E/S, je voulais contrôler la carte relais directement pour éviter la carte avec le MAX et le ATtiny. Vu qu'il s'agit d'une carte standard avec un transistor par relai, j'ai relié les transistor au PIN de l'arduino mais comme j'ai expliqué afin de déclencher il faut 2 E/S pour piloter chaque relai. Donc 16 E/S pour piloter les 8 relais dommage. J'ai opté pour une autre carte.  ;)

zoroastre

#8
Apr 29, 2010, 02:01 am Last Edit: Apr 29, 2010, 05:04 pm by zoroastre Reason: 1
Merci pour ta réponse startx  ;)

Pour l'instant, je continue mes essais, sans succés hélas...

Si je suis les différents avis récoltés, j'ai une topologie type 'mirroir' avec 2 SN75176, le premier en emission piloté par l'Arduino, le second en reception pilotant ATty...

ARDUINO|SN75176|OUTPUT CONTROLER(with SN75176)
Tx-------->Di----A------>A
Rx-------->Ro-----B------>B
Int-------->Re/De

J'envoie un bit 0 sur Re/De, pour déterminer la direction des données (Tx), puis je balance ma trame...

Je ne trouve hélas pas de code détaillé relatif au rs485 ayant cette configuration !!!  :-[

Si quelqu'un pouvait m'écrire une code simple, détaillé, avec la commande en décimale afin que je puisse valider mes suspiçions ???

@++

Ps : Startx, peux-tu m'orienter vers la carte que tu as opté ???
Gné! ;)

startx

Voila zoroastre:
http://www.gce-electronics.com/
Mes 2 cartes sont http://www.gce-electronics.com/nos-produits/19-carte-4-rel.html. Au prix du relai + UNL en cmos etc .. c'est pas cher et très propre. Ca fonctionne nickel.

@+


fdufnews

Quote
J'ai tenté le port serie 3 et 2, avec differentes commandes du type :
 Serial3.println('FF 01 01', HEX);

...mais rien n'y fait !!!

Je pense qu'il y a une incompréhension sur le format de la trame. Le Serial3.println('FF 01 01', HEX) envoie le caractère 'F' puis le encore 'F' puis 0 ....
Je pense que ta carte elle attend les valeurs binaires. Essaie d'envoyer ça:
Code: [Select]
Serial3.print("\xFF\x01\x01");
Et attention parce que println envoie en plus à la fin de la chaine le saut de ligne (\0A \0D) ce qui peut embrouiller la carte relais.

Bidouille

Bonjour,

Quote
J'envoie un bit 0 sur Re/De

Tu veux dire que tu mets les lignes Re et De à 0 ?
Si je lis bien la datasheet du 75176, il faut mettre DE à 1 pour pouvoir envoyer des données sur la RS485 ...
Tu peux aussi metre RE à 1 puisqu'à mon avis, tu ne devrais pas avoir grand chose à lire ...

Regardes page 2 de la datasheet : http://pdf1.alldatasheet.com/datasheet-pdf/view/28605/TI/SN75176A.html
et là aussi : http://www.arduino.cc/playground/DMX/DMXShield

D'autre part, as tu mis les resistances de ligne ?

A+

zoroastre

#12
Apr 30, 2010, 10:37 pm Last Edit: Apr 30, 2010, 11:04 pm by zoroastre Reason: 1
Merci pour toutes vos aides.

C'est super sympa  ;)

Voici mon nouveau schema : http://guilde.cwahi.net/

J'ai l'impression de ne pas être bouclé côté controler, une masse manque, non ???

Les 2 résistances de ligne doivent-elles absolument avoir les mêmes valeurs, dans ce cas, j'en récup une dés lundi au boulot ???

Bidouille +1

fdufnews, ma carte relais fais 'guirlande de noel', soit ma trame est mauvaise, soit cela est dû à la valeur résistance. Petite question tout de même : C'est quoi donc un bit de stop ??? J'envoie ma trame point, ou j'envoie ma trame et je dis 'stop' (Serial3.print("\0A")) ???

Je teste
Code: [Select]
Serial3.print("\xFF\x01\x01"); dés que possible.

Pour l'instant, mes essais sont réalisés à courte distance, mais j'ai cru comprendre qu'un câble croisé & blindé est nécessaire sur A et B.

Que pensez-vous de ces cartes relais niveau rapport qualité/prix ???

@++
Gné! ;)

Bidouille

Bonjour,

Pour la liaison, un simple fil torsadé suffit. Pour de la très longues distances, tu peut utiliser du cable informatique pour réseau : pas cher, solide, ...

Quote
C'est quoi donc un bit de stop ??? J'envoie ma trame point
Pour toi, c'est totalement transparent.
Jettes un oeil la dessus : http://www.rennes.supelec.fr/ren/fi/elec/docs/rs232/rs232.htm
Comme c'est l'Atmega qui gère la transmission, il s'occupe de mettre les données en 8bits, de ne pas créer un bit de parité ( et de ne pas l'envoyer ) et de mettre un bit de stop et d'envoyer le tout, à la vitesse choisie.

A+

zoroastre

Bonjour,

J'ai pû faire fonctionner la carte !!! Ouff !

Merci pour toutes vos aides... ;D

J'ai réalisé le schema suivant : http://guilde.cwahi.net/ sans la ligne de résistances 470 ohms.(elle doit être utile sur de plus longue distance je pense...)

Ce qui a résolue mon problème se trouvait au niveau du code; Il faut activer la transmission avec un bit à 1 sur RE/ & DE, transmettre, puis relacher avec un bit 0, etc...

Ce qui donne :
Code: [Select]

...
digitalWrite(any_dpin, HIGH);
Serial3.print("\xFF\x01\x01"); # Swith on relais 1
digitalWrite(any_dpin, LOW);
...


Je continue mes experimentations...

@++
Gné! ;)

Go Up