I. GENERALITES SUR LES ModeS de transmission SERIE :

 

Le terme série vient du fait qu’un seul fil (plus la masse) est nécessaire pour transmettre un mot, octet ou caractère, les bits se succédant au cours du temps les uns après les autres.

 

Avec un fil supplémentaire on peut transmettre un signal d’horloge destiné à synchroniser l’émetteur et le récepteur pour cadencer le départ et l’arrivée des bits du mot. On qualifie alors la liaison de synchrone.

C’est le cas par exemple pour les liaisons de clavier aux ordinateurs de type PC, mais aussi pour le bus SPI créé par Motorola et qui est repris par de nombreux fabricant de composants (convertisseurs, mémoires, afficheurs) ; sur ce bus on voit 3 fils MISO (Master In Slave Out) MOSI (Master Out Slave In) SCK (Serial Clock), plus autant de fils SS (Slave Select) qu’il y a d’esclaves. C’est le cas également pour le bus I2C créé par Philips, et repris de même par de multiples fabricants de composants, bus qui n’utilise que deux fils SCL (Serial Clock) et SDA (Serial Data).

 

doc. Philips

 

NORME RS232-C

En l’absence de transmission du signal d’horloge on utilise alors le qualificatif asynchrone. Il faut remettre à l’heure l’ horloge de réception à chaque caractère ; ceci justifie la présence d’un bit de start précédant la transmission du mot et d’un bit de stop pour conclure la transmission du caractère.

C’est le bit de poids faible qui est transmis/reçu en premier lieu par les registres à décalage :

 

 


Ce type de transmission fait l’objet de la norme RS232C qui définit précisément les concepts « d’hôtes et d’invités » chacun pouvant être à tour de rôle émetteur ou récepteur. La liaison est alors qualifiée de HALF DUPLEX ou même de full duplex si la communication est bi-directionnelle simultanément. Les niveaux de tension sont inversés +12V pour NL0 et -12 V pour NL1. Ces valeurs nominales peuvent descendre à +/-3V.

 

Les paramètres à régler pour une liaison série sont :

 

-Le choix du port de communication.

 

-La vitesse de transfert en bauds ( du nom de Mr BAUDOT inventeur d’un code à 5 bits précurseur du code ASCII)

 

-La présence d’un 9ème bit dit de parité permettant au récepteur de déceler une erreur de transmission : si la parité est paire (Even) alors le nombre de bits reçus au NL1 doit être un nombre pair quel que soit le caractère transmis (le bit de parité y pourvoit). On peut choisir aussi une parité impaire (Odd).

 

-Le nombre de bit de stop, en général un seul mais cela peut être davantage ( 1,5 bits !!!)

 

-Le type de protocole pour déterminer le début ou la fin d’un échange de message de plusieurs caractères :

*soit un protocole matériel par des fils supplémentaires appelés RTS (Request To Send) et CTS (Clear To Send) ou bien DTR (Data Terminal Ready) et DSR (Data Send Request)

*soit un protocole logiciel du nom de Xon Xoff (Début de transmission et fin de transmission repérés par un code particulier : 17 et 19 par exemple pour Xon et Xoff)


 

 

 

 

 

 


 

 

Les liaisons séries RS232 ont été améliorées en distance  (de 15 mètres à 1000 mètres) et en débit (de 9600 à 115 000 bauds), avec la liaison RS 422 qui n’utilise plus la masse comme fil de retour , mais uniquement comme blindage contre les parasites électromagnétiques (les potentiels matérialisant les données sont dits flottants). La liaison RS-485 est multipoints.

 

 

doc. Philips

Les liaisons USB sont réservées aux très courtes distances mais peuvent atteindre des débits jusqu’à 12 Mbits/sec

(Universal Serial Bus) voire 480 Mbits/sec pour USB2. Le connecteur présente 4 fils :alimentation 0 +5V et deux fils de communication des données D+ et D- comme pour la liaison RS422.

 

 

 

Ii. GEStion par windows DE LA LIAISON SERIE rs232 :

 

