Computers">
Chapitre N°4: Les Périphériques Intégrés Du Microcontrôleur
Chapitre N°4: Les Périphériques Intégrés Du Microcontrôleur
Chapitre N°4: Les Périphériques Intégrés Du Microcontrôleur
Chapitre N°4
Les périphériques intégrés
du microcontrôleur
Objectifs à atteindre :
Etudier les périphériques intégrés d’un microcontrôleur à partir du document
constructeur (datasheet)
Identifier et mettre en œuvre les périphériques intégrés d’un microcontrôleur
Lire et comprendre le document constructeur d’un microcontrôleur
1 Introduction :
Les microcontrôleurs intègrent des fonctionnalités qu'il est souvent utile de connaître pour
gagner du temps de développement. Par exemple, le PIC16F87X (qui sera le support de notre
cours) intègre les « modules » suivants :
Les compteurs (Timer)
Les modules « Capture Compare PWM » (CCP)
Les comparateurs (Comparator)
Les modules de conversion analogique/numérique (CAN/CNA)
Port série universel (USART)
SSP, Port série synchrone supportant I2C
Remarque : Si le PIC est utilisé en mode ICSP/ICD il faut laisser libre les broches RB3/PGM,
RB6/PGC ainsi que RB7/PGD) et les configurer en entrée.
• Le PORT C (8 bits) I/O pure et/ou TIMER 1 et/ou SPI / I2C et/ou USART.
• Le PORT D (8 bits) I/O pure et/ou port parallèle 8 bits associé au PORT E.
• Le PORT E (3 bits) I/O pure et/ou pilotage du PORT E RE0/RD, RE1/WR et RE2/CS.
Toutes les lignes de PORTs peuvent fournir un courant de 25mA par ligne de PORT. Une
limite de 40mA par PORT doit être respectée pour des questions de dissipation.
2.2 Le PORT A.
Le PORT A (cinq bits) I/O pure et/ou convertisseur analogique et/ou TIMER 0.
Attention à PA4 (Entrée du TIMER 0 T0CKI), elle est de type DRAIN OUVERT.
PORTA FUNCTIONS
2.3 Le PORT B.
Le PORT B dispose de (8 bits) I/O pure et/ou programmation in situ ICSP/ICD (Broche
RB3/PGM, RB6/PGC et RB7/PGD) et une entrée d’interruption externe RB0/INT.
Il dispose de deux fonctions spéciales :
La première c’est la possibilité de configurer toutes ses lignes avec une résistance de
PULL-UP en configurant le bit RBPU à 0 du registre OPTION.
La deuxième, c’est la possibilité de générer une interruption sur un changement d’état des
broches RB4 à RB7. C’est très pratique pour la gestion des claviers matricés.
PORTB FUNCTIONS
2.4 Le PORT C.
Le PORT C (8 bits) I/O pure qu’il partage avec le TIMER 1, la liaison SPI / I2C et l’USART.
PORTC FUNCTIONS
Le PORT D (8 bits) I/O et PORT E (3 bits) utilisent la même type structure interne.
PORTD FUNCTIONS
PORTE FUNCTIONS
Remarque : Les entrées analogiques RE1/AN5, RE2/AN6 et RE3/AN2 sont disponibles avec
les PICs 16F877 et 16F874.
Une conversion commence toujours par la mise à 1 du bit GO/DONE du registre ADCON0.
Lorsque la conversion est terminée se bit repasse à 0.
Donc pour pouvoir lire le résultat dans les registres ADRESL et ADRESH il suffit d’attendre
que le bit GO/DONE passe à 0.
De plus le bit ADFM permet de choisir entre deux types de justification pour le résultat.
- Si ADFM=1 alors le résultat sera justifié à droite dans les registre ADRESH et
ADRESL, c'est-à-dire ARESL contient les bits 7 à 0 du résultat de la conversion et
ADRESH contient 6 zéros suivi des bit 9 et 8 du résultat de la conversion.
- Si ADFM=0 alors le résultat sera justifié à gauche, c'est-à-dire ARESH contient les
bits 9 à 2 du résultat de la conversion et ADRESH contient les bit 1 et 0 du résultat
de la conversion suivi de 6 zéros.
A/D RESULT JUSTIFICATION
Le choix de l’horloge est déterminé par les bits ADCS1 et ADCS0, sachant que le temps TAD
doit être au minimum de 1,6μS.
TAD vs. MAXIMUM DEVICE OPERATING FREQUENCIES (STANDARD DEVICES (C))
1) Si des entrée de PORTE sont utilisées, le configurer en mode normal a l'aide du bit
PSPMODE
2) Configurer les E/S en Analogique/Numérique/Référence (ADCON1)
3) Configurer les entrées analogiques en entrées (TRISA, TRISE)
4) Définir l'horloge de conversion a l'aide du diviseur DIV dans ADCON0
5) Choisir le canal a convertir et valider le module (ADCON0)
6) Attendre le temps d’acquisition (12 μs )
7) Lancer la conversion, GO = 1 (ADCON0)
8) Attendre fin de conversion, GO = 0 ou drapeau ADIF=1
9) Traiter le résultat
10) Si l'on désire prendre d'autres mesures, recommencer au point 7 en faisant attention aux
timings
Exercice N°3
Refaire l’exercice précédent avec une fréquence d’échantillonnage fe = 8000Hz. Utiliser le
timer2 pour ajuster la période d'échantillonnage.
Exercice N°4
On souhaite obtenir la configuration suivante avec un PIC16F877 :
RE2 : Sortie logique RE1 : Sortie logique RE0 : Entrée logique
RA5 : Sortie logique RA4 : Entrée Logique RA3 : Entrée analogique
RA2 : Entrée logique RA1 : Entrée analogique RA0 : Entrée analogique
Tension de référence VREF = VDD – VSS = 5V et fréquence du quartz égale à 12MHz.
On demande d’écrire le programme en MikroC.
4 LES TIMERS.
Les PICs 16F87x disposent de 3 timers :
Ils peuvent être utilisés en compteur d’événements extérieurs.
Exemples d’utilisation :
Compteur de pièces dans une machine industrielle
Affichage de la vitesse d’un véhicule
- Le timer 0 (8 bits): Il peut être incrémenté par des impulsions extérieures via la broche
(TOCKI/ RA4) ou par l’horloge interne (Fosc/4).
- Le timer 1 (16 bits): Il peut être incrémenté soit par l’horloge interne, par des impulsions sur la
broche T1CKI/RC0 ou par un oscillateur (RC ou quartz) connecté sur les broches TOSO/RCO et
T1OSI/RC1.
- Le timer 2 (8 bits) : Il est incrémenté par l’horloge interne, celle peut être pré divisée.
Tous ces timers peuvent déclencher une interruption interne, s’ils ont été autorisés.
4.1 Le timer 0.
4.1.1 Présentation :
C’est le plus ancien des timers implantés dans les PICs, son ancienne appellation était RTC, pour
Real Time Clock (horloge temps réelle). On peut se servir de celui-ci pour générer des
événements périodiques, comme le rafraîchissement d’afficheurs multiplexés ou
l’incrémentation de variables (secondes, minutes …. ).
Celui-ci est incrémenté soit par l’horloge interne (Fosc/4) ou par une horloge appliquée sur la
broche TOCKI/ RA4.
BLOCK DIAGRAM OF THE TIMER0/WDT PRESCALER
Sur ce schéma le timer 0 partage avec le chien de garde Watchdog le pré diviseur. Celui-ci est
affecté à l’un ou à l’autre, suivant la valeur du bit PSA (0 : Timer0 et 1 : chien de garde).
On peut obtenir un schéma simplifié du fonctionnement du timer0 sans le chien de garde.
Timer0 Block Diagram
4.1.2 Fonctionnement :
Le bit T0CS permet de choisir l’horloge, interne (Fosc/4) ou externe T0CKI/RA4. Dans ce
dernier cas l’incrémentation du timer 0 peut se faire soit sur front montant ou descendant suivant
la valeur du bit T0SE.
Le bit PSA de choisir si horloge permet de pré diviser l’horloge d’un rapport allant de 2 à 256.
La valeur de pré division est fixée par les bits PS2, PS1 et PS0.
Quand le contenu du timer 0 passe de FF à 00 le bit T0IF passe à 1 pour signaler un
débordement, si le bit T0IE est à 1 alors une interruption timer 0 est déclenchée.
Le contenu du timer 0 peut être modifié à tout instant, à une condition près, la nouvelle valeur
inscrite dans le registre TMR0 sera prise en compte après 3 cycles machines.
Remarque importante : Lorsque le bit T0IF passe à 1 lors du passage de la valeur FFh à 00h
du registre TMR0, il doit être remis à 0 de façon logicielle par une instruction du type : bcf
INTCON,T0IF
4.2 Le timer 1.
4.2.1 Présentation :
Il fonctionne sur le même principe que le timer 0, mais il est plus moderne dans sa conception.
C’est un compteur 16 bits.
TIMER1 BLOCK DIAGRAM
4.2.2 Fonctionnement :
Le bit TMR1CS permet de choisir l’horloge soit interne (Fosc/4), externe T1CKI ou un
oscillateur à quartz connecté sur les broches T1OSO et T1OSI.
Les bits T1CKPS1 et T1CKPS0 permettent de choisir la valeur de la pré-division à appliquer à
l’horloge choisie, de 1 à 8.
Le bit T1SYNC permet de choisir si l’horloge de sortie du pré diviseur doit être synchrone avec
l’horloge du microcontrôleur. Dans le cas où l’on choisit l’horloge interne Fosc/4, il n’est pas
nécessaire de la synchroniser.
Le bit TMR1ON active ou désactive le timer 1. Si ce bit est à 1 alors le timer 1 est en
fonctionnement et les registres TMR1H :TMR1L sont incrémentés à chaque coup d’horloge.
Quand le contenu du timer 1 passe de FFFF à 0000 le bit TMR1IF passe à 1 pour signaler un
débordement, de plus si le bit TMR1IE est à 1 alors une interruption timer 1 est déclenchée.
Remarque importante : Lorsque le bit TMR1IF passe à 1 lors du passage de la valeur FFFF à
0000 des registres TMR1H :TMR1L, il doit être remis à 0 de façon logicielle par une
instruction du type : bcf PIR1,TMR1IF
4.3 Le timer 2.
4.3.1 Présentation :
C’est un timer 8 bits, son horloge ne peut être que l’horloge interne divisée par 4 (Fosc/4)
TIMER2 BLOCK DIAGRAM
4.3.2 Fonctionnement :
Il est incrémenté par l’horloge interne (Fosc/4) pré divisée ou non. Les bits T2CKPS1 et
T2KPS0 permettent de choisir la valeur de la pré division (1,4 ou 16).
Le contenu du registre incrémenté TMR2 et il est comparé au registre PR2, si ces deux registres
sont égaux alors une impulsion d’horloge est générée et le contenu de TMR2 est remis à 00h.
Celle-ci peut servir d’horloge pour piloter les liaisons I2C et SPI du module SSP ou encore être
divisée par un post diviseur appelé : POSTSCALER.
Son rapport de division peut être de 1 à 16. Les bits T2OUTPS0, T2OUTPS1, T2OUTPS2, et
T2OUTPS3, permettent de choisir la valeur de la post division 1, 2, 3, 4, 5 …. 16.
Quand la sortie du post diviseur passe à 1 le bit TMR2IF est positionné, celui-ci peut déclencher
une interruption si celle-ci a été autorisée (Bit TMR2IE à 1 du registre PIE1).
Remarque importante : Lorsque le bit TMR2IF passe à 1 lorsqu’une impulsion est générée en
sortie du POSTSCALER, il doit être remis à 0 de façon logicielle par une instruction du type :
bcf PIR1,TMR2IF
Ces deux modules peuvent fonctionner dans l’un des trois modes ci-dessous :
- Mode capture (CAPTURE) : Ce mode permet en autre d’effectuer des mesures de
temps.
- Mode comparaison (COMPARE) : Ce mode permet en autre de générer des
événements périodiques.
- Mode PWM (PULSE WITH MODULATION): Ce mode permet de générer des
signaux dont le rapport cyclique est variable.
Ces modules sont associés aux broches RC2/CCP1 et RC1/T1OSI/CCP2. Suivant le mode
choisit, les timers 1 ou 2 vont être utilisés. Les modes Capture et Comparaison utilise le timer
1, tandis que le mode PWM utilise le timer 2.
Dans ce mode, le registre 8 bits CCPR1L auquel s’ajoutent les bits 4 et 5 du registre CCP1CON
constitue un mot de 10 bits correspondant à la largeur de l’impulsion :
Largeur de l’impulsion = CCPR1L :CCP1CON<5:4>.Tosc. (valeur du pré-diviseur du timer 2)
La période du signal PWM dépend d’une valeur devant être écrite dans le registre PR2.
Elle est donnée par la relation :
Période PWM = (PR2 + 1) . 4 Tosc . (valeur du pré-diviseur du Timer 2 )
La période PWM doit être supérieure à la durée de l’impulsion.
5.1 Présentation :
Remarque : La liaison USART du PIC peut fonctionner soit en mode synchrone ou
asynchrone, seul le mode asynchrone sera étudié.
La liaison série SCI est une interface série asynchrone de type START / STOP. Elle permet
d'effectuer des communications avec d'autres systèmes ou objets techniques sur de longues
distances (quelques mètres à quelques kilomètres).
- Fonctionnement en Full Duplex, c'est à dire émission et réception de données en même temps.
- Transmission et réception de données (compatibles avec la norme RS232 en utilisant une
fonction d’adaptation de niveaux).
- Contrôle des erreurs de transmission et de réception.
- Transmission sur 8 ou 9 bits.
- Mode réveil automatique lors de la réception de signaux valides.
- quatre sources d'interruptions possibles.
5.2 La transmission :
5.2.1 Présentation :
5.2.2 Fonctionnement :
ASYNCHRONOUS MASTER TRANSMISSION
Cette fonction utilise un registre à décalage pour transmettre les 8 ou 9 bits de l’information du
registre TXREG. Pour que cette fonction soit opérationnelle, il faut que la broche RC6 du
PORTC soit configurée en sortie, positionner à 1 le bit SPEN du registre RCSTA et le bit
TXEN du registre TXSTA.
Dans le cas où l’on utilise une transmission sur 9 bits (Bit de parité par exemple), il faut autoriser
la transmission sur 9 bits via le bit TX9 du registre TXSTA, la valeur du neuvième bit doit être
mise dans le bit TX9D du registre TXSTA.
Avant de transmettre une information, il faut s’assurer que le registre de transmission soit libre à
travers le bit TXIF (1 libre et 0 occupée). Le bit TMRT du registre TXSTA indique si la
transmission est complètement terminée (1 terminée et 0 occupée).
5.3 La réception :
5.3.1 Présentation :
USART RECEIVE BLOCK DIAGRAM
5.3.2 Fonctionnement :
ASYNCHRONOUS RECEPTION
Cette fonction utilise un registre RSR à décalage pour les 8 ou 9 bits de l’information à recevoir,
une fois la réception terminée la valeur est stockée dans le registre RCREG.
Pour que cette fonction soit opérationnelle, il faut que la broche RC7 du PORTC soit configurée
en entrée et positionnée à 1 le bit SPEN du registre RCSTA.
Dans le cas ou l’on utilise une réception sur 9 bits, il faut autoriser la réception sur 9 bits via le
bit RX9 du registre RCSTA, la valeur du neuvième bit est récupérée dans le bit RX9D du
registre RCSTA.
Avant de lire une information dans le registre RCREG, il faut s’assurer que l’information est
bien reçue en testant le bit RCIF (1 Donnée reçue), ce bit est remis à 0 lors de la lecture du
registre RCREG.
Les bits FERR et OERR peuvent indiquer respectivement une erreur de format et une erreur «
over run ».
Tableaux de vitesses :
BAUD RATES FOR ASYNCHRONOUS MODE (BRGH = 0)
Legend:x = unknown, - = unimplemented, read as '0'. Shaded cells are not used by the BRG.
Un bus I2C peut être relié à plusieurs circuits, mais pendant une communication, un des circuits
est le maître, c'est lui génère l'horloge et initie les séquences de transmission, l'autre est l'esclave,
il subit l'horloge du maître sur la ligne SCK mais il peut tout de même recevoir et émettre des
données sur la ligne SDA. Chaque esclave a une adresse, au début d'une séquence de
communication, le maître qui initie la séquence envoie l'adresse du slave avec lequel il désire
communiquer, celui-ci reconnaît son adresse et répond, les autres slaves (s'il y en a) restent
muets.
Certains circuits sont fabriqués pour être des masters, d'autres des slaves et d'autres peuvent être
soit l'un soit l'autre. Pour prendre le contrôle du bus, il faut que celui-ci soit au repos ( SDA et
SCL à '1'). Lorsqu'un circuit prend le contrôle du bus, il en devient le maître. C'est lui qui génère
le signal d'horloge et c'est lui qui initie les séquences d'échange.
7 Les interruptions
7.1 Généralités
Une interruption est un événement extérieur qui va détourner le programme de son
fonctionnement normal, pour exécuter un programme dit d’interruption permettant de gérer
l’événement. Une fois le programme d’interruption fini, le système retourne dans le programme
principal à l’instruction suivante.
7.2 Présentation.
Le μC dispose de plusieurs sources d'interruptions.
Une interruption externe, action sur la broche INT/RB0.
Débordement du TIMER0.
Changement d’état logique sur une des broches du PORTB (RB4 à RB7).
Une interruption d’un des périphériques (PEIE).
Fin de programmation d’une case mémoire de l’EEPROM.
Changement d’état sur le PORTD (PSPIE).
Fin de conversion analogique numérique (ADIE).
Réception d’une information sur la liaison série (RCIE).
Fin d’émission d’une information sur la liaison série (TXIE).
Interruption SPI ou I2C du module MSSP (SSPIE).
Interruption du registre de capture et/ou de comparaison 1 (CCPI1E).
Interruption du registre de capture et/ou de comparaison 2 (CCPI2E).
Débordement du TIMER1 (TMR1E).
Débordement du TIMER2 (TMR2E).
Collision de BUS (BCLIE)
7.3 Fonctionnement.
Lors d’un événement dans un ou plusieurs des circuits périphériques (ADC, EEPROM,
USART-SCI, MSSP-I2C-SPI, TIMER1, TIMER2) comme par exemple : la fin de conversion,
la fin de programmation d’un octet dans l’EEPROM, la réception d’une information, la
détection d’un front, etc… et si le bit de l’interruption concernée a été autorisée (EEIE, PSPIE,
ADIE, RCIE, TXIE, SSPIE, CCP1IE, TMR2IE, TMR1IE, CCP2IE ou BCLIE : Registres
PIE1 et PIE2) alors une interruption périphérique est déclenchée. Pour que celle-ci soit prise en
compte il faut que le bit d’autorisation des interruptions périphériques soit positionné à 1 (PEIE)
ainsi que le bit GIE d’autorisation globale des interruptions du registre INTCON.
Pour qu’une interruption du type TIMER0 ou INT/RB0 ou PORTB soit prise en compte il
suffit que le bit local d’autorisation d’interruption soit positionné à 1 (T0IE ou INTE ou RBIE)
ainsi que le bit GIE d’autorisation globale des interruptions du registre INTCON.
Dans ces conditions le programme en cours d’exécution est interrompu et le microcontrôleur
exécute le programme d’interruption à partir de l’adresse 0x0004. Au début de celui-ci il faut
que le logiciel vérifie quel périphérique a déclenché l’interruption.
INTERRUPT LOGIC