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

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


Carte fille clavier "matrice de touches"
Carte fille clavier "matrice de touches"
=Hardware=


== Carte Shield ==
= Carte Shield =
[[Fichier:Carte Recto non soudé.jpg|vignette|left|thumb|350px|Recto de la carte avant soudage des composants]]
[[Fichier:Carte Recto non soudé.jpg|vignette|left|thumb|350px|Recto de la carte avant soudage des composants]]
[[Fichier:Verso non solder.jpeg.jpg|vignette|thumb|right|350px|Verso de la carte avant soudage des composants]]
[[Fichier:Verso non solder.jpeg.jpg|vignette|thumb|right|350px|Verso de la carte avant soudage des composants]]
Ligne 13 : Ligne 12 :
<br style="clear: both;" />
<br style="clear: both;" />


== Carte Fille ==
= Carte Fille =


== Carte Fille après soudure des composants ==
== Carte Fille après soudure des composants ==


= Software =
 
== Carte Shield ==
= Carte Shield =
=== Allumage de LEDS sur Programmateur AVR ===
== Allumage de LEDS sur Programmateur AVR ==
Avant de programmer directement sur le shield, nous avons allumé des LED pour tester la carte. Nous avons directement utilisé le code exemple fourni par l'IDE arduino en adaptant simplement les pins correspondant aux leds.
Avant de programmer directement sur le shield, nous avons allumé des LED pour tester la carte. Nous avons directement utilisé le code exemple fourni par l'IDE arduino en adaptant simplement les pins correspondant aux leds.


Ligne 26 : Ligne 25 :
[[Fichier:Vid_test_carte_mp4.mp4|vignette|thumb|center|700px|Vidéo de Test des leds]]
[[Fichier:Vid_test_carte_mp4.mp4|vignette|thumb|center|700px|Vidéo de Test des leds]]


=== Test de lecture de la carte SD ===
== Test de lecture de la carte SD ==
Avant de programmer directement sur le shield, nous avons tester si la carte SD était bien détectée et lue. On a utilisé le code test présent dans l'IDE arduino en adaptant le port utilisé.
Avant de programmer directement sur le shield, nous avons tester si la carte SD était bien détectée et lue. On a utilisé le code test présent dans l'IDE arduino en adaptant le port utilisé.


Ligne 33 : Ligne 32 :
[[Fichier:Resultat SD.jpg|vignette|thumb|center|700px|Carte SD bien détéctée]]
[[Fichier:Resultat SD.jpg|vignette|thumb|center|700px|Carte SD bien détéctée]]


=== Test des connecteurs IDC HE10 ===
== Test des connecteurs IDC HE10 ==






=== Ordonnanceur===
= Ordonnanceur=
==== Allumer la LED broche PB5 avec Timer1 ISR ====
==Allumer la LED broche PB5 avec Timer1 ISR ==




Ligne 78 : Ligne 77 :
</syntaxhighlight>
</syntaxhighlight>


==== Macros de sauvegarde et restauration des registres====
== Macros de sauvegarde et restauration des registres==
<syntaxhighlight lang="c" line>
<syntaxhighlight lang="c" line>
#define portSAVE_REGISTERS() \
#define portSAVE_REGISTERS() \
Ligne 159 : Ligne 158 :
</syntaxhighlight>
</syntaxhighlight>


