IMA3/IMA4 2021/2023 P2 : Différence entre versions

De Wiki de Projets IMA
(Résumé)
 
(38 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>=
 
=<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. 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...). Puis, à 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)
+
 
 +
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)
  
 
=<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>=
 
=<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>=
  
==Contexte==
+
[[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.
  
==Objectif==
 
  
L'objectif va être de développer une bibliothèque permettant de définir une architecture logiciel dans le main de type :
+
== ''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++.
  
  
'''LogicalButton bt = new LogicalButton("bouton1", 100, 100);  //création d’un bouton
+
Par ailleurs, vous n'êtes pas obligé de mettre des parenthèses à <code>... = new Object</code>.
  
'''LogicalToggle tg = new LogicalToggle("toggle1", -100, 100);  //création d’un toggle
 
  
'''LogicalLED led1 = new LogicalLED("LED1", 0, 200, led);        //creation d'une LED1
+
1.2. Réaliser les liaisons entre les composants logiques
  
'''LogicalLED led2 = new LogicalLED("LED2", -100, 200, led);  //creation d’une LED2
+
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>.
  
'''led1.AddSource(bt);                            //ajout d’un bouton comme source sur la LED1
+
Il y'a deux façons de lier les composants entre eux :
  
'''led2.AddSource(tg);                            //ajout d’un toggle comme source sur la LED2
+
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>
  
Pour cela, dans la bibliothèque informatique il y aura un ensemble de composants logiques comportant des entrées/sorties.
 
La bibliothèque va permettre la simulation du comportement des composants utilisés et afficher une interface avec les différentes entrées sorties pour l'utilisateur.
 
  
==Description==
+
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
  
'''1. Créer un circuit logique:
+
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.
  
1.1. Initialiser les entrées et 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.
  
Les entrées seront capables de s'adapter aux besoins de l’utilisateur, afin que celui-ci soit capable d’observer les changements d’état des sorties.
+
'''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.
  
1.2. Réaliser les liaisons entre les composants logiques
+
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. Simuler le circuit logique:
+
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.1. Charger un circuit logique
 
  
 +
2.2. Lancer la simulation
  
Sélectionner une configuration de circuit logique prédéfinie
 
  
 +
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.2. Lancer la simulation
+
2.3. Résultat
  
 +
[[Fichier:RésultatCircuit.png]]
  
Rendre l'exécution du circuit logique dynamique
+
'''3. Téléversement vers un émulateur ou un µ-Processeur Arduino:
  
 +
'''A venir'''
  
'''3. Téléversement vers un émulateur ou un µ-Processeur Arduino:
+
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>=
  
3.1. Lien entre la bibliothèque et le logiciel Arduino ou l’émulateur de circuit logique.
+
Ordinateur de bureau
  
='''Réalisations et résultats'''=
+
=<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>=
  
='''Bilan'''=
+
=<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>=
  
='''Gestion de projet'''=
+
=<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#gid=1115838130 Diagramme de Gantt]
+
[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

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

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.

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:

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 : Object *nomComposant = new Object()

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)

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

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.

É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