L’application TTY est issue d’un didacticiel de programmation en C++ fourni par Microsoft et peut être lancée deux fois sur un PC qui possède deux ports série COM1 et COM2:

 

 

Le port COM1 va servir d’émetteur, et un écho local de chaque touche frappée au clavier est demandé. Le port COM2 va servir de récepteur et va afficher ce qui aura été envoyé par le port COM1.

 

Deux fiches femelle Canon DB9 sont utilisées pour la liaison : sur la première fiche, un fil est soudé sur la borne Trois (avec un T comme Transmission) ; sur la seconde fiche l’autre extrémité du fil est soudé sur la borne 2.

Toute autre liaison est pour l’instant inutile, la masse du PC étant unique, et l’essai de transmission se voulant pour ce premier essai de type SIMPLEX et non pas Duplex.

 

 

 

La mise en service de chacun des ports de communication se fait en activant la commande Connect du menu Action :

 

 

Dès lors il est facile d’observer l’échange entre les deux ports COM1 et COM2 :

                Saisie au clavier avec écho local                   =>transmission =>réception    affichage des caractères reçus

 

 

Avec un second fil soudé entre les bornes 2 de la première fiche canon DB9, et 3 de la seconde, on obtient une liaison croisée qui permet de faire ici du HALF duplex avec un seul PC (il est impossible de saisir des caractères dans les deux fenêtres simultanément ):

 

Avant le point le COM1 était émetteur avec écho local                                       Avant le point le COM2 était récepteur.

 

Après le point le COM1 est devenu récepteur.                                                     Après le point le COM2 est devenu émetteur mais sans écho local on ne voit rien !

Réception  affichage des caractères reçus      réception<=transmission <= Saisie au clavier invisible sans écho local

 

 

IIi. GEStion par VISUAL BASIC DE LA LIAISON SERIE rs232 :

 

L’application TTY peut être facilement écrite dès lors que l’on dispose du contrôle MSCOMM32.OCX qui s’installe avec REGSVR32.

 

On crée une nouvelle application standard :

 


Après avoir renommé la feuille et changé son titre il ne faut pas oublier de la rendre actualisable par Autoredraw :

 

 

On remarque l’absence du pictogramme Téléphone dans la boite à outils « Général ».

 

 

Grâce à la commande  Components du menu Projet :                                   il est possible d‘appeler ce module de communication :

                                       

On observe dès lors la présence du pictogramme Téléphone dans la boite à outils « Général » :


En plaçant sur la feuille ce pictogramme téléphone, on découvre ses propriétés d’une part « cosmétiques », et d’autre part, caractéristiques de la liaison série, notamment à la rubrique Settings dans laquelle on retrouve , dans l’ordre : la vitesse de communication (9600 bauds), le type de parité (n pour none ici), le format du mot transmis ( 8 bits ici), et enfin le nombre de bits de stop (1 seul ici) :

Le protocole d’échange s’appelle le Handshaking (aucun ici). Et il peut être associé avec la mise en service de la ligne RTS et de la ligne DTR.

 

En mode émission on remarque la propriété OutBufferSize qui octroie une quantité d’octets qu’un programme principal pourra déposer à l’entrée de ce module de communication (512 octets dans ce tampon de sortie ici) :

 

Si vous devez emmener à la poste un carton contenant tout le courrier de votre entreprise à expédier à la fin de la journée, on pourrait dire que ce carton ne peut contenir que 512 enveloppes. En tant que responsable du courrier, vous allez tout simplement refuser le dépôt d’une 513ème enveloppe.

 

 

Afin d’améliorer votre service vous pouvez décider d’envoyer (Send) le courrier non pas à la fin de la journée, mais dès que le nombre d’enveloppes déposées dans votre carton atteint un certain seuil (Threshold) ; pendant votre trajet à la poste vous laissez le carton à disposition pour y recueillir d’éventuels nouveau dépôts de courrier:

 

