« SE4Binome2023-7 » : différence entre les versions

De projets-se.plil.fr
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 25 : Ligne 25 :


Pour l'ordonnanceur, nous avons commencé par réaliser la fonction d'interruption qui se déclenche toutes les 20ms. Ensuite, nous avons créé 3 processus distincts afin de tester le bon fonctionnement de notre ordonnanceur. <syntaxhighlight lang="c">
Pour l'ordonnanceur, nous avons commencé par réaliser la fonction d'interruption qui se déclenche toutes les 20ms. Ensuite, nous avons créé 3 processus distincts afin de tester le bon fonctionnement de notre ordonnanceur. <syntaxhighlight lang="c">
//Partie interruption
void scheduler() {
ISR(TIMER1_COMPA_vect, ISR_NAKED)
{
   // Choisi la tâche suivante à exécuter en tournant en boucle
  // Sauvegarde du contexte de la tâche interrompue
   currentTask = (currentTask + 1) % NUM_TASKS;
  portSAVE_CONTEXT();
   /*
  sauvegarde la valeur actuelle du pointeur de pile (SP)
  dans la structure de la tâche (taskList[currentTask].stackPointer).
  Cela enregistre l'état du contexte de la tâche qui vient d'être interrompue.
  */
  taskList[currentTask].stackPointer = SP;
 
  // Appel à l'ordonnanceur
  // sélectionne la prochaine tâche à exécuter.
   scheduler();
 
  // Récupération du contexte de la tâche ré-activée
  /*
  restaure le pointeur de pile avec la valeur sauvegardée précédemment pour la tâche qui va être réactivée.
  */
  SP = taskList[currentTask].stackPointer;
  // restore les valeurs des registres depuis la pile.
  portRESTORE_CONTEXT();
 
  // return from interrupt
  asm volatile ( "reti" );


}
}

Version du 11 décembre 2023 à 09:39

GIT

https://archives.plil.fr/lwijsman/PICO_lwijsman_apalifer

Ordonnanceur

Matériel

Le premier objectif était de réaliser la partie matériel de notre projet.

Un premier TP pratique nous a permis de réaliser différents composants qui allaient nous servir par la suite pour le bon fonctionnement de notre pico-ordinateur.

Nous avons ainsi pu réaliser les composants suivant :

  • Réalisation des cables de liaison HE10 carte-mère/carte-fille avec des cables plats ruban 8 broches et des connecteurs HE10 femelles.
  • Réalisation du shield : soudure du Lecteur SD, des LEDs et résistances, et des ports HE10 males


Programmation de l'ordonnanceur

Pour l'ordonnanceur, nous avons commencé par réaliser la fonction d'interruption qui se déclenche toutes les 20ms. Ensuite, nous avons créé 3 processus distincts afin de tester le bon fonctionnement de notre ordonnanceur.

void scheduler() {
 
  // Choisi la tâche suivante à exécuter en tournant en boucle
  currentTask = (currentTask + 1) % NUM_TASKS;

}

Le processus 2 allume et éteind une LED toutes les 500ms, le processus 0 réalise la même opération sur une LED différente toutes les 1000ms, et le troisième processus ne fait rien pour notre démonstration.

// Définition des tâches
void task0() {
  // Code de la tâche 0
  Output_setHigh(&PORTB, PB5);
  while (1)
  {
    _delay_ms(1000);
    Output_flip(&PORTB, PB5);
  }
}

void task2() {
  //Code de la tâche 2
  Output_setHigh(&PORTD, PD7);
  while (1)
  {
    _delay_ms(500);
    Output_flip(&PORTD, PD7);
  }
}


En implantant le programme sur la carte + shield, on constate que le programme fonctionne correctement, c'est-à-dire que chacune des deux LEDs clignotent à son rythme et les deux processus de gestion des LEDs fonctionnent simultanément.


Le programme détaillé de notre ordonnanceur est disponible sur git.

Carte FPGA / VHDL

Carte électronique numerique

Carte fille écran LCD

Référence écran : sparkfun ADM1602k-NSW-FBS


Schematic :

Carte écran schematic

La première étape de notre projet consistait à la réalisation du schematic sous KiCad de notre carte écran. Afin de réaliser le schéma du routage et pour que l'écran soit correctement connecté nous nous sommes référés à la documentation de l'écran afin de relier chacune des broches du connecteur aux labels correspondants. Vous trouverez ci-contre le schematic et les composants de la carte.

Plus spécifiquement, cette carte possède :

  • un microcontroleur atmega328p
  • un connecteur HE10 permettant de la relier à la carte mère
  • un AVR ISP permettant la programmation de la carte
  • des LEDs
  • un connecteur 1x16 broches permettant la connexion avec l'écran

Une fois le schematic réalisé et après vérification, nous avons pu commencer à effectuer le routage de notre carte.


Routage :

Pour le routage, nous avons également utilisé le logiciel KiCad. Vous trouverez ci-contre l'image correspondante à ce dernier.

Carté écran routage

Soudure et programmation :

Après réception de la carte PCB, nous avons réalisé la soudure des composants sur la carte. Ensuite nous avons tenter de programmer la carte avec l'arduino en tant qu'ISP, mais nous avons une erreur. De plus, après un test en programmant directement la carte avec un programme simple en C et un makefile adapté, nous en sommes arrivés à la conclusion que notre carte était défaillante. Comme nous n'arrivons pas à programmer la carte, nous avons quelques doutes concernant la soudure du quartz. Une des solutions possible est de tenter de ressouder une autre carte pour pouvoir la programmer correctement.