Microcontroeluers Avancés

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 83

Microcontrôleurs avancés

Pr DIOURI Omar
Email : diouri@upf.ac.ma 1
Année Universitaire 2022/2023
Chapitre 1 : Généralités sur les microcontrôleurs
1 Du microprocesseur au microcontrôleur

Le microprocesseur :
• Reçoit de l’information de l’extérieur
• Traite l’information
• Renvoie de l’information à l’extérieur

Cours : Microcontrôleurs avancés 2


Chapitre 1 : Généralités sur les microcontrôleurs
1 Du microprocesseur au microcontrôleur

Le microcontrôleur est
constitue de :
- CPU (Microprocesseur)
- RAM
- Flash (Mémoire
programme)
- Oscillateur interne
- Timer
- Convertisseur
Analogique/Numérique
- Blocs de communication
série
- …

Cours : Microcontrôleurs avancés 3


Chapitre 1 : Généralités sur les microcontrôleurs
2 Principe de fonctionnement d’un µC

Microcontrôleur

ROM RAM
Si temp > 30°C
Démarrer Ventilo

Oscillateur
Processeur
Interne
Démarrage
ON 31°C > 30°C
du ventilateur

Convertisseur
Entrées/Sorties Analogique/
Numérique 31°C

Cours : Microcontrôleurs avancés 4


Chapitre 1 : Généralités sur les microcontrôleurs
3 Définitions

Un microcontrôleur est un circuit intégré qui rassemble les éléments essentiels d'un ordinateur :
o Processeur
o Mémoires (mémoire morte pour le programme, mémoire vivre pour les données)
o Unités périphériques et interfaces d’entrées-sorties…

Pourquoi le microcontrôleur ?
o Plus haut degré d'intégration
o Taille réduite
o Plus faible consommation électrique
o Coût réduit par rapport aux microprocesseurs polyvalents utilisés dans les ordinateurs
personnels.

Les microcontrôleurs sont fréquemment utilisés dans les systèmes embarqués, comme les
contrôleurs des moteurs automobiles, les systèmes à énergie renouvelables, les télécommandes,
les appareils de bureau, l'électroménager, les jouets, la téléphonie mobile, etc.
Cours : Microcontrôleurs avancés 5
Chapitre 1 : Généralités sur les microcontrôleurs
4 Comparaison

µP µC
Fréquence Max = 5GHz Max = 200 MHz
Volume Mémoire Min = 64Mo Max = 256ko
Flash Min = 128Mo Max = 2Mo
OS Linux, Windows, Aucun ou Linux
… ou RTOS
Traitement Complexe Simple
Consommation Elevée Réduite
Graphique HD ¼ VGA

Cours : Microcontrôleurs avancés 6


Chapitre 1 : Généralités sur les microcontrôleurs
4 Systèmes de numération

La différence entre Bit et Byte :

Bit = Bit
Byte = Octet

8 bits = 1 Byte

Cours : Microcontrôleurs avancés 7


Chapitre 1 : Généralités sur les microcontrôleurs
5 Registres Spéciaux (SFR) dans la RAM

En plus des registres qui ne possède pas de


fonction spéciale et prédéterminée (Mémoires),
chaque microcontrôleur comporte un certain
nombre de registres (SFR) dont la fonction est
prédéterminée par le fabricant. Leurs bits sont
connectés à des circuits internes du
microcontrôleur tels que des Timers,
convertisseur A / D, des oscillateurs et des autres,
ce qui signifie que ces circuits sont directement
contrôlés par les registres spéciaux.
Les registres spéciaux est se situés dans la
mémoire RAM.

Cours : Microcontrôleurs avancés 8


Chapitre 1 : Généralités sur les microcontrôleurs
5 Mémoire FLASH

Puisque le contenu de cette mémoire peut être écrit


et effacé pratiquement avec un nombre illimité de
fois. Les microcontrôleurs avec Flash ROM sont
idéales pour l'apprentissage, l'expérimentation et la
production à petite échelle. En raison de sa grande
popularité, la plupart des microcontrôleurs sont
fabriqués en technologie flash aujourd'hui.

Cours : Microcontrôleurs avancés 9


Chapitre 1 : Généralités sur les microcontrôleurs
6 Architecture VON-NEUMANN

Comme toutes les données sont échangées (bus de 8 lignes), le bus est surchargé et la
communication est très lente et inefficace.

Cours : Microcontrôleurs avancés 10


Chapitre 1 : Généralités sur les microcontrôleurs
6 Architecture HARVARD

• Le CPU peut lire une instruction et accéder aux données de la mémoire en même temps.
• Du fait que le programme (ROM) et des données temporaires (RAM) sont séparées, le
processeur peut exécuter deux instructions à la fois.

Cours : Microcontrôleurs avancés 11


Chapitre 1 : Généralités sur les microcontrôleurs
7 Oscillateur interne

Il est important de dire que les instructions ne sont pas exécutées au rythme imposé par
l'oscillateur lui-même, mais plusieurs fois plus lent. Cela arrive, parce que chaque instruction est
exécutée en plusieurs étapes. Dans certains microcontrôleurs, le même nombre de cycles est
nécessaire pour exécuter toutes les instructions, alors que dans d'autres, le nombre de cycles est
différent selon les instructions.

Cours : Microcontrôleurs avancés 12


Chapitre 1 : Généralités sur les microcontrôleurs
7 Oscillateur externe

Un oscillateur électronique est un circuit dont la fonction est de produire un signal