Ici ce seuil d’envoi SThreshold est fixé à 0, ce qui signifie que le premier caractère déposé dans le tampon de sortie est immédiatement envoyé ; comme cet envoi prend un certain temps (à 9600 bauds 8 caractères plus 1 bit de start plus 1 bit de stop nécessitent un peu plus d’une milliseconde 10/9600 = 10/10000 = 0,001 s) le tampon de sortie est là pour accueillir les octets qui arriveraient pendant cette durée.

 

 

 

En mode réception on retrouve un mécanisme similaire avec un tampon de réception InputBufferSize, un seuil de Réception RThreshold, et une longueur de la chaîne de caractères qu’il est possible de dé-sérialiser InputLen.

 

Les octets reçus peuvent être soit des caractères ASCII imprimables InputMode=comInputModeText ou n’importe quelle valeur comprise entre 0 et 255 InputMode=comInputModeBinary.

 

Dans ce cas NulDiscard offre la possibilité d’éliminer du tampon de réception un octet reçu égal à zéro.

 

Si le bit de parité est utilisé et que le caractère reçu présente une erreur de parité, alors ce caractère peut être remplacé par celui indiqué à la rubrique ParityReplace.

 

Certains éditeurs de texte insèrent en fin de paragraphe un symbole indiquant la fin du texte EndOfText.

 


IV. GEStion SIMPLE par VISUAL BASIC DE LA TRANSMISSION PAR LIAISON SERIE rs232 :

 

La feuille peut être complétée par un bouton d’envoi et une fenêtre texte ou dessin dans laquelle on pourra visualiser le caractère reçu :

 

 

 


Le programme se compose d’une ouverture de la feuille au sein de laquelle on peut effectuer l’ouverture du port de communication com1.

'ouverture du port serie com1

MSComm1.PortOpen = True

 

Au préalable on paramètre les caractéristiques de la transmission.

'paramètrage de la transmission

NbOctetsAstocker = 26

SeuilEnvoi = 0

Call ParametragePortSerie

Private Sub ParametragePortSerie()

MSComm1.OutBufferSize = NbOctetsAstocker

MSComm1.SThreshold = SeuilEnvoi

End Sub

 

Lors de la fermeture de la feuille il ne faut pas oublier de fermer ce port.

 

'fermeture du port serie com1

MSComm1.PortOpen = False

 

 

L’appui sur le bouton envoi provoque la transmission du caractère A avec un écho local.

A noter que le type du paramètre attendu par le port est une chaîne de caractère et non pas un octet.

'transmission de l'octet

aTransmettre = 65

MSComm1.Output = Chr$(aTransmettre)


 


V. GEStion SIMPLE par VISUAL BASIC DE LA RECEPTION PAR LIAISON SERIE rs232 :

 

La réception est facilitée par un gestionnaire d’événements relatifs au port série MSComm1_OnComm(). Celui-ci renvoie un numéro qui traduit la nature de l’événement qui s’est produit : si le numéro est  2 alors c’est qu’un caractère  a été reçu ; au numéro 1008 correspond une saturation du tampon, etc…

 

Il est alors pratique d’utiliser ce code d’erreur (même si c’en est pas une !) pour intervenir sur un affichage :

 

 

 

De la même façon que l’on a envoyé une chaîne de caractères et non pas des octets, on reçoit une chaîne pour laquelle il faut préparer la place en formatant une chaîne de taille identique remplie d’espaces :

 

 

Ensuite on peut, grâce à la fonction ASCB, convertir cette chaîne en octet, dont on a préalablement extrait un seul caractère grâce à la fonction MIDB.

 

 

Evidemment il faut régler les paramètres relatifs à la réception de la liaison série au préalable :

 

 

 

 

En utilisant TTY pour envoyer les caractères sur le port COM2 et le câble croisé relié au port COM1, qui , lui, est géré par le programme Visual Basic, on obtient le résultat suivant :

 

On y retrouve pour chaque caractère reçu :

Le code d’erreur,

           la valeur de l’octet correspondant à la chaîne de caractères de laquelle il a été extrait,

                                                                 cette chaîne elle même.