====Coder le tableau des structures des processus====
==Coder le tableau des structures des processus==
<syntaxhighlight lang="c" line>
<syntaxhighlight lang="c" line>
typedef struct {
typedef struct {
Ligne 170 : Ligne 169 :
</syntaxhighlight>
</syntaxhighlight>


====Coder la fonction d'initialisation de la pile d'un processus====
==Coder la fonction d'initialisation de la pile d'un processus==
<syntaxhighlight lang="c" line>
<syntaxhighlight lang="c" line>
A REMPLIR
A REMPLIR
</syntaxhighlight>
</syntaxhighlight>


====Taches ∞ pour faire clignoter deux leds à 2 fréquences premières entre elle====
==Taches ∞ pour faire clignoter deux leds à 2 fréquences premières entre elle==
<syntaxhighlight lang="c" line>
<syntaxhighlight lang="c" line>
A REMPLIR
A REMPLIR
Ligne 181 : Ligne 180 :
[[Fichier:Ordonnanceur cligno led.mp4|vignette|thumb|center|700px|Clignotement des leds à des fréquences premières entre elle avec l'ordonnanceur]]
[[Fichier:Ordonnanceur cligno led.mp4|vignette|thumb|center|700px|Clignotement des leds à des fréquences premières entre elle avec l'ordonnanceur]]


====Lancement des deux tâches en parallèle grâce à l'ordonnanceur à tourniquet====
==Lancement des deux tâches en parallèle grâce à l'ordonnanceur à tourniquet==
<syntaxhighlight lang="c" line>
<syntaxhighlight lang="c" line>
A REMPLIR
A REMPLIR
</syntaxhighlight>
</syntaxhighlight>

Version du 23 octobre 2024 à 08:23

git : https://gitea.plil.fr/ktouron/se4-djadja-touron_pico.git

Carte fille clavier "matrice de touches"

Carte Shield

Recto de la carte avant soudage des composants
Verso de la carte avant soudage des composants


Carte Shield après soudure des composants

Photo de la carte avec les composants soudés


Carte Fille

Carte Fille après soudure des composants

Carte Shield

Allumage de LEDS sur Programmateur AVR

Avant de programmer directement sur le shield, nous avons allumé des LED pour tester la carte. Nous avons directement utilisé le code exemple fourni par l'IDE arduino en adaptant simplement les pins correspondant aux leds.

https://gitea.plil.fr/ktouron/se4-djadja-touron_pico/src/branch/main/PicoShield/Programmation/Blink

Test de lecture de la carte SD

Avant de programmer directement sur le shield, nous avons tester si la carte SD était bien détectée et lue. On a utilisé le code test présent dans l'IDE arduino en adaptant le port utilisé.

https://gitea.plil.fr/ktouron/se4-djadja-touron_pico/src/branch/main/PicoShield/Programmation/CardInfo

Carte SD bien détéctée

Test des connecteurs IDC HE10

Ordonnanceur

Allumer la LED broche PB5 avec Timer1 ISR

#define CTC1            WGM12           // Meilleur nom pour le bit

#define PERIODE         20

void init_minuteur(int diviseur,long periode){
  TCCR1A=0;               // Le mode choisi n'utilise pas ce registre
  TCCR1B=(1<<CTC1);       // Réinitialisation du minuteur sur expiration
  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;
    }
  // Un cycle prend 1/F_CPU secondes.
  // Un pas de compteur prend diviseur/F_CPU secondes.
  // Pour une periode en millisecondes, il faut (periode/1000)/(diviseur/F_CPU) pas
  // soit (periode*F_CPU)/(1000*diviseur)
  OCR1A=F_CPU/1000*periode/diviseur;  // Calcul du pas
  TCNT1=0;                // Compteur initialisé
  TIMSK1=(1<<OCIE1A);     // Comparaison du compteur avec OCR1A
}

ISR(TIMER1_COMPA_vect/*, ISR_NAKED*/)    // Procédure d'interruption
{
  PORTB ^= (1 << PB5); 
}


int main(void){
  DDRB |= (1 << PB5);                       
  init_minuteur(256,PERIODE);
  sei();
  while(1);
}

Macros de sauvegarde et restauration des registres

#define portSAVE_REGISTERS() \
asm volatile ( \
"push r0 \n\t" \
"in r0, __SREG__ \n\t"\
"cli \n\t" \
"push r0 \n\t"\ 
"push r1 \n\t" \
"clr r1 \n\t" \
"push r2 \n\t"\
"push r3 \n\t"\
"push r4 \n\t"\
"push r5 \n\t"\
"push r6 \n\t"\
"push r7 \n\t"\
"push r8 \n\t"\
"push r9 \n\t"\
"push r10 \n\t"\
"push r11 \n\t"\
"push r12 \n\t"\
"push r13 \n\t"\
"push r14 \n\t"\
"push r15 \n\t"\
"push r16 \n\t"\
"push r17 \n\t" \
"push r18 \n\t"\
"push r19 \n\t"\
"push r20 \n\t" \
"push r21 \n\t"\
"push r22 \n\t"\
"push r23 \n\t"\
"push r24 \n\t"\
"push r25 \n\t"\
"push r26 \n\t"\
"push r27 \n\t"\
"push r28 \n\t"\
"push r29 \n\t"\
"push r30 \n\t"\
"push r31 \n\t"\
);

#define portRESTORE_REGISTERS() \
asm volatile (\
"pop r31 \n\t" \
"pop r30 \n\t"\
"pop r29 \n\t" \
"pop r28 \n\t"  \
"pop r27 \n\t" \
"pop r26 \n\t" \
"pop r25 \n\t"\
"pop r24 \n\t" \
"pop r23 \n\t" \
"pop r22 \n\t" \
"pop r21 \n\t" \
"pop r20 \n\t" \
"pop r19 \n\t" \
"pop r18 \n\t" \
"pop r17 \n\t" \
"pop r16 \n\t" \
"pop r15 \n\t" \
"pop r14 \n\t" \
"pop r13 \n\t" \
"pop r12 \n\t" \
"pop r11 \n\t" \
"pop r10 \n\t"\
"pop r9 \n\t" \
"pop r8 \n\t" \
"pop r7 \n\t" \
"pop r6 \n\t" \
"pop r5 \n\t" \
"pop r4 \n\t" \
"pop r3 \n\t" \
"pop r2 \n\t" \
"pop r1 \n\t" \
"pop r0 \n\t" \
"out __SREG__, r0 \n\t"\ 
"pop r0 \n\t" \
);

Coder le tableau des structures des processus

typedef struct {
    uint16_t adresseDepart;  //adresse de la fonction de départ 
    uint16_t adressePile;       //adresse de la pile d'exécution
    bool etat;          //état du processus (1 ou 0)
} Process;

Process table_process[MAXPROCESS];

Coder la fonction d'initialisation de la pile d'un processus

A REMPLIR

Taches ∞ pour faire clignoter deux leds à 2 fréquences premières entre elle

A REMPLIR
Clignotement des leds à des fréquences premières entre elle avec l'ordonnanceur

Lancement des deux tâches en parallèle grâce à l'ordonnanceur à tourniquet

A REMPLIR