électrique périodique, de forme sinusoïdale, carrée, en dents de scie, ou quelconque. L'oscillateur
peut avoir une fréquence fixe ou variable. Il existe plusieurs types d'oscillateurs électroniques ; les
principaux sont :
•Oscillateurs à circuit LC et un étage amplificateur, HF le plus souvent.
•Oscillateurs à déphasage avec étage RC, qui délivrent des signaux sinusoïdaux : l'exemple-type
est l'oscillateur à pont de Wien1.
•Générateur de créneaux.
•oscillateur à quartz, très stable et de haute précision grâce à des résonateurs à micro-onde ; ils
sont utilisés dans les horloges atomiques.

Cours : Microcontrôleurs avancés 13


Chapitre 1 : Généralités sur les microcontrôleurs
8 Timer

Un Timer est un périphérique matériel permettant de mesurer des durées (généralement inclus
dans les microcontrôleurs). Son rôle est de permettre la synchronisation des opérations que le
microcontrôleur est chargé d'effectuer.

Les timers sont des compteurs formés généralement d’un pré-diviseur suivi d’un registre compteur
de 8 ou 16 bits. L’entrée d’horloge peut être interne (mode timer) ou externe (mode compteur
d’événements). Lorsque le registre compteur atteint sa valeur maximale et repasse à 0, un bit
indicateur (flag) sera positionné et une interruption pourra être générée, informant ainsi la CPU du
débordement du timer. Il faut bien noter que le programmeur devra remettre à zéro cet indicateur
après chaque débordement.
Le microcontrôleur PIC16F877 dispose de trois timers appelés Timer0, Timer1 et Timer2

Cours : Microcontrôleurs avancés 14


Chapitre 1 : Généralités sur les microcontrôleurs
8 Timer sans Prescaler

C’est un compteur 8 bits qui peut compter (de 0 à 255)


Timer 0 est incrémenté à chaque cycle instruction ( Fosc/4), en considérant le prédiviseur avec un
rapport de 1.
En pratique, les impulsions produites par l'oscillateur à quartz sont amenés au circuit qui
incrémente le nombre stocké dans le registre de Timer. Si une instruction dure quatre périodes de
l'oscillateur à quartz, alors ce nombre sera incrémenté d'un million de fois par seconde avec
l’utilisation d’un quartz de 4 MHz.

Cours : Microcontrôleurs avancés 15


Chapitre 1 : Généralités sur les microcontrôleurs
8 Timer avec Prescaler

Un diviseur est un dispositif électronique utilisé pour réduire la fréquence par un facteur
prédéterminé. Afin de générer une impulsion sur sa sortie, il est nécessaire de porter 1, 2, 4 ou
plusieurs impulsions sur son entrée. La plupart des microcontrôleurs ont un ou plusieurs
prescalers construits et leur facteur de division peut être modifié à partir du programme.

Cours : Microcontrôleurs avancés 16


Chapitre 1 : Généralités sur les microcontrôleurs
9 Modulation en largeur d'impulsions

La modulation en largeur d'impulsions (MLI) (en anglais : Pulse Width Modulation : PWM), est
une technique couramment utilisée pour synthétiser des signaux pseudo analogiques à l'aide de
circuits à fonctionnement tout ou rien, ou plus généralement à états discrets.
Elle sert à générer un signal pseudo analogique à partir d'un environnement numérique ou
analogique pour permettre un traitement de ce signal par des composants en commutation (se
comportant comme des interrupteurs ouverts ou fermés).
Le principe général est qu'en appliquant une succession rapide d'états discrets avec des ratio de
durée bien choisis, on peut obtenir en ne regardant que la valeur moyenne du signal n'importe
quelle valeur intermédiaire.
Les usages les plus fréquents :
•La conversion numérique-analogique
•Les alimentations à découpage
•Les variateurs de vitesse
•Plus généralement tous les dispositifs d'électronique de puissance utilisant des composants en
commutation de type MOSFET, IGBT, GTO.
Il est aussi possible de faire de la transmission de données par cette méthode.
Cours : Microcontrôleurs avancés 17
Chapitre 1 : Généralités sur les microcontrôleurs
9 Modulation en largeur d'impulsions Principe de fonctionnement

Une porteuse triangulaire est comparée à un signal de consigne, par exemple une sinusoïde. Le
signal de consigne doit avoir une fréquence bien plus petite que la porteuse. Le signal de sortie est
au niveau haut (disons 5 V) lorsque la consigne est supérieure à la porteuse, au niveau bas (0 V)
dans le cas contraire. On considère le cas d'un signal de consigne à valeurs positives. Pour traiter un
signal alternatif, il suffira de lui appliquer un décalage.

Cours : Microcontrôleurs avancés 18


Chapitre 1 : Généralités sur les microcontrôleurs
9 Modulation en largeur d'impulsions Programmation du module PWM

Un générateur PWM fonctionne avec un


compteur de 8, 16 ou 32 bits (tout dépend
de chaque microcontrôleur) et une horloge.
À chaque front d'horloge, le compteur est
incrémenté d'une unité. Lorsqu'il atteint
une valeur maximale MAX, il revient à 0,
puis le cycle recommence. Le rapport
cyclique est fixé par un registre dont la
valeur R est inférieure à MAX. À chaque
incrémentation, le compteur est comparé à
R. Si le compteur est égal à R, la sortie
bascule au niveau bas. Lorsque le
compteur est remis à zéro, la sortie bascule
au niveau haut. On obtient ainsi un signal
carré dont le rapport cyclique est R/MAX.

Cours : Microcontrôleurs avancés 19


Chapitre 1 : Généralités sur les microcontrôleurs
10 Convertisseur Analogique / Numérique

