Examen
Module : Embedded Microcontroller, Microprocessor, and DSP- Based Systems
Contrôle continu
Lundi 30 avril 2026
QCM (choisissez une seule bonne réponse) (08pts) :
1) L’utilisation de l’architecture Harvard au lieu de celle de Von Newmann implique :
|
A) Plus d’espace de stockage |
B) Plus de bus de communications. |
|
C) Plus de données.
|
|
2) Le registre qui garde une trace des instructions du programme enregistré en mémoire est _____?
A) Registre de contrôle
B) Compteur ordinal
C) Registre d’état
D) Registre direct
3) La sortie du microcontrôleur peut débiter un courant suffisant pour permettre la rotation d’un moteur à courant continu et à aimant permanent.
A) Vrai
B) Faux
4) Pipelining augmente ________ des instructions du processeur.
|
A) l’efficacité |
B) la latence |
|
C) le débit |
D) les deux A et C sont vrais. |
5) Le registre informatique qui collecte le résultat du calcul est appelé ___?
|
A) Pointeur d’instruction |
B) Espace de stockage |
|
C) Registre de stockage |
D) Accumulateur
|
6) Nous appellons l’unité qui décode et traduit chaque instruction et génère les signaux d’activation nécessaires pour ALU et d’autres unités.
|
A) Unité arithmétique |
B) Unité de contrôle |
|
C) Unité logique |
D) CPU
|
Exercice 1 :
On souhaite concevoir un système embarqué permettant de commander les feux de clignotement d’un scooter à l’aide du microcontrôleur PIC18F45K22.
Le scooter est équipé de deux boutons au niveau du guidon permettant d’activer le clignotant gauche ou le clignotant droit. Il dispose également de deux capteurs de fin de course (gauche et droite) permettant de détecter la position du guidon. Comme illustré dans la figure 1, le scooter possède quatre feux de clignotement (avant gauche, arrière gauche, avant droit, arrière droit) ainsi qu’un bip sonore. Le principe de détection de la position du guidon est présenté dans la figure 2.
Le fonctionnement du système est décrit comme suit : lorsqu’un conducteur appuie sur le bouton « Clign_droite » ou « Clign_gauche », le clignotement des feux correspondants (avant et arrière du côté sélectionné) est activé simultanément avec le bip sonore. Les feux et le bip fonctionnent à une fréquence d’environ 2 Hz et sont synchronisés. Lorsque le guidon est tourné vers la droite ou vers la gauche, les capteurs de fin de course (bouton de fin de course droite ou bouton de fin de course gauche) permettent de confirmer ou de corriger la direction effective du scooter, et donc d’assurer que seuls les feux du côté correspondant restent actifs. Enfin, lorsque le guidon revient à sa position initiale (position centrale), détectée par les capteurs de fin de course, le clignotement des feux ainsi que le bip sonore s’arrêtent automatiquement.
Dans cet exercice, on impose que le port B du microcontrôleur soit utilisé uniquement pour les entrées (boutons et capteurs), tandis que le port D sera utilisé uniquement pour les sorties (feux et buzzer).
1. À partir du scénario de clignotement à droite, compléter le tableau en indiquant les états logiques (0 ou 1) des entrées (boutons et capteurs) et des sorties (feux et bip sonore) pour les différentes phases de fonctionnement (état initial, clignotement, retour à l’état normal).
|
I/O |
|
Début jusqu'à la fin de clignotement des feux |
|||||
|
Inputs |
Poignée du guidon |
Bouton Clign_doite |
0 |
|
|
|
|
|
Bouton Clign_gauche |
0 |
|
|
|
|
||
|
Axe de guidon |
Bouton fin de course droite |
0 |
|
|
|
|
|
|
Boutons de fin de course gauche |
0 |
|
|
|
|
||
|
Outputs |
Feu clignotement avant à droite |
0 |
|
|
|
|
|
|
Feu clignotement arrière à droite |
0 |
|
|
|
|
||
|
Feu clignotement avant à gauche |
0 |
|
|
|
|
||
|
Feu clignotement arrière à gauche |
0 |
|
|
|
|
||
|
bip sonneur |
0 |
|
|
|
|
||
2. Écrire une fonction nommée initialiser_ports permettant de configurer les ports du microcontrôleur (PORTB en entrée et PORTD en sortie). void initialiser_ports(void);
3. Écrire une fonction nommée lire_entrees permettant de lire l’état des boutons et des capteurs connectés au PORTB et de retourner leur état. int lire_entrees(void);
4. Écrire une fonction nommée detecter_position_guidon permettant de déterminer la position du guidon à partir de l’état des capteurs (fin de course droite et gauche).
int detecter_position_guidon(int etat_entrees);
5. Écrire une fonction nommée generer_bip permettant de produire un signal sonore périodique (≈ 2 Hz) sur le buzzer. void generer_bip(void);
6. Écrire une fonction nommée activer_clignotant permettant de commander les feux (avant et arrière) en synchronisation avec le bip sonore, en fonction de la direction passée en paramètre (1 : gauche, 2 : droite), avec arrêt automatique après détection de la fin de course correspondante. void activer_clignotant(int direction);
7. Écrire le programme principal main assurant l’initialisation du système, la lecture des entrées, la commande des clignotants (droite ou gauche) et l’arrêt automatique du clignotement.
Méthode d’évaluation : Note la plus haute
