HARDWAREMONTAGES ★ INTERFACE SÉRIE RS232 (MEGAHERTZ) ★

INTERFACE SERIE RS232 - Pour AMSTRAD CPCCarte RS 232 : deux programmes d'application

L'article qui suit décrit la réalisation, le fonctionnement et la programmation d'une interface série répondant aux normes V24 ou RS232 et connectable sur le bus d'extension des 464-664-6128. Les principales caractéristiques techniques de cette carte sont :

  • deux canaux (sorties) au standard RS232 dont une pour piloter éventuellement une imprimante
  • vitesse de transfert réglable par logiciel
  • alimentation monotension de la carte par le bus de l'ordinateur
  • "bufferisation" de tous les signaux utiles
  • décodage adresses E/S complet sur 16 bits.


Figure 1

LA LIAISON SERIE

Pour transmettre des données à des distances importantes, on adopte le mode de liaison sérielle. Dans ce cas, les différents bits constituant un octet sont transmis les uns à la suite des autres.

Pour normaliser ce mode de transmission, un standard à été implanté: la RS232 également appelé V24.

La figure 1 schématise un signal sériel. Le mot commence par un bit de départ, se poursuit par huit bits de données au maximum, puis le bit de parité (optionnel) pour la détection des erreurs en cours de transmission et enfin, le ou les bits d'arrêt indiquant la fin du caractère. Il est indispensable de bien définir la chronologie des bits contenus dans l'information. Cette liaison RS232 interconnecte un appareil de type DTE (Data Terminal Equipement = terminal) à un autre de type DCE (Data Communication Equipement = un ordinateur). La communication entre les deux systèmes se fait selon un protocole réglant la manière de traiter le flux de données et garantissant ainsi une transmission synchronisée. Cette norme exige donc la présence de signaux de contrôle et de commande (DTR-DCD-CTS-RTS).


Les deux connecteurs RS332

PRINCIPE DE FONCTIONNEMENT

La figure 2 représente le schéma de principe de la carte. Les circuits ICI à IC4 sont des amplificateurs de signaux "buf-fers" qui augmentent la sortance du microprocesseur. Ils ont tous été choisi de type bidirectionnel pour des raisons de simplification en vue de l'étude du circuit imprimé ; seul IC4 use pleinement de cette propriété par l'intermédiaire du signal d'écriture "WR". Lorsque WR est au niveau bas, le bus de données transite de l'unité centrale vers l'interface et inversement quand WR est haut. La sélection de ce circuit est active pour une adresse d'entrée-sortie égale ou supérieure à FC40, c'est-à-dire pour Y3 de IC6 au niveau bas.

Les circuits IC5 à IC7 assurent le rôle de décodage mémoire. Ils doivent activer les circuits IC8 et IC10 pour des adresses précises. Ainsi IC8 sera sélectionné pour les adresses entrée-sortie (E/S) comprises entre FC5C et FC5F, ce qui se traduit par un niveau bas sur la broche 9 de IC7. T1 inverse ce signal puisque l'entrée "CLK" de IC8 est active haut. Le circuit IC10 quant à lui sera actif pour les adresses validées entre FC7C et FC7F, broche 7 de IC7. Rappel : grâce à des signaux de commande spécifiques, le Z80 peut différencier un accès mémoire d'une adresse d'E/S. Toutes les opérations ayant pour référence la mémoire seront validées par le signal MREQ du microprocesseur, alors qu'une adresse d'E/S sera accompagnée de IORQ. Cette différenciation se retrouve au niveau des instructions. IORQ sera actif (niveau bas) pour des instructions du type "OUT" et "IN”, il fait partie intégrale du décodage d'adresse (broche 5 de IC7).

IC8 est un registre, son rôle étant de recopier sur ses sorties (Q1 à Q8) les niveaux logiques présents sur les entrées (D0 à D7) à chaque front montant du signal CLK (broche 11). Grâce à ce composant, le réglage des vitesses de transfert appliquées au circuit SI0 sera effectué par programme. Ce circuit remplace une série d'interrupteurs que l'utilisateur devrait positionner à chaque modification des vitesses. L'ensemble R1-C2-T2 permet la remise à zéro du registre à l'initialisation de l'unité centrale "RESET" (broche 16 de IC3). IC9 est un double générateur de signaux d'horloge à fréquence variable. Ils sont présents sur les sorties FR et FT, chacun d'eux déterm ine la fréquence élémentaire du fonctionnement des voies A et B. Le tableau A indique les fréquences disponibles en fonction de l'état des entrées R et T.


TABLEAU A

Circuit périphérique de la famille Z80, IC10 est spécialisé dans les transmissions séries "USART" (Unit Synchro-nous Asynchronous Receive Transmit). Deux voies distinctes et indépendantes sont disponibles, permettant ainsi la connection de deux appareils répondant aux normes de la RS232 et fonctionnant éventuellement à des vitesses différentes.

La complexité de ce circuit demanderait un cours complet de plusieurs pages avant d'être en mesure d'en comprendre son fonctionnement. Les quelques lignes qui suivent permettront néanmoins d'en connaître le minimum pour sa programmation.