Les signaux externes sont généralement différents de ceux du microcontrôleur (uns et de zéros) et
doivent être convertis en valeurs compréhensibles pour le microcontrôleur. Un convertisseur
analogique-numérique est un circuit électronique qui convertit les signaux continu en numériques.
En d'autres termes, ce circuit convertit une valeur analogique en un nombre binaire et le transmet au
CPU pour un traitement ultérieur.

Cours : Microcontrôleurs avancés 20


Chapitre 1 : Généralités sur les microcontrôleurs
10 Convertisseur Analogique / Numérique

Un CAN (ADC) convertit une tension (ou un


courant) en un nombre binaire qui lui est
proportionnel. L’entrée est une tension analogique
comprise entre UEmin et UEmax.

La sortie est numérique (n bits) : exemple avec 12


bits : N = 110010011011(2)

La valeur maximale de N vaut Nmax= 2𝑛 − 1


exemple avec 12 bits : Nmax = 212 − 1 = 4095

Cours : Microcontrôleurs avancés 21


Chapitre 1 : Généralités sur les microcontrôleurs
10 Convertisseur Analogique / Numérique

Cours : Microcontrôleurs avancés 22


Chapitre 1 : Généralités sur les microcontrôleurs
11 Transmission de données

Pour courte distance : Montage en parallèle entre le microcontrôleur et les périphériques via PORTS
input/output est la solution idéale
Pour une longue distance, il est nécessaire d’établir une communication série entre deux
périphériques.
L’utilisation de la communication série dépend de nombreux facteurs, dont les plus importants sont :
• Combien de périphériques, le microcontrôleur
doit-il échanger des données avec eux ?
• Quelle est la vitesse d’échange de données ?
• Quelle est la distance entre les appareils ?
• Est-ce qu’il est nécessaire d'envoyer et de
recevoir simultanément les données ?
Cours : Microcontrôleurs avancés 23
Chapitre 1 : Généralités sur les microcontrôleurs
11 Transmission de données

Transmission Parallèle :
Les bits sont envoyés simultanément sur N voies différentes. Il faut autant
de lignes de transmission que de bits à transmettre, plus une équipotentielle zéro, plus un signal
dit échantillonnage, et un signal d’acquittement.

Cours : Microcontrôleurs avancés 24


Chapitre 1 : Généralités sur les microcontrôleurs
11 Transmission de données

Transmission Série : cette transmission permet de transmettre les données sur un seul support
physique. La transmission se fait en émettant les bits de données les uns après les autres. Le
problème majeur de ce mode de transmission est la synchronisation des horloges.

Cours : Microcontrôleurs avancés 25


Chapitre 1 : Généralités sur les microcontrôleurs
11 Transmission de données

❑Transmission Synchrone
▪ Cette méthode permet d’envoyer une trame (bloc de bits d’information) sous la forme d’un flot
continu de bits sans bit de synchronisation START et STOP.
▪ La synchronisation est obtenu à l’aide d’un signal d’horloge (généralement sur une ligne
séparée).

❑Transmission Asynchrone
▪ Cette méthode permet de transmettre les bits par groupes (caractères) ce qui permet au récepteur
de se synchroniser au début de chaque caractère.
▪ L’intervalle de temps qui sépare deux émissions de caractères est aléatoire et dépend de
l’émetteur.
▪ Exemple une trame peut être constituée d’un bit START, 5 à 8 bits de données, un bit de parité et
de deux bits STOP.

Cours : Microcontrôleurs avancés 26


Chapitre 1 : Généralités sur les microcontrôleurs
11 Transmission de données

❑Modes d’exploitation
La ligne de transmission peut être exploitée de trois manière :
▪ Simplex : mode unidirectionnel, la communication de l’émetteur vers le récepteur. (Exemple : la
radiodiffusion telle la radio FM).
▪ Half-duplex : la communication se fait dans les deux sens mais pas simultanément. ( Exemple :
Talkies-walkies, l’un parle (l’autre ne peut parler en même temps) et lorsqu'il lâche le bouton
(signal de fin de conversation) l’autre peut parler à son tour.)
▪ Full-duplex : mode bidirectionnel simultané sur le même support physique. (Exemple :
conversation téléphonique, les deux interlocuteurs peuvent parler en même temps)

Cours : Microcontrôleurs avancés 27


Chapitre 1 : Généralités sur les microcontrôleurs
11 Transmission de données UART

UART (UNIVERSAL ASYNCHRONOUS RECEIVER/TRANSMITTER)

• Ce genre de communication est Asynchrone (signal d'horloge n'est pas utilisée)


• Une seule communication est utilisée, émetteur et récepteur fonctionnent au même rythme
prédéfini afin de maintenir la synchronisation nécessaire.
• Il s'agit d'un moyen très simple de transfert de données puisqu’il représente essentiellement la
conversion de données 8 bits du format parallèlement à une format série.
• BAUD RATE jusqu’à 0,5 Mbit/s.

Cours : Microcontrôleurs avancés 28


Chapitre 1 : Généralités sur les microcontrôleurs
11 Transmission de données UART

Liaison série asynchrone

Avantages : standardisée, universelle, pas cher


3 fils suffisent (émission Tx, réception Rx, masse GND) et souvent l'alimentation + 5 V

Inconvénients : Assez lent. (maximum pour un Arduino : 115200 bauds)

Cours : Microcontrôleurs avancés 29


Chapitre 1 : Généralités sur les microcontrôleurs
11 Transmission de données UART

Diagramme UART

Cours : Microcontrôleurs avancés 30


Chapitre 1 : Généralités sur les microcontrôleurs
11 Transmission de données SPI

