IMA4 2016/2017 P44

De Wiki de Projets IMA
Révision datée du 7 mars 2017 à 22:32 par Tlopez (discussion | contributions) (Programmation de l'interface graphique du 3615 Facebook)


Cahier des charges

Présentation générale du projet

L'idée générale de ce projet est de donner une seconde vie aux minitels en les transformant en terminaux d'accès internet.

Contexte

Le Minitel (Médium interactif par numérisation d'information téléphonique) est un type de terminal informatique qui était destiné à la connexion au service français de Vidéotex baptisé Télétel. Lancé en 1980 en France, il permettait d’accéder à de nombreux services (annuaire, jeux, vente par correspondance, tchat ...) à une époque où peu de foyers possédaient un ordinateur. Le service a été arrêté en 2012, les minitels sont maintenant inutilisables et ne servent donc plus à rien, c'est pourquoi il peut être intéressant de leur donner une seconde vie afin d'éviter le gaspillage.

Objectif du projet

L'objectif du projet est d'adapter intégralement le site internet Facebook.com à l'affichage sur minitel. L'utilisateur doit pouvoir surfer sur son minitel de la façon la plus ergonomique possible.

Description du projet

Les minitels disposent généralement d'une prise série appelée prise péri-informatique permettant de communiquer avec le monde extérieur. En connectant une plateforme micro-contrôleur à cette prise série, on peut réaliser l'accès à des pages web et les afficher à l'écran. En raison de la petite taille d'affichage des minitels (24 lignes de 40 ou 80 caractères), il est nécessaire de mettre en place un proxy intermédiaire pour adapter les pages web à l'écran du minitel avant de lui les renvoyer pour affichage.

Choix techniques : matériel et logiciel

  • Un Minitel 1 Bistandard Alcatel Telic (permet d'afficher 24 lignes de 80 caractères à l'écran et la transmission par voie série jusqu'à 4800 bauds)<br\>
  • Un connecteur DIN 5 broches.
  • Une plateforme micro-contrôleur Arduino Uno.
  • Une extension Ethernet pour plateforme Arduino.
  • Deux optocoupleurs 4N25.

Calendrier prévisionnel

Liste des tâches à effectuer

  • Communiquer avec le minitel via la prise série et afficher du texte à l'écran.
  • Visualiser la partie texte seule des pages de Facebook.com à l'aide d'un navigateur adapté afin de réfléchir à comment adapter l'affichage.
  • Piloter la carte Ethernet avec l'Arduino.
  • Réaliser le proxy intermédiaire pour adapter les pages web à l'affichage du minitel.

Calendrier

Feuille d'heures

Tâche Prélude Heures S1 Heures S2 Heures S3 Heures S4 Heures S5 Heures S6 Heures S7 Heures S8 Heures S9 Heures S10 Total
Définition cahier des charges 2 2
Recherches, appropriation du matériel 6 4 10
Fabrication du câble 2 2
Codage du programme pour établir la communication série entre l'arduino et le minitel 4 2 6
Navigation sur Facebook en mode texte 4 4

Avancement du Projet

Semaine 1

Cette première semaine a été consacrée au rassemblement du matériel nécessaire et à sa prise en main, ainsi qu'a des recherches sur internet.

Prise en main du minitel

Le minitel que nous avons à notre disposition est bistandard, c'est à dire qu'il dispose de deux standards :

  • Un standard Télétel comprenant deux modes :
    • Un mode Vidéotex qui est le mode actif à la mise sous tension du minitel
    • Un mode mixte
  • Un standard téléinformatique

Nous allons utiliser le mode mixte car il permet d’utiliser l'écran en mode 80 colonnes de caractères (au lieu de 40 en mode Vidéotex), des échanges bidirectionnels simultanés quand le minitel est relié à un autre appareil via sa prise péri-informatique et l'utilisation des commandes protocole permettant par exemple de modifier la vitesse des échanges avec le périphérique en envoyant une commande spécifique avec le périphérique via la prise.

Les commandes intéressantes pour configurer notre minitel sont les suivantes :

Tâche Commande clavier Commande par la prise (Hexadécimal)
Passage au standard téléinformatique Fnct + T puis F 1B 3A 31 7D
Passage du mode Vidéotex au mode mixte Indisponible 1B 3A 32 7D
Passage de l'écran en mode page/rouleau Fnct + E puis P / Fnct + E puis R 1B 3A 6A 43 / 1B 3A 69 43
Modifier la vitesse de la prise (1200 bauds par défaut)

Fnct + P puis 3 pour 300 bauds <br\> Fnct + P puis 1 pour 1200 bauds <br\> Fnct + P puis 4 pour 4800 bauds

1B 3A 6B 52 <br\> 1B 3A 6B 64 <br\> 1B 3A 6B 76

Semaine 2

Fabrication du câble pour connecter le minitel et l'arduino

Lors de cette semaine, nous avons fabriqué le câble qui servira à la communication entre l'arduino et le minitel. Pour cela, nous avons acheté un connecteur DIN 5 broches sur lequel nous avons soudé 5 fils d'un vieux câble ethernet. Après avoir refermé le connecteur, nous avons dénudé les fils à l'autre extrémité afin de pouvoir les relier aux bonnes broches de l'arduino.


Correspondance fils/broches :

Numéro de la broche Fonction Couleur du fil
1 Entrée RX Bleu
2 0V Vert
3 Sortie TX Orange
4 Entrée PT Marron
5 Sortie 8,5V 1A Blanc

Semaine 3

Communication série entre le minitel et l'arduino

Ayant réalisé le câble permettant de connecter la prise péri-informatique du minitel à l'arduino, nous avons essayé d'envoyer des caractères au minitel via la liaison série et de les visualiser à l'écran correctement.


D'après le manuel "Minitel 1 B Spécifications techniques d'utilisation" dont le lien est disponible dans le cahier des charges, les niveaux électriques de la prise du minitel sont compatibles avec le niveau TTL, collecteur ouvert :

  • Un niveau de tension supérieur ou égal à 2,5 V présenté sur l'entrée RX sera interprété comme un "1" logique
  • Un niveau de tension inférieur ou égal à 0,4 V présenté sur l'entrée RX sera interprété comme un "0" logique.

Le format des signaux RX et TX de réception et d'émission du minitel est fixe avec 7 bits de données plus un bit de parité paire.


Nous avons donc codé en C un programme pour l'arduino qui envoie en continu le caractère "a" sur le port série afin de s'assurer de la bonne communication avec le minitel . On utilise la bibliothèque avr/io.h de façon à écrire dans les registres de l'atmega 328 de l'arduino. Le code du programme est donné ci-dessous :

#include <avr/io.h>

// For the serial port

#define CPU_FREQ        16000000L             // Assume a CPU frequency of 16Mhz

void init_serial(int speed) //initialisation de la liaison série
{
/* Set baud rate */
UBRR0 = CPU_FREQ/(((unsigned long int)speed)<<4)-1;
 
/* Enable transmitter & receiver */
UCSR0B = (1<<TXEN0 | 1<<RXEN0);
 
/* Set 7 bits character and 1 stop bit even parity */
UCSR0C = (2<<UPM00)|(2<<UCSZ00);
 
/* Set off UART baud doubler */
UCSR0A &= ~(1 << U2X0);
}
 
void send_serial(unsigned char c) //envoyer un carctère sur le port série
{
loop_until_bit_is_set(UCSR0A, UDRE0);
UDR0 = c;
}


unsigned char get_serial(void) //récupérer un caractère envoyé sur le port série
{
loop_until_bit_is_set(UCSR0A, RXC0);
return UDR0;
}
 
 
int main ()
{
init_serial(1200);

 while(1)
   {
     send_serial('a');
   }
    
return 0;
}
Figure 3 : Envoi du caractère "a" sur le minitel

Semaine 4

Navigation sur Facebook en mode texte

Afin de voir à quoi ressemble facebook en mode texte, nous avons installé le navigateur web Links pour linux qui n'affiche que le texte des pages web. La version pour ordinateur de facebook nécessite JavaScript, elle ne peut donc pas fonctionner correctement sur ce type de navigateur. On utilise par conséquent la version mobile de facebook (http://m.facebook.com) plus simple et donc plus adaptée pour un affichage rudimentaire (affichage très limité du minitel). On remarque que faute de pouvoir afficher les images, le navigateur affiche une description de celles-ci.

Semaine 5

Programmation de l'interface graphique du 3615 Facebook

Attributs de visualisation des caractères

Attribut Code (Hexadécimal)
Aucun 1B 5B 30 30 6D
Surintensité / Intensité normale 1B 5B 30 31 6D / 1B 5B 32 32 6D
Souligné / Non souligné 1B 5B 30 34 6D / 1B 5B 32 34 6D
Clignotant / Non clignotant 1B 5B 30 35 6D / 1B 5B 32 35 6D
Fond inversé / Fond normal 1B 5B 30 37 6D / 1B 5B 32 37 6D

Fonctions de mise en page

Fonction Code (Hexadécimal)
Déplacement du curseur d'une colonne vers la gauche 08
Déplacement du curseur de 8 colonnes vers la droite 09
Déplacement du curseur d'une ligne vers le bas 0A
Retour du curseur en position 1 de la ligne courrante 0D
Effacer l'écran 1B 5B 32 4A
Mettre le curseur en première ligne, première colonne 1B 5B 00 3B 00 48
Bloquer l'affichage sur l'écran / Débloquer 1B 3B 60 58 50 / 1B 3B 61 58 50

Semaine 6

Programmation de l'interface graphique du 3615 Facebook (suite)

Figure 8 : Prototype de la page d’accueil du 3615 Facebook

Fichiers Rendus