IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Adapter le serial de l'arduino pour un protocole un peu exotique


Sujet :

Arduino

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Par défaut Adapter le serial de l'arduino pour un protocole un peu exotique
    Bonjour

    Je dois faire communiquer l'arduino avec un appareil qui utilise une communication serie un peu étrange.

    Voici la trace de mon signal.

    Nom : trace2.png
Affichages : 1197
Taille : 30,3 Ko

    J'ai deux fils qui émettent en même temps le signal opposé.
    La tension au niveau haut est à 2,7V, au niveau bas elle est a 0,8V et au repos elle est a 1,6V
    Au repos les deux fils ont la même tension. Lors d'un signal un fil est au niveau haut pendant que l'autre est au niveau bas et vice-versa;

    Le signal est sur 8 bits, 1 bit de stop pas de parité à 115 kbauds. Il se décode très bien à l'oscillo. Je dois donc pouvoir générer ce signal avec l'arduino.

    Mon premier problème c'est que le signal n'est pas symétrique par rapport à la tension de repos. Le deuxième problème c'est que je dois générer ces deux signaux opposés.

    J'imagine que je dois pouvoir faire quelque chose avec des ampliOp pour transformer le signal série de l'arduino mais j'ai un peu du mal.

    Un grand merci d'avance à qui me mettra sur la bonne piste.

    Nat

  2. #2
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 252
    Par défaut
    Salut,
    Ton signal ressemble fort à du RS485.

    Y a aucune indication sur l'appareil avec le quel tu causes ?

  3. #3
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Bonsoir,

    Vincent confirme ma pensée : RS485 (Modbus 2 fils).

    Ne branche pas directement tes signaux sur les entrées de ton Arduino tu pourrais les griller à cause des tensions négatives. Pour la mise à niveau des tensions tu as des composants chez Maxim Integrated qui font bien ce travail. Exemple :
    MAX485

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Par défaut
    Merci beaucoup pour cette piste.
    J'ai a la maison deux cartes RS485 et plusieurs arduinos, je vais donc pouvoir tester et voir si j'ai le même type de signal.

    En tout cas encore merci.

    Nat

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Par défaut
    Bonsoir,

    J'ai fait le montage avec mes cartes RS485
    Nom : trace3.png