Chaque canal est adressé par l'intermédiaire de l'entrée B/A :

  • B/A=0 —> canal A
  • B/A=1 —> canal B

Le niveau logique du signal C/D détermine si l'octet présent sur le bus de données doit être interprété comme un mot de commande ou de donnée (valeur).

  • C/D=0 —> donnée
  • C/D=1 —> commande

Ainsi, les adresses pour le canal A sont:

  • FC7C pour un mot de donné
  • FC7D pour un mot de commande

Pour le canal B :

  • FC7E pour un mot de donnée
  • FC7F pour un mot de commande

La programmation du facteur de division (1-16-32-64) de l'horloge élémentaire présente sur les entrées TXCA-RXCA pour le canal A et TXCB-RXCB pour le canal B règle la vitesse réelle du transfert des données. Exemple : pour TXCA-RXCA égale à 153600 Hz, il faudra programmer un facteur de 16 pour obtenir une vitesse de 9600 bauds.

Les différents signaux d'E/S de chaque voie du SIO possèdent des niveaux logiques "TTL" (5V et 0V). Or, afin d'être compatible au standard RS232, l'amplitude de ces signaux doit varier entre +12 et -12V, afin d'assurer une plus grande immunité aux parasites. Le décalage de niveaux est réalisé par les circuits ICI1 et ICI2.

Le MAX232 est un double émetteur-récepteur qui satisfait, comme l'indique son nom, aux normes RS232, bien qu'il se contente d'une simple alimentation de 5V pour "driver" les lignes de transmission.

Ce circuit comporte trois éléments :

  • un double émetteur
  • deux pompes de charges délivrant 10 et -10V
  • et un double récepteur.

L'intérêt que l'on peut porter au MAX232 se situe bien sûr au niveau de ses convertisseurs de tension. Grâce à ce composant, les alimentations traditionnelles de +12 et -12V ne sont plus nécessaires. En effet, ce circuit intègre deux pompes de charges afin de créer des tensions de sortie compatibles aux normes spécifiées.

C3-C4-C5-C6 contribuent au décalage de niveaux ; C7 et C8 filtrent la fréquence parasite (16 Khz) présente sur la broche "V-". T3 convertit en niveaux TTL, l'état du signal d'entrée DCD.

Au connecteur A (câblage de type DTE) sont reliés tous les signaux utiles au dialogue propre à une RS232. Le connecteur B (câblage de type DCE) est limité à sa plus simple expression, permettant cependant la connection d'un appareil dialoguant uniquement par les trois signaux : Tx-Rx-DCD ; (imprimante, terminal, télétype...).

Le cordon reliant l'interface à l'Amstrad sera de type câble plat au bout duquel, à chaque extrémité, sera serti un connecteur encartable 2x25 points.



Tableau B

DESCRIPTION DES REGISTRES INTERNES DU SIO Z80
LES REGISTRES D'ECRITURE

Le circuit SIO contient huit registres d'écriture (WRO-WR7) pour le canal B et sept pour le canal A (WRO-WR1 et WR3-WR7). Le registre WR2 comporte le vecteur d'interruption pour les canaux A et B.

les registres sont programmés séparément pour positionner chaque canal dans sa configuration spécifique.

A l'exception de WR0, la programmation des registres d'écriture nécessite deux octets. Les trois bits du premier octet de WRO (D0-D2) pointent le registre choisi, le second octet est le mot de commande effectif écrit dans le registre pour configurer le SIO.

Après pointage d'un registre, le programme est libre soit de le lire pour tester le registre de lecture, soit d'écrire pour initialiser le registre d'écriture, (voir tableau B).

Exemple d'initialisation du canal A : (scrutation des E/S par polling)

LES REGISTRES DE LECTURE

Le SIO contient trois registres de lecture (RRO-RR2) qui peuvent être lus pour obtenir l'information d'état de chaque canal (excepté RR2 du canal B). L'information d'état comporte les conditions d'erreur, le vecteur d'interruption et les signaux standards de communication.

Le principe de lecture des registres est analogue à une opération d'écriture (2 octets). Par exécution d'une instruction d'entrée, le contenu du registre de lecture adressée peut être lu par le microprocesseur. (Voir tableau C).

PRINCIPE DE PROGRAMMATION ET DE GESTION DE LA CARTE

La gestion de la carte réside en trois parties :

  • l'initialisation
  • la réception
  • l'émission

L'INITIALISATION DU CIRCUIT SIO. (Voir listing 1)

LISTING 1

Exemple d'initialisation du canal A : (scrutation des E/S par polling)

LD BC, 0FC5CH ; adresse du Latch 74LS273
LD A, 0EEH ; FT et FR du COM8116T= 153600 Hz
OUT (C), A

LD BC, 0FC7DH ; adresse de contrôle du canal A
LD A, 18H ; WR0 = remise à zéro des registres
OUT (C), A

