Vitesse liaison série
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 33

Vitesse liaison série



  1. #1
    invite85bfc8b3

    Vitesse liaison série


    ------

    Salut à tous.

    Pour mon projet, je dois utiliser une liaison série afin de transmettre des données d'un PIC vers un PC.
    Cependant, pour mon cas, je dois utiliser une vitesse de transmission très grande. Après plusieurs calculs, la vitesse qui semble me convenir est de 230400 bauds.
    Je souhaitais savoir quelles sont les conséquences (s'il y en a) d'utiliser une vitesse aussi rapide, car j'ai lu sur différents forums que les vitesses usuelles utilisées sont aux alentours de 9200 bauds.

    Merci pour vos réponses !!

    -----

  2. #2
    DAUDET78

    Re : Vitesse liaison série

    1/ comment tu as déterminé cette vitesse ?
    2/ Le RS232 n'est pas fait pour cette vitesse et la distance doit être courte

    Si tu as un gros besoin de débit il y a l'USB
    J'aime pas le Grec

  3. #3
    invite85bfc8b3

    Re : Vitesse liaison série

    Salut

    J'ai déterminé cette vitesse car je dois me servir des pin RX et TX d'un microcontrolleur pic16f876. Il existe des formules pouir calculer le débit que l'on souhaite mettre en place, en fonctions de certains paramètres du circuit.
    Dans mon cas, la formule est la suivante (pour une transmission asynchrone):
    Débit = Fosc / (64*(SPBRG + 1))
    Fosc est la fréquence d'oscillation du quartz, et SPBRG est un octet qui peut prendre des valeurs entre 0 et 255.

    La distance entre le PC et la carte électronique sera courte pas de problème.
    Cette vitesse de transmission est disponible lorsqu'on ouvre l'hyperterminal pour réaliser une liaison série avec le port COM 1, donc ça doit être jouable non ?

    Je me pose alors une question : à quoi ça sert de permettre des débits aussi importants si on ne peut pas les utiliser avec une liaison série ? Celà sert-il pour d'autres protocoles, comme l'USB par ex ?


    Est-il possible d'interfacer un PIC avec un port USB ? ou alors, on peut aussi utiliser un adaptateur série/USB ! Ca pourrait marcher ?

  4. #4
    DAUDET78

    Re : Vitesse liaison série

    Citation Envoyé par quentennis Voir le message
    Débit = Fosc / (64*(SPBRG + 1))
    La question que je t'ai posée, c'est :
    pourquoi avoir choisit
    Débit=230400
    Tu as besoin de transférer 21000 octets par seconde ?
    J'aime pas le Grec

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

    Re : Vitesse liaison série

    La liaison Rs-232 n'est pas faite pour des transfert et debit important , tout comme sa distance qui est limité .
    Si tu veux des vitesse plus importante utilise du RS-485 ou autres.

    Rq: Le port USB est aussi un port serie.

  7. #6
    Jack
    Modérateur

    Re : Vitesse liaison série

    Une liaison courte avec le PC à 115200 bits/s (vitesse maxi d'un port CM standard) ne doit pas poser de problème. Tout dépend de l'endroit où est installé le système.

    J'avais fait des essais avec un câble de 100m. Ca commençait à décrocher au delà de 38400 bits/s.

    A+

  8. #7
    invite85bfc8b3

    Re : Vitesse liaison série

    Citation Envoyé par DAUDET78 Voir le message
    La question que je t'ai posée, c'est :
    pourquoi avoir choisit
    Débit=230400
    Tu as besoin de transférer 21000 octets par seconde ?
    Alors je t'explique pourquoi j'ai choisi cette vitesse :

    J'ai 4 signaux à convertir numériquement, chacun son tour. Avec les paramètres que j'ai choisis pour mon montage, j'obtiens un temps d'acquisition du signal de 19.7µs (temps qu'il faut pour que le condensateur se charge). Par la suite, j'ai besoin d'un temps de conversion de cette valeur, et il est de 19.2µs. Puis, pour pouvoir effectuer une autre conversion, un temps d'attente de 3.2µs.
    Donc le temps pour convertir un signal est de 19.7 + 19.2 + 3.2 = 42.1µs.

    J'ai 4 signaux à échantilloner, donc je multiplie ce nombre par 4 : 42.1*4 = 168.4µs. Pour chaque nombre, j'obtiens une conversion sur 10 bits. Je stocke tout ca dans deux octets pour chaque conversion, donc j'ai 16 bits de données, et je rajoute 2 bits de start et 2 bits de stop pour chaque emission, donc j'ai 20 bits à envoyer pour chaque nombre converti, ce qui fait 80 bits car on a 4 signaux.

    Par la suite, j'envoie les 4 premières données que je viens de convertir à un PC via une liaison série. Et c'est là qu'intervient mon débit.

    En fait, vu que j'échantillone mon signal, j'ai besoin d'une fréquence d'échantillonage fe>=2fs. Mon signal a une fréquence de 336Hz. Je dois donc avoir au moins une fréquence d'échantillonage de 672Hz. C'est une fréquence minimale, et j'aimerais qu'elle soit plus importante.

    Il faut donc que la conversion des données des 4 signaux et l'envoi via protocole série respecte cette contrainte.
    On a donc :
    fe >= 2fs
    1/Te >= 2/Ts
    Te <= Ts/2
    Te <= (T(echantillonage) + T(emission série))/2
    Te <= (T(echantillonage) + 80*(Temission1bit))/2
    2Te - T(echantillonage) <= 80*(1/Débit)

    Du coup, j'ai
    (1/Débit) >= (2Te - T(echantillonage))/80

    Avec les calculs que j'ai fait au dessus, on trouve : Débit >= 27065.

    Ce débit correspond au débit minimal pour pouvoir récupérer le signal analogique à partir du signal numérique. Personnellement, j'aimerais qu'il soit plus important, d'ou le choix de la valeur de 230400.

    Voilà, j'espère avoir été clair dans mon explication !!

    Maintenant, je voudrais savoir s'il est possible d'utiliser un port USB avec mon microcontrôleur, dans le cas ou le port série ne serait pas possible.
    J'avais envisagé cette option auparavant, mais les liaisons USB nécessitent des drivers pour fonctionner, et je ne sais pas trop comment gérer ça avec un PIC. Est ce que l'un d'entre vous l'aurait déjà fait ?

  9. #8
    DAUDET78

    Re : Vitesse liaison série

    Si c'est pas loin du PC, tu peux essayer en RS232 sinon, c'est du RS422

    PS: si tu es avec un MAX232 .....c'est très près du PC
    J'aime pas le Grec

  10. #9
    jiherve

    Re : Vitesse liaison série

    Bonsoir
    moi je trouve : 20*4*672 = 53760 bds => 115200 avec > 100% de marge.
    Donc pas de problème pour échantillonner à 4Fs.
    JR

  11. #10
    invite369fdaa2

    Re : Vitesse liaison série

    Citation Envoyé par Jack Voir le message
    Une liaison courte avec le PC à 115200 bits/s (vitesse maxi d'un port CM standard) ne doit pas poser de problème. Tout dépend de l'endroit où est installé le système.

    J'avais fait des essais avec un câble de 100m. Ca commençait à décrocher au delà de 38400 bits/s.

    A+
    100 mètres ? avec du Rs232 ?b

  12. #11
    Jack
    Modérateur

    Re : Vitesse liaison série

    Citation Envoyé par MaMMoN Voir le message
    100 mètres ? avec du Rs232 ?b
    oui, justement, pour tester ce qu'on peut tirer d'une liaison série.

    Je ne pensais même pas atteindre 9600 bits/s avant ce test. Comme quoi ...

    A+

  13. #12
    DAUDET78

    Re : Vitesse liaison série

    Citation Envoyé par Jack Voir le message
    oui, justement, pour tester ce qu'on peut tirer d'une liaison série.
    Tout dépend du type de câble et du driver (c'était certainement pas un MAX232 !)
    Si il est conseillé de ne pas dépasser 15 mètres à 9600 Bds, c'est qu'on est sûr que ça marche dans tous les cas
    J'aime pas le Grec

  14. #13
    Jack
    Modérateur

    Re : Vitesse liaison série

    C'était une liaison PC à PC.

  15. #14
    Seb.26

    Re : Vitesse liaison série

    Tu veux envoyer 4 résultats 10bits du CAN, tu as donc besoin de 40 bits, soit 6 octets ... donc 60bits ...

    Pourquoi "gaspiller" 6bits pour chaque mesure en la mettant dans un 16b? ...

    Code:
    ...
    uShort MesureCAN_(uChar channel);
    void UART_Tx_uShort(uShort value);
    ...
    {
      uChar buffer[6];
      uShort us1;
      //
      buffer[0] = 0xF0;
      //
      us1 = MesureCAN(0);
      //
      buffer[0] |= ((uChar)(us1>>10));
      buffer[1] = ((uChar)(us1&0x00FF));
      //
      us1 = MesureCAN(1);
      //
      buffer[0] |= ((uChar)(us1>>8))&0x0A;
      buffer[2] = ((uChar)(us1&0x00FF));
      //
      buffer[3] = 0x00;
      //
      us1 = MesureCAN(2);
      //
      buffer[3] |= ((uChar)(us1>>10));
      buffer[4] = ((uChar)(us1&0x00FF));
      //
      us1 = MesureCAN(3);
      //
      buffer[3] |= ((uChar)(us1>>8))&0x0A;
      buffer[5] = ((uChar)(us1&0x00FF));
      //
      UART_Tx(buffer,6);
    }
    ...
    NB: si tu retourve ma structure uShort_bytes sur le forum, ce sera plus simple et remplacera les décalages par un jeu de pointeurs ... je ne suis pas sûr que le compilo sache le faire tout seul ...

    Pour t'éviter d'avoir à ajouter un octet de début de trame, j'ai mis un pattern sur le 1er octet (le quartet de poid fort est à F, tu pourra essayer de retomber sur tes pieds en cas de problème sur l'UART, surtout si tu mets les 8bits de poids fort seul, et les 2 de poids faible ensemble ... si ton entrée ne dépasse pas 0xF0 sur ces poids forts.)

    C'est déjà ça de gagner ... ensuite, tu veux obtenir tes 4 mesures "tout les combien" ?

    Une RS232 doit normalement aller à 115Kbps max ... soit 11520 B/s ... soit >1900 mesure/s ... c'est pas assez pour ton application ? ...

    Alors il faut soit en effet passer sur de l'USB ... soit utiliser 4 PIC en parallèle qui utiliseront 4 ports COM sur le PC ... de cette façon, tu pourra obtenir environ 5.7 K sample/s ... le double si tu te contente de 8bits de données ...

    Quelle est la fréquence de ton signal en gros ?
    Dernière modification par Seb.26 ; 07/06/2008 à 20h39.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  16. #15
    invite85bfc8b3

    Re : Vitesse liaison série

    Citation Envoyé par Seb.26 Voir le message
    Tu veux envoyer 4 résultats 10bits du CAN, tu as donc besoin de 40 bits, soit 6 octets ... donc 60bits ...

    Pourquoi "gaspiller" 6bits pour chaque mesure en la mettant dans un 16b? ...
    C'est vrai qu'en utilisant 16 bits, 6 bits sont inutilisés. Mais je ne vois pas comment envoyer une trame de 10 bits à une liaison série, sachant que l'orsque l'on choisit la longueur de sa trame, elle est de 7 ou de 8 bits !

    Merci pour ton code, mais j'avoue ne pas avoir tout compris à son fonctionnement... je ne suis que débutant en langage C ! Et j'ai l'intention de coder mon microcontroleur en assembleur, donc je ne sais pas trop comment faire pour traduire tout ça dans ce langange !


    Citation Envoyé par Seb.26 Voir le message
    Quelle est la fréquence de ton signal en gros ?
    Mon signal est aux alentours de 330 Hz.

    Merci pour ton aide Seb.26

  17. #16
    Seb.26

    Re : Vitesse liaison série

    330Hz ... vise 1K sample/s ... ça devrait largement suffire ... et t'a plus de problèmes ...

    Citation Envoyé par quentennis Voir le message
    Mais je ne vois pas comment envoyer une trame de 10 bits à une liaison série, sachant que l'orsque l'on choisit la longueur de sa trame, elle est de 7 ou de 8 bits !
    C'est exactement ce que fait mon code : à partir de 2 résultat de 10bits (valeur CAN) soit 20bits de données, que l'on repartit dans 3 octets ... les 4 bits restant sont utilisés comme "marqueur" de début de trame ...

    On aurait aussi pu tout faire rentrer dans 5 octets ( 4*10 = 40bits = 5*8 ), mais tu n'avais plus de marque de début de trame, tu aurais donc probablement ajouté un octet de contrôle et le code était moins lisible...

    Pour l'ASM, je laisse la suite à quelqu'un d'autre, c'est pas ma tasse de thé ...

    [Edit] D'ailleur dans mon code, un des protos est faux :

    void UART_Tx(uChar *buffer, uchar nbBytes);
    Dernière modification par Seb.26 ; 09/06/2008 à 12h44.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  18. #17
    Seb.26

    Re : Vitesse liaison série

    PS: quand tu auras bien compris tout ça, plutôt que de repartir tes 2x10bits dans 3 octets en faisant " (8+2) + (8+2) " ... fais plutôt " (7+3) + (7+3) " de cette façon, tu libère le bit de poids fort sur tout tes octets ... voilà un marqueur de choix pour detecter les débuts de packet ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  19. #18
    invite85bfc8b3

    Re : Vitesse liaison série

    Ok, merci pour toutes ces précisions Seb.26 !! Ca va bien m'aider. Est ce que tu pourrais commenter ton code en C, ça m'aiderait surement à le transposer en langage assembleur !!!

    Je ne comprends pas trop comment tu obtiens ta conversion :
    Une RS232 doit normalement aller à 115Kbps max ... soit 11520 B/s ... soit >1900 mesure/s.

    Et 1Ksample par seconde, ça correspond à ue vitesse de transmission de combien de Bauds ?

    Merci beaucoup !!

  20. #19
    Seb.26

    Re : Vitesse liaison série

    Le code simplifié et debugué : y'avait des soucis!!!
    Code:
    ...
    uShort MesureCAN_(uChar channel);
    void UART_Tx(uChar *buffer, uChar len);
    ...
    {
      uChar buffer[6];
      uShort us1;
      //
      us1 = MesureCAN(0);
      //
      buffer[0] = us1>>8;
      buffer[1] = us1 & 0x00FF;
      //
      us1 = MesureCAN(1);
      //
      buffer[0] = buffer[0] << 2;
      buffer[0] = buffer[0] | ( us1 >> 8 );
      buffer[2] = us1 & 0x00FF;
      //
    ... idem pour la suite ...
      //
      UART_Tx(buffer,6);
    }
    ...
    NB: si tu retourve ma structure uShort_bytes sur le forum, ce sera plus simple et remplacera les décalages par un jeu de pointeurs ... je ne suis pas sûr que le compilo sache le faire tout seul ...

    Pour t'éviter d'avoir à ajouter un octet de début de trame, j'ai mis un pattern sur le 1er octet (le quartet de poid fort est à F, tu pourra essayer de retomber sur tes pieds en cas de problème sur l'UART, surtout si tu mets les 8bits de poids fort seul, et les 2 de poids faible ensemble ... si ton entrée ne dépasse pas 0xF0 sur ces poids forts.)

    C'est déjà ça de gagner ... ensuite, tu veux obtenir tes 4 mesures "tout les combien" ?

    Une RS232 doit normalement aller à 115Kbps max ... soit 11520 B/s ... soit >1900 mesure/s ... c'est pas assez pour ton application ? ...

    Alors il faut soit en effet passer sur de l'USB ... soit utiliser 4 PIC en parallèle qui utiliseront 4 ports COM sur le PC ... de cette façon, tu pourra obtenir environ 5.7 K sample/s ... le double si tu te contente de 8bits de données ...

    Quelle est la fréquence de ton signal en gros ? [/QUOTE]
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  21. #20
    Seb.26

    Re : Vitesse liaison série

    C'est pénible ce forum où on a que 5 minutes pour éditer un post ...

    Voilà le code :

    Code:
    ...
    uShort MesureCAN_(uChar channel);
    void UART_Tx(uChar *p_buffer, uChar len);
    ...
    {
      uChar buffer[6];
      uShort us1;
      //
      us1 = MesureCAN(0);
      //
      buffer[0] = us1>>8;
      buffer[1] = us1 & 0x00FF;
      //
      us1 = MesureCAN(1);
      //
      buffer[0] = buffer[0] << 2;
      buffer[0] = buffer[0] | ( us1 >> 8 );
      buffer[2] = us1 & 0x00FF;
      //
    ... idem pour la suite ...
      //
      UART_Tx(buffer,6);
    }
    ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  22. #21
    invite85bfc8b3

    Re : Vitesse liaison série

    Merci Seb.26, je vais étudier tout ça.
    Est ce que tu pourrais éclairer ma lanterne sur ce point stp ?
    Une RS232 doit normalement aller à 115Kbps max ... soit 11520 B/s ... soit >1900 mesure/s.
    En allant voir sur la datasheet du MAX232, j'ai trouvé que le data rate était de 120Kb/s. Mais toi, ensuite, tu parles de 11520B/s. Tu parles de Bauds, ou de Bytes par secondes ? Et je ne vois pas du tout comment tu fais ^pour trouver par la suite 1900 mesure/s.

    Si le MAX permet 120Kb/s, ça veut dire que je peux choisir comme vitesse de transmission 120000 Bauds ?

    Merci =)

  23. #22
    DAUDET78

    Re : Vitesse liaison série

    Citation Envoyé par quentennis Voir le message
    Si le MAX permet 120Kb/s,
    Regarde bien les conditions de mesure, pour être sûr que ça marche
    J'aime pas le Grec

  24. #23
    DAUDET78

    Re : Vitesse liaison série

    Citation Envoyé par quentennis Voir le message
    Si le MAX permet 120Kb/s, ça veut dire que je peux choisir comme vitesse de transmission 120000 Bauds ?
    Je n'ai vu, sur la spec du MAX232, que des courbes typiques qui s'arrêtent à 50Kb ...
    J'aime pas le Grec

  25. #24
    RISC

    Re : Vitesse liaison série

    Salut,

    Citation Envoyé par quentennis Voir le message
    Une RS232 doit normalement aller à 115Kbps max ... soit 11520 B/s ... soit >1900 mesure/s.
    En allant voir sur la datasheet du MAX232, j'ai trouvé que le data rate était de 120Kb/s. Mais toi, ensuite, tu parles de 11520B/s. Tu parles de Bauds, ou de Bytes par secondes ? Et je ne vois pas du tout comment tu fais ^pour trouver par la suite 1900 mesure/s.

    Si le MAX permet 120Kb/s, ça veut dire que je peux choisir comme vitesse de transmission 120000 Bauds ?

    Merci =)

    115200 bauds n'est pas la vitesse maximum utilisable. J'ai déjà conçu des systèmes avec des vitesses de 921600 bauds. Il suffit de prendre les transceivers qui vont bien ;=)

    a+

  26. #25
    Seb.26

    Re : Vitesse liaison série

    Est ce que tu pourrais éclairer ma lanterne sur ce point stp ?
    Une RS232 doit normalement aller à 115Kbps max ... soit 11520 B/s ... soit >1900 mesure/s.
    115200 baud -> 115200 'bits bruts" / s
    115200 "bits bruts" = 11520 B/s ( car 1 Byte = 10 "bits bruts" )
    Tu dois envoyer 6 octets par mesure, donc 11520/6 = 1920 mesure/s

    En allant voir sur la datasheet du MAX232, j'ai trouvé que le data rate était de 120Kb/s.
    Le MAX232 n'est pas un composant RS232 ou une UART : c'est un CI dont le rôle est de transformer un signal TTL (0v/+5v) en un signel RS232 (+10v/-10v) ... 120kbps c'est la fréquence max à laquelle il sait faire son job.

    Si le MAX permet 120Kb/s, ça veut dire que je peux choisir comme vitesse de transmission 120000 Bauds ?
    Et si un autre composant permet 200Mbps, tu vas faire du 200Mbps sur ta RS232 ???
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  27. #26
    Seb.26

    Re : Vitesse liaison série

    Citation Envoyé par RISC Voir le message
    115200 bauds n'est pas la vitesse maximum utilisable. J'ai déjà conçu des systèmes avec des vitesses de 921600 bauds. Il suffit de prendre les transceivers qui vont bien ;=)
    Au temps pour moi alors ... c'est vrai qu'en général on se limite à 115K, san doute à cause des MAX232 d'ailleurs !

    Une réf STP pour un transceiver qui va bien en vu de faire du 921K ?
    ... >90KBps sur un port COM, ça commence à être sympathique
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  28. #27
    invite85bfc8b3

    Re : Vitesse liaison série

    J'ai posé la question à MAXIM à propos de son MAX232 ! J'attends la réponse, je vous tiens au courant =)

  29. #28
    DAUDET78

    Re : Vitesse liaison série

    Pour aller plus vite, on prend des circuits prévus pour faire du RS422 . Bricoler du RS232, c'est vraiment acheter une corde pour se pendre. Faut pas te plaindre après si ça marchotte à 512Kbds .....
    J'aime pas le Grec

  30. #29
    Jack
    Modérateur

    Re : Vitesse liaison série

    Au temps pour moi alors ... c'est vrai qu'en général on se limite à 115K, san doute à cause des MAX232 d'ailleurs !
    En fait c'est la vitesse maxi d'un port COM de PC piloté par un circuit type 8250 ou 16550 puisque le diviseur générant la fréquence de l'horloge de transmission est alors à 1.

    Maintenant, on n'est à priori plus limité car ces circuits on disparu de nos PC. Il n'y a qu'à lancer hyperterminal pour constater qu'il propose des vitesses atteignant les fameux 921600 bits/s évoqués par RISC

    A+

  31. #30
    Seb.26

    Re : Vitesse liaison série

    Citation Envoyé par Jack Voir le message
    En fait c'est la vitesse maxi d'un port COM de PC piloté par un circuit type 8250 ou 16550 puisque le diviseur générant la fréquence de l'horloge de transmission est alors à 1.
    Ah, ok ... merci pour l'info.

    Citation Envoyé par Jack Voir le message
    Maintenant, on n'est à priori plus limité car ces circuits on disparu de nos PC. Il n'y a qu'à lancer hyperterminal pour constater qu'il propose des vitesses atteignant les fameux 921600 bits/s évoqués par RISC
    A+
    Oui, c'est ce que j'ai fait : y'avait bien le 900Kbauds ! ...
    Un PIC sait il émettre/recevoir à cette vitesse ?
    Quel CI pour remplacer le MAX232 dans cette config ?
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Liaison Serie
    Par invite0ff982b6 dans le forum Électronique
    Réponses: 0
    Dernier message: 03/06/2007, 09h53
  2. Liaison série pic18 <> PC
    Par invitedeabeaf0 dans le forum Électronique
    Réponses: 2
    Dernier message: 06/03/2007, 23h13
  3. PYTHON: liaison série
    Par invite52346c65 dans le forum Logiciel - Software - Open Source
    Réponses: 13
    Dernier message: 05/12/2006, 12h44
  4. Multiplexeur de liaison serie ...
    Par Seb.26 dans le forum Électronique
    Réponses: 59
    Dernier message: 24/09/2006, 00h48
  5. programmation liaison série labview
    Par invite8c3af53f dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 31/05/2005, 10h52
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...