Machine de Turing



1. Présentation

En 1936, Alan Turing posait les bases de ce qui sera plus tard les machines automatiques et les ordinateurs ...
Je me souviens avoir trouvé dans Science & Vie une série d'articles décrivant la construction et l'utilisation d'une machine de Turing ... en papier !!
Depuis déjà longtemps, je voulais en fabriquer une électronique. Voici donc les caractéristiques de celle que je viens de construire :

- nombre de cases du ruban (mémoire vive) : 14
- nombre de caractères dans l'alphabet : 4 (extension à 10 plus tard)
- nombre d'états de l'unité de contrôle : 4 (extension à 6 plus tard)
- contrôle fait par un pic 16F876
- durée d'un cycle : 1 seconde

A noter que le pic ne fait rien d'autre que :
- gérer la mémoire vive (en fait c'est sa ram interne qui est utilisée)
- gérer les afficheurs multiplexés
- générer les caractères
- gérer la mémoire morte de programme multiplexée également
- gérer le mini clavier de commandes utilisateur

en aucun cas, le pic ne se charge du programme réel : c'est l'algorithme implanté grâce à des straps dans la mémoire morte qui "tourne", rien d'autre !
Simplement, le pic interprète les instructions et les déroule.
Le temps de cycle de 1 seconde, très long pour un système à microcontrôleur, permet de voir réellement comment la machine déroule l'algorithme, car c'est ça le plus intéressant, car en général, on connait le résultat attendu !



2. Schémas

Pour ceux qui sont intéressés par cette réalisation, voici quelques schémas. Les typons des cartes et le fichier hexa du pic sont dispos, il suffit de me demander !
L'unité de contrôle :


rien de bien transcendant, le clavier se limite à 1 inter qui permet soit d'utiliser le programme de la machine, soit d'entrer les conditions initiales : données et état de départ
2 Leds indiquent si le programme tourne (verte) ou non (rouge); en position de réglage, les 2 leds sont éteintes.
Les 4 bp servent à dérouler le menu de réglage, et de lancer, arrêter ou avancer pas à pas la machine. On peut également sauvegarder la configuration actuelle (données, tête, état) et la recharger telle quelle, cette configuration étant mémorisée dans la mémoire flash du pic.
A noter également en haut à gauche, l'alimentation à découpage qui fournit une tension de 100V pour les anodes des afficheurs (on est en multiplexé, et donc il faut pousser la tension anodique pour éclairer normalement)
télécharger le schéma en PDF

La mémoire de données :
En fait, la mémoire vive est celle du pic, celui-ci se contentant de reproduire le contenu sur les afficheurs.

Les 16 grilles sont commandées tour à tour. Pour obtenir la surbrillance de l'afficheur sous la tête de lecture, sa commande grille dure 5 fois plus lontemps;
De même, les 2 afficheurs de gauche, dédiés à l'état de la machine sont commandés 3 fois plus longtemps pour obtenir une brillance intermédiaire
Notez également la commande de strobe qui éteint tous les afficheurs lors des décalages successifs des registres.
Les filaments des afficheurs fluo sont chauffés en 1,6V (nominalement, c'est 2,5V, mais ils fonctionnent tout à fait correctement à moins)



Les 18 anodes des 16 segments + 2 points sont connectées en parallèle sur les 16 afficheurs et sont commandées tour à tour également et générées par un registre à décalage.
télécharger le schéma en PDF


La mémoire programme :
En fait, c'est une matrice à straps et diodes. Pour programmer l'algorithme, il suffit d'installer les straps aux bons endroits !
Chaque case mémoire de programme est constituée ainsi :


On voit qu'il est prévu à gauche, 10 caractères max, et 6 états max à droite. Une instruction est formée donc de 3 commandes :
- le nouveau caractère à écrire dans la case pointée par la tête
- le déplacement éventuel de la tête ou l'arrêt de la machine (fin de prog ou erreur)
- le nouvel état de l'unité de contrôle de la machine.
Toutes les cases (il y en a 16 pour cette version de base) sont connectées en parallèle du point de vue des 20 points notés Yi(10 caractères, 4 ordres, 6 états) :


Les 20 points Y sont commandés tour à tour par un registre à décalage :


Puis les 16 sorties notées Z sont multiplexées :

et la sortie Z est lue par le pic. Donc pour savoir si tel ou tel strap est installé dans la case de la mémoire (indicée par le caractère lu et l'état actuel de la machine), il suffit de commuter la bonne combinaison LZD-LZC-LZB-LZA pour surveiller Z, et de générer tour à tour les commandes Y1,Y2...Y20: la présence d'un strap est détectée par Z=0.
Un peu compliqué, mais efficace ...
télécharger le schéma en PDF




3. Construction

Voici maintenant quelques photos de la construction de cette machine :



un module affichage à 8 afficheurs et la commande d'anodes-grilles



un module "4 cases instructions"; notez les diodes


Le module de lecture, prevu pour 16 cases mémoire



Assemblage du module de lecture et du premier module 4 instructions pour les premiers essais


La carte micro; notez le clavier et l'étiquette de repérage des boutons


L'ensemble installé sur un socle en bois (qui mesure pas loin de 80 x 25 cm !)



Ajout de 2 autres modules 4 instructions pour passer à 3 états



Premiers essais d'un compteur binaire; données initiales (état = I, données = bbbb0b)



le programme correspondant (le caractère rouge souligné indique la position de la tête de lecture, donc correspond à l'afficheur en surbrillance)



ajout d'un module 7 afficheurs, ce qui passe à 13 cases mémoire de données (il me manque un afficheur !)




Ajout du 4° module 4 instructions


résistance de puissance du générateur de tension de chauffage filaments


Essai du programme "compteur binaire" sur 13 afficheurs



Essai du programme "trieur" et données de départ


une minute plus tard ... les O et les X sont triés et séparés de part et d'autre !



4. Machine de Turing en papier

La machine de Turing vous titille ? Vous voulez aller plus loin sans être obligé de construire cette machine ?
Alors, n'hésitez plus, construisez la machine de Turing en papier et essayez-la.
Comment la construire et l'utiliser (fichier ODT)



Voilà .. bon je sais, ça n'a pas beaucoup de rapport avec les lampes ! Quoique ... et si je faisais une machine de Turing à lampes ???