« I2L 2024 Groupe2 » : différence entre les versions
(→Carte) |
(→Code) |
||
(29 versions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
= Proposition de système = | = Proposition de système = | ||
Proposition d'une calculatrice autonome (avec batterie) et écran LCD avec 10 boutons (0 à 9) et 5 boutons pour les opérations (+, -, *, / et =). Une LED verte pour indiquer que la calculatrice est en marche, et une seconde LED rouge qui est allumée quand la batterie est faible. On pourrait également envisager un beeper quand un calcul est erroné, exemple division par zéro. | |||
= Contre-proposition = | = Contre-proposition = | ||
Bonne proposition. Il est demandé d'ajouter une fonctionnalité USB série pour permettre de taper l'expression via un terminal série et d'afficher le résultat sur le terminal série. Cette fonctionnalité n'est évidemment possible que lorsque le système embarqué est connecté à un PC. | |||
Dans un second temps il est demandé de gérer les priorités et les parenthèses de l'expression tapée dans le terminal série. | |||
Pour la gestion série au niveau du système embarqué vous pouvez vous inspirer du code du groupe 5 I2L en 2023/2024. | |||
Pour la gestion de l'écran vous pouvez vous inspirer du code des groupes 3 et 4 I2L en 2023/2024. | |||
= Proposition définitive = | = Proposition définitive = | ||
Ligne 9 : | Ligne 18 : | ||
= Carte = | = Carte = | ||
== Schéma initial == | |||
* schéma | [[Fichier:Calculatrice.svg|thumb|Schématique de la calculatrice]] | ||
* | * schéma : [[File:I2L-2024-Carte-G2a.zip]] | ||
== Carte routée == | |||
[[Fichier:I2L-2024-Schema-G2-v0.pdf|thumb|left|Schéma de la carte]] | |||
[[Fichier:I2L-2024-PCB-G2-v0.png|thumb|right|vue de la carte]] | |||
<p style="clear: both; /> | |||
== Composants == | |||
* [[File:ISL-2024-G2-Realisation-A.jpg|thumb|355x355px|Première réalisation]]ATmega32u4 : disponible | |||
* quartz GND24 : disponible | |||
* buzzer : disponible | |||
* perle ferrite MH2029-300Y : commandée | |||
* chargeur MAX1811 : disponible | |||
* potentiomètre : disponible | |||
* connecteur femelle 16 contacts : commandé | |||
* écran LCD 2 lignes : commandé | |||
* boutons : disponibles | |||
=== Carte au 23/02/2025 === | |||
[[Fichier:ISL-2024-G2-Realisation-B.jpg|vignette|200x200px|Seconde réalisation]]Non encore réalisé : | |||
* ajouter la perle de ferrite ; | |||
* ajouter les connecteurs J5, J6, J7 et J9 pour la charge ; | |||
* ajouter le condensateur de 2,2uF pour la charge ; | |||
* ajouter R8 et le potentiomètre pour l'écran LCD ; | |||
* ajouter le buzzer ; | |||
* ajouter les 13 touches restantes. | |||
=== Carte au 27/02/2025 === | |||
Non encore réalisé : | |||
* ajouter la perle de ferrite ;[[Fichier:ISL-2024-G2-Defaut VBAT.jpg.png|vignette]] | |||
=== Carte au 31/03/2025 === | |||
On a constaté un défaut dans le schéma pour la gestion de la batterie, le pont qui doit être branché pour faire fonctionner la carte avec la batterie est reliée à ALIM au lieu de VBAT qui est la sortie de la batterie (voir [[:Fichier:ISL-2024-G2-Defaut VBAT.jpg.png]]). | |||
Mais également, j'ai (Nicola) cassé le connecteur de la batterie en tentant de la débrancher pour ranger la calculatrice à la toute fin de la dernière séance de TP... :( | |||
= Code = | = Code = | ||
Le code est divisé en plusieurs fichiers, les fichiers "operation" gère les calculs en appliquant l'algorithme [[wikipedia:Shunting_yard_algorithm|Shunting Yard]] qui permet notamment de gérer la complexité des ordres de priorités avec des cas complexes comme les parenthèses. | |||
Ensuite maintenant qu'on a la possibilité d'effectuer des calculs on doit pouvoir gérer ces calculs ainsi que leur affichage, c'est le rôle du fichier "calculator", qui gère en plus de l'affichage, les erreurs comme la division par zéro ainsi que le buzzer. | |||
Enfin, pour orchestrer l'ensemble notre fonction main se trouve dans le fichier "VirtualSerial", qui gère les initialisations matérielles, du USB série, et de la lecture des boutons cliqués. | |||
Il manque un dernier élément qui n'a pas de raison visible d'apparaître dans le code, c'est la possibilité de faire la combinaison de touche "D" et "=" qui actuellement dans le code alterne l'état d'une des LED disponible, ce code avait vocation à être utilisé pour alterner l'état de la charge de la batterie. En effectuant, cette combinaison de touche l'utilisateur pouvait donc dans l'idée choisir ou non de charger la batterie, or au vu des problèmes cités ci-dessus liés à la batterie, le code est resté tel qu'on puisse tout de même avoir un retour visuel. Sachant qu'il s'agissait de la dernière fonctionnalité ajouté à la fin du dernier cours, on n'a pas pu tester avec la batterie. Mais il suffisait alors de changer la ligne (205) :<syntaxhighlight lang="c"> | |||
if (check_key_combinations()) PORTE ^= (1 << LED1); | |||
</syntaxhighlight>par<syntaxhighlight lang="c"> | |||
if (check_key_combinations()) PORTB ^= (1 << 0); | |||
</syntaxhighlight>ce qui alterne l'état de CHARGEN (activé/désactivé). | |||
= Démonstrations = | = Démonstrations = | ||
[[Fichier:ISL-2024-G2-Demonstration 1.mp4|vignette|Vidéo démonstration de quelques fonctionnalités basiques de la calculatrice.]]Pour ce qui est des fonctionnalités "physiques" : | |||
* Ecrire des chiffres de 0 à 9 | |||
* Utiliser les opérations basiques, à savoir : + - * / | |||
* Supprimer le dernier caractère autant de fois que nécessaire | |||
* Gestion d'erreur avec buzzer quand une erreur est remontée | |||
* Gestion de la charge de la batterie | |||
[[Fichier:ISL-2024-G2-Demonstration 2.mp4|vignette|Démonstration vidéo de l'utilisation USB série.]] | |||
Pour les fonctionnalités USB (en plus des 4 premiers points des fonctionnalités "physiques" : | |||
* Gestion des priorités avec les parenthèses | |||
* Gestion de quelques commandes supplémentaires dont "help" et "clear" | |||
D'après nos propositions (et contre-propositions) de départ l'ensemble est opérationnel, excepté la batterie qui a tout de même pu être chargé durant le dernier cours. | |||
= Rendus = | = Rendus = | ||
Ligne 24 : | Ligne 94 : | ||
Programmes : [[File:I2L-2024-Programmes-G2.zip]] | Programmes : [[File:I2L-2024-Programmes-G2.zip]] | ||
Gitlab : [https://gitlab.com/Elxilon/calculatrice-embarque] |
Version actuelle datée du 26 avril 2025 à 14:03
Proposition de système
Proposition d'une calculatrice autonome (avec batterie) et écran LCD avec 10 boutons (0 à 9) et 5 boutons pour les opérations (+, -, *, / et =). Une LED verte pour indiquer que la calculatrice est en marche, et une seconde LED rouge qui est allumée quand la batterie est faible. On pourrait également envisager un beeper quand un calcul est erroné, exemple division par zéro.
Contre-proposition
Bonne proposition. Il est demandé d'ajouter une fonctionnalité USB série pour permettre de taper l'expression via un terminal série et d'afficher le résultat sur le terminal série. Cette fonctionnalité n'est évidemment possible que lorsque le système embarqué est connecté à un PC.
Dans un second temps il est demandé de gérer les priorités et les parenthèses de l'expression tapée dans le terminal série.
Pour la gestion série au niveau du système embarqué vous pouvez vous inspirer du code du groupe 5 I2L en 2023/2024.
Pour la gestion de l'écran vous pouvez vous inspirer du code des groupes 3 et 4 I2L en 2023/2024.
Proposition définitive
Répartition du travail
Carte
Schéma initial
- schéma : Fichier:I2L-2024-Carte-G2a.zip
Carte routée
Composants
- ATmega32u4 : disponible
- quartz GND24 : disponible
- buzzer : disponible
- perle ferrite MH2029-300Y : commandée
- chargeur MAX1811 : disponible
- potentiomètre : disponible
- connecteur femelle 16 contacts : commandé
- écran LCD 2 lignes : commandé
- boutons : disponibles
Carte au 23/02/2025
Non encore réalisé :
- ajouter la perle de ferrite ;
- ajouter les connecteurs J5, J6, J7 et J9 pour la charge ;
- ajouter le condensateur de 2,2uF pour la charge ;
- ajouter R8 et le potentiomètre pour l'écran LCD ;
- ajouter le buzzer ;
- ajouter les 13 touches restantes.
Carte au 27/02/2025
Non encore réalisé :
- ajouter la perle de ferrite ;
Carte au 31/03/2025
On a constaté un défaut dans le schéma pour la gestion de la batterie, le pont qui doit être branché pour faire fonctionner la carte avec la batterie est reliée à ALIM au lieu de VBAT qui est la sortie de la batterie (voir Fichier:ISL-2024-G2-Defaut VBAT.jpg.png).
Mais également, j'ai (Nicola) cassé le connecteur de la batterie en tentant de la débrancher pour ranger la calculatrice à la toute fin de la dernière séance de TP... :(
Code
Le code est divisé en plusieurs fichiers, les fichiers "operation" gère les calculs en appliquant l'algorithme Shunting Yard qui permet notamment de gérer la complexité des ordres de priorités avec des cas complexes comme les parenthèses.
Ensuite maintenant qu'on a la possibilité d'effectuer des calculs on doit pouvoir gérer ces calculs ainsi que leur affichage, c'est le rôle du fichier "calculator", qui gère en plus de l'affichage, les erreurs comme la division par zéro ainsi que le buzzer.
Enfin, pour orchestrer l'ensemble notre fonction main se trouve dans le fichier "VirtualSerial", qui gère les initialisations matérielles, du USB série, et de la lecture des boutons cliqués.
Il manque un dernier élément qui n'a pas de raison visible d'apparaître dans le code, c'est la possibilité de faire la combinaison de touche "D" et "=" qui actuellement dans le code alterne l'état d'une des LED disponible, ce code avait vocation à être utilisé pour alterner l'état de la charge de la batterie. En effectuant, cette combinaison de touche l'utilisateur pouvait donc dans l'idée choisir ou non de charger la batterie, or au vu des problèmes cités ci-dessus liés à la batterie, le code est resté tel qu'on puisse tout de même avoir un retour visuel. Sachant qu'il s'agissait de la dernière fonctionnalité ajouté à la fin du dernier cours, on n'a pas pu tester avec la batterie. Mais il suffisait alors de changer la ligne (205) :
if (check_key_combinations()) PORTE ^= (1 << LED1);
par
if (check_key_combinations()) PORTB ^= (1 << 0);
ce qui alterne l'état de CHARGEN (activé/désactivé).
Démonstrations
Pour ce qui est des fonctionnalités "physiques" :
- Ecrire des chiffres de 0 à 9
- Utiliser les opérations basiques, à savoir : + - * /
- Supprimer le dernier caractère autant de fois que nécessaire
- Gestion d'erreur avec buzzer quand une erreur est remontée
- Gestion de la charge de la batterie
Pour les fonctionnalités USB (en plus des 4 premiers points des fonctionnalités "physiques" :
- Gestion des priorités avec les parenthèses
- Gestion de quelques commandes supplémentaires dont "help" et "clear"
D'après nos propositions (et contre-propositions) de départ l'ensemble est opérationnel, excepté la batterie qui a tout de même pu être chargé durant le dernier cours.
Rendus
Projet KiCAD : Fichier:I2L-2024-Carte-G2.zip
Programmes : Fichier:I2L-2024-Programmes-G2.zip
Gitlab : [1]