« SE4Binome2024-2 » : différence entre les versions
Aller à la navigation
Aller à la recherche
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 1 : | Ligne 1 : | ||
= | = Rapport Pico-ordinateur = | ||
Nous avons | == Carte Shield == | ||
{{Cadre| | |||
Nous avons réalisé et testé la carte Shield Arduino en soudant les différents composants. Le fonctionnement a été vérifié avec succès en faisant clignoter les LED et en testant les connecteurs à l'aide d'un afficheur 7 segments ainsi que le lecteur de carte SD. | |||
Pour | Pour cela, nous avons utilisé les codes exemples disponibles dans l'environnement Arduino IDE, tels que les fonctions pour contrôler les LED et lire les données sur l'afficheur 7 segments. | ||
'''Exemple de code pour afficher sur l'afficheur 7 segments :''' | |||
<code> | |||
#include <SPI.h> | |||
= | const int ssPin = 1; | ||
void setup() { | |||
pinMode(ssPin, OUTPUT); | |||
digitalWrite(ssPin, HIGH); | |||
SPI.begin(); | |||
SPI.setClockDivider(SPI_CLOCK_DIV64); | |||
} | |||
void loop() { | |||
// Envoyer des données vers l'afficheur 7 segments | |||
digitalWrite(ssPin, LOW); | |||
SPI.transfer('2'); // Affiche '2' | |||
digitalWrite(ssPin, HIGH); | |||
delay(1000); | |||
} | |||
</code> | |||
}} | |||
Nous avons commencé à | == Ordonnanceur == | ||
{{Cadre| | |||
Nous avons commencé à implémenter un ordonnanceur basique pour gérer plusieurs tâches. Le timer a été initialisé et nous avons déclaré différentes tâches, mais la gestion complète des tâches n'est pas encore fonctionnelle. | |||
Voici une explication des fonctions principales utilisées pour la gestion des tâches : | |||
'''Initialisation des tâches''' | |||
Cette fonction permet de sauvegarder et de restaurer les registres à chaque changement de tâche. | |||
<code> | |||
#define SAVE_REGISTERS() \ | |||
asm volatile ( \ | |||
"push r0 \n\t" \ | |||
"in r0, __SREG__ \n\t" \ | |||
"push r0 \n\t" \ | |||
"push r1 \n\t" \ | |||
/* Sauvegarde des registres ici... */ \ | |||
); | |||
void init_pile(int N){ | |||
uint16_t tempSP = SP; | |||
SP = task[N].stackPointer; | |||
uint16_t adresse=(uint16_t)task[N].addressFunction; | |||
asm volatile("push %0" : : "r" (adresse & 0x00ff) ); | |||
asm volatile("push %0" : : "r" ((adresse & 0xff00)>>8) ); | |||
SAVE_REGISTERS(); | |||
task[N].stackPointer = SP; | |||
SP = tempSP; | |||
} | |||
</code> | |||
'''Minuteur''' | |||
Le minuteur est utilisé pour déclencher les interruptions, permettant de passer d'une tâche à une autre de manière régulière. | |||
<code> | |||
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 | 11<<CS10); break; | |||
case 256: TCCR1B |= (1<<CS12); break; | |||
case 1024: TCCR1B |= (1<<CS12 | 1<<CS10); break; | |||
} | |||
OCR1A = F_CPU/1000*periode/diviseur; | |||
TIMSK1 = (1<<OCIE1A); | |||
} | |||
</code> | |||
}} | |||
== Carte fille afficheur == | |||
{{Cadre| | |||
Nous avons commencé à travailler sur le schéma de la carte fille pour l'afficheur. L'objectif est de créer une carte additionnelle qui permettra de gérer l'affichage avec plus de flexibilité. | |||
}} |