Bonjour. Je vais vous présenter aujourd'hui un logiciel de simulation logique, c'est un logiciel très simple, c'est un logiciel qui s'appelle Logisim, qui est un logiciel libre, qui est écrit en Java, qui est facile à installer sur les plateformes couramment utilisées, Windows, Linux, et cetera. Vous allez voir qu'il est simple à utiliser, et qu'il permet de réaliser par exemple un montage comme celui-ci, pour ceux qui ont suivi le MOOC Comprendre les microcontrôleurs, vous reconnaissez le schéma, qui a été utilisé pour piloter la perceuse semi-automatique que nous allons ensuite programmer avec un microcontrôleur, c'est beaucoup plus facile Mais les schémas logiques sont intéressants, c'est utile de comprendre un petit peu la logique et quelle est la meilleure manière de comprendre que d'expérimenter par soi-même? Ce logiciel se présente comme beaucoup de logiciels de dessin, avec une zone de travail ici, et des objets qu'on va pouvoir déposer Choisissons tout d'abord ce curseur, cette forme de souris, nous allons choisir ici les portes logiques, Gates, et on va déposer une porte OU au milieu de notre montage Parmi les autres objets que l'on peut avoir, il y a ici des objets Input/Output, donc des objets d'entrée et sortie, dans lequel on va pouvoir choisir un bouton, qu'on va placer ici. On va directement en placer un second pour la seconde entrée. Et ici un indicateur à diode lumineuse. Il nous reste maintenant évidemment à connecter ces éléments, c'est extrêmement simple, il suffit d'approcher la souris, et la souris permet de déposer des fils. Je complète ici ce premier montage très simple qui me permettra de tester une porte OU. Je suis immédiatement en mode de simulation, je n'ai rien à faire, je vais ici utiliser le doigt pour travailler sur mes boutons par exemple. Si j'allume ici, je presse sur le bouton, j'ai une valeur un qui apparaît en vert clair sur le fil, et on voit que la sortie a aussi été activée à un, ça marchera aussi quand je presse sur ce bouton, on reconnaît ici la fonction OU dont je vais vous donner la table de vérité. Essayons de dessiner un autre montage. Je vais reprendre cette forme de souris, je vais supprimer cette porte, je vais revenir au choix des portes et déposer une porte NAND, là ça va être plus difficile de la faire fonctionner, vu que je suis incapable de presser sur les deux boutons en même temps avec ma souris. C'est la raison pour laquelle je vais plutôt utiliser une autre forme d'interrupteur, je vais choisir de nouveau Input/Output, prendre ce, cet ensemble d'interrupteurs, et câbler tout naturellement les deux entrées de ma porte ET. Et là, je vais pouvoir vérifier le fonctionnement et la table de vérité, si je mets les deux entrées à un, j'obtiens un un, dans tous les autres cas, ma sortie reste à zéro. Les portes logiques sont les éléments de base des systèmes logiques, il est facile de réaliser avec elles toutes sortes de systèmes combinatoires, je rappelle qu'un système combinatoire a la particularité que les sorties sont connues, dès le moment qu'on connaît l'état de chacune des entrées. Essayons par exemple de réaliser la fonction Logique ou Exclusif. Je vais à nouveau déposer des interrupteurs pour pouvoir agir sur mes entrées, on se souvient de la table de vérité du OU exclusif. Je vais donc réaliser ici un montage qui va comporter une porte OU précédée par deux portes ET, avec un câblage nécessitant des valeurs inversées de certains signaux, je vais pouvoir maintenant réaliser mon câblage avec mes fils. La première entrée je la relie ici inversée, mais je la relie aussi directe sur l'autre porte. La deuxième entrée, ira ici et la valeur complémentaire sur la deuxième porte, et finalement je connecte les deux sorties de mes portes ET et j'obtiens une sortie de mon système que je vais afficher à l'aide d'une diode lumineuse. Voilà mon montage, regardons si c'est bien la table de vérité d'une porte OU exclusif. Lorsque mes deux entrées sont à zéro, la sortie est à zéro. Lorsque une entrée passe à un, la sortie passe à un, de même lorsque la deuxième entrée passe à un, ma sortie passe à un, et lorsque mes deux entrées sont à un alors j'ai l'exclusion, j'ai le zéro à la sortie. Les systèmes combinatoires ne sont pas très intéressants, la plupart des systèmes concrets nécessitent des systèmes séquentiels, c'est-à-dire dont le comportement n'est pas seulement lié à l'état actuel des entrées mais aussi à ce qui s'est passé précédemment. Et vous allez voir que des très simples montages utilisant des portes, qui sont des systèmes combinatoires, permettent déjà de réaliser des systèmes séquentiels, et nous allons ici prendre l'exemple de la bascule Set/Reset. Je repars d'un écran vide, je vais déposer deux portes NOR, bien que le montage soit symétrique, je vais les dessiner de cette manière-là, pour qu'on comprenne bien ce qu'on réalise. Je vais ici utiliser des interrupteurs pour agir sur la première entrée de mon système, pour agir sur la deuxième entrée de mon système, je les relie sur la première porte, sur la deuxième porte. Je relie ces deux portes ensemble, je vais afficher l'état de cette sortie, également l'état de cette sortie. La particularité de ce montage, c'est que je vais connecter cette entrée à la sortie de ma bascule. Voyez qu'ici le système affiche des traits rouges, en fait le système ne sait pas ce qu'il doit afficher, et vous allez bien voir pourquoi. Je vais maintenant agir sur cette entrée, mon système reprend des couleurs normales, et cette sortie est à un. Si j'agis maintenant sur cette entrée, c'est cette sortie qui passe à un. Mais vous remarquez bien que, maintenant, ces deux entrées sont à zéro, et on a une sortie zéro, un. Maintenant ces deux entrées sont toujours à zéro, et pourtant on a l'inverse qui s'est produit sur les sorties. On a donc bel et bien ici un mécanisme de mémorisation, on a réalisé une bascule avec une entrée Set qui permet de la mettre à un, une entrée Reset qui permet de la mettre à zéro, et lorsqu'on n'agit ni sur le Set, ni sur le Reset, alors la bascule conserve la valeur qu'elle avait. On est en présence d'un élément de mémorisation, c'est la base des systèmes séquentiels. Les bascules se trouvent dans la famille Memory, ce qui est normal puisqu'elles sont là pour mémoriser des valeurs. Déposons une bascule D, vous remarquez, sans l'entrée horloge, l'entrée D et les deux sorties, l'une étant le complément de l'autre. Je vais utiliser un bouton pour générer mon signal d'horloge, et je vais prendre un Dip switch pour pouvoir avoir une valeur permanente sur l'entrée D. Je vais bien évidemment afficher la sortie. Si je passe en exécution, je vois que lorsque je presse sur le bouton, ben je ne vois rien, mais il se passe que la valeur de D est mémorisée. Ici si je mets D à un, on voit que la valeur un va être prise par la bascule. Ce qui est intéressant c'est que D peut changer, il ne se passe rien, c'est seulement lorsqu'il y a un flanc montant de l'horloge que la valeur passe dans la sortie. On a donc véritablement une sorte de photographie d'une valeur, la bascule D est l'élément de base pour mémoriser une valeur. Essayons maintenant de brancher une seconde bascule D, en utilisant la même horloge, en reliant la même horloge, en reliant la sortie à l'entrée D de la suivante. Et nous allons voir un effet de décalage des données. Ici, j'affiche la seconde sortie, je vais par exemple faire passer la valeur un dans ma première bascule. Si je mets une valeur zéro, maintenant ce zéro va passer ici, et ce un va se retrouver ici. Et si je donne encore un coup d'horloge, ce un va être perdu et ce zéro va passer dans cette bascule. Je vais maintenant essayer d'envoyer deux valeurs un successivement, elles passent dans la première bascule, elles passent dans la deuxième bascule, je peux continuer, il ne se passe plus rien, puisqu'il y a toujours des un qui sont chargés. Si maintenant je cherche à refaire passer les zéros, voilà le zéro dans la première bascule, voilà le zéro dans la deuxième. On a fait ici un registre à décalage, élément essentiel des systèmes numériques. Essayons maintenant de réaliser un tout autre montage. Supprimons l'entrée de la bascule D, et relions-là cette fois à la sortie complémentaire de la bascule. Nous allons voir un phénomène intéressant. Regardez ce qui se passe, chaque fois que je presse sur le bouton, chaque fois qu'il y a un flanc montant de l'horloge, la sortie change d'état, c'est encore le cas, imaginez que vous avez maintenant une horloge régulière avec une fréquence donnée sur l'entrée, observez la sortie, vous verrez que la fréquence, c'est la moitié. Je vais essayer de réaliser un deuxième montage de ce type-là, je vais relier l'horloge ici à cette sortie, je vais relier de nouveau l'entrée D à la sortie complémentaire de sa bascule, je vais afficher le résultat, et je vais voir maintenant que la fréquence ici, vous pouvez l'observer, sera encore deux fois plus lente que celle-là donc quatre fois plus lente que celle-là. Voyez le phénomène. Je vais m'amuser maintenant à compter en binaire, avec le premier chiffre ici, le deuxième chiffre ici, j'ai zéro, un, dix, 11, zéro, un, dix, 11. Si je traduis maintenant en décimal, j'aurai zéro, dix, 11, un deux, trois, zéro, un, deux, trois. J'ai réalisé ici un compteur binaire, et c'est extrêmement utilisé, par exemple dans les ordinateurs, le compteur ordinal, le Program Counter du processeur, c'est justement un compteur binaire. Je vous propose maintenant pour terminer de reprendre le montage que nous avions tout au début, celui de la commande de la perceuse, et nous allons essayer de voir comment il s'exécute. Vous remarquez que nous avons trois entrées, l'entrée Start, les deux capteurs de fin de course Bas et Haut, nous avons deux sorties qui permettent de faire avancer le moteur dans les deux sens. Généralement, on se trouve dans la situation où l'interrupteur O est activé, c'est-à-dire la perceuse est en haut, et le moteur est arrêté. On peut avoir des coups d'horloge, je vous rappelle que nous avons un système avec une horloge permanente, par exemple à 100 hertz. Il ne se passe rien sur la sortie pour le moment. Par contre, lorsque l'utilisateur presse sur le bouton Start, au premier coup d'horloge, le moteur se met en marche, et la perceuse descend. Je continue mes coups d'horloge, il ne se passe rien de particulier, il ne va rien se passer non plus lorsque on quitte le haut, lié au mouvement. L'utilisateur très probablement ne va pas garder son doigt sur le bouton Start, on continue toujours à descendre, maintenant c'est seulement lorsqu'on arrive en bas que le sens va changer, que la sortie recul va être activée, on va probablement quitter le bas, et on continue à monter, et c'est seulement lorsqu'on va arriver en haut que le système va s'arrêter, et nous avons terminé un cycle. Vous voyez que ce logiciel permet tout simplement de dessiner des schémas et de les simuler, ça va vous permettre de vous familiariser avec les portes logiques, avec les bascules, et peut-être faire des montages plus compliqués. Mais je vous rappelle que, par exemple pour ce montage, ce sera beaucoup plus simple de la réaliser avec un microcontrôleur. En effet, il faudrait un circuit intégré pour ces deux bascules, un circuit intégré pour générer l'horloge, plusieurs circuits intégrés pour les différentes portes logiques, alors qu'avec un microcontrôleur, il est possible de réaliser toute l'application avec un seul circuit intégré, et ce qui est intéressant, c'est qu'on a un dispositif très flexible, puisqu'on peut le reprogrammer à tout moment.