Code, codage et transcodeur Définitions Le codage est l'opération qui transforme une information (écriture décimal, position angulaire, vitesse...) en écriture binaire dans un code de notre choix. Un code est un est un langage composé de différents symboles ou mots. Un mot est un ensemble de caractères numériques ou alphanumériques. Le transcodage est le passage d'un code à un autre.
Code binaire pur Ce code correspond au système de numération binaire et fait référence au code binaire naturel. Les caractères sont des bits. Les mots sont formés par une association ou combinaison de bits et avec n bits nous pouvons former au maximum 2n mots.
Principe de base des transcodeurs Les transcodeurs sont des circuits qui convertissent les différents codes entre eux. D'une manière générale, nous pouvons définir le transcodage comme étant la représentation d'un élément de l'ensemble A par un ou plusieurs éléments pris dans un ensemble B d'éléments. Le rapport entre les deux quantités est déterminé par une règle de correspondance. La représentation numérique la plus connue et la plus répandue en technique numérique est le code binaire. Pour une meilleur lisibilité, le code binaire peut être reproduit en code octal (chaque triplet de chiffres binaire est écris en nombre décimal). Parmi les autres codes nous citerons : les nombres BCD (nombres décimaux codés en binaire), le code Aiken, le code plus 3, le code Gray, le code 1 parmi 10... Chaque code présente deux attributs caractéristiques : la longueur m et le nombre de mot de code n possible.
Pour le code BCD, par exemple, la longueur est m=4 et le nombre de mots de code (mots utiles) N=10.
Il faut prendre en considération la différence entre un code complet et un code incomplet. Le code complet contient tous les mots de code binaire ou combinaisons possibles. Par contre, le code incomplet n'utilise qu'une partie des combinaisons possibles. Le code BCD fait donc partie du groupe des codes incomplets étant donné qu'il n'utilise que 10 mots de code binaire possibles sur 16. Selon leur mode de fonctionnement les transcodeurs sont subdivisés en décodeurs et en codeurs. Les décodeurs convertissent un code d'entrée de longueur m en code de sortie de 1 parmi n. Pour les lignes d'entrée codées en binaire, il y a 2m = n mots de code possibles et donc n lignes de sortie. Sur le circuit de décodage illustré ci-dessus, la sortie active délivre un niveau logique 1, toutes les autres sorties étant de niveau logique 0. Si nous souhaitons avoir une sortie active à l'état bas, il suffit de remplacer les quatre portes ET par des portes NON ET (nand). Les codeurs convertissent un code d'entrée 1 parmi n en un code de sortie de longueur m. Pour n lignes d'entrée, il y a m lignes de sortie pour un signal codé en binaire.
Code binaire naturel Ce code peut s'établir selon deux méthodes. La première consiste à l'affectation d'une valeur de poids croissant à chaque colonne. Pour chaque puissance de 2, nous épuisons en colonne toutes les combinaisons dans l'ordre croissant décimal, puis nous passons en ligne à la puissance de 2 immédiatement supérieure. Nous
effectuons alors toujours dans le même ordre toutes les combinaisons jusqu'à épuisement...
Une autre méthode consiste à établir une périodicité. Chaque colonne correspond à une alternance de bits bien établie. Ainsi, en partant de la colonne de poids faible (ou LSB = Low Significant Bit) à la colone de poids fort (ou MSB = Most Significant Bit) nous avons une périodicité de 2, 4, 8, 16, 32... bits.
Attention à ne pas confondre périodicité et puissance de 2 ! Pour la colonne de périodicité de 21 (soit 2) nous avons une puissance de 2 égale à 20 soit un poids binaire de 1
Pour la colonne de périodicité de 22 (soit une périodicité de 4) correspond une puissance de 2 égale à 21 soit un poids binaire de 2 ...
Codes décimaux codés binaires (BCD) La façon la plus simple de représenter les 10 chiffres décimaux par 4 variables binaires est de prendre les 10 premières combinaisons des 4 variables du système binaire naturel.
Si nous affectons les poids 1, 2, 4, 8 à ces 4 variables, nous obtenons le tableau de correspondance suivant :
Le fait d'affecter des poids aux variables binaires nous conduit à appeler le code obtenu "code pondéré". Ainsi le nombre le nombre 7 est représenté par la combinaison 0111 (7 = 0 + 4 + 2 + 1). Le code 8421 (appelé aussi code 1248) est le plus simple des codes pondérés à 4 bits. Voici quelques exemples de nombres représenté par le code 8421 :
Remarques : Un code est dit «pondérés» quand il existe des nombres qui indiquent le poids des chiffres binaires. En multipliant ces nombres par les chiffres binaires correspondants, on obtient l'équivalence décimale. Tous les autres codes dans lesquels on ne peut repérer le poids des chiffres binaires sont appelés «non pondérés». Ils sont élaborés sur une base à développement mathématique complexe ou plus simplement sont caractérisés par des tables faites spécialement. Différents codes ont été imaginés, ayant diverses propriétés logiques et arithmétiques. Le choix de l'un ou de l'autre type de code dépend exclusivement des applications auxquelles il est destiné.
Code Gray Le code Gray est fréquemment utilisé dans les capteurs angulaires ou de positionnement, mais aussi lorsque l'on désire une progression numérique binaire sans parasite transitoire. Le code Gray sert également dans les tableaux de Karnaugh utilisés lors de la conception de circuits logiques.
Code binaire réfléchi ou code Gray Le code Gray est un code construit de telle façon qu'a partir du chiffre 0 chaque nombre consécutif diffère du précédent immédiat d'un seul digit. En l'exprimant autrement nous pouvons également dire que l'on change un seul bit à la fois quand un nombre est augmenté d'une unité. De plus, on opère de telle manière que le digit de transformation soit d'un poids faible. Si une erreur survient lors d'une transformation d'un nombre à un autre elle est ainsi minimisée.
Construction du code Gray Commençons par un exemple simple et établissons le code gray pour les 4 premiers chiffres décimaux 0 à 3. Deux bits suffisent et les combinaison en binaire BCD sont les suivantes :
Nous remarquons que pour aller du nombre (1)10 à (2)10 nous changeons les deux bits à la fois pour passer de (01)2 à (10)2. En code Gray, pour passer d'une ligne à la suivante, on inverse un seul bit de telle manière qu'il soit le bit le plus à droite possible conduisant à un nouveau nombre. Ce qui donne les combinaisons suivantes :
Construction par la méthode du code binaire réfléchi ou code REFLEX Le nom code binaire réfléchi vient d'une autre méthode de construction. Elle est plus pratique ou plus visuelle quand au choix du bit à inverser lors du passage d'un nombre au suivant. On établi un code de départ: zéro est codé 0 et un est codé 1 (1). Puis, à chaque fois qu'on a besoin d'un bit supplémentaire (2), on symétrise les nombres déjà obtenus (comme une réflexion dans un miroir)(3)
et on rajoute un 1 au début des nouveaux nombres (4) et un zéro sur les anciens.
Ci-dessous nous recommençons l'expérience pour les nombres (0)10 à (7)10.
Règle de formation du code Gray à partir du binaire pur Soit un nombre N en binaire pur, pour obtenir son équivalent n en binaire réfléchi, il suffit d'effectuer l'opération suivante : Exemple : soit N = 0111, nous avons 2N = 1110 (pour multiplier par 2 on effectue un décalage de la droite vers la gauche). On effectue maintenant l'opération OU Exclusif de N et 2N :
Puis nous divisons par 2 le résultat soit 1001 / 2 = 0100 (pour diviser par 2 on effectue un décalage de la gauche vers la droite). Nous avons alors : pour N = 0111 en binaire pur correspond n = 0100 en code Gray.
Convertisseur de code binaire en code gray
La construction du code Gray pour les nombres de 0 à 15 est représentée par le tableau suivant :
Etablissons un diagramme de Karnaugh pour G1, G2, G3, G4 à partir de B1, B2, B3 et B4.
Nous pouvons maintenant établir les équations de G1 à G4 :
Nous pouvons remarquer que le passage du binaire pur au code Gray se fait en effectuant une opération OU Exclusif. Le circuit du transcodeur est très simple. En désignant par Bn (B1 = LSB) un bit quelconque en code binaire pur et par Gn le bit recherché en code Gray, nous avons alors :
Convertisseur de code gray en code binaire Pour la conversion du code Gray en code binaire la relation suivante s'apparente à l'équation vue pour le convertisseur inverse.
Là encore les fonctions OU Exclusif sont de mise pour la réalisation du circuit de transcodage.
Le code Gray en pratique Ce code est surtout utilisé pour des capteurs de positions absolue , par exemple sur des règles optiques ou un codeur angulaire solidaire d'un arbre. En effet, si on utilise le code binaire pur, pendant le passage de la position cinq (101)2 à six (110)2 (changement simultané de 2 bits) il y a un risque de passage transitoire par quatre (100)2 ou sept (111)2, ce que le code Gray évite. On remarquera que le passage du maximum (quinze sur 4 bits) à zéro se fait également en ne modifiant qu'un seul bit. Ceci permet par exemple d'encoder un angle, comme la direction d'une girouette ou la position d'un axe sur une machine automatique ou un robot. Pour la construction d'un codeur angulaire solidaire d'un axe il faut de préférence établir des ensembles de position angulaire multiples d'une puissance de 2 (2, 4, 8, 16, 32...) si l'on veut que le changement du nombre le plus élevé du groupe vers le nombre le plus faible se fasse avec un seul bit. Pour une girouette à huit position (0=Nord, 1=Nord-Est, 2=Est, ... 7=Nord-Ouest) le passage de Nord-Ouest à Nord se fait également sans problème en ne changeant qu'un seul bit. Exemple de roue codeuse Gray :
Nous avons 16 positions angulaires détectées en 4 bits. La lecture s'effectue par 4 cellules photosensibles.
Codage des caractères
Les codes de caractères Afin de pouvoir transmettre ou stocker tous les types de caractères alphanumériques ou autres, des codes conventionnels ont été établis. Chaque caractère est associé à son équivalent en code numérique. Il existe de nombreux codes et nous pouvons citer pour mémoire le code ASCII , l'EBCDIC, L'UNICODE, l'UTF8...
Le code ASCII Avec l'avènement des machines de traitement de l'information (téléscripteur, telex, ordinateur...) le code ASCII (American Standard Code for Information Interchange) est adopté comme standard dans les années 60. Le code ASCII de base représentait les caractères sur 7 bits (c'est-à-dire 128 caractères possibles, de 0 à 127). Le huitième bit est un bit de parité. Exemple : En écrivant GRAY en ASCII nous obtenons :
Avec la parité paire le résultat est le suivant :
Parité L'intérêt particulier des contrôles de parité est de vérifier qu'aucune erreur simple se produit lors du transfert d'un mot d'une mémoire à une autre.
Table des codes de caractères ASCII
Exemple : Y = 59 (hexadécimal) Y = 101 1001 ACK = 06
Les codes 0 à 31 sont des caractères de contrôle car ils permettent de faire des actions telles que le retour à la ligne (CR), un Bip sonore (BEL)... les majuscules sont représentées par Les codes 65 à 90 et les minuscules par les codes 97 à 122. En modifiant le 6ème bit nous passons de majuscules à minuscules, c'est-à-dire en ajoutant 32 au code ASCII en base décimale.
Les codes de contrôle ASCII NUL Null : pas de caractère, blanc SOH Start of heading : début d'entête STX Start of text : début de texte ETX End of text : fin de texte EOT End of transmission : fin de transmission ENQ Enquiry : demande - ex : identification du destinataire ACK Acknowledge : accusé de réception BEL Bell : sonnerie BS Backspace : arrière de 1 caractère HT TAB : Tabulation horizontale LF Line Feed : saut de ligne VT Vertical tabulation : tabulation verticale FF Form feed : page suivante CR Carriage return : retour à la ligne SO Shift out : code suivant hors standard SI Shift in : retour aux codes standard DLE Data link escape : caract. suiv. changent de signification DC1 Device control 1 : DC2 Device control 2 : DC3 Device control 3 : DC4 Device control 4 : NAK Negative acknowledgement : réponse négative SYN Synchronous idle : caractère de synchronisation
ETB End of transmission block : fin de bloc de transmission CAN Cancel : annulation EM End of medium : fin du support SUB Substitute : substitut ESC Escape : caractère d'échappement FS File separator : séparateur de fichier GS Group separator : séparateur de groupe RS Record separator : séparateur d'enregistrement US Unit separator : séparateur d'enregistrement SP Space : espace DEL Delete : suppression Maintenant nous utilisons le code ASCII étendu. Il permet le codage de caractères sur 8 bits, soit 256 caractères possibles. Exemple d'une table de code étendu :