Définition
▪ SPI (Serial Peripheral Interface) est un bus de données série synchrone qui opère en mode full-
duplex.
▪ Les circuits communiquent selon un schéma maître-esclaves, où le maître contrôle la
communication.
▪ Plusieurs esclaves peuvent coexister sur un même bus, dans ce cas, la sélection du destinataire se
fait par une ligne dédiée entre le maître et l'esclave appelée Slave Select (SS).
▪ Système de communication série qui utilise jusqu'à quatre fils conducteurs.
▪ L’un des conducteurs est utilisé pour la réception, autre pour l’envoi de données, un pour la
synchronisation et l'autre permet de sélectionner un périphérique pour que le maitre peut
communiquer avec ce périphérique.
Cours : Microcontrôleurs avancés 31
Chapitre 1 : Généralités sur les microcontrôleurs
11 Transmission de données SPI

montage

Cours : Microcontrôleurs avancés 32


Chapitre 1 : Généralités sur les microcontrôleurs
11 Transmission de données SPI

Interface

Un seul
esclave
actif à
la fois

Le bus SPI utilise quatre signaux logiques :


•SCLK — Serial Clock, Horloge (généré par le maître)
•MOSI — Master Output, Slave Input (généré par le maître)
•MISO — Master Input, Slave Output (généré par l'esclave)
•SS — Slave Select, Actif à l'état bas (généré par le maître)

Cours : Microcontrôleurs avancés 33


Chapitre 1 : Généralités sur les microcontrôleurs
11 Transmission de données SPI

Fonctionnement

Une transmission SPI typique est une communication simultanée entre un maître et un esclave :
•Le maître génère l'horloge et sélectionne l'esclave avec qui il veut communiquer par l'utilisation
du signal SS
•L'esclave répond aux requêtes du maître

À chaque coup d'horloge le maître et l'esclave s'échangent un bit. Après huit coups d'horloges le
maître a transmis un octet à l'esclave et vice versa. La vitesse de l'horloge est réglée selon des
caractéristiques propres aux périphériques.

Cours : Microcontrôleurs avancés 34


Chapitre 1 : Généralités sur les microcontrôleurs
11 Transmission de données SPI

Avantages
•Communication Full duplex, point à point.
•Débit plus important qu'un bus I2C (jusqu’à 20 Mbits/s pour SPI)
•Flexibilité du nombre de bits à transmettre ainsi que du protocole en lui-même
•Simplicité de l'interface matérielle
• Aucun arbitre nécessaire car aucune collision possible
• Les esclaves utilisent l'horloge du maître et n'ont donc pas besoin d'oscillateur propre
• Pas de physique (codage) nécessaire
•Partage d'un bus commun pour l'horloge, MISO et MOSI entre les périphériques

Cours : Microcontrôleurs avancés 35


Chapitre 1 : Généralités sur les microcontrôleurs
11 Transmission de données SPI

inconvénients

•Utilise plus de broches par rapport à I2C ou UART qui en utilisent seulement deux.
•Aucun adressage possible, il faut une ligne de sélection par esclave en mode non chaîné.
•Le protocole n'a pas d'acquittement. Le maître peut parler dans le vide sans le savoir.
•La plupart des implémentations ne tolèrent la présence que d'un seul maître SPI sur le bus.
•Ne s'utilise que sur de courtes distances contrairement aux liaisons RS232, RS485 ou bus CAN.

Cours : Microcontrôleurs avancés 36


Chapitre 1 : Généralités sur les microcontrôleurs
11 Transmission de données I2C

Définition
I2C : Inter Integrated Circuit
• Le but de ce protocole est de faire communiquer entre eux des composants électronique très
divers grâce à seulement 2 fils : Signal de donnée : SDA et signal d’horloge : SCL
• Système d'échange de données série entre les microcontrôleurs et des circuits intégrés
spécialisés
• Il est utilisé lorsque la distance entre eux est courte (émetteur et récepteur)
• Microcontrôleur peut communiquer avec 112 appareils différents.

Cours : Microcontrôleurs avancés 37


Chapitre 1 : Généralités sur les microcontrôleurs
11 Transmission de données I2C

Caractéristique du bus I2C

• Deux lignes uniquement (SDA et SCL).


• 1 adresse unique pour chaque périphérique
• Bus multi-maitre.
• Bus série, 8 bits, bidirectionnel à 100 kbps (standard mode).
• Filtrage intégré : réjection des pics parasites.
• I2C est un bus série synchrone bidirectionnel half duplex, où plusieurs équipements, maîtres ou
esclaves, peuvent être connectés au bus.
• Les échanges ont toujours lieu entre un seul maître et un (ou tous les) esclave(s), toujours à
l'initiative du maître (jamais de maître à maître ou d'esclave à esclave). Cependant, rien
n'empêche un composant de passer du statut de maître à esclave et réciproquement.
• Le nombre maximal d'équipements est limité par le nombre d'adresses disponibles, 7 bits
d'adressage et un bit R/W (lecture ou écriture), soit 128 périphériques, mais il dépend
également de la capacité (CB) du bus (dont dépend la vitesse maximale du bus)

Cours : Microcontrôleurs avancés 38


Chapitre 1 : Généralités sur les microcontrôleurs
12 Fabricants des Microcontrôleurs

Cours : Microcontrôleurs avancés 39


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
1 Caractéristiques de l’Atmega328P

8-bit AVR Microcontroller

•Technologie CMOS haute vitesse : rapidité + faible consommation


•Architecture RISC et Harvard
• Puissance en Mips = fréquence de l'horloge
•Alimentation entre 1,8 et 5,5V
•3 mémoires indépendantes :
• Mémoire flash intégrée (10000 cycles écriture)
• Mémoire EEPROM pour le stockage de données
• (100000 cycles écriture)
• Mémoire SRAM rapide

Atmega328p-AU
Atmega328p-PU

