Minitels en série

Ou plutôt, minitel et série

Après un article d’introduction, passons aux choses sérieuses : relier un minitel à un ordinateur, et faire communiquer les deux ensemble.

Côté minitel

À l’arrière du minitel, un port DIN est prévu pour la communication avec un périphérique externe… dans notre cas, un ordinateur. Si le terme MIDI désigne pour vous autre chose que le format de fichier que le protocole a engendré, alors vous connaissez sans doute ces connecteurs.

Dans notre cas, seulement trois des cinq broches nous intéressent. Le schéma des broches côté minitel est le suivant :

Broches DIN côté minitel : réception à gauche, masse au centre, émission à droite

Schéma des broches utiles côté minitel (image sous CC-BY Nicelab)

À cette étape, vous avez le choix : soit vous ne trouvez pas de connecteur DIN approprié…

Bricolage d'un connecteur DIN

Hack the DIN connector (image sous CC-BY Nicelab)

…soit vous en trouvez un et faites un peu de soudure.

Connecteur DIN relié à un arduino

On apprécie le Power ScrewShield de Snootlab (image sous CC-BY Nicelab)

Serial

Comme vous l’avez surement remarqué dans le schéma de branchement, outre la, masse, nous avons une broche de réception et une broche d’envoi. Et cela suffit pour communiquer en série.

Vous vous souvenez des « ports série » ? Ou peut-être utilisez-vous Serial ? C’est bien de cela que l’on parle. Avec quelques petites configurations propres au minitel.

Mais avant de configurer tout ça, ne faut-il pas déjà relier le minitel à l’ordinateur ? Vous avez déjà les trois fils qu’il faut du côté minitel, concentrons-nous maintenant sur l’autre côté de la communication.

Côté ordinateur

Via un connecteur RS-232

Peut-être avez-vous encore un connecteur RS-232 sur votre ordinateur ? Dans ce cas, puisque le « port série » communique en série, très peu de matériel va être nécessaire.

Ne disposant pas de ce port antique, votre serviteur a utilisé un joli convertisseur USB-série bleu fluo pour pouvoir faire des tests.

Montage RS-232 (avec un convertisseur USB-RS-232)

Montage RS-232 en action (image sous CC-BY Nicelab)

Le montage électronique utilisé nécessite quelques résistances et transistors, et évidemment un connecteur RS-232. À noter que les valeurs des résistances sont approximatives.

Schéma du montage pour connection RS-232

Les valeurs des résitances sont approximatives (image sous CC-BY Nicelab)

Quelques branchements et le tour est joué !

Via un arduino

L’autre solution de réutilisation du matériel que vous avez déjà consiste à utiliser un arduino.

La première solution qui vient à l’esprit est d’utiliser la librairie SoftwareSerial, et de transférer les données reçues de l’ordinateur vers deux des broches numériques. Pour cela, le programme présenté sur la page de documentation fera l’affaire. Hélas, il s’avère à l’utilisation que cette méthode n’offre pas de résultats probants : des bytes sont perdus en cours de route dans certaines conditions.

Utilisation d'un tournevis pour enlever l'ATMEGA de l'arduino

Utiliser un tournevis comme levier pour décoller l’ATMEGA (image sous CC-BY Nicelab)

Plutôt que d’investir dans un Arduino Mega et d’utiliser les implémentations matérielles des interfaces séries, une solution plus simple existe : enlever l’ATMEGA !

En effet, pour communiquer avec l’ATMEGA328, l’arduino dispose d’un convertisseur USB-série intégré. Une fois le micro-contrôleur enlevé, il suffit d’utiliser les broches 0 et 1 directement.

Via un convertisseur USB-série

Enfin, une solution facile consiste à utiliser un convertisseur USB-série. On peut en trouver facilement pour quelques euros.

Convertisseur USB série

Le convertisseur en action (image sous CC-BY Nicelab)

Côté arduino

Alternativement, au lieu de relier le minitel à un ordinateur, on peut relier le minitel à un arduino.

Il s’agit de la même méthode que d’utiliser l’arduino pour faire le pont entre le minitel et l’ordinateur, si ce n’est que :

  • on n’enlève pas l’ATMEGA
  • on utilise quand même les broches 0 et 1 de l’arduino pour la communication
  • on n’a pas besoin d’ordinateur : l’arduino peut être simplement alimenté par une source externe

L’exemple de code à la fin de l’article utilise cette configuration.

Activation du minitel

