Minitel branché sur mon Raspberry-Pi Pico

Bonjour à tous,

En 2019, Jean-Christophe d'ArduiBlog m'avait passé un Minitel lors de la Maker Faire que j'ai eu bien du mal à brancher sur mon microcontrôleur MicroPython.

Aujourd'hui, après 35 ans, je réalise enfin un rêve d'enfance... utiliser un Minitel pour de vrai (nous n'en n'avions pas en Belgique).

Minitel 2

 
Minitel 2

Après plusieurs essais infructueux et schéma USB du NET pas vraiment efficace,  j'ai fini par rencontrer ce schéma de l'étage transmission du minitel.

Etage RX/TX du Minitel

Grâce à lui, j'ai enfin trouver ce qui me manquait pour faire fonctionner mon microcontrôleur MicroPython favoris avec le Minitel.

Qu'ai je donc appris de si intéressant?

  1. Que la transmission des bits (TX) se fait à l'aide d'un transistor à collecteur ouvert! Il faudra donc un résistance pull-Up
  2. Que le signal TX n'est mesurable à l'oscilloscope que si je n'y ai rien de brancher dessus. Donc un signal très sensible et résistance/impédance sur le circuit.

Un  convertisseur  4 bits à transistors FET fait parfaitement le travail alors qu'un convertisseur 8 canaux bidirectionnels maintenait le signal à la masse. 

Connecteur Minitel

Avant tout, nous allons commencer nous allons repérer correctement le brochage à l'arrière du Minitel (connecteur DIN 5).

Connecteur DIN 5 à l'arrière du Minitel

Brancher le Minitel sur le microcontrôleur

Minitel sur Raspberry-Pi Pico

Voici donc le schéma appliqué avec le Raspberry-Pi Pico.

Brancher un Pico sur un Minitel

 

Activer le mode Terminal

Il faut également activer le mode terminal sur le Minitel pour le sortir de son mode de fonctionnement normal. 

Cela passe par quelques combinaisons de touches.

 funct+T A  --> Mode terminal ASCII US
 funct+T E  --> Désactiver l'écho
 funct+P 4  --> 4: 4800 bauds. 9: 9600 bauds. 

Le mode "Echo" renvoi directement sur le terminal tout ce que l'utilisateur tape au clavier. S'il est pratique pour quelques test préliminaires, ce mode est généralement désactivé pour laisser le choix à l'hôte (le microcontrôleur) de ce qui doit être affiché ou pas.

 Fct+T then I : memory reset
 Fct+T then V : Standard Téletél mode Vidéotext (40 colonnes)
 Fct+T then A : Standard "téléinformatique" ASCII US (80 colonnes)
 Fct+T then F : Standard "téléinformatique" ASCII FR (80 colonnes)
 Fct+T then E : Echo local (On/Off)
 Fct+C then E : Enable extended keyboard (ctrl, esc, arrows)
 Fct+C then V : Disabled extended keyboard
 Fct+P then 4 : 4800 bauds
 Fct+P then 9 : 9600 bauds

Hormis le "Memory reset", tout semble fonctionner comme attendu.

Paramétrage de liaison

J'ai connu l'aire du 9600 Bauds 8N1 (8 bits, sans parité, 1 bit de stop)... et c'est par ailleurs ce que mentionnent pas mal d'articles :-/
Configuration qui produit un affichage partiellement incorrecte!

La bonne configuration série est 7E1 pour une liaison Minitel.
Donc 7 bits de données, parité paire (Even) et un bit de stop.

MicroPython - Envoyer et recevoir

Il faut aussi se pencher sur la communication entre entre le MicroContrôleur Pico et le Minitel.

Envoi de texte vers le Minitel

from machine import UART

# Open 7E1 link to the Minitel 
# Pico - GP0:tx, GP1:rx
ser = UART( 0, 9600, bits=7, parity=0, stop=1 ) # 0: Parity EVEN

for i in range( 20 ):
	# \r is carriage return, \n line feed
	ser.write( 'MicroPython message sent to Minitel %i\r\n' % i )

print( 'That s all Folks!')
Le /r correspond au carriage return (curseur descend d'une ligne). Le /n correspond au line feed (ou new line) qui remet le curseur en début de ligne.

Les puriste Python aurons remarqué que j'ai oublié d'encoder ma chaîne de caractère (mon texte) en ASCII pour le Terminal. Le script MicroPython est supposé être de l'UTF-8 . Voyez l'exemple suivant qui corrige ce défaut.

Ce qui produit le résultat suivant sur le Minitel.

Réception et affichage de messages sur le Minitel.

Réception de données sur le microcontrôleur

Ce deuxième exemple permet de saisir du texte sur le terminal, texte qui est affiché dans la console REPL (ligne de commande MicroPython) à chaque fois que l'utilisateur presse la touche ENTREE (retour clavier).

from machine import UART

# Open 7E1 link to the Minitel
# Pico - GP0:tx, GP1:rx
ser = UART( 0, 9600, bits=7, parity=0, stop=1 ) # 0: Parity EVEN
ser.write( 'Type messages followed by CR.\r\n'.encode('ASCII') )
ser.write( '> '.encode('ASCII') )

buffer = ''
while True:
	_data = ser.read()
	if _data != None:
		buffer += _data.decode('ASCII')
		if '\r' in _data: # CR, \r
			print( buffer.replace('\r','').replace('\n','') )
			buffer=''
			ser.write( '\r\n> '.encode('ASCII') )

print( 'That s all Folks!')

Commençons par les lignes de textes saisies sur le Minitel

Saisie de texte sur le minitel.
 

Et voici maintenant les messages réceptionnés dans le script MicroPython.
Note: j'ai utilisé l'utilitaire MicroPython mpremote pour exécuter le script MicroPython sur la plateforme MicroPython.

$ mpremote connect /dev/ttyACM0 run examples/raw_receive.py 

This message has been key-in into a minitel
This looks to work properly
So.... Welcome to MicroPython

Ensuite?

La prochaine fois que nous parlerons de ce projet, ce sera pour faire du MicroPython directement depuis le Minitel... Se servir du Minitel comme une session REPL.

Mon petit doigt me dit que ce serait bien une Pyboard ou un ESP32 ou un Pico W.

25/08/2022: Voyez aussi le dépôt picotel sur GitHub.

3 commentaires:

  1. Réponses
    1. J'ai quand même pris un sacré bout de temps pour m'y remettre!
      Maintenant, j'aimerais voir s'il est possible de faire quelque-chose de totalement autonome :-)

      Supprimer
  2. super projet !
    j'aime beaucoup l'idée de l'utilisation autonome avec terminal et repl.
    on pourra donc programmer le pico sans passer par l'ordi, directement sur le minitel !
    je note ça dans ma liste des choses à tester sur esp32 :)

    RépondreSupprimer