[Programmation] UART - 9-bit adress detection pour RS485
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

UART - 9-bit adress detection pour RS485



  1. #1
    JeanDeuxMac

    UART - 9-bit adress detection pour RS485


    ------

    Bonjour à tous,

    Dans le cadre d'un projet, j'ai réalisé 5 cartes électroniques composées d'un PIC16 et d'un transceiver RS485 (max3088).
    Mon but est d'arriver à faire communiquer mon PC et les cartes. Pour cela, j'ai commencé à programmer mon UART en utilisant le mode "address detection", qui permet à plusieurs receveurs (dans mon cas les 5 cartes) de partager la même ligne de transmission : "A special Address Detection mode is available for use when multiple receivers share the same transmission line, such as in RS-485 systems"

    Pour cela, la datasheet précise qu'il faut utiliser 9 bits (au lieu de 8). Ce bit supplémentaire correspond au bit d'adresse. Ainsi, il faut définir ce bit d'adresse pour tous les esclaves. Lors de la communication, ces derniers devront vérifier que le message reçu contient bien le bon bit d'adresse.

    Je ne sais pas si jusque-là je suis bon ? Plusieurs questions :

    "In order to select 9-bit transmission, transmit bit, TX9 (TXSTA), should be set and the ninth bit should be loaded to the TX9D bit"
    --> Le bit TX9D est le MSB, donc le premier bit reçu par l'esclave ?

    "TX9D Ninth bit of Transmit Data, can be address/data bit or a parity bit."
    --> Je ne comprends pas exactement le terme "address bit", une adresse ne peut pas se limiter à un seul bit ? Ainsi, comment définir l'adresse côté maitre et esclave ?

    J'espère avoir été assez clair, je reste dispo' pour détailler si besoin.

    Merci d'avance pour vos réponses.

    -----

  2. #2
    vincent66

    Re : UART - 9-bit adress detection pour RS485

    Ce bit indique que les huit bits de data sont une adresse, à décoder par logiciel...

    belle journée...!
    Leonardo était ingénieur "sans papier", et moi diplômé juste...technicien...

  3. #3
    JeanDeuxMac

    Re : UART - 9-bit adress detection pour RS485

    Salut,

    Merci pour ta réponse!

    Si je comprends bien, lorsque j'active ce 9ème bit, cela signifie que les 8 prochains bits reçus correspondent à une adresse ?
    Dans mon cas, je souhaite communiquer une trame contenant : un header, une adresse cible, une question et un footer, sur 32 bits donc. Cela signifie donc que je devrai modifier ma trame en y ajoutant 8 bits correspondant à une adresse au début ?

    Enfin, je ne saisi pas le point suivant dans la datasheet :
    "Get the received eight Least Significant data bits from the receive buffer by reading the RCxREG register. Software determines if this is the device’s address."
    Le dernier point indique que la vérification de la justesse de l'adresse se fait "automatiquement" ? Si oui, je ne comprends pas comment ? Ou est-ce bien à moi de la programmer ?

    Bonne journée à vous!

  4. #4
    umfred

    Re : UART - 9-bit adress detection pour RS485

    si tu regardes les chronogrammes de communications, c'est le dernier bit envoyé (start-b0-b1-...b7/8-stop)
    n'oublies pas non plus (surtout) le bit RX9 qui te permet de réceptionner ce 9ème bit

  5. A voir en vidéo sur Futura
  6. #5
    umfred

    Re : UART - 9-bit adress detection pour RS485

    Citation Envoyé par JeanDeuxMac Voir le message
    Salut,

    Merci pour ta réponse!

    Si je comprends bien, lorsque j'active ce 9ème bit, cela signifie que les 8 prochains bits reçus correspondent à une adresse ?
    Dans mon cas, je souhaite communiquer une trame contenant : un header, une adresse cible, une question et un footer, sur 32 bits donc. Cela signifie donc que je devrai modifier ma trame en y ajoutant 8 bits correspondant à une adresse au début ?

    Enfin, je ne saisi pas le point suivant dans la datasheet :
    "Get the received eight Least Significant data bits from the receive buffer by reading the RCxREG register. Software determines if this is the device’s address."
    Le dernier point indique que la vérification de la justesse de l'adresse se fait "automatiquement" ? Si oui, je ne comprends pas comment ? Ou est-ce bien à moi de la programmer ?

    Bonne journée à vous!
    Si tu regardes la doc de ton PIC, elle doit te donner la marche à suivre pour configurer cette adresse (ou tester cette adresse).
    C'est quel PIC16 que tu utilises ? on pourra être un peu plus précis si on le connait.

  7. #6
    JeanDeuxMac

    Re : UART - 9-bit adress detection pour RS485

    Salut, merci pour tes réponses.

    J'utilise le PIC16F15223 : https://ww1.microchip.com/downloads/...S40002195B.pdf
    A l'initialisation, j'ai bien set le bit RX9 ainsi que le bit ADDEN, avant d'utiliser ma fonction read.

    " - 10. Read the RCxSTA register to get the error flags. The ninth data bit will always be set.
    - 11. Get the received eight Least Significant data bits from the receive buffer by reading the RCxREG register. Software determines if this is the device’s address.
    - 12. If an overrun occurred, clear the OERR flag by clearing the CREN receiver enable bit "


    Je ne sais pas si cette citation correspond à une indication quant à la marche suivre, mais du coup je ne saisi pas la partie "software determines if this is the device's address" ...

  8. #7
    vincent66

    Re : UART - 9-bit adress detection pour RS485

    Eh bien...

    Si ce 9ème bit indique qu'il s'agit d'une adresse de périphérique c'est au logiciel que tu écris de déterminer si c'est lui qui est concerné par la suite de la transmission...

    En gros il y a deux manières de préciser l'adresse du périphérique...:

    1) codage hardware par switches reliés à des entrées du pic

    2)codage soft en définissant une constante "adresse" dans le logiciel, c'est un peu contraignant, il faut adapter le logiciel pour chaque pic flashé mais ça bouffe bien moins de pins d'entrée du pic...

    Dans ton cas, envoyer quatre bytes, il faut bien en envoyer un de plus, le premier, qui contienne l'adresse périphérique, quoi que tu cites une "adresse cible", qui peut bien coïncider avec ce que je nomme "adresse périphérique"...?

    Bonne bourre...!
    Leonardo était ingénieur "sans papier", et moi diplômé juste...technicien...

  9. #8
    umfred

    Re : UART - 9-bit adress detection pour RS485

    page 226, chapitre 24.1.2.9; étape 9 à 11 (celles que tu cites): si le bit RCxIF est à 1, ça veut dire que le bit 9 est à 1 (et ça peut générer une interruption si RCxIE est à 1), et donc que c'est un octet d'adresse qui a été reçu; donc (11) tu va lire la donnée reçue et tu détermines si c'est l'adresse de la carte et tu agis en conséquence derrière.
    Le principe d'utilisation, c'est que en fonctionnement normal, tu acquittes systématiquement les octets reçus; tu as l'interruption sur RDxIF, tu lis l'octet reçue, si c'est ton adresse, tu passes en lecture active (tu désormais va traiter les octets reçus, jusqu'à la fin du message), sinon tu restes en lecture passive (tu laisses passer les octets reçus).

  10. #9
    JeanDeuxMac

    Re : UART - 9-bit adress detection pour RS485

    Ok, c'est plus clair, merci à vous pour vos réponses. J'ai pu configurer mon petit réseau !

    (Veuillez m'excuser pour ce retour tardif)

Discussions similaires

  1. net work adress pour win7
    Par nour14 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 3
    Dernier message: 22/04/2014, 16h01
  2. Réponses: 4
    Dernier message: 04/07/2013, 09h05
  3. Détection de fin de ligne RS485
    Par thomasalbert1993 dans le forum Électronique
    Réponses: 32
    Dernier message: 19/06/2010, 16h03
  4. adress pour un master robotique
    Par lokar2006 dans le forum Orientation après le BAC
    Réponses: 0
    Dernier message: 03/12/2008, 18h22
  5. pour répondre, adress mail FAI est doublée ????
    Par Cornemuse dans le forum Internet - Réseau - Sécurité générale
    Réponses: 3
    Dernier message: 25/11/2005, 12h04
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...