« SE4Binome2024-2 » : différence entre les versions

De projets-se.plil.fr
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Ligne 12 : Ligne 12 :
Nous avons testé les éléments suivants :
Nous avons testé les éléments suivants :


* **Clignotement des LED** : Pour tester la fonctionnalité des LED, nous avons utilisé des codes d'exemples disponibles dans le logiciel Arduino, notamment le clignotement des LED via des boucles <code>digitalWrite()</code>.
* Clignotement des LED : Pour tester la fonctionnalité des LED, nous avons utilisé des codes d'exemples disponibles dans le logiciel Arduino, notamment le clignotement des LED via des boucles <code>digitalWrite()</code>.
    
    
* **Afficheur 7 segments** : Nous avons connecté un afficheur 7 segments à la carte Shield via une interface SPI. Voici un extrait du code utilisé pour afficher des nombres sur l'afficheur :
* Afficheur 7 segments : Nous avons connecté un afficheur 7 segments à la carte Shield via une interface SPI. Voici un extrait du code utilisé pour afficher des nombres sur l'afficheur :


<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
Ligne 38 : Ligne 38 :
Ce code configure la communication SPI et permet d'afficher des chiffres sur l'afficheur 7 segments.
Ce code configure la communication SPI et permet d'afficher des chiffres sur l'afficheur 7 segments.


* **Lecteur de carte SD** : Nous avons également testé le lecteur de carte SD intégré à la carte Shield à l'aide des exemples Arduino pour la gestion des fichiers.
* Lecteur de carte SD : Nous avons également testé le lecteur de carte SD intégré à la carte Shield à l'aide des exemples Arduino pour la gestion des fichiers.


== Ordonnanceur ==
== Ordonnanceur ==

Version du 15 octobre 2024 à 19:30

Rapport du Pico Ordinateur

Introduction

Ce rapport présente les différentes étapes de conception et de développement d'un "pico ordinateur" basé sur Arduino. Le projet comporte plusieurs composants, notamment une carte Shield, un ordonnanceur, et une carte fille pour un afficheur 7 segments. Les sections suivantes détaillent chaque composant, les tests réalisés et les résultats obtenus.

Carte Shield

Description

La carte Shield utilisée est une carte Arduino customisée que nous avons soudée et testée. Cette carte comporte plusieurs connecteurs et fonctionnalités, dont des LED et un lecteur de carte SD.

Tests Réalisés

Nous avons testé les éléments suivants :

  • Clignotement des LED : Pour tester la fonctionnalité des LED, nous avons utilisé des codes d'exemples disponibles dans le logiciel Arduino, notamment le clignotement des LED via des boucles digitalWrite().
  • Afficheur 7 segments : Nous avons connecté un afficheur 7 segments à la carte Shield via une interface SPI. Voici un extrait du code utilisé pour afficher des nombres sur l'afficheur :
#include <SPI.h>

const int ssPin = 1;

void setup() {
  pinMode(ssPin, OUTPUT);  
  digitalWrite(ssPin, HIGH);  
  SPI.begin();  
  SPI.setClockDivider(SPI_CLOCK_DIV64);  
}

void loop() {
  // Envoi des données à l'afficheur
  digitalWrite(ssPin, LOW);
  SPI.transfer('1');  // Affiche '1' sur l'afficheur
  digitalWrite(ssPin, HIGH);
}

Ce code configure la communication SPI et permet d'afficher des chiffres sur l'afficheur 7 segments.

  • Lecteur de carte SD : Nous avons également testé le lecteur de carte SD intégré à la carte Shield à l'aide des exemples Arduino pour la gestion des fichiers.

Ordonnanceur

Introduction

L'ordonnanceur est une partie essentielle de notre pico ordinateur, permettant la gestion de plusieurs tâches. Nous avons configuré un timer pour ordonnancer différentes tâches, mais les tests de ces tâches avec l'ordonnanceur n'ont pas encore abouti à un succès complet.

Fonctionnement du Timer

Nous avons initialisé le **timer 1** pour gérer l'ordonnancement des tâches. Voici une explication du code utilisé pour initialiser le minuteur :

void init_minuteur(int diviseur, long periode) {
    TCCR1A = 0;               
    TCCR1B = (1 << CTC1);      
    switch (diviseur) {
        case 8: TCCR1B |= (1 << CS11); break;
        case 64: TCCR1B |= (1 << CS11 | 1 << CS10); break;
        case 256: TCCR1B |= (1 << CS12); break;
        case 1024: TCCR1B |= (1 << CS12 | 1 << CS10); break;
    }
    OCR1A = F_CPU / 1000 * periode / diviseur;  
    TCNT1 = 0;                
    TIMSK1 = (1 << OCIE1A);   
}

Ce code configure le timer pour générer des interruptions à des périodes régulières, ce qui permet d'interrompre une tâche en cours et de passer à une autre.

Gestion des Tâches

Chaque tâche est définie dans un tableau structuré. Voici un extrait du tableau de processus qui stocke les tâches et leurs pointeurs de pile :

typedef struct process {
    uint16_t stackPointer;
    void (*addressFunction)(void);
    int state;
} process;

process task[NB_TASKS] = {
    {0x700, Serial_Led, 0},
    {0x600, LED1_blink, 0},
    {0x500, Serial_Message, 0}
};

La fonction scheduler() se charge de passer d'une tâche à une autre :

void scheduler() {
    currentTask++;
    if (currentTask == NB_TASKS) currentTask = 0; // Mode Round Robin
}

Une interruption est utilisée pour sauvegarder et restaurer les registres lors du changement de tâche.

Carte Fille Afficheur

Schématique

Nous avons commencé à dessiner le schéma de notre carte fille, qui sera utilisée pour connecter un afficheur. Ce schéma inclut les connexions SPI nécessaires pour l'afficheur 7 segments et les autres composants qui y seront intégrés.

Liste des Composants

Conclusion

Bien que certains aspects du projet soient encore en développement, nous avons réussi à tester avec succès la carte Shield et certaines fonctionnalités comme l'affichage 7 segments et le clignotement des LED. L'implémentation de l'ordonnanceur et des tâches est en bonne voie, mais nécessite encore quelques ajustements pour une exécution parfaite. Nous prévoyons d'approfondir ces aspects dans les prochaines étapes du projet.