Cours : Microcontrôleurs avancés 40


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
1 Caractéristiques de l’Atmega328P
8-bit AVR Microcontroller
•Nombre de broches : 28
•Mémoire Flash : 32 ko (programmable par interface série)
•Mémoire Données EEPROM : 1 ko
•Mémoire RAM : 2 ko
•32 registres de travail d'accès rapide pour l’UAL
•Ports parallèles : 3, avec 23 broches E/S
•Fréquence d'horloge : 16 Mhz (maxi tolérée = 20 Mhz)
• donc : 16 cycles d'horloge par micro-seconde
•Périphériques internes
• 6 convertisseur Analogique/Numérique 10 bits, comparateur analogique
• 1 timer 16 bits (T1), 2 timers 8 bits(T0,T2)
• 6 canaux PWM, 1 chien de garde (watchdog)
• SPI, USART, TWI = I2C
•26 interruptions
•5 modes d'économie d'énergie
Cours : Microcontrôleurs avancés 41
Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
2 Brochage de l’Atmega328P-PU

•VCC (1), GND (2)

•E/S (=GPIO) :
PORTB (8),
PORTC (7),
PORTD (8)

•AVCC (1) : alimentation


CAN (Analog/num)

•AREF (1) : entrée


comparateur analogique

Cours : Microcontrôleurs avancés 42


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
3 Architecture interne de l'ATmega 328

Cours : Microcontrôleurs avancés 43


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
3 Architecture interne de l'ATmega 328 Architecture interne du cœur AVR

Le cœur AVR combine un riche jeu d'instructions avec 32 registres de travail à usage général.
Tous les 32 registres sont directement connectés à l'unité arithmétique et logique (UAL),
permettant d'accéder à deux registres indépendants en une seule instruction exécutée en un
cycle d'horloge. L'architecture résultante est plus efficace en termes de code tout en atteignant
des débits jusqu'à dix fois plus rapides que les microcontrôleurs CISC conventionnels.

Afin de maximiser les performances et le parallélisme, l'AVR utilise une architecture


Harvard - avec des mémoires et des bus séparés pour le programme et les données. Les
instructions dans la mémoire du programme sont exécutées avec un pipeline à un seul
niveau. Pendant qu'une instruction est en cours d'exécution, l'instruction suivante est pré-
extraite de la mémoire programme. Ce concept permet d'exécuter des instructions à chaque
cycle d'horloge. La mémoire du programme est une mémoire flash reprogrammable dans le
système

Cours : Microcontrôleurs avancés 44


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
3 Architecture interne de l'ATmega 328 Architecture interne du cœur AVR

Cours : Microcontrôleurs avancés 45


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
4 Organisation de la mémoire
•32 registres 8 bits, R0 à R31
•certains sont utilisables en 16 bits (pour
les adressages indirects)
•placés en début de la RAM de donnée

Cours : Microcontrôleurs avancés 46


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
5 Ports d’entrées/sorties

•Atmega328p dispose de 23 broches d'E/S,


organisées en 3 ports parallèles numériques
• ce sont les ports B, C et D
•Ils sont tous bidirectionnels
•le port C peut aussi être utilisé comme « port
d'entrée analogique » (CAN)
•Leurs lignes peuvent être
configurées/utilisées individuellement

Cours : Microcontrôleurs avancés 47


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
5 Ports d’entrées/sorties Registres de contrôle des ports

•Chaque port x (pour B, C ou D) est contrôlé par 3 registres


• DDRx : le registre de direction (sens de transfert) du port
• PORTx : le registre de donnée du port
• PINx : le registre d'entrée du port
•Chacun de leur bit contrôle une ligne particulière du port

Cours : Microcontrôleurs avancés 48


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
5 Ports d’entrées/sorties Fonction des registres

•Seuls PORTx et DDRx se comportent vraiment comme des variables mémoires


• un composant mémoire leur ait associé, qui joue le rôle de verrou (=latch)
• les écritures dans ces registres sont donc persistentes
•PINx n'est pas un composant mémoire
• il est directement connecté aux lignes du port x, et traduit donc leur tension
•DDRx : détermine la direction de chaque broche du port x
• 0 pour une Entrée, 1 pour une Sortie (« 0/1 » pour « E/S »)
•PORTx
• pour les broches en sortie : 0 pour tension basse, 1 pour tension haute
• pour les broches en entrée : 1 pour activer la résistance « pull-up », 0 sinon
•PINx
• indique la tension des broches : 0 pour tension basse, 1 pour tension haute

Cours : Microcontrôleurs avancés 49


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
6 Interruptions Pooling (Sans interruption)

La technique de pooling consiste à l’utilisation normale de la boucle loop() sans faire appel aux
interruptions. On scrute les entrées d’une façon itérative puis on déclenche les sorties (actions)
en fonctions des entrées. Le temps de mise à jour des sorties dépend étroitement du moment de
l’apparition de l’évènement.

Exemples: surintensité dans un moteur détecté par un capteur, robot à proximité du mure, etc.)
Une latence peut entrainer des conséquences graves.

Si par exemple l’évènement est apparu au début du programme, mais le traitement du défaut se
trouve à la fin de la boucle loop dans un programme constitué de 200 lignes d’une durée totale
d’une seconde (le temps d’exécution de la fonction loop()). Dans ces conditions, la gestion de
l’évènement ne sera effectuée qu’après une secondes !

Cours : Microcontrôleurs avancés 50


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
6 Interruptions Pooling (Sans interruption) Exemple

Cours : Microcontrôleurs avancés 51


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
6 Interruptions Définition

