Newbie et Carte relais rs-485

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 : KMtronic Ltd: RS485 Serial controlled Eight Channel Relay Board - 12V

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...

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+

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+

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...

@+

Schema ici :: http://guilde.cwahi.net/

code :


// "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);
  }
//}

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 ? :wink:

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 ???

@+

je dispose de celle en RS232 (carte relais + carte RS232) : KMtronic Ltd: USB Eight Channel Relay Controller - RS232 Serial controlled - 12V
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. :wink:

Merci pour ta réponse startx :wink:

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é ???

Voila zoroastre:

Mes 2 cartes sont Carte 4 relais 10A +12Vcc. Au prix du relai + UNL en cmos etc .. c'est pas cher et très propre. Ca fonctionne nickel.

@+

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:

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.

Bonjour,

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 : SN75176A pdf, SN75176A Description, SN75176A Datasheet, SN75176A view ::: ALLDATASHEET :::
et là aussi : Arduino Playground - DMXShield

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

A+

Merci pour toutes vos aides.

C'est super sympa :wink:

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 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 ???

@++

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, ...

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+

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 :

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

Je continue mes experimentations...

@++