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

De Wiki de Projets IMA
(Contexte)
 
(14 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 11 : Ligne 11 :
 
=<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>=
  
 +
[[Fichier:Exemple_d'un_circuit_électronique_à_une_seule_sortie.jpeg]]
 +
 +
 +
== ''Contexte'' ==
  
==Contexte==
 
  
 
Dans le monde des Systèmes Embarqués, les portes logiques sont la base de l'électronique numérique.  
 
Dans le monde des Systèmes Embarqués, les portes logiques sont la base de l'électronique numérique.  
Ligne 19 : Ligne 22 :
 
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.
 
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'' ==
[[Image:Exemple_d'un_circuit_électronique_à_une_seule_sortie]]
 
 
 
==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 30 : 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==
+
 
 +
== ''Description'' ==
  
  
 
  '''1. Créer un circuit logique:
 
  '''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 et sorties:
+
  1.1. Initialiser les entrées, sorties et les composants:
  
  
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.
+
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
 
  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:
 
  '''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
 
  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.
  
Sélectionner une configuration de circuit logique prédéfinie
 
  
 +
2.2. Lancer la simulation
  
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.
  
Rendre l'exécution du circuit logique dynamique
+
2.3. Résultat
  
 +
[[Fichier:RésultatCircuit.png]]
  
 
  '''3. Téléversement vers un émulateur ou un µ-Processeur Arduino:  
 
  '''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.
 
  3.1. Lien entre la bibliothèque et le logiciel Arduino ou l’émulateur de circuit logique.
Ligne 75 : Ligne 116 :
 
=<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>=
 
=<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?usp=sharing 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