Vous êtes sur la page 1sur 5

Combinatoire numrique

Nous nous limiterons aux applications lectroniques (les seules existantes, mis part l'ordinateur eau du muse du CNAM).

Reprsentation des nombres entiers


la base 2
On peut reprsenter des nombres par une combinaison de zros et de uns. Chaque chiffre binaire (BInary digIT) est appel BIT. 8 bits forment un octet (BYTE). Mais plusieurs codifications sont envisageables. La plus utilise est le binaire (ou binaire naturel en cas d'ambigut). passage binaire (indice b) -> dcimal (indice d) : 1011001b reprsente : 1x26 +0x25 +1x24 +1x23 +0x22 +0x21 +1x20 = 1x64 +0x32 +1x16 +1x8 +0x4 +0x2 +1x1 = 89d l'inverse, pour transformer 89d en binaire, on peut utiliser la mthode des divisions successives par 2 : on divise successivement par 2 jusqu' un rsultat de 0, les restes successifs (de bas en haut) forment le nombre binaire.

De tte, je ferai : 89 = 1x64 reste 25 donc 0x32, 1x16 reste 9, 1x8 reste 1 donc 0x4, 0x2, 1x1.

la base 16 (hexadcimal)
On utilise les chiffres 0 9 puis les lettres A F. 3A5h vaut 3x162 + 10x161 + 5x160 =3x256 + 160 + 5 = 933d . On passe de l'hexa au dcimal par divisions successives par 16. Transformer de l'hexadcimal en binaire est enfantin : il suffit de remplacer chaque chiffre par sa valeur binaire sur quatre bits : 3A5h = 0011 1010 0101b (on peut vrifier que a vaut 933d). En effet, 001110100101b = 0.211 +0.210 +1.29 +1.28 +1.27 +0.26 +1.25 +0.24 +0.23 +1.22 +0.21 +1.20 = (0.23 +0.22 +1.21 +1.20)28 +(1.23 +0.22 +1.21 +0.20)24 +0.23 +1.22 +0.21 +1.20 = 0011bx28 +1010bx24 +0101bx20 = 3dx162+10dx16+5d =3A5h Contrairement ce que beaucoup de gens croient, aucune machine ne compte en hexadcimal. Elles travaillent toutes en binaire, et ne se servent de l'hexa que pour dialoguer avec nous (nous nous trompons trop souvent dans de longues listes de 0 et 1).

le Dcimal Cod en Binaire (DCB ou BCD en anglais)


Si vous achetez un voltmtre numrique (10 en supermarch), la valeur mesure est transmise l'afficheur en numrique. Mais elle est auparavant transforme en dcimal, chaque chiffre dcimal est transmis un afficheur en binaire naturel (sur 4 bits). C'est le BCD : la juxtaposition des valeurs binaires (sur quatre bits) des chiffres dcimaux. Donc 583d se notera 0101 1000 0011bcd. Cette codification pose deux problmes principaux :

un certain nombre de combinaisons ne sont pas utilises (celles qui correspondent A F en hexa). Sur 8 bits on reprsente les nombres de 0 99 au lieu de 0 255 en binaire. Sur 16 bits, on se limite 9999 au lieu de 65535... les calculs sont compliqus : rien que pour faire un programme d'incrmentation (ajouter 1), il faut ajouter 1 aux 4 bits de droite, si on obtient 1010 (10d), on les remplace par 0000 et on ajoute 1 aux quatre bits suivants (dizaines), sans oublier de vrifier si l'on ne passe pas la centaine suivante...

Ds qu'il y a des calculs effectuer, les systmes numriques traduisent les nombres BCD en binaire ds leur acquisition, les rsultats seront transforms en BCD au moment de leur sortie. On peut remarquer que pour transformer un nombre binaire en dcimal (bcd), l'ordinateur est oblig de faire des divisions successives par 1010 (10 en binaire)

le binaire rflchi (code GRAY)


On dsire qu'en passant d'un nombre son suivant (+1) ou prcdent (-1), on n'aie qu'un seul bit qui change. On dsire de plus que les zro rajouts gauche d'un nombre ne soient pas significatifs. Sur deux bits, on utilisera les codes 00, 01, 11 puis 10. Sur 3 bits, on gardera les mmes premiers codes (prcds d'un zro). La combinaison suivante dbutera donc obligatoirement par 1, donc les deux autres bits ne peuvent pas changer. On continuera prendre les mmes codes, en ordre inverse, dbutant par 1 : 110, 111, 101 et 100. En passant 4 bits, on prcde ces 8 cas d'un 0, les 8 suivants tant les mmes, dans l'ordre inverse, prcds d'un 1. Ce codage est utilis dans les cas o des valeurs ne peuvent varier que par incrmentation ou dcrmentation : si l'on voit que plus d'un bit a chang entre deux valeurs,

c'est qu'il y a eu un problme (en gnral le nombre a chang trop vite, le systme n'a pas eu le temps de lire toutes les valeurs). Il faut par contre passer en binaire naturel pour tout autre calcul que l'incrmentation. Un exemple est le capteur de position angulaire (voir transparent T4). Un capteur incrmental comptant des impulsions est utilis par exemple sur les robots. C'est un disque, entaill d'encoches rgulirement espaces, passant devant un capteur optique. Certaines impulsions trop rapproches peuvent tre "oublies" en cas de choc par exemple, et donc occasionner un mauvais rglage. A l'initialisation et en cas de problme, on doit ramener toutes les articulations en position de repos, puis mettre les compteurs 0, avant de pouvoir utiliser le robot. Un capteur absolu quand lui donne toujours le position exacte (bien qu'il y ait souvent une dmultiplication, le mouvement total fait plus d'un tour mais aucun choc ne fera sauter le capteur d'exactement un tour). On utilise un code binaire rflchi car un autre codage ncessiterait, pour passer d'une valeur la suivante, une modification simultane de plusieurs bits (voir explication sur T4)

Applications
l'afficheur 7 segments

Le segment a s'allume si s0=0, s'teint sinon (idem pour les autres segments). On cherche le schma interne du composant X qui permet d'afficher le chiffre correspondant au nombre binaire disponible en entre (e0 bit de poids faible) On peut en premier lieu faire une table de vrit, donnant l'tat des 7 sorties si pour les 16 combinaisons possibles des 4 entres ei. Puis on peut rechercher l'quation de chaque sortie en fonction des entres (Karnaugh par exemple), puis on peut rechercher si certains termes apparaissent dans plusieurs quations afin de ne pas cbler plusieurs fois la mme fonction (je dis "on peut", moi je peux, mais toi/vous ?). En utilisant plusieurs afficheurs, on affichera un nombre binaire en hexa ou un nombre BCD en dcimal, pour des nombres de bits suprieurs 4

l'additionneur binaire
tudier le circuit : (transparent T3)
s= r NOR 2 _ _ ; 2= a NOR b = a.b ; r= 3 NOR 4 ; _ 3= b NOR b = b ; _ 4= a

a b r s 00 00 01 01 10 01 11 10
donc r = ba ; _ _ s= ba + ab

c'est donc un additionneur binaire. (s=somme r=retenue, 0+0=0, 1+0=1, 1+1=0 et je retiens 1). Exercice : faire le mme composant uniquement avec des NAND. A l'aide de ce composant, on peut maintenant faire un additionneur sur plusieurs bits (en gnral au moins 8, analysons ici uniquement le cas de 3 bits). a2 a1 a0 + b2 b1 b0 -> r0, r1, r2 sont les retenues intermdiaires r3 s2 s1 s0 s0=a0+b0 (retenue ventuelle s0). s1=s0+a1+b1 (retenue ventuelle s1, qui ne peut valoir que 0 ou 1, donc la retenue ne peut provenir exclusivement que d'une seule des deux additions). On rpte ensuite le mme principe, pour tous les bits dsirs

dcodeur binaire -> code Gray (T4)


Trouver le schma d'un composant admettant en entre un nombre binaire naturel, donnant en sortie son quivalent en code binaire rflchi. On se limitera aux nombres de 3 bits. On peut trouver g1 et g0 par tableau de Karnaugh:

dcodeur 3/8, encodeur, multiplexeur, dmultiplexeur (T6)


Le dcodeur 3 dans 8 comporte 3 entres e0 e2, 8 sorties s0 s7. Il allume une et une seule sortie la fois, celle correspondant la valeur binaire donne en entre (dons entre 0 et 7, ce qui fait entre 000 et 111 en binaire). A l'inverse, un encodeur 8 dans 3 pose quelques

problmes : quelle sortie donner si plusieurs entres sont allumes ? On prvoit en gnral soit une priorit, soit une sortie supplmentaire signalant l'erreur. Le multiplexeur (voir transparent T6) comporte 2n (ici 8) entres d'information

n (ici 3) entres de slection (entre d'un nombre I en binaire) 1 sortie (recopie de l'entre d'information (numro I) sur la sortie)

Le dmultiplexeur comporte 2n (ici 8) sorties


n (ici 3) entres de slection (entre d'un nombre I en binaire) 1 entre d'information (recopie de l'entre d'information sur la sortie numro I)

(j'ai reprsent toutes les entres gauche, les sorties droite)