« SE4Binome2023-1 » : différence entre les versions
Ligne 40 : | Ligne 40 : | ||
}; | }; | ||
</pre> | |||
|} | |||
On s'occupe maintenant de l'ordonnanceur, ainsi que de l'ISR. | |||
{| class="wikitable" style="width:100%;" | |||
! scope="col" | Code | |||
|- | |||
| style="width:50%;" | | |||
<pre> | |||
void ordonnanceur () | |||
{ | |||
PORTD ^= 0x02; | |||
courant++; | |||
if (courant == NBR_TACHE) courant = 0; | |||
} | |||
ISR(TIMER1_COMPA_vect,ISR_NAKED) | |||
{ | |||
/* Sauvegarde du contexte de la tâche interrompue */ | |||
SAVE_REGISTER(); | |||
Taches[courant].SPointeur = SP; | |||
/* Appel à l'ordonnanceur */ | |||
ordonnanceur(); | |||
/* Récupération du contexte de la tâche ré-activée */ | |||
SP = Taches[courant].SPointeur; | |||
RESTORE_REGISTER(); | |||
asm volatile ( "reti" ); | |||
} | |||
</pre> | </pre> | ||
|} | |} |
Version du 16 janvier 2024 à 13:14
Ordonnanceur
Nous commençons maintenant l'ordonnanceur, tout d'abord nous créeons la structure de nos Taches.
Code |
---|
struct TacheInfo{ void (*depart)(void); uint16_t SPointeur; int etat; }; |
Puis nous ajoutons les 2 premières taches demandées qui sont de faire clignoter 2 leds différentes à des timing différents.
Code |
---|
void TacheA(){ while(1) { PORTC ^= 0x08; _delay_ms(300); } } void TacheB(){ while(1) { PORTD ^= 0x80; _delay_ms(500); } } struct TacheInfo Taches[2]={ {TacheA,0x0600,0}, {TacheB,0x0700,0} }; |
On s'occupe maintenant de l'ordonnanceur, ainsi que de l'ISR.
Code |
---|
void ordonnanceur () { PORTD ^= 0x02; courant++; if (courant == NBR_TACHE) courant = 0; } ISR(TIMER1_COMPA_vect,ISR_NAKED) { /* Sauvegarde du contexte de la tâche interrompue */ SAVE_REGISTER(); Taches[courant].SPointeur = SP; /* Appel à l'ordonnanceur */ ordonnanceur(); /* Récupération du contexte de la tâche ré-activée */ SP = Taches[courant].SPointeur; RESTORE_REGISTER(); asm volatile ( "reti" ); } |
Soudure et Test du SHIELD
Au cours des 2 premières séances nous avons soudé et testé notre Shield
Sur l'un des connecteurs, la led est abîmée dû à une soudure excessive. Sachant que les leds sont uniquement utilisées en tant qu'indicateurs pour savoir quelle carte fille à le contrôle et que nous n'en utiliserons pas plus de 3 pour tester nos programmes, cela ne vas pas avoir d'influence négative.
Code | Image |
---|---|
#include <avr/io.h> void init_led(){ DDRD=0x92; DDRC=0x09; } int main(){ init_led(); while(1) { PORTD=0x92; PORTC=0x09; } return 0; } |
Puis nous avons aussi soudé l'adaptateur HE10 pour l'utilisation de la matrice de leds
Carte FPGA
Carte électronique numérique
Nous avons choisi la Carte Fille : Ecran LCD
Pendant la 3ème séance nous avons finis le Schématic de la carte
Puis nous avons Routé la carte et envoyé à la Fabrication
Carte non soudée | Carte soudé |
---|---|
Références utiles
Lien du git :
https://archives.plil.fr/mchauvel/PICO_Taha_NEHARI_Martin_CHAUVELIERE.git
https://github.com/Matiasus/HD44780
NHD-C12832A1Z-FSW-FBW-3V3-ND
https://michlstechblog.info/blog/raspberry-pi-connecting-a-hd44780-display-with-i2c-bus/
ReX : Merci d'utiliser le squelette de page présenté en séance.