SE4Binome2023-4

De projets-se.plil.fr
Aller à la navigation Aller à la recherche

GIT

Adresse du GIT : https://archives.plil.fr/tnave/PICO_Thomas_NAVE_Thibault_DUYCK.git

Ordonnanceur

Pour la réalisation de notre pico-ordinateur, nous devons réaliser un ordonnanceur qui permettra de gérer nos différents processus.

Réalisation du shield

La première étape consiste à réaliser le shield et le connecteur pour la matrice de LED qui nous permettra d'effectuer tous les tests liés au programme de l'ordonnanceur.

Première partie du shield
Shield terminé
Adaptateur LED
Câbles


Nous avons testé les LED de notre ordonnanceur avec un code basique pour vérifier si les soudures étaient bonnes et si on arrivait à utiliser les Chip Select de la carte :

LED Shield
#include <avr/io.h>

void init_led(){
  DDRD=0x92;
  DDRC=0x09;
}

int main(){
  init_led();
  while(1)
    {
	PORTD=0x92;
	PORTC=0x09;
    }
  return 0;
}

Programmation

Nous pouvons donc commencer à travailler sur l’ordonnanceur :

  • Première étape : Création d'un ordonnanceur avec test sur 2 LED (avec delay_ms) : OK
  • Deuxième étape : Modification du code afin d'avoir un état "ACTIF" ou "SLEEP" sur une tâche : OK


......

Carte FPGA

.......

Carte électronique numérique

Carte choisie : Carte Réseau RNDIS

Commentaire :

ReX : Mettez vos réalisations pour le matériel de l'ordonnancement dans la section appropriée.

Partie 1 : Réalisation de la carte

Il faut donc effectuer la conception de la carte :

On commence par le schematic ci-joint

Schematic carte RNDIS


Après avoir terminé le schematic, on peut passer au routage de la carte

Routage

Une fois la carte recue, il faut passer à la soudure :

Carte Vide
Carte Vide
Carte Soudée
Carte Soudée

Partie 2 : Programmation

Maintenant que la carte est utilisable, il nous faut passer à la programmation de celle-ci

#include <avr/io.h>
#include <util/delay.h>

void init_led()
{
  DDRD=0x01;
}

int main(){
  CLKSEL0 = 0b00010101;   // sélection de l'horloge externe
  CLKSEL1 = 0b00001111;   // minimum de 8Mhz
  CLKPR = 0b10000000;     // modification du diviseur d'horloge (CLKPCE=1)
  CLKPR = 0;              // 0 pour pas de diviseur (diviseur de 1)
  init_led();
  while(1)
    {
      PORTD=0x01;
      _delay_ms(500);
      PORTD=0x00;
      _delay_ms(500);
    }
  return 0;
}