Une foi le minitel allumé, pour utiliser le port DIN, il faut appuyer sur les touches suivantes :

  • Fct-T puis A (ou F éventuellement) pour choisir le mode
  • Fct-T puis E pour désactiver l’écho à l’écran des touches tapées
  • Fct-P puis 4 pour choisir la vitesse de transfert de 4800 bauds.

Le mode « français » (Fct-T puis F) est une version spéciale de l’ASCII, en remplaçant simplement les caractères « #^[]{}|~ » par « £ç↑°§éèù » ».

Pour choisir d’autres vitesses de transfert, utiliser :

  • Fct-P puis 1 pour 1200 bauds
  • Fct-P puis 3 pour 300 bauds
  • Fct-P puis 4 pour 4800 bauds
  • Fct-P puis 9 pour 9600 bauds

Logiciels

Maintenant que le minitel et l’ordinateur sont reliés d’une manière ou d’une autre, il est temps de regarder le côté logiciel pour communiquer avec le minitel.

À noter que je les outils que je mentionne ici tournent sous GNU/Linux, pour la raison objective que c’est le système d’exploitation que je connais le mieux. Nul doute que des outils équivalents existent pour votre système d’exploitation préféré.

Général

La communication série est bien documentée, et les logiciels ne manquent pas. À noter qu’il faut faire l’étape de configuration pour qu’elle corresponde à ce qu’utilise le minitel.

Les points à configurer sont les suivants:

  • l’interface : pour trouver le nom de l’interface, il est possible de lancer
    la commande ls /dev/tty* par exemple
  • la vitesse de transfert : voir ci-dessus
  • le nombre de bits utilisés : 7
  • la parité (pour le huitième bit) : paire

Pour le reste, le codage ASCII est utilisé, et on notera l’interprétation des séquences ou caractères suivants :

  • le caractère d’appel \x07 fait un joli bruit
  • le caractère de tabulation horizontale \t équivaut à un déplacement de 8 caractères
  • les déplacements vers le haut, bas, gauche et droite sont représentés par les séquences respectives \x1b[A, \x1b[B, \x1b[C et \x1b[D
  • …et d’autres séquences pour tous les touches spécifiques au minitel : le plus simple pour les obtenir est d’appuyer sur la touche correspondante et de regarder quelle séquence elle renvoie.

En ligne de commande

Un certain nombre de logiciels permettent de communiquer en série directement à partir de la ligne de commande. Sans être exhaustif, on peut en lister quelques uns.

Pour utiliser l’interface /dev/ttyUSB0, les commandes seront donc, par exemple :

  • cu -e -l /dev/ttyUSB0 -s 4800
  • screen /dev/ttyUSB0 4800,cs7
  • minicom -D /dev/ttyUSB0, puis Ctrl-A et P, puis modifier la vitesse avec A et B, et utiliser U et M pour définir le nombre de bits et la parité

Directement dans un langage de programmation

Pour faire des programmes qui communiquent avec le minitel, chaque langage a sa méthode. Un bon point de départ est la page listant les moyens de communiquer avec l’arduino.

À titre d’exemple, je vous propose le programme arduino suivant (reliez simplement les masses ensemble et croisez les entrées et sorties entre l’arduino (broches 0 et 1) et le minitel) :

/*
 * This program is free software. It comes without any warranty, to
 * the extent permitted by applicable law. You can redistribute it
 * and/or modify it under the terms of the CC0 license (French version).
 * See http://vvlibri.org/fr/licence/cc0/10/fr/legalcode for more details.
 */

void setup() {
    Serial.begin(4800);
    sendMessage("\r\t\t\t\t");
}

char modifyParity(byte c) {
    byte i = 1 << 6;
    boolean p = false;
    c &= B01111111;
    while(i) {
        if(c & i) {
            p = !p;
        }
        i >>= 1;
    }
    c |= p << 7;
    return c;
}

void sendMessage(char *msg) {
    int i = 0;
    while(msg[i] > 0) {
        msg[i] = modifyParity(msg[i]);
        i++;
    }
    Serial.write(msg);
    Serial.flush();
}

void loop() {
    sendMessage("\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D####\n");
    sendMessage("\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D#-AT-#\n");
    sendMessage("\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D#-CG-#\n");
    sendMessage("\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D#--TA--#\n");
    sendMessage("\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D#-AT-#\n");
    sendMessage("\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D#-GC-#\n");
}

Si tout se passe bien, vous verrez une hélice d’ADN tourner sur elle-même (après un certain temps à fixer l’écran, c’est assez hypnotique).

Au prochain épisode, un exemple de programmes que l’on peut réaliser…

Commentaires

Les commentaires sont fermés.