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.
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
L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !
06/06/2008 - 11h46
quentennis
Date d'inscription
mai 2008
Âge
28
Messages
18
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 ?
06/06/2008 - 11h51
DAUDET78
Date d'inscription
septembre 2006
Localisation
Ile de France
Âge
70
Messages
38 065
Re : Vitesse liaison série
Envoyé par quentennis
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 ?
L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !
06/06/2008 - 12h08
MaMMoN
Date d'inscription
octobre 2005
Messages
56
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.
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+
06/06/2008 - 13h42
quentennis
Date d'inscription
mai 2008
Âge
28
Messages
18
Re : Vitesse liaison série
Envoyé par DAUDET78
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 ?
06/06/2008 - 13h56
DAUDET78
Date d'inscription
septembre 2006
Localisation
Ile de France
Âge
70
Messages
38 065
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
L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !
06/06/2008 - 18h44
jiherve
Date d'inscription
juin 2006
Localisation
gironde
Âge
61
Messages
8 547
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
07/06/2008 - 17h55
MaMMoN
Date d'inscription
octobre 2005
Messages
56
Re : Vitesse liaison série
Envoyé par Jack
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
07/06/2008 - 18h07
Jack
Date d'inscription
avril 2003
Localisation
Metz
Messages
12 138
Re : Vitesse liaison série
Envoyé par MaMMoN
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+
07/06/2008 - 18h11
DAUDET78
Date d'inscription
septembre 2006
Localisation
Ile de France
Âge
70
Messages
38 065
Re : Vitesse liaison série
Envoyé par Jack
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
L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !
07/06/2008 - 19h43
Jack
Date d'inscription
avril 2003
Localisation
Metz
Messages
12 138
Re : Vitesse liaison série
C'était une liaison PC à PC.
07/06/2008 - 20h35
Seb.26
Date d'inscription
juin 2005
Âge
36
Messages
1 741
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? ...
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. >>
09/06/2008 - 12h07
quentennis
Date d'inscription
mai 2008
Âge
28
Messages
18
Re : Vitesse liaison série
Envoyé par Seb.26
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 !