Une interruption comme définition est un événement qui permet d’interrompre le programme
principal (la fonction loop() ) pour exécuter la fonction (ou routine) d’interruption. Lorsqu’une
interruption est désactiver (ou masquer), la fonction loop() qui sera exécuter par défaut d’une
façon infinie. Dans le cas échéant, la routine d’interruption se déclenche dès l’apparition d’un
évènement.

Interrompe la boucle loop() et exécution immédiate à


l’ordre du microseconde de la routine d’interruption.

Cours : Microcontrôleurs avancés 52


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
6 Interruptions Autorisations, priorités

• Les interruptions sont désactivés


• La prise en compte de l’interruption peut être retardée si son niveau de priorité est insuffisant
• les niveaux de priorités sont fixes, et fonctions de la source d'interruption
• exemple : reset = interruption de plus forte priorité
• Les sources d'interruptions (périphériques internes, entrées externes) font leur demande
d'interruption en positionnant à 1 un bit dédié (interrupt flag), stocké dans l'un de leurs registres
• Sur l'ATmega328, il faut de 4 à 6 cycles d'horloge avant que le microcontrôleur exécute la
routine d'interruption

Cours : Microcontrôleurs avancés 53


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
6 Interruptions Qu’est-ce qu’un évènement ?

Un événement peut être un signal électrique Tout Ou Rien (TOR) issu d’un détecteur qui se trouve à
l’extérieur de la carte Arduino dites évènement matériel. Il peut être aussi, logiciel, générer par un
périphérique propre au Microcontrôleur. (Exemple : débordement d’un TIMER (Overflow),
réception par liaison UART, liaison I2C, fin de conversion du convertisseur A/N, etc.).

Un événement matériel peut être déclenché par :


▪ Un front montant (passage du 0 à 1 d’un pin digital) ou bien un front descendant (passage du 1 à
0 d’un pin digital). Dans ce cas, la routine d’interruption par transition du signal électrique
entrant. Autrement dit, une seule exécution par cycle.
▪ Niveau logique 1 (pin à 5V par exemple) ou niveau logique 0 (pin à la masse). Dans ce cas, la
routine d’interruption s’exécute en boucle tant que le pin est à 1 ou à 0 contrairement à
l’utilisation des fronts.

Cours : Microcontrôleurs avancés 54


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
6 Interruptions Déroulement des interruptions

•Sur une interruption, voici ce qui se produit


• l'instruction en cours s'achève
• le masque d'interruption I est automatiquement mis à 1 pour empêcher d'autres
interruptions
• le compteur ordinal PC est sauvegardé sur la pile.
• PC est ensuite chargé avec le vecteur d'interruption (qui effectue normalement un saut
vers le sous-programme d'interruption)

•En fin d'exécution de la routine d'interruption, c'est l'inverse


• PC est chargé avec le dessus de la pile
• I est remis à 0
• le programme reprend alors là où il avait été interrompu

Cours : Microcontrôleurs avancés 55


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
6 Interruptions Liste des interruptions

•26 sources d'interruptions


•ils sont ordonnés par priorité décroissante
• vecteur 1 = Reset : le plus prioritaire

Cours : Microcontrôleurs avancés 56


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
6 Interruptions Utilisation d’une interruption Type de l’interruption

•Pin externe : INT0


•Périphériques (TIMERS, ADC, UART, etc.)
Faire correspondre l’interruption INT0, INT1, etc. avec le pin physique est une étape
importante. L’emplacement du pin dépendre du type du microcontrôleur. Il faut se référencer au
datasheet pour ne pas se tromper de l’emplacement du pin. Ici, on va utiliser l’interruption
INT0 en utilisant la carte Arduino UNO.

Cours : Microcontrôleurs avancés 57


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
6 Interruptions Utilisation d’une interruption Câbler et configurer

Configure le pin dédié en entrée en utilisant la fonction pinMode() ou bien le registre DDRx en
positionnant le bit concerné à « 0 ».

Dans notre cas : on veut utiliser l’entrée


d’interruption INT0, donc il faut utiliser
le pin numéro 2 de l’Arduino.
Et puisque le pin 2 c’est exactement le
bit 2 du PORTD.
Alors on va configurer ce bit de la
manière suivante :
DDRD=B00000000

Cours : Microcontrôleurs avancés 58


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
6 Interruptions Utilisation d’une interruption SREG

Bit 7 – I: Global Interrupt Enable (0x80)


• SREG |= 0x80 // Activation (Positionner le bit 7 à « 1 »)
• SREG &= 0x7F // Désactivation (Forcer le bit 7 à « 0 »)

Cours : Microcontrôleurs avancés 59


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
6 Interruptions Utilisation d’une interruption EIMSK

La validation d’une interruption spécifique est opérée dans le registre EIMSK et positionner le
bit concerné à ‘1’. Le nombre des interruptions va dépendre du type de la carte (nano, mini, mega,
etc.). Consulter le datasheet pour être sure des interruptions disponibles. Dans le cas de la carte
arduino Mega, il dispose de 8 interruptions INT0-INT7, par contre, deux pour Arduino uno (INT0
et INT1) seulement!

• EIMSK|=0x01; // Validation de l’interruption INT0


Cours : Microcontrôleurs avancés 60
Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
6 Interruptions Utilisation d’une interruption EICRA

D’une autre façon, comment la routine d’interruption sera réveillée lorsqu’un évènement se présent
dans le pin dédié (par front ou niveau logique). Le registre EICRA permet de configurer le mode de
déclanchement des interruptions INT0, INT1.
Dans notre exemple, on utilise
l’interruption INT0 alors les bits
ISC01 et ISC00 qui sont
concernés. Dans le cas de
déclanchement par front
montant, il faut positionner les
deux bits à ‘1’. Autrement dit il
faut charger le registre EICRA
avec 0x03 de la façon suivante:
EICRA|=0x03;

