IMA3/IMA4 2021/2023 P2 : Différence entre versions
(→Description) |
|||
(45 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
− | = | + | =<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #2eb2fe; vertical-align: top; width: 98%;"> Résumé </div>= |
− | |||
− | + | Le projet consiste à réaliser une bibliothèque logicielle pour la simulation d'un circuit logique. Il est destiné à la conception d'un outil d'émulation de circuit logique combiné à un microcontrôleur. | |
− | ==Contexte== | + | D'un point de vue utilisation, cette bibliothèque vise à décrire dans un code C, un assemblage de composants logiques interconnectés (ports, bascule, registre...) comportant des entrées/sorties (bouton, LED, afficheur...). |
+ | |||
+ | Ensuite, à l'exécution, le programme simule le comportement de ces composants et affiche une interface avec les différentes entrées/sorties pour l'utilisateur. | ||
+ | |||
+ | En fin de projet, cette bibliothèque vise à être couplée avec un émulateur existant d'un microprocesseur de type Arduino (ou Avr8) | ||
+ | |||
+ | =<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #2eb2fe; vertical-align: top; width: 98%;"> Présentation Générale</div>= | ||
+ | |||
+ | [[Fichier:Exemple_d'un_circuit_électronique_à_une_seule_sortie.jpeg]] | ||
+ | |||
+ | |||
+ | == ''Contexte'' == | ||
+ | |||
+ | |||
+ | Dans le monde des Systèmes Embarqués, les portes logiques sont la base de l'électronique numérique. | ||
+ | |||
+ | Les applications de ces portes logiques sont infinies. Avec ces « briques » essentielles, on peut construire une multitude de circuits numériques allant d'un simple additionneur, à un processeur complexe | ||
+ | En fait, de nombreux systèmes qu'on utilise quotidiennement, tels que le PC, téléviseur, téléphone portable, etc., ont des milliards de portes logiques. | ||
+ | |||
+ | == ''Objectif'' == | ||
Le but consiste en la conception d'un outil d'émulation de circuit logique combiné à un microcontrôleur. En effet, le projet est de développer une bibliothèque en langage informatique (Python) comportant des composants logiques contenant des entrées/sorties. | Le but consiste en la conception d'un outil d'émulation de circuit logique combiné à un microcontrôleur. En effet, le projet est de développer une bibliothèque en langage informatique (Python) comportant des composants logiques contenant des entrées/sorties. | ||
Ligne 12 : | Ligne 30 : | ||
Il est destiné à la conception d'un outil d'émulation de circuit logique combiné à un microcontrôleur. | Il est destiné à la conception d'un outil d'émulation de circuit logique combiné à un microcontrôleur. | ||
− | |||
− | + | == ''Description'' == | |
+ | |||
+ | |||
+ | '''1. Créer un circuit logique: | ||
+ | [[Fichier:CompoCircuitWiki.png]] | ||
+ | |||
+ | Exemple basique de la composition d'un circuit logique via la librairie Simutech associé à la librairie graphique Gtkmm. | ||
+ | |||
+ | 1.1. Initialiser les entrées, sorties et les composants: | ||
+ | |||
+ | |||
+ | Afin d'initialiser les entrées et sorties du circuit logique, nous avons besoins de le créer et de récupérer son pointeur comme indiqué sur l'exemple ci-dessus. | ||
+ | |||
+ | Ainsi, la syntaxe à utiliser est la suivante : <code>Object *nomComposant = new Object()</code> | ||
+ | |||
+ | où <code>Object</code> est le nom du composant à créer (par exemple Button, And ou Led), <code>nomComposant</code> est le nom que l'on souhaite attribuer à notre composant. | ||
+ | |||
+ | '''Attention !''' C'est un pointeur d'objet qu'il nous faut, donc ne pas oublier '''l'astérisque (*)''' après la déclaration d'<code>Object</code>. | ||
+ | |||
+ | Et enfin on peut assigner la création de l'objet avec la fonctionnalité <code>new</code> du langage C++. | ||
+ | |||
+ | |||
+ | Par ailleurs, vous n'êtes pas obligé de mettre des parenthèses à <code>... = new Object</code>. | ||
+ | |||
+ | 1.2. Réaliser les liaisons entre les composants logiques | ||
− | ' | + | Afin de lier les composants que l'on vient de créer, nous entrons dans la deuxième partie en dessous du commentaire <code>//Affectation of the sources</code>. |
− | ' | + | Il y'a deux façons de lier les composants entre eux : |
− | ' | + | Soit comme dans l'exemple ci-dessus, qui suit la syntaxe suivante : <code>nomComposant->add_sources(nomAutreComposant)</code> |
− | ' | + | Ou l'on peut suivre une autre syntaxe : <code>(*nomComposant).add_sources(nomAutreComposant)</code> |
− | |||
− | ' | + | Par ailleurs, la fonction <code>add_sources</code> est une fonction surchargée, donc on peut ajouter plusieurs composant en même temps plutôt que de répéter x fois l'étape add_sources. Cependant la librairie de dispose que de 4 surcharges de cette fonction, on ne peut seulement ajouter 4 sources en même temps au maximum. La syntaxe est la suivante : <code>add_sources(nomComposant1, nomComposant2, ..., nomComposant4)</code>. |
+ | 1.3. Lier les entrées et sorties à la fenêtre | ||
− | + | Si lors la conception de votre circuit logique vous avez créer des entrées ainsi que des sorties telles que des boutons et des leds, il faut les lier à la fenêtre graphique maintenue par la librarie '''Gtkmm'''. | |
+ | Pour ce faire, on utilise la fonction <code>add_input</code> spécifique aux composants d'entrées et de sorties. | ||
+ | La syntaxe pour utiliser cette fonction est la suivante : <code>nomComposant->add_input(mainGrid, posX, posY)</code> | ||
− | + | où '''posX''' et '''posY''' sont les positions de ces composants sur la fenêtre. | |
+ | '''2. Simuler le circuit logique: | ||
− | ''' | + | Notre librairie fonctionne, pour le moment, sur '''code::Blocks''' afin de nous faciliter la compilation des fichiers nécessaires pour la création d'un exécutable qui représente actuellement notre circuit logique. |
+ | Il est nécessaire d'ajouter ces deux lignes d'options lors de la compilation si l'on veut pouvoir compiler le programme avec la librairie '''Gtkmm''' : <code>`pkg-config gtkmm-3.0 --libs` `pkg-config gtk+-3.0 --libs`</code> | ||
− | |||
− | + | 2.1. Charger un circuit logique | |
− | + | Afin de charger un circuit logique, pour le moment, il suffit de récupérer le constructeur '''Fenetre''' (la méthode nommée <code>Fenetre::Fenetre()</code>) d'un fichier fenetre.cpp et de le mettre à la place du constructeur '''Fenetre''' de notre programme. | |
− | + | 2.2. Lancer la simulation | |
− | + | Il nous suffit qu'à build (sur code::Blocks) notre exécutable et de le lancer pour voir apparaître notre fenêtre et un terminal de débogage si l'on a crée une application console plutôt qu'une application GUI sur code::Blocks. | |
− | + | 2.3. Résultat | |
− | + | [[Fichier:RésultatCircuit.png]] | |
− | + | '''3. Téléversement vers un émulateur ou un µ-Processeur Arduino: | |
+ | '''A venir''' | ||
− | + | 3.1. Lien entre la bibliothèque et le logiciel Arduino ou l’émulateur de circuit logique. | |
+ | =<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #2eb2fe; vertical-align: top; width: 98%;"> Équipements </div>= | ||
− | + | Ordinateur de bureau | |
− | = | + | =<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #2eb2fe; vertical-align: top; width: 98%;"> Réalisations et résultats </div>= |
− | = | + | =<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #2eb2fe; vertical-align: top; width: 98%;"> Bilan </div>= |
− | = | + | =<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #2eb2fe; vertical-align: top; width: 98%;"> Gestion de projet </div>= |
− | [https://docs.google.com/spreadsheets/d/1ydkccyK6gsxyToyrZNI2zCU4jU-hJD0H7tyHaqBBWJ0/edit | + | [https://docs.google.com/spreadsheets/d/1ydkccyK6gsxyToyrZNI2zCU4jU-hJD0H7tyHaqBBWJ0/edit?usp=sharing Diagramme de Gantt] |
+ | [https://github.com/BleM3e/Simutech Github - Dépôt du code source de la librairie] | ||
+ | [https://github.com/BleM3e/ConverterLogisimCircuit Github - Dépôt du code source du convertisseur] |
Version actuelle datée du 15 février 2023 à 15:11
Sommaire
Résumé
Le projet consiste à réaliser une bibliothèque logicielle pour la simulation d'un circuit logique. Il est destiné à la conception d'un outil d'émulation de circuit logique combiné à un microcontrôleur.
D'un point de vue utilisation, cette bibliothèque vise à décrire dans un code C, un assemblage de composants logiques interconnectés (ports, bascule, registre...) comportant des entrées/sorties (bouton, LED, afficheur...).
Ensuite, à l'exécution, le programme simule le comportement de ces composants et affiche une interface avec les différentes entrées/sorties pour l'utilisateur.
En fin de projet, cette bibliothèque vise à être couplée avec un émulateur existant d'un microprocesseur de type Arduino (ou Avr8)
Présentation Générale
Contexte
Dans le monde des Systèmes Embarqués, les portes logiques sont la base de l'électronique numérique.
Les applications de ces portes logiques sont infinies. Avec ces « briques » essentielles, on peut construire une multitude de circuits numériques allant d'un simple additionneur, à un processeur complexe En fait, de nombreux systèmes qu'on utilise quotidiennement, tels que le PC, téléviseur, téléphone portable, etc., ont des milliards de portes logiques.
Objectif
Le but consiste en la conception d'un outil d'émulation de circuit logique combiné à un microcontrôleur. En effet, le projet est de développer une bibliothèque en langage informatique (Python) comportant des composants logiques contenant des entrées/sorties.
Pour être plus précis, projet consiste à réaliser une bibliothèque logicielle pour la simulation d'un circuit logique.
Il est destiné à la conception d'un outil d'émulation de circuit logique combiné à un microcontrôleur.
Description
1. Créer un circuit logique:
Exemple basique de la composition d'un circuit logique via la librairie Simutech associé à la librairie graphique Gtkmm.
1.1. Initialiser les entrées, sorties et les composants:
Afin d'initialiser les entrées et sorties du circuit logique, nous avons besoins de le créer et de récupérer son pointeur comme indiqué sur l'exemple ci-dessus.
Ainsi, la syntaxe à utiliser est la suivante : Object *nomComposant = new Object()
où Object
est le nom du composant à créer (par exemple Button, And ou Led), nomComposant
est le nom que l'on souhaite attribuer à notre composant.
Attention ! C'est un pointeur d'objet qu'il nous faut, donc ne pas oublier l'astérisque (*) après la déclaration d'Object
.
Et enfin on peut assigner la création de l'objet avec la fonctionnalité new
du langage C++.
Par ailleurs, vous n'êtes pas obligé de mettre des parenthèses à ... = new Object
.
1.2. Réaliser les liaisons entre les composants logiques
Afin de lier les composants que l'on vient de créer, nous entrons dans la deuxième partie en dessous du commentaire //Affectation of the sources
.
Il y'a deux façons de lier les composants entre eux :
Soit comme dans l'exemple ci-dessus, qui suit la syntaxe suivante : nomComposant->add_sources(nomAutreComposant)
Ou l'on peut suivre une autre syntaxe : (*nomComposant).add_sources(nomAutreComposant)
Par ailleurs, la fonction add_sources
est une fonction surchargée, donc on peut ajouter plusieurs composant en même temps plutôt que de répéter x fois l'étape add_sources. Cependant la librairie de dispose que de 4 surcharges de cette fonction, on ne peut seulement ajouter 4 sources en même temps au maximum. La syntaxe est la suivante : add_sources(nomComposant1, nomComposant2, ..., nomComposant4)
.
1.3. Lier les entrées et sorties à la fenêtre
Si lors la conception de votre circuit logique vous avez créer des entrées ainsi que des sorties telles que des boutons et des leds, il faut les lier à la fenêtre graphique maintenue par la librarie Gtkmm.
Pour ce faire, on utilise la fonction add_input
spécifique aux composants d'entrées et de sorties.
La syntaxe pour utiliser cette fonction est la suivante : nomComposant->add_input(mainGrid, posX, posY)
où posX et posY sont les positions de ces composants sur la fenêtre.
2. Simuler le circuit logique:
Notre librairie fonctionne, pour le moment, sur code::Blocks afin de nous faciliter la compilation des fichiers nécessaires pour la création d'un exécutable qui représente actuellement notre circuit logique.
Il est nécessaire d'ajouter ces deux lignes d'options lors de la compilation si l'on veut pouvoir compiler le programme avec la librairie Gtkmm : `pkg-config gtkmm-3.0 --libs` `pkg-config gtk+-3.0 --libs`
2.1. Charger un circuit logique
Afin de charger un circuit logique, pour le moment, il suffit de récupérer le constructeur Fenetre (la méthode nommée Fenetre::Fenetre()
) d'un fichier fenetre.cpp et de le mettre à la place du constructeur Fenetre de notre programme.
2.2. Lancer la simulation
Il nous suffit qu'à build (sur code::Blocks) notre exécutable et de le lancer pour voir apparaître notre fenêtre et un terminal de débogage si l'on a crée une application console plutôt qu'une application GUI sur code::Blocks.
2.3. Résultat
3. Téléversement vers un émulateur ou un µ-Processeur Arduino:
A venir
3.1. Lien entre la bibliothèque et le logiciel Arduino ou l’émulateur de circuit logique.
Équipements
Ordinateur de bureau
Réalisations et résultats
Bilan
Gestion de projet
Diagramme de Gantt Github - Dépôt du code source de la librairie Github - Dépôt du code source du convertisseur