Section outline

    • Ce chapitre est consacré à l’interface fondamentale entre le microcontrôleur et le monde extérieur : les broches d’entrée-sortie. Nous commencerons par l’étude des entrées/sorties numériques, en explorant les concepts de registres de configuration (DDR, PORT, PIN), de pull-up internes, et de gestion des rebonds (debouncing) pour les interrupteurs. La deuxième partie du chapitre traitera de l’acquisition de signaux analogiques via le convertisseur analogique-numérique (CAN). Nous verrons comment configurer la résolution, le temps de conversion et les références de tension, ainsi que les techniques de filtrage logiciel pour obtenir des mesures stables et précises.

    • Ce Chapitre, s’étalant sur trois semaines, est dédié aux protocoles de communication série, qui sont l’épine dorsale de l’interaction entre un microcontrôleur et ses périphériques externes. La première semaine sera consacrée à la communication asynchrone avec l’UART/USART, en étudiant la configuration du débit en bauds, le format de la trame (start bit, data bits, parity, stop bits), et la mise en œuvre de liens de communication avec des capteurs ou des modules Bluetooth. La deuxième semaine portera sur les protocoles synchrones, en commençant par le bus I2C (Inter-Integrated Circuit), en analysant son principe de maître-esclave avec adressage, et son utilisation pour des capteurs environnementaux ou des mémoires externes. La troisième semaine couvrira le protocole SPI (Serial Peripheral Interface), un bus synchrone full-duplex plus rapide, en détaillant ses quatre modes de fonctionnement (CPOL/CPHA), la sélection des esclaves par lignes dédiées, et ses applications typiques comme les écrans ou les cartes SD.

    • Ce chapitre explore en profondeur les modules de temporisation et de comptage, qui sont essentiels pour la génération de signaux temporels précis. La première semaine se concentrera sur les timers utilisés en mode comptage simple et en mode comparaison (CTC – Clear Timer on Compare Match), permettant de générer des interruptions à des intervalles réguliers pour la temporisation logicielle. La deuxième semaine abordera les modes plus avancés, notamment la génération de signaux PWM (Pulse Width Modulation) pour le contrôle de moteurs, de LED ou d’actionneurs, ainsi que l’utilisation des timers en mode capture d’événements pour mesurer des fréquences ou des largeurs d’impulsions provenant de capteurs externes.

    • Ce chapitre traite d’un concept fondamental pour l’efficacité des systèmes embarqués : l’interruption. Nous commencerons par définir le mécanisme, en opposition à l’attente active (polling), en détaillant la vectorisation des interruptions, la gestion des flags, et la hiérarchie des priorités. Nous verrons comment configurer des interruptions externes sur des broches dédiées, ainsi que des interruptions internes provenant des timers ou des périphériques de communication série. Une attention particulière sera portée aux bonnes pratiques de programmation, notamment la nécessité de rendre les routines de service d’interruption (ISR) les plus courtes et rapides possible pour ne pas dégrader la réactivité globale du système.

    • Ce chapitre marque la transition vers la seconde partie du cours en introduisant les concepts théoriques et pratiques des systèmes temps réel. Nous définirons précisément ce qu’est un système temps réel, en distinguant les contraintes “dur” (hard real-time) où le non-respect d’une échéance est une défaillance critique, et “mou” (soft real-time) où les retards sont tolérables mais dégradent les performances. Les notions de tâche, de latence, de gigue (jitter) et de déterminisme seront expliquées. Enfin, nous présenterons les architectures logicielles permettant de répondre à ces contraintes, en posant les bases pour l’étude des noyaux temps réel.

    • Ce chapitre propose une première approche pratique du fonctionnement d’un système d’exploitation temps réel (RTOS). Nous prendrons un exemple concret comme OSA (ou FreeRTOS) pour illustrer les concepts fondamentaux. L’accent sera mis sur la notion de tâche (ou thread) comme unité de base du parallélisme logiciel. Nous verrons les différents états d’une tâche (prêt, en cours, bloqué, suspendu), le rôle de l’ordonnanceur (scheduler), et les différents algorithmes d’ordonnancement, avec un focus sur l’ordonnancement préemptif basé sur les priorités.

    • Ce chapitre, réparti sur trois semaines, constitue le cœur de l’utilisation avancée d’un RTOS. La première semaine sera consacrée aux mécanismes de synchronisation et de communication inter-tâches, avec l’étude des sémaphores (binaires et compteurs) pour la signalisation, des mutex pour la protection de ressources partagées (et la gestion de l’inversion de priorité), et des files de messages (queues) pour l’échange de données. La deuxième semaine explorera la gestion de la mémoire en environnement RTOS, en comparant l’allocation dynamique (heap) avec ses risques de fragmentation aux méthodes de pools de mémoire fixes (memory pools), plus déterministes. La troisième semaine portera sur la gestion du temps, avec les timers logiciels, ainsi que les techniques avancées de supervision comme la surveillance des tâches (watchdog logiciel) et le débogage en conditions réelles.

    • Ce dernier chapitre a pour objectif de mettre en pratique l’ensemble des connaissances acquises dans le cadre d’applications concrètes relevant de l’automatique et du contrôle-commande. La première semaine sera dédiée à la conception et à l’implémentation d’un régulateur PID (Proportionnel-Intégral-Dérivé) numérique sur microcontrôleur. Nous aborderons les problématiques de mise au point, de limitation de l’intégrale (anti-windup), et d’interfaçage avec des capteurs et actionneurs via le RTOS. La deuxième semaine consistera en un projet intégrateur, par exemple la réalisation d’un système de régulation de vitesse de moteur, d’un thermostat connecté ou d’un petit véhicule autonome. L’accent sera mis sur l’architecture logicielle modulaire, l’utilisation des services du RTOS pour orchestrer les différentes tâches (acquisition, calcul de la commande, communication, supervision), et la validation du comportement temps réel du système final.