LD A, 4 ; on pointe sur le registre WR4
OUT (C), A
LD A, 47H ; cadence horloge + bits stop + parité
OUT (C), A

LD A, 3 ; on pointe sur le registre WR3
OUT (C), A
LD A, 41H ; nombre de bits récepteur + validation réception
OUT (C), A

LD A, 5 ; on pointe sur le registre WR5
OUT (C), A
LD A, 0AAH ; nombre de bits émetteur + signaux DTR et RTS = 1
OUT (C), A

LD A, 1 ; on pointe sur le registre WR1
OUT (C), A
LD A, 00 ; désactivation du mode interrruption
OUT (C), A

Un certain nombre d'opérations de programmation doivent être effectuées systématiquement afin d'initialiser et de paramétrer le SIO Z80 avant tout fonctionnement. La séquence d'initialisation minimale est la suivante :

Le registre WR0 contiendra :

  • la commande de remise à zéro.

Le registre WR4 contiendra :

  • le facteur de division des signaux d'horloge
  • le nombre de bits d'arrêt
  • le type de parité.

Le registre WR3 contiendra :

  • le nombre de bits en réception
  • la validation en réception
  • l'autovalidation.

Le registre WR5 contiendra :

  • le nombre de bits en émission
  • la commande des signaux RTS et DTR
  • la validation en émission.

Le registre WR2 contiendra :

  • le vecteur d'interruption canal B seulement (uniquement en fonctionnement interruption).

Le registre WR 1 contiendra :

  • la validation en mode interruption.

Les registres WR6 et WR7 ne sont pas programmés pour un fonctionnement en mode asynchrone.

Remarque : La programmation du SIO pour tous les exemples et programmes suivants sera définie en mode asynchrone et les paramètres de communication seront :

  • vitesse 9600 Bds
  • facteur des signaux d'horloge égal à 16
  • 1 bit d'arrêt
  • parité paire
  • caractère de 7 bits pour Rx et Tx
  • inhibition des interruptions.

LECTURE D'UN CARACTERE REÇU PAR LE SIO. (Voir listing 2)

Remarque : le SIO dispose d'une pile interne (réservoir) incorporée de type FIFO (First In-First Out) de trois octets, ce qui permet la réception de trois caractères avant que ne se pose un problème de surcharge. L'affichage ou le traitement d'un caractère réceptionné pouvant demander un certain temps, il faut bloquer les signaux DTR et RTS à la suite de chaque lecture.

LISTING 2
Routine de réception

INSIO: LD BC , 0FC7DH ; adresse de contrôle du canal A
LD A , 5 ; on pointe sur le registre WR5
OUT (C) , A

LD A , 0AAH ; DTR et RTS = 1 (déblocage en réception)
OUT (C) , A
INSIO0: IN A , (C) ; lecture du registre de lecture RR0
BIT 0 , A ; test du bit 0 de RR0
JR Z, INSIO0 ; si le bit 0 = 0 on a pas reçu de caractère, on attend
DI ; on a reçu un caractère, on inhibe les interruptions CPC
LD A , 5 ; on pointe sur le registre WR5
OUT (C), A
LD A , 28H ; DTR et RTS = 0 , blocage en réception
OUT (C), A
LD BC , 0FC7CH ; adresse de donnée du canal A
IN A, (C) ; lecture du caractère reçu
EI ; on autorise les interruptions du CPC
RES 7 , A ; on met à zéro le bit 7 du caractère reçu .(parité)
RET ; fin et retour de la routine , l'accumulateur A contient le caractère

ECRITURE D'UN CARACTERE A EMETTRE PAR LE SIO.
(Voir listing 3)

Les trois parties principales de gestion du SIO sont maintenant fixées, reste à les implanter dans un programme en vue d'une application spécifique. Nous vous proposerons dans un prochain numéro un programme d'émulation de terminal.

LISTING 3

Routine d'émission (Prenons comme principe que le registre H contient le caractère à émettre)

OUTSIO : LD BC , 0FC7DH ; adresse de contrôle du canal A
WAITWR: IN A , (C) ; lecture du registre RR0
AND 04 ; on teste si le canal est prêt à émettre
JR Z , WAITWR ; si bit 2 de RR0 = 0 on attend
LD A , H ; A = H = caractère
LD BC , 0FC7CH ; adresse de donnée du canal A
OUT (C), A ; écriture du caractère dans le canal
RET ; fin et retour de la routine


Câble de raccordement de la carte au CPC


Implantation des composants


Côté soudure


Côté composants

Megahertz (1987-9)

★ PUBLISHER: MEGAHERTZ
★ ANNÉE: 1987
★ LANGAGE:
★ LiCENCE: LISTING
★ AUTEUR: Philippe LEBEL
 

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Hardware » Interface Série Amstrad RS232C
» Hardware » Pace RS232
» Hardware » Serie - Interface Rs232
» Hardware » Serie - Interface Rsx Systems - Rs1 - Rs - 232c
» Hardware » RS232-Schnittstelle (Happy Computer)
» Hardware » Schneider RS232
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 170 millisecondes et consultée 1346 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.