« SE4Binome2025-4 » : différence entre les versions
Aucun résumé des modifications |
|||
| Ligne 17 : | Ligne 17 : | ||
{| class="wikitable mw-collapsible" | {| class="wikitable mw-collapsible" | ||
|+ | |+ | ||
![[Fichier:PicoShield - schema vue3D SE4-2025 G4. | ![[Fichier:PicoShield - schema vue3D SE4-2025 G4.pdf.pdf|alt=PicoShield - schema électrique SE4-2025|centré|vignette|PicoShield - schema vue3D SE4-2025 G4]] | ||
![[Fichier:PicoShield pcb schema routage se4 pico 4 2025.png|vignette|PicoShield - schema routage SE4-2025 G4]] | ![[Fichier:PicoShield pcb schema routage se4 pico 4 2025.png|vignette|PicoShield - schema routage SE4-2025 G4]] | ||
|- | |- | ||
Version actuelle datée du 15 décembre 2025 à 13:59
Carte Son pour un pico ordinateur : lien git SE4-PICO-B4.git
Présentation projet
Dans ce projet, il est question pour nous de réaliser un pico ordinateur composé de différentes cartes fille. Notre groupe avait donc la responsabilité de réaliser la carte son du pico ordinateur
Tout d'abord, nous avons commencés par la realisation d'un shield arduino, et ensuite la réalisation de la carte son.
Shield
Réalisation du shield arduino
Nous avons réalisé un bouclier pour Arduino Uno afin d'implémenter un système d'ordonnancement, ce qui nous permettra de simuler le fonctionnement d'une carte mère.
Schématique - Routage et vue 3D
Ordonnanceur / Système d'exploitation
Le code implémente un mini ordonnanceur préemptif sur Arduino, qui alterne deux tâches toutes les 20 ms grâce à un timer et à son ISR.
Chaque tâche a sa propre pile et son contexte CPU.
Code de l'ordonnanceur
Un ordonnanceur sert à gérer l'exécution des tâches dans un système temps réel, en assurant qu'elles s'exécutent dans un ordre optimal et respectent les délais.
ici on definit la structure d'une tâche, qu'elle fonction elle doit exécuter, quand elle doit etre exécuter, la derniere fois qu'elle été exécuté, sa priorité et son ID
typedef struct {
void (*pFunction)(void); // Pointeur vers la fonction de la tâche
uint32_t Period_ms; // Période d'exécution souhaitée (en ms)
uint32_t Last_Run_Time; // Timestamp de la dernière exécution
uint8_t Priority; // Priorité (0: la plus faible)
uint8_t ID; // ID de la tâche
} Task_t;
ici, configure le Timer1 pour générer une interruption toutes les 20 ms. Cette interruption sert de tick système pour que le scheduler exécute les tâches périodiques.
void SCHEDULER_Init(void) {
TaskCount = 0;
GlobalTick = 0;
// 1. Mise à zéro des Registres
TCCR1A = 0; // Réinitialise TCCR1A
TCCR1B = 0; // Réinitialise TCCR1B
TCNT1 = 0; // Initialise le compteur à zéro
// 2. Mode CTC (Clear Timer on Compare Match)
// WGM12 = 1 dans TCCR1B pour le mode CTC
TCCR1B |= (1 << WGM12);
OCR1A = 5000;
// 3. Définir le Prescaler à 1024 (CS12=1, CS10=1 dans TCCR1B)
TCCR1B |= (1 << CS12) | (1 << CS10);
// 4. Autoriser l'interruption Timer1 Compare Match A (OCIE1A dans TIMSK1)
TIMSK1 |= (1 << OCIE1A);
// 5. Activer les interruptions globales
sei();
}
Ici, il est question d'enregistrer une nouvelle tâches, en mettant son code, sa période, son ID, etc....
int8_t SCHEDULER_AddTask(void (*pFunction)(void), uint32_t Period_ms, uint8_t Priority) {
if (TaskCount < MAX_TASKS) {
TaskList[TaskCount].pFunction = pFunction;
TaskList[TaskCount].Period_ms = Period_ms;
TaskList[TaskCount].Last_Run_Time = GlobalTick; // Exécution immédiate
TaskList[TaskCount].Priority = Priority;
TaskList[TaskCount].ID = TaskCount + 1;
TaskCount++;
//return TaskCount;
return TaskList[TaskCount - 1].ID;
}
return 0; // en cas d'echec
}
Carte Son
Description
Notre carte fille son sera alimentée par la carte mère.
Elle comporte une ATmega328p comme coeur et sa spécificité est un convertisseur numérique vers analogique dit R-2R.
Pour fonctionner, elle a besoin :
- d'un microphone
- d'un haut-parleur pour jouer le son,
- d'un connecteur USB permettant la configuration de l'appareil via une connexion a un ordinateur .
Schématique - routage et vue 3D