Affichages : 1125
Taille : 27,1 Ko

    et j'obtiens un profil similaire (j'ai même réussi a reproduire la même séquence). Néanmoins le profil est un peu différent, chaque voie variant entre la tension de repos et sa tension max (ou min pour l'autre voie) alors que sur le montage que j'ai observé chaque voie avait une tension de repos et 2 tension min/max;

    Est-ce qu'il y a autant d'implémentation hardware que de constructeur de cartes ?
    -> Ma carte RS485

    Est ce que j'ai intérêt a faire mon propre montage a base de max485 pour obtenir le bon profil ?

    Merci de vos éclaircissements.

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 282
    Par défaut
    Bonsoir

    C'est la patte DE qui est mal gérée, elle devrait resté active (à 1) pendant l'entier de la transmission alors que dans ton test elle ne l'est que lors des envois de 1. C'est prévu pour gérer les collisions. Voir si il n'y a pas un jumper/switch pour le contrôler depuis le micro. J'ai chargé le schéma mais je ne comprends pas le repérage des connecteurs.

    Bonne nuit

    Delias

  7. #7
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Il y a quelque chose qui me gêne dans ton second graphique : ton signal est dégueulasse. Sur la voie en rouge en particulier il y a des pics de tensions qui sont assez impressionnants quand le signal revient au repos. Est-ce que de ces parasites ne viendraient pas du signal bleu ?

    Citation Envoyé par boubil Voir le message
    chaque voie variant entre la tension de repos et sa tension max (ou min pour l'autre voie) alors que sur le montage que j'ai observé chaque voie avait une tension de repos et 2 tension min/max
    Je n'ai pas compris ce que tu as voulu dire.

  8. #8
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 252
    Par défaut
    Citation Envoyé par Auteur Voir le message
    [...]Je n'ai pas compris ce que tu as voulu dire.
    boubil nous dit qu'il a perdu la symétrie du signal. Avant il avait une symétrie autour de 1.5V et là ce n'est plus le cas.
    J'ai également chargé le schéma et aucun doute, celui qui l'a dessiné a mis toute son énergie pour le rendre le mois clair possible ! Bref.

    Au vu du graphique tu as une tension qui s'est surélevée, l'autre qui s'est écrasée et la symétrie n'est plus respectée.

    Essaye d'inverser les signaux A et B pour être dans cette config.
    Nom : Capture13.PNG
Affichages : 1467
Taille : 27,1 Ko

    Dans un réseau RS485, comme ci dessus, il faut que les "A" soient reliés ensemble et idem pour les "B". Les résistances de 120 Ohms, notées Rt, sur le schéma sont des résistances d'adaptation et elles sont nécessaires sur de grande distance sinon tu as des échos/rebonds sur la ligne. Elles sont placées seulement aux extrémités du réseau.

  9. #9
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 252
    Par défaut
    Salut Delias,
    Citation Envoyé par Delias Voir le message
    [...]C'est la patte DE qui est mal gérée, elle devrait resté active (à 1) pendant l'entier de la transmission alors que dans ton test elle ne l'est que lors des envois de 1. C'est prévu pour gérer les collisions. Voir si il n'y a pas un jumper/switch pour le contrôler depuis le micro. J'ai chargé le schéma mais je ne comprends pas le repérage des connecteurs.[...]
    Qu'est ce qui te fait dire ça ? Je veux dire par rapport au graphique ?

    A+
    Vincent

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 282
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Salut Delias,


    Qu'est ce qui te fait dire ça ? Je veux dire par rapport au graphique ?

    A+
    Vincent
    Bonsoir Vincent, bonsoir à tous

    En fait je crois que j'ai inversé les états 1 et 0 du signal. J'ai oublié que le start bit c'est un 0.

    Sur le diagramme du haut on voit bien un état de repos, un état 0 (rouge haut et bleu bas) et un état 1 (rouge bas et bleu haut)
    Sur le diagramme du test, on voit l'état de repos et le 0, mais le 1 est remplacé par celui de repos. Ce qui me fait dire que DE (la patte 3 du MAX487) n'est à 1 que quand on émet le 0 (sauf puce défectueuse). Surtout que dans l'exemple de code, il n'y a pas de gestion de ce signal. Et de même la connexion entre l'Arduino et le module comporte uniquement 4 fils, RXD, TXD, VCC et GND. Ce soir j'ai remarqué qu'il y a un petit transistor sur la platine, non repris dans le schéma qui doit probablement servir à inverser TXD pour commander DE (et /RE).

    Bonsoir Boubil
    Maintenant que les tensions ne soient pas identiques n'est pas grave. C'est la valeur différentiel qui est importante.

    Bonne soirée

    Delias

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Par défaut
    Bonsoir

    Merci infiniment pour vos échanges très constructifs.

    J'ai fait un petit tour ce midi dans ma boutique d'électronique préférée et j'ai rapporté deux MAX485.

    Vos échanges m'ont permis de comprendre pas mal de choses. Effectivement la DE semble mal (pas) gérée par cette carte;

    Avec mes MAX485 je parviens à obtenir exactement le bon profil (sauf que les lignes A et B ne sont pas au même potentiel au repos.)

    Plusieurs points que je note :

    J'ai du mettre des résistances de polarisation de 600ohm (je n'avais pas les 650 recommandées) entre le A la masse et le B et le 5V (lu ici http://www.schneider-electric.fr/fr/faqs/FA22821/). Je n'en aurais peut être pas besoin dans mon montage final car elles y sont sans doute déjà.

    Dans les différents scripts arduino la gestion du DE est gérée d'une manière curieuse qui m'a posé quelques problèmes, beaucoup mettent une petite tempo avant de remettre DE à receive. Cela se voit à l'oscillo (plateau à la fin du message), mais si on ne le met pas, l'envoi série n'est pas terminé et on perd un bout du signal. Un petit serial.flush a réglé le problème.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            digitalWrite(SSerialTxControl, RS485Transmit);  // Enable RS485 Transmit
        	for(int i=0;i< sizeof(outByte);i++) {
        	    	  Serial1.write(outByte[i]);
      	      }
        	Serial1.flush();
        	digitalWrite(SSerialTxControl, RS485Receive);  // enable RS485 receive

    Dernière question sur le Max485 il y a DE et RE. Dans pratiquement tous les montages on semble shunter les deux. Pourquoi ? N'y a-t-il aucun intêret à les gérer séparément ?

    Voila mon signal (il n'est pas super propre - peut être par ce que je suis sur une breadboard avec des fils dans tous les sens).

    Nom : trace5.png
Affichages : 1388
Taille : 26,0 Ko

    et encore un grand merci à vous pour votre aide super constructive.

    Nat

  12. #12
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 252
    Par défaut
    Citation Envoyé par boubil Voir le message
    J'ai du mettre des résistances de polarisation de 600ohm (je n'avais pas les 650 recommandées) entre le A la masse et le B et le 5V (lu ici http://www.schneider-electric.fr/fr/faqs/FA22821/). Je n'en aurais peut être pas besoin dans mon montage final car elles y sont sans doute déjà.
    Dans la littérature électronique c'est le fail-self biasing RS485 et c'est une bonne pratique. Je me demande si dans les drivers RS485 récents tout n'est pas dedans ?

    Citation Envoyé par boubil Voir le message
    Dernière question sur le Max485 il y a DE et RE. Dans pratiquement tous les montages on semble shunter les deux. Pourquoi ? N'y a-t-il aucun intêret à les gérer séparément ?
    Cette question débouche sur ton interrogation juste au dessous !
    Citation Envoyé par boubil Voir le message
    Dans les différents scripts arduino la gestion du DE est gérée d'une manière curieuse qui m'a posé quelques problèmes, beaucoup mettent une petite tempo avant de remettre DE à receive. Cela se voit à l'oscillo (plateau à la fin du message), mais si on ne le met pas, l'envoi série n'est pas terminé et on perd un bout du signal. Un petit serial.flush a réglé le problème.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            digitalWrite(SSerialTxControl, RS485Transmit);  // Enable RS485 Transmit
        	for(int i=0;i< sizeof(outByte);i++) {
        	    	  Serial1.write(outByte[i]);
      	      }
        	Serial1.flush();
        	digitalWrite(SSerialTxControl, RS485Receive);  // enable RS485 receive
    C'est parce que ça dépend du hard.
    Effectivement, sur le MAX485 tu as un DE et et un RE/
    Si DE à 1 tu peux émettre
    Si DE à 0 tu ne peux pas émettre

    Si RE/ à 1 tu ne peux pas recevoir
    Si RE/ à 0 tu peux recevoir

    Si tu ne pilotes pas assez vite tu peux recevoir sur RO ce que tu émets sur DI
    Exemple : Tu passes séparément DE à 1 et RE/ à 1 en te disant que tu as bloqué la réception (nickel !) Tu balances les données et une fois la dernière donnée partie tu passes rapidement DE à 0 et RE/ à 0 en te disant que tu as bloqué l'émission et autorisé la réception. Jusque là c'est parfait tu vas me dire mais.... l'UART de ton Arduino n'est pas d'accord avec ça car le "A" de UART c'est pour Asynchrone. Si je vulgarise et en faisant simple tu ne peux pas savoir quand la dernière donnée est partie du buffer (pour mettre RE/ à 0 et écouter une réponse de l'autre appareil) sauf a regarder précisément un flag dans ton micro ou bien en mettent petite tempo. En pilotant séparément tu t'exposes a recevoir la ou les dernières données qui sont en partance vers l'appareil.

    Si tu les relis ensemble (dans la pratique c'est quasiment toujours ce qu'on fait), donc si tu les shunts alors tu peux soit émettre soit recevoir mais c'est soit l'un soit l'autre. Une fois que tu passe DE à 1 (RE/ sera aussi à 1 ce qui bloque la réception) tu envois tes données et une fois que la dernière est partie, tu passes tout de suite DE à 0 (RE/ sera aussi à 0 ce qui autorise la réception). Avec cette technique tu t'exposes un peu moins a recevoir la ou les données en partance du buffer de l'UART vers l'autre appareil.


    Citation Envoyé par boubil Voir le message
    Voila mon signal (il n'est pas super propre - peut être par ce que je suis sur une breadboard avec des fils dans tous les sens).

    Nom : trace5.png
Affichages : 1388
Taille : 26,0 Ko
    C'est bizarre car normalement il devrait être bien symétrique.
    Qu'est ce qu'on voit là ? Une comm entre deux MAX485 ou bien entre un MAX485 et ton appareil ? Où sont les résistances de polarisation ? Tu es sur qu'elles ne sont pas déjà dans l'appareil avec le quel tu communiques au quel cas il ne faut pas les mettre deux fois ?

  13. #13
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 282
    Par défaut
    Bonsoir Nat

    Alors dans le désordre.
    Les résistances de polarisation ne sont pas nécessaire dans ton cas, ou du moins elles ne sont pas dans ta première mesure (à l'état de repos des deux signaux sont au même potentiel).
    Sans ces résistances, on a du RS-485 mono-maître sans gestion des collisions. Les 0 et 1 sont émit en dominant et il n'y a pas vraiment d'indication de collision pour l'envoyeur, tout au plus un échec du côté du récepteur. En cas d'émission simultanée opposée (l'un à 1, l'autre à 0) les deux drivers seront en court-circuit (ils sont prévu pour le supporter) normalement le plus fort gagnera, mais éventuellement avec un signal non déterminé.
    Avec ces résistances, on a une modif pour avoir du multi-maîtres avec une détection possible des collisions. Il faut encore implémenter l'arrêt de la transmissions dans le µc. Dans ce cas tes platines fonctionnent parfaitement. Car en état de repos, les résistances produise un 1 récessif, alors que les 0 sont émis en dominants. On peut aussi faire du mono-maître dans cette config. Au vu de ta première mesure tu n'as pas besoin de cette config.

    Par principe quand on a pas la bonne résistance, on prend la valeur en dessus, pas en dessous (il y a des exceptions notamment en cas de circuit à I constant ce qui n'est pas le cas ici).

    Lorsque tu envois un byte dans le code, il est chargé dans le buffer d'envoi du µC, l'instruction suivante sera exécutée en même temps que le front descendant du start bit. Il faut ensuite que l'USART prenne le temps de l'envoyer. Avec le timer on attend une durée un peu plus longue, avec serial.flush on interroge (en boucle) l'USART pour attendre la fin de l'envoi.

    DE: sortie active à 1, /RE lecture active à 0, donc en les branchant ensemble la puce est soit en lecture soit en écriture, et cela évite que ce que l'on envoie se retrouve dans le buffer de lecture µC. En agissant à la manière de ta platine (DE-/RE = !TXD) avec un pull-up sur RXD, en écriture le signal RXD reste à 1 tant qu'il n'y a pas de collision, et passera à 0 en cas de collision, et permet la lecture des messages quand le µC n'est pas en écritures.

    Bonne nuit

    Delias

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Par défaut
    Merci beaucoup pour ces explications très claires.

    Néanmoins, j'ai quand même de l'écho :
    l'arduino qui emet sur la ligne lit son propre message.
    Le deuxieme arduino ne fait qu'écouter la ligne.

    J'ai pourtant mis une résistance 120 ohms entre le A et le B

    En plus la mise en emission de DE/RE se fait avec un petit décalage par rapport à l'emission et ca semble provoquer un décalage dans la lecture du message (j'obtiens 40 10 2 45 52 88 8E 4 0 au lieu de 1 4 0 2 45 52 88 8E 4 )
    Toutefois, si c'est le deuxieme arduino qui décode, je recois 1 4 0 2 45 52 88 8e 4 0 ce qui est parfait au zéro de fin pret.

    Ceci me pose problème car pour l'instant je maquette avec deux arduino mais en situation finale j'aurais un seul arduino qui va écouter et émettre.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    long int time;
    #define RS485Transmit    HIGH
    #define RS485Receive     LOW
    #define SSerialTxControl 3   //RS485 Direction control
     
    byte outByte[9];
     
    void setup() {
      // initialize both serial ports:
      Serial.begin(57600);
      Serial1.begin(115200);
      Serial.println("Emetteur A pret");
      time=millis();
     
      outByte[0]=0x01;
      outByte[1]=0x04;
      outByte[2]=0x00;
      outByte[3]=0x02;
      outByte[4]=0x45;
      outByte[5]=0x52;
      outByte[6]=0x88;
      outByte[7]=0x8E;
      outByte[8]=0x04;
     
     
      pinMode(SSerialTxControl, OUTPUT);
      digitalWrite(SSerialTxControl, RS485Receive);  // Init Transceiver
    }
     
    void loop() {
     
      // répétition vers la console de ce qui est lu sur le bus
      if (Serial1.available()) {
    	  Serial.print(Serial1.read(),HEX);
      }
     
     
     
      // emission du buffer toutes les deux secondes
        if ( millis()>(time+2000)) { 
        	 digitalWrite(SSerialTxControl, RS485Transmit);  // Enable RS485 Transmit
     
        	 for(int i=0;i< sizeof(outByte);i++) {
        	    	  Serial1.write(outByte[i]);
      	      }
     
        	Serial1.flush(); // attend que le buffer soit vide
        	digitalWrite(SSerialTxControl, RS485Receive);  // enableRS485 receive
     
           Serial.println("");
           time=millis();
         }
    }

    et sur la console j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Emetteur A pret
    0 
    40 10 2 45 52 88 8E 4 0 
    40 10 2 45 52 88 8E 4 0 
    40 10 2 45 52 88 8E 4 0 
    40 10 2 45 52 88 8E 4 0 
    40 10 2 45 52 88 8E 4 0 
    40 10 2 45 52 88 8E 4 0 
    40 10 2 45 52 88 8E 4 0 
    40 10 2 45 52 88 8E 4 0 
    40 10 2 45 52 88 8E 4 0 
    40 10 2 45 52 88 8E 4 0
    Merci encore pour votre aide.

    Nat

  15. #15
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      // répétition vers la console de ce qui est lu sur le bus
      if (Serial1.available()) {
    	  Serial.print(Serial1.read(),HEX);
      }]


    Ton code m'a fait réagir : tu utilises quels types d'Arduino ? Uno ? Mega ? Leonardo ? Les E/S "serial" utilisent le protocole RS232 (voies TX et RX).
    En plus :
    - sur UNO, quand tu utilises le port série (Serial), tu ne peux pas utiliser les voies 0 (RX) et 1 (TX) !
    - sur Leonardo, quand tu utilises le port série 1 (Serial1), tu ne peux pas utiliser les voies 0 (RX) et 1 (TX) !
    https://www.arduino.cc/en/Reference/Serial

    tu es sûr que tu n'émets par sur tes ports série (protocole RS232) les données qui doivent aller vers ta carte (protocole RS485) ?

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Par défaut
    J'utilise deux arduino Mega. Je fais la communication RS485 sur le Serial 1 et je fais la sortie console sur le Serial.


    Et je n'utilise plus de "carte RS485" mais directement le ship MAX485.

    Je viens de refaire le montage plus proprement, et j'ai remplacé la résistance de 600 (en fait les 5 résistances de 120 ohm) par une 3kohm et je n'ai plus ce problème d'écho, ni de 0 en plus.

    Tout marche nickel.

    Nom : trace7.png
Affichages : 1167
Taille : 23,8 Ko

    Nom : montage.png
Affichages : 1096
Taille : 553,1 Ko

    Merci énormement à tous pour votre précieuse aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lib Arduino pour programmer des 16F84
    Par artiom dans le forum Arduino
    Réponses: 2
    Dernier message: 02/05/2012, 19h10
  2. adapter un script php avec mysql pour firebird
    Par omar24 dans le forum Firebird
    Réponses: 1
    Dernier message: 04/03/2011, 13h48
  3. adapter un code source mac OSX pour Win Xp
    Par PopCode dans le forum Visual C++
    Réponses: 1
    Dernier message: 06/12/2010, 19h20
  4. comment adapter un programme vb 6.0 pour tous les écran
    Par saidm dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 15/05/2009, 15h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo