Les Microcontroleurs

Le microcontroleur est le cerveau de tout systeme embarque ! Un ordinateur complet sur une puce, concu pour des taches specifiques avec peu de ressources.

Difficulte:
40 min
+45 XP
Arduino AVR
ESP32
STM32
RP2040

Objectifs du cours

  • Comprendre ce qu'est un microcontroleur et son role
  • Connaitre l'architecture interne (CPU, RAM, Flash, GPIO)
  • Decouvrir les principales familles (AVR, ESP, STM32, RP2040)
  • Comparer les caracteristiques techniques
  • Choisir le bon microcontroleur pour un projet

Erreurs courantes a eviter

  • Confondre microcontroleur (MCU) et microprocesseur (CPU)
  • Sous-estimer les contraintes de memoire RAM
  • Ignorer les differences de tension (3.3V vs 5V)
  • Ne pas verifier la disponibilite des peripheriques necessaires

**Definition**

Un **microcontroleur** (MCU - Microcontroller Unit) est un circuit integre qui regroupe sur une seule puce : - Un processeur (CPU) - De la memoire (RAM, Flash) - Des peripheriques (GPIO, ADC, UART, I2C, SPI...)

**Microcontroleur vs Microprocesseur**

| Aspect | Microprocesseur | Microcontroleur | |--------|-----------------|-----------------| | Fonction | Calcul pur | Systeme complet | | Memoire | Externe (Go) | Integree (Ko-Mo) | | Peripheriques | Externes | Integres | | Consommation | Elevee (10-200W) | Faible (mW-W) | | Prix | Cher (50-500EUR) | Abordable (1-15EUR) | | Usage | PC, serveurs | Embarque, IoT |

**Analogie**

- **Microprocesseur** : Le moteur d'une voiture (puissant mais necessite carrosserie, roues, reservoir...) - **Microcontroleur** : Une trotinette electrique (moins puissant mais autonome et complet)

**Ou trouve-t-on des microcontroleurs ?**

- Arduino Uno → ATmega328P - ESP32 → Xtensa dual-core - Raspberry Pi Pico → RP2040 - Micro:bit → nRF52833 - Dans les voitures, electromenager, jouets...

Python
# Comparaison microprocesseur vs microcontroleur

class ComposantInformatique:
    def __init__(self, nom, type_composant):
        self.nom = nom
        self.type = type_composant
        self.specs = {}

    def definir_specs(self, **kwargs):
        self.specs = kwargs

    def afficher(self):
        print(f"\n{'='*50}")
        print(f"{self.nom} ({self.type})")
        print('='*50)
        for cle, valeur in self.specs.items():
            print(f"  {cle}: {valeur}")

# Microprocesseur typique
intel_i5 = ComposantInformatique("Intel Core i5-12400", "Microprocesseur")
intel_i5.definir_specs(
    architecture="x86-64",
    coeurs=6,
    frequence="4.4 GHz",
    cache_L3="18 Mo",
    ram_max="128 Go (externe)",
    consommation="65-117W",
    prix="200 EUR",
    usage="PC de bureau, laptop"
)

# Microcontroleur typique
atmega328 = ComposantInformatique("ATmega328P", "Microcontroleur")
atmega328.definir_specs(
    architecture="AVR 8-bit",
    coeurs=1,
    frequence="16 MHz",
    flash="32 Ko (integree)",
    ram="2 Ko (integree)",
    eeprom="1 Ko",
    gpio="23 broches",
    adc="6 canaux 10-bit",
    consommation="15-20 mW",
    prix="3 EUR",
    usage="Arduino Uno, projets embarques"
)

# ESP32 (microcontroleur moderne)
esp32 = ComposantInformatique("ESP32-WROOM-32", "Microcontroleur")
esp32.definir_specs(
    architecture="Xtensa 32-bit dual-core",
    coeurs=2,
    frequence="240 MHz",
    flash="4 Mo (integree)",
    ram="520 Ko (integree)",
    wifi="802.11 b/g/n",
    bluetooth="4.2 + BLE",
    gpio="34 broches",
    adc="18 canaux 12-bit",
    consommation="80-260 mW",
    prix="5 EUR",
    usage="IoT, domotique, wearables"
)

# Affichage
print("=== COMPARAISON DES COMPOSANTS ===")
for composant in [intel_i5, atmega328, esp32]:
    composant.afficher()

# Conclusion
print("\n" + "="*50)
print("CONCLUSION")
print("="*50)
print("""
Le microprocesseur est puissant mais necessite:
- Carte mere, RAM, stockage externes
- Alimentation importante
- Systeme d'exploitation complet

Le microcontroleur est autonome:
- Tout integre sur une puce
- Demarre instantanement
- Ideal pour des taches specifiques
""")

Quiz de validation

1. Quelle est la principale difference entre un microcontroleur et un microprocesseur ?

2. Quel microcontroleur possede le WiFi integre ?

3. Quelle memoire stocke le programme de facon permanente ?

4. Quel langage permet de programmer facilement un microcontroleur de facon interactive ?

5. Combien de memoire RAM possede un Arduino Uno (ATmega328P) ?

Pixel