Cours : Microcontrôleurs avancés 61


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
6 Interruptions Utilisation d’une interruption Programmer ISR

Interrupt sub-routine (ISR) est la fonction par défaut utiliser pour programmer les
interruptions. Elle ne prend aucun argument en entrée et elle ne retourne aucun résultat. En
revanche, il faut bien préciser le vecteur d’interruption. Chaque interruption dispose d’un vecteur
qui lui est propre. La carte Arduino Uno dispose de 26 interruptions, chaque interruption est
caractérisée par son vecteur et adresse. Vous pouvez dupliquer la fonction autant de fois, il faut
juste préciser le vecteur pour différencier entre les routines.
Exemple :

Cours : Microcontrôleurs avancés 62


Chapitre 2 : Microcontrôleur AVR d’Atmel (Microchip)
6 Interruptions Diviseur de fréquence par 2

Exercice :
L’objectif de l’exemple sera de diviser la fréquence d’un signal PWM par 2 en utilisant
l’interruption externe INT0. Ensuite, générer une sortie PWM synchrone ayant ½ la fréquence du
signal PWM. Utiliser le pin 3 de la carte Arduino pour générer le signal PWM de référence. Ce
dernier sera ensuite câblé avec le pin 2 de la même carte. La routine de l’interruption sera exécutée
à la présence d’un évènement dans le pin 2 de la carte Arduino.
Dans cet exemple, on utilisera la détection par front montant. Dès la présente d’un front montant sur
le pin, on inverse l’état du pin 12.

Cours : Microcontrôleurs avancés 63


Chapitre 3 : Microcontrôleur à base du processeur ARM
1 Qu’est ce qu’un microcontrôleur Microcontrôleur (µC, MCU)

Circuit intégré rassemblant les éléments essentiels d’un ordinateur


• unité de calcul et de contrôle (le cœur)
• mémoire vive
• périphériques
(ex : port série, timers, DMA, flash. . .)
• entrées/sorties (ex : convertisseurs analogique ↔ numérique (ADC/DAC))

Cours : Microcontrôleurs avancés 64


Chapitre 3 : Microcontrôleur à base du processeur ARM
1 Qu’est ce qu’un microcontrôleur Quelques MCUs fameux

Microchip PIC16 (1990, 8 Microchip PIC12 (1990, Atmel AVR (2000, 8/16 bits,
bits, 1MHz, quelques très utilisé en DIY) base des Arduino)
registres)

Cours : Microcontrôleurs avancés 65


Chapitre 3 : Microcontrôleur à base du processeur ARM
1 Qu’est ce qu’un microcontrôleur Quelques MCUs fameux

ARM (2000) : Cœurs communs, différents SoC Freescale, Broadcom, TI etc. (2010,
constructeurs (ST, Texas Instruments, Raspberry Pi)
Microchip. . .)

1GHz, 64 bits, RAM 512 Mo

Cours : Microcontrôleurs avancés 66


Chapitre 3 : Microcontrôleur à base du processeur ARM
1 Qu’est ce qu’un microcontrôleur Le MCU, un compromis

L’intérêt
• forte intégration (une puce intègre toutes les fonctions)
• faible consommation électrique (1–500mW)
• faible coût (0.10–10€)
• généricité (par rapport au silicium dédié)

Les limitations
• peu de capacité de calcul (1–200 MHz)
• très faible stockage (1–512 Ko RAM, 1K–1M flash)

Cours : Microcontrôleurs avancés 67


Chapitre 3 : Microcontrôleur à base du processeur ARM
1 Qu’est ce qu’un microcontrôleur Un MCU n’est pas :

• un CPU (Central Processing Unit) (ex : Intel i7, Apple A11, . . .)


➢ puissance de calcul supérieure (GHz)
➢ pas de mémoire embarquée (quelques registres)
➢ pas de périphériques embarqués (bus externes)

• un FPGA (Field-Programmable Gate Array) (ex : Xilinx, Altera. . .)


➢ circuit intégré reconfigurable
➢ grand nombre de portes logiques généralistes
➢ “programmation” en Verilog/VHDL

Cours : Microcontrôleurs avancés 68


Chapitre 3 : Microcontrôleur à base du processeur ARM
1 Qu’est ce qu’un microcontrôleur Protocoles de communication embarqués

Toute communication entre le cœur et ses périphériques s’établit selon un protocole (une langue
commune)

Interne
bus de données : unité de calcul ↔ RAM ↔ DMA,

Externe
communication avec puces externes ; communication inter-MCU
(ex : réseau de capteurs)

Architectures
symétrique, en réseaux, client-serveur. . .
en général : couches de nombreux protocoles

Exemple UART, SPI, I2C, CAN, USB. . .

Cours : Microcontrôleurs avancés 69


Chapitre 3 : Microcontrôleur à base du processeur ARM
2 La famille des ARM Cortex

ARM architecture qui spécifie (notamment) un jeu d’instructions RISC, l’organisation de la


mémoire, modèle d’exécution. . .
Différentes versions du standard : ARMvX-M
Cortex Famille de cœurs physiques
vendus aux fabricants de silicone
Cortex-A pour Application
(ex : smartphones)
Cortex-R pour Real-time
(temps d’exécution déterministe)
Cortex-M pour eMbedded
(faible consommation)
M0 ARMv6-M, petit et pas cher
M3 ARMv7-M, hardware, plus d’instructions
M4 ARMv7E-M, FPU, DSP
Licences Cortex-M4 Atmel, STMicroelectronics, NXP, Texas Instruments
Cours : Microcontrôleurs avancés 70
Chapitre 3 : Microcontrôleur à base du processeur ARM
2 La famille des ARM Cortex

Cours : Microcontrôleurs avancés 71


Chapitre 3 : Microcontrôleur à base du processeur ARM
3 La famille des MCU STM32

STM32L0 Cortex M0+, 32MHz, 8Ko SRAM, 32-64Ko flash


STM32F1 Cortex M1, 24-72MHz, 4-96Ko SRAM, 16-1024Ko flash
STM32F3 Cortex M4 + FPU, 72MHz, 16-40Ko SRAM, 64-256Ko flash
STM32F4 Cortex M4 + FPU, 180MHz, 64-112Ko SRAM, 256Ko-2Mo flash
....
STM32F7 ARM Cortex-M7F, 216MHz, 512-1024Ko RAM, . . .

Cours : Microcontrôleurs avancés 72


Chapitre 3 : Microcontrôleur à base du processeur ARM
3 La famille des MCU STM32 La série « Haute performance » STM32F4

•Advanced lines:
• 180 MHz CPU/225 DMIPS, up to 2 Mbytes of dual-bank Flash memory with SDRAM
and Chrom-ART Accelerator™
• STM32F469/479 – Quad-SPI interface, LCD-TFT controller and MPI-DSI interface
• STM32F429/439 – LCD-TFT controller
• STM32F427/437 – serial audio interface, more performance and lower static power
consumption
•Foundation lines:
• STM32F446 – 180 MHz/225 DMIPS, up to 512 Kbytes of Flash memory with dual Quad-
SPI and SDRAM interfaces
• STM32F407/417 – 168 MHz CPU/210 DMIPS, up to 1 Mbyte of Flash memory adding
Ethernet MAC and camera interface
• STM32F405/415 – 168 MHz CPU/210 DMIPS, up to 1 Mbyte of Flash memory with
advanced connectivity and encryption

Cours : Microcontrôleurs avancés 73


Chapitre 3 : Microcontrôleur à base du processeur ARM
3 La famille des MCU STM32 La carte STM32F429-discovery
• STM32F429ZIT6 microcontroller featuring 2 Mbytes of Flash memory,
256 Kbytes of RAM in an LQFP144 package
• 2.4" QVGA TFT LCD
• I3G4250D, ST MEMS motion sensor 3-axis digital output gyroscope
• Six LEDs
• Two push-buttons (user and reset)
• 64-Mbit SDRAM
• Extension header for LQFP144 I/Os for a quick connection to the
prototyping board and an easy probing
• On-board ST-LINK/V2-B
• USB functions: – Debug port – Virtual COM port – Mass storage
• Board power supply: through the USB bus or from an external 3 V or 5 V
supply voltage
• Comprehensive free software including a variety of examples, part of
STM32CubeF4 MCU Package or STSW-STM32138, for using legacy
standard libraries

Cours : Microcontrôleurs avancés 74


Chapitre 3 : Microcontrôleur à base du processeur ARM
4 Outils de développement

Cours : Microcontrôleurs avancés 75


Chapitre 3 : Microcontrôleur à base du processeur ARM
4 Outils de développement

Cours : Microcontrôleurs avancés 76


Chapitre 3 : Microcontrôleur à base du processeur ARM
4 Outils de développement

Cours : Microcontrôleurs avancés 77


Chapitre 3 : Microcontrôleur à base du processeur ARM
4 Outils de développement

Cours : Microcontrôleurs avancés 78


Chapitre 3 : Microcontrôleur à base du processeur ARM
4 Outils de développement

Langages
C ou C++. . .
(ou tout langage compilant vers ARMv7)

Environnements de développement
Il en existe plusieurs (IDE, compilateur, debugger etc.) :
• Keil IDE / ArmCC (Keil),
• IAR Embedded Workbench (IAR),
• mBed (ARM)
• SW4STM/Eclipse/STM32CubeMX/gcc (STMicroelectronics)
•...

Cours : Microcontrôleurs avancés 79


Chapitre 3 : Microcontrôleur à base du processeur ARM
4 Outils de développement

Exemple
Pour allumer les LEDs de la carte, il faut :
• écrire 0x00200000 à l’adresse 0x40021014,
• écrire 0x55550000 à l’adresse 0x48000000,
• écrire 0xFFFFFFFF à l’adresse 0x48001014.

Cours : Microcontrôleurs avancés 80


Chapitre 3 : Microcontrôleur à base du processeur ARM
4 Outils de développement Librairies

Plusieurs façons d’accéder aux registres pour configurer/interagir avec les périphériques :
• CMSIS (ARM)
(paraphrase du manuel de référence)
• HAL (STMicroelectronics) (bibliothèque d’abstraction matérielle)
• mBed (ARM)
• FreeRTOS
(système d’exploitation embarqué temps réel)

Cours : Microcontrôleurs avancés 81


Chapitre 3 : Microcontrôleur à base du processeur ARM
4 Outils de développement Librairies CMSIS

CMSIS : Cortex Microcontroller Software Interface Standard

Une surcouche très légère au dessus du matériel pour faciliter la programmation en C.


Ensemble de macros qui donnent des noms :
• aux registres des périphériques
• à leurs valeurs possibles

Cours : Microcontrôleurs avancés 82


Chapitre 3 : Microcontrôleur à base du processeur ARM
4 Outils de développement Librairies HAL

HAL Hardware Abstraction Layer

Bibliothèque de plus haut niveau (STMicroelectronics), qui cherche à s’abstraire des


caractéristiques techniques de chaque MCU
+ code plus clair
+ plus portable
− pas forcément plus concis
− nombreux bugs !

Cours : Microcontrôleurs avancés 83

Vous aimerez peut-être aussi