Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
OUMNAD page 1
Système embarqué
Un système embarqué est défini comme un système électronique et informatique autonome, souvent
temps réel, spécialisé dans une tâche bien précise.
source: http://fr.wikipedia.org/wiki/Système_embarqué
Pour être caractérisé comme temps réel, le système embarqué doit répondre aux stimulis provenant
de son environnement dans un intervalle de temps faible qui dépend de la fonction réalisée.
Le microcontrôleur PIC16F887
L’Horloge
• L'horloge système est un signal carré qui a une importance capitale. C'est elle qui cadence
l'exécution des programmes. Elle est aussi utilisée par les modules d'E/S.
• Le PIC dispose de deux générateurs d'horloge, un oscillateur interne et un oscillateur externe.
• L'horloge générée par ces générateurs sera appelée horloge de base. Sa fréquence est appelée fosc
sa période est appelée tosc,
• Le PIC est un processeur d'architecture RISC, il exécute une instruction par cycle (période)
d'horloge. L'horloge utilisée pour cadencer le programme est l'horloge instruction. Elle obtenue à
l'aide d'un diviseur de fréquence par 4. Sa fréquence est Fosc/4, sa période est Tcy = 4 * tosc
Oscillateur Interne
Horloge de base fosc
Oscillateur Externe
÷4 Horloge instruction fosc/4
• La configuration de l'horloge se fait à l'aide des Switchs du registre CONFIG1 et du registre SFR
OSCCON. Dans la suite, nous prendrons CONFIG1=23E4h pour travailler avec l'horloge interne.
CONFIG1
… FOSC2 FOSC1 FOSC0
OSC1/RA7 He
Oscillateur
OSC2/RA6 Externe
H
MX1 0
MX2 Fosc
Hi 1
Oscillateur
Interne
Hi
1 1 1 8 MHz
1 1 0 4 MHz (défaut)
1 0 1 2 MHz
1 0 0 1 MHz
0 1 1 500 kHz
0 1 0 250 kHz
0 0 1 125 kHz
0 0 0 31 kHz
• Le bit SCS commande le multiplexeur MX2 pour permettre de basculer entre l'horloge interne et
externe. Si MX1 et positionné sur Hi, l'horloge sera interne quelque soit la valeur du bit SCS.
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 4
Le jeux D’instructions
RRF F,d C
C 1 00 1100 dfff ffff
{W,F ? d}
SUBWF F,d F – W {W,F ? d} C,DC,Z 1 00 0010 dfff ffff
SWAPF F,d permute les 2 quartets de F {W,F ? d} 1 00 1110 dfff ffff
XORWF F,d W xor F {W,F ? d} Z 1 00 0110 dfff ffff
Autres InstructionS
CLRW Clear W Z 1 00 0001 0xxx xxxx
CALL etqt Branchement à un sous programme de label etqt 2 10 0kkk kkkk kkkk
GOTO etqt branchement à la ligne de label etqt 2 10 1kkk kkkk kkkk
NOP No operation 1 00 0000 0xx0 0000
RETURN retourne d'un sous programme 2 00 0000 0000 0000
RETFIE Retour d'interruption 2 00 0000 0000 1001
RETLW K retourne d'un sous programme avec K dans W 2 11 01xx kkkk kkkk
SLEEP se met en mode standby TO, PD 1 00 0000 0110 0011
A -B
A = B ==> Z=1 , C=1 Z = 1 => A = B
A > B ==> Z=0 , C=1 C = 0 => A < B
A < B ==> Z=0 , C=0 C = 1 => A ≥ B
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 5
Quelques directives :
Les macros :
Une macro consiste à affecter un alias à un ensemble d’instructions :
BANK0 macro
Bcf STATUS,RP0
Bcf STATUS,RP1
endm
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
Pour toucher un registre de la RAM, il faut d'abord choisir son bank à l'aide des 2 bits RP0 et RP1
BANK0 macro
Bcf STATUS,RP0
Bcf STATUS,RP1
BANK1
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 7
Pour accéder à un registre de la RAM, on place son adresse dans un registre d’adressage (pointeur)
appelé FSR. Pour accéder au contenu du registre pointé, on utilise le mot INDF.
FSR est un registre de 8 bits, il permet d’adresser seulement 256 position (00h → FFh). Or la RAM fait
512 octets (000h → 1FFh). On utilise le bit IRP de STATUS pour compléter le registre d’adressage. On
obtient le pointeur d’adressage :
IRP FSR
La RAM apparait alors coupée en deux pages. FSR permet d’adresser à l’intérieur d’une page, et le bit
IRP permet de choisir la page
Page 0 Page 1
0 00h 1 00h
0 01h 1 01h
0 02h 1 02h
0 03h 1 03h
0 04h 1 04h
. .
. .
. .
. .
. .
. .
. .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
0 FCh 1 FCh
0 FDh 1 FDh
0 FEh 1 FEh
0 FFh 1 FFh
Exemple :
Pour écrire 25 dans le registre d’adresse 04h, et les caractères A et B dans les registre 1FCh et 1FDh
Movlw 04h
Movwf FSR
Bcf STATUS,IRP
Movlw .25
Movwf INDF
Bsf STATUS,IRP
Movlw FCh
Movwf FSR
Movlw 'A'
Movwf INDF
ADDLW 1
INCF FSR,f
Movwf INDF
Exercices
• Permuter le contenu de deux cases mémoire
• Ajouter une valeur à une zone mémoire
• Comparer le contenu d’une zone mémoire à une valeur et faire deux actions différentes
• Permuter deux zones mémoire
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 8
PORTE
RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 RE3
RE1
PORTA PORTB
RE0
RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
• Chaque E/S peut fonctionner soit en entrée soit en sortie. 14 E/S peuvent fonctionner soit en E/S
numériques soit en entrées analogiques AN0, AN1, AN2 … AN13
• Le chois de la direction se fait à l'aide des bits TRIS regroupés dans les registres de direction TRISA,
TRISB, TRISC, TRISD, TRISE
TRIS = 0 Sortie TRIS=1 Entrée
1 1 1 0 0 0 1 0 TRISA
Exemple
RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0 PORTA
• Le choix entre analogique et numérique se fait par les bits ANS regroupés dans les registres ANSEL
et ANSELH
ANS = 0 Numériques ANS = 1 Analogiques
ANSELH ANSEL
ANS13 ANS12 ANS11 ANS10 ANS9 ANS8 ANS7 ANS6 ANS5 ANS4 ANS3 ANS2 ANS1 ANS0
AN13 AN12 AN11 AN10 AN9 AN8 AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0
RB5 RB0 RB4 RB1 RB3 RB2 RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0
ANSEL 1 1 0 0 0 0 1 0
PORTE RE3 RE2 RE1 RE0 RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0 PORTA
• Au démarrage du PIC, tous les bits TRIS et ANS sont à 1 toutes les E/S sont configurées en
entrée. Toutes le E/S-A/N sont configurées en analogiques
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 9
Méthode de développement:
monprog.asm monprog.hex
compilation
Programme Programme
source Exécutable
Programmeur
Programme
Zone Principal
réservée
aux
étiquettes
Fonctions s’il y en a
END
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 10
RES : Résistance
CAP : Condensateur
LOGICPROBE : Voyant logique pour visualiser l’état d’une sortie logique (mieux qu’une LED)
LOGICSTATE : générateur logique interactif : Change d’état à chaque clic
LOGICTOGGLE : générateur d’impulsion interactif : au clic, il change d’état puis revient à son état de
repos
POT-HG : Potentiomètre interactif
NPN : Transistor NPN
PNP : Transistor PNP
LM016L : afficheur LCD 2x16
7SEG-BCD : Afficheur 7 segment avec décodeur incorporé
7SEG-COM-ANODE : Afficheur 7 segments anode commune (rouge)
7SEG-COM-CATHODE : Afficheur 7 segments cathode commune (rouge)
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 11
Premier Programme:
Deuxième Programme:
Cette fois on va brancher la LED sur RB3 et utiliser une boucle légèrement améliorée.
Configuration
Attendre ½ s
PIC PORTD
Vcc RE2
RB7
PIC
PORTD
Programme qui surveille l'entrée RB6, chaque fois qu'il reçoit une impulsion ⍽, il décale PORTD d'un bit vers la
gauche
attendre ↑
oui
E1 ok
non
oui
E2 ok
non
T2
suite
T1
BP1
suite
RC1
Programme qui surveille deux boutons poussoirs. Si BP1 est PIC PORTD
actionné, on décale le chenillard une position vers la BP2
gauche. Si BP2 est actionné, on décale le chenillard une
RC6
position vers la droite.
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 13
Vrel
Vcc
220V
Relai
Rb
PIC
Lampe
Vcc
Rb < β Rrel
Vrel
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 14
VDD
VEE
VSS
RW
RS
D7
D6
D5
D4
D3
D2
D1
D0
E
• Deux lignes de 40 caractères dont 16 sont visibles
14
13
12
11
10
9
8
7
6
5
4
3
2
1
• Les informations sont envoyées sous forme d'octets. L'interprétation dépend de l'entrée RS:
o RS = 0 → L'octet envoyé sera interpré té comme une commande
o RS = 1 → L'octet envoyé est le code ASCII d'un caractère qui sera affiché
• L'octet peut être envoyé en un seul coup (mode 8 bits) ou moitié-moitié (mode 4 bits). Quelque soit
le mode, l'envoi d'un octet ou d'un demi octet est toujours validé par une impulsion ⎍ sur l'entrée E
• Les octets de commandes sont regroupés dans le tableau ci_dessous
• La librairie malib.asm contient des fonctions permettant d'utiliser l'afficheur LCD en mode 4 bits
PORTB
PIC
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 15
lcd_init: Initialisation de l'afficheur en mode 4 bits sur PORTB. Doit être invoquée avant tout accès
à l'afficheur
lcd_char: Affiche le caractère présent dans W à la position du curseur
lcd_puts: Affiche une chaine déclarée dans la EEPROM. W=adresse du premier caractère de la
chaine. La chaine doit se terminer par le caractère NULL (code ascii 0)
lcd_cmd: Envoie l'octet de commande présent dans W
lcd_locate: Positionne le curseur à la position présente dans W. La ligne 1 commence à 0 et la ligne 2
commence à 64
lcd_clrscr : Efface l'écran effacer l'écran et positionne le curseur début ligne 1
lcd_byte_d : Affiche l'octet présent dans W en décimal
lcd_byte_h : Affiche l'octet présent dans W en Hexadécimal
lcd_word_d: Affiche le word présent dans les variables AH, AL en décimal. AL et AH sont déjà
déclarés dans BANK0
Microcontroleurs
2018
Programme qui affiche un compteur 8bits (0 255 modulo 256 ) (rythme 0.5s/0.5s)
Programme qui affiche un compteur 16 bits (0 65535 modulo 65536 ) (rythme 0.1s/0.1s)
Programme qui affiche deux chaines de plus de 16 caractères (une chaine par ligne) puis les fait défiler
vers la gauche au rythme de la demi-seconde
fonction lcd_puts qui affiche un string préalablement déclaré dans la mémoire EEPROM. La chaine doit se
terminer par le caractère NULL (code ascii 0). Lors de l'appel de la fonction, W doit contenir l'adresse
du premier caractère de la chaine
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 16
ORG 0
programme
--------
Procédure de lecture
1) le bit EEPGD doit être à 0 (c'est sa valeur par défaut)
2) Placer l’adresse relative de la position à lire dans le registre EEADR,
3) Mettre le bit RD à 1 pour démarrer la lecture. Le PIC transfert la donnée demandée dans le registre
EEDATA et remet le bit WR à 0 automatiquement. L'opération de lecture prend moins d'un cycle machine
4) Traiter la donnée disponible dans EEDATA,
5) Recommencer au point 2 si on a d'autres données à lire,
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 17
Procédure d'écriture
1) Le bit EEPGD doit être à 0 (c'est sa valeur par défaut)
2) Le bit WREN doit être à 1 sinon toute écriture sera soldée par un échec
3) Faire les opérations suivantes pour chaque octet à écrire
a) Placer l’adresse relative de la position à écrire dans le registre EEADR
b) Placer la donnée à écrire dans le registre EEDATA
c) Ecrire 55h dans EECON2
d) Ecrire AAh dans EECON2
e) Positionner le bit WR à 1 pour démarrer l'opération d'écriture,
Programme qui écrit l'alphabet dans la mémoire EEPROM à partir de la position 40h
Programme qui déclare une chaine à partir de la position 20h de la EEPROM à l'aide des directives ORG et
DE puis la relit octet par octet et la place dans la RAM à partir de la position 190h
Programme qui déclare une chaine dans la EEPROM à l'aide des directives ORG et DE puis la relit octet par
octet et l'affiche sur l'afficheur LCD
Programme qui déclare deux chaines dans la EEPROM à l'aide des directives ORG et DE puis les affiche sur
l'afficheur LCD (une chaque ligne) à l'aide de la fonction lcd_puts
Programme qui cherche la valeur minimale des 10 premières cases mémoire de la EEPROM et l'affiche sur
l'afficheur LCD
Programme qui copie le contenu de la zone mémoire RAM [190h, 1B0h] dans la mémoire EEPROM à partir de la
position 20h
Programme qui copie le contenu de la zone mémoire EEPROM [20h, 90h] dans la mémoire RAM à partir de la
position 110h
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 18
Mécanisme d'interruption
Une interruption est un événement qui provoque la suspension temporaire du programme en cours
pour aller exécuter une procédure d'interruption. A la fin de cette procédure, le microcontrôleur
reprend le programme à l’endroit où il l’a laissé.
A chaque interruption sont associés deux bits, un bit de validation et un drapeau. Le premier permet
au programmeur (nous) d'autoriser ou non l'interruption. Le second est un drapeau (bit) levé par la
source d'interruption pour indiquer qu'elle demande une interruption. Après le traitement de
l'interruption, le drapeau doit être ramené à 0. (Pour certaines interruptions, le drapeau revient à 0
automatiquement, pour d'autres, c'est au programmeur de le ramener à 0.)
Sources d'interruptions
Validation Validation
Interruption Sources d’interruption Flag
individuelle Globale
INT Transition sur l’entrée RB0/INT INTE GIE INTF
Transition sur une entrée du PORTB. (Interrupt
IOCB IOCBx GIE, RBIE RBIF
On change on PORTB)
T0I Débordement du Timer TMR0 T0IE GIE T0IF
ADI Fin de conversion A/N ADIE GIE, PEIE ADIF
Changement à la sortie des comparateurs
C1I, C2I CxIE GIE, PEIE CxIF
analogiques
Détection d’une défaillance sur un élément externe
OSFI OSFIE GIE, PEIE OSFIF
de l’horloge (Fail-Safe Clock Monitor Interrupt)
RCI Un Octet est reçu sur l'USART RCIE GIE, PEIE RCIF
TXI Fin transmission d'un octet sur l'USART TXIE GIE, PEIE TXIF
TMR1I Débordement de Timer TMR1 TMR1IE GIE, PEIE TMR1IF
TMR2I Timer TMR2 a atteint la valeur programmée TMR2IE GIE, PEIE TMR2IF
Capture/Comparaison de TMR1 avec module
CCP1I CCP1IE GIE, PEIE CCP1IF
CCP1
CCP2I Capture/comparaison de TMR1 avec module CCP2 CCP2IE GIE, PEIE CCP2IF
EEI Fin d'écriture en EEPROM EEIE GIE, PEIE EEIF
CCLI Collision sur bus SSP en mode I2C BCLIE GIE, PEIE BCLIF
Sorties périodiques du mode sleep (Ultra Low-
ULPWUI ULPWUIE GIE, PEIE ULPWUIF
Power Wake-up interrupt)
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 19
INTE . Déclenchement de
l'interruption
GIE
Le drapeau INTF doit être ramené à 0 par le programme
L'interruption IOCB
Cette interruption est provoquée par un changement d'état sur n’importe quelle entrée de PORTB. Le
front n'a pas d'importance. Elle est annoncée par le drapeau RBIF. Sa validation se fait (globalement)
par les bits GIE et RBIE, et individuellement (pour chaque entrée de PORTB) par les bits du registre
IOCB (bank1)
Attention:
Le drapeau RBIF ne peut être remis à zéro sans l'accès préalable (lecture/écriture) au port PORTB.
BANK1
Attention: bsf IOCB,IOCB5
A la mise sous tension, le drapeau RBIF peut être égal à 1 ce BANK0
movf PORTB,w
qui peut déclencher intempestivement l’interruption. Pour y bcf INTCON,RBIF
remédier il faut baisser le drapeau avant de valider bsf INTCON,RBIE
entièrement l'interruption bsf INTCON,GIE
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 20
La levé du drapeau RBIF peut sortir le PIC du mode sleep si le bit de validation RBIE a été positionnés
au préalable.
Exercices:
Chaque fois qu'une transition 1→ 0 survient sur l'entrée RB0, la LED branchée sur la sortie RB1 clignote
5 fois au rythme de la ½ seconde.
Programme qui fait sonner 5 fois l'alarme branchée sur RA5 chaque fois qu'un des 3 capteurs branchés sur
RB0, RB3 et RB7 est actionné
C1 RB0 PIC
C2 RB3 RA5
C3 RB7
Programme qui réalise une division de fréquence par une valeur DIV qui sera lue sur PORTD.
Le signal d'entrée est appliqué sur l'entrée RB5. Le signal de sortie est généré sur la sortie RB4.
On utilisera l'interruption IOCB pour détecter les transitions du signal d'entrée.
L'algorithme est simple. On compte les transitions du signal d'entrée. Chaque fois qu'on a compté DIV
transitions, on change l'état du signal de sortie.
PIC
RB5 RB4
PORTD
DIV
AN2/RA2 0010
1 0
AN3/RA3 0011 VCFG0
GO/DONE
AN4/RA5 0100
Start Vref+
AN5/RE0 0101
0110 S
AN6/RE1 ADRESL
AN13/RB5 1101
CVREF 1110
ADCS1:ADCS0 : Choix de l'horloge de conversion, Tad = Tosc × div doit être ≥ 1.6µs
00 : div = 2
01 : div = 8
10 : div = 32
11 : Oscillateur RC dédié au CAN, Tad est de l'ordre de 4 µs
GO_DONE : En plaçant ce bit à 1, on démarre une Conversion. A la fin de la conversion, il revient automatiquement à 0
ADFM : justification à droite ou à gauche du résultat dans les registre ADRESH et ADRESL
ADRESH ADRESL
1 : justifié à droite 000000xx xxxxxxxx
0 : justifié à gauche xxxxxxxx xx000000
Ve
Va
S
Va Ve
CAN
10 pF
2Tad
12Tad Tacq
GO/DONE
nous automatique
Travaux Dirigés
Programme qui converti la tension appliquée à RB2 et recopie ADRESL dans PORTC et ADRESH dans PORTD. On
travaille ave Fosc = 4MHz
Programme qui converti la tension appliquée à RE2 et affiche le résultat sur l'afficheur LCD
Programme qui converti les tension appliquée à RA0, RA1, RA2 et RA3 et affiche les résultat sur
l'afficheur LCD
Programme qui fait l'acquisition de 40 échantillons du signal appliqué sur RE0, et recopie les résultats
dans la RAM à partir de la position 190h. L'échantillonnage se fera à la vitesse la plus rapide possible
ADCON0 BANK0
ADCON1 BANK1
ADRESL BANK1
ADRESH BANK0
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 23
TXIF TXREG
TSR RC6/TX
RSR RC7/RX
RCIF RCREG
Registre
Description Position Valeur générique
ou bit
TXSTA Registre de configuration BANK1 24h
RCSTA Registre de configuration BANK0 90h
SPBRG Registre de Configuration de la vitesse de communication BANK1 4 × Fosc
SPBRG = -1
64 × vitesse
TXREG Registre (buffer) de transmission BANK0
RCREG Registre (buffer) de réception BANK0
TXIF Drapeau (Transmission) PIR1
TXIF=1 TXREG vide BANK0
TXIF=0 TXREG plein
RCIF Drapeau (Réception) PIR1
RCIF=1 RCREG plein BANK0
RCIF=0 RCREG vide
• Pour utiliser l'USART, il faut commencer par configurer les registres TXSTA, RCSTA et SPBRG
comme indiqué sur le tableau ci-dessus
• Pour transmettre un octet, il suffit de le copier dans le registre de transmission après avoir vérifié
que celui-ci est libre à l'aide du drapeau TXIF (Registre PIR1, BANK0)
• Quand l'USART reçoit un octet, Elle le place dans le registre de réception RCREG et lève le drapeau
RCIF (Registre PIR1, BANK0)
Travaux Dirigés
Programme qui Transmet (vitesse 9600 baud) l'alphabet de A à Z avec une temporisation de 0.5s entre chaque
caractère. Après le Z, il transmet un CR (code ascii 13) et recommence
Programme qui écoute l'USART, quand il reçoit un octet, il lui ajoute 1 puis le retransmet
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 24
Le timer TMR2
PR2
T2CON
— TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
Avec Fosc=4MHz, Donner la valeur max que l'on obtenir pour la période TF2.
Que devient cette valeur si on ajoute un compteur CTR (1 seul registre) dans le programme
Quelle est la temporisation max que l'on peut obtenir si on rajoute dans le programme un compteur CTR qui
compte les périodes TF2. (CTR ≡ 1 seul registre)
Proposer une combinaison des variables CTR, PREDIV, POSTDIV, PR2 pour avoir un temps de 0.5 s
Programme pour faire clignoter une LED branchée sur RC3 au rythme de la ½ seconde
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 25
Un signal PWM (Pulse Width Modulation) ou MLI (Modulation de largeur d'impulsion) est un signal de
rapport cyclique TH/T réglable.
TH
Le PIC contient deux modules CCP1 et CCP2 qui, associés au timer TMR2 peuvent être utilisés pour
générer des signaux PWM.
CCP1CON
P1M1 P1M0 DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0
P1M1, P1M0 : configuration des sorties P1A/RC2, P1B/RD5, P1C/RD6 et P1D/RD7
00 : single output : le signal PWM est disponible sur les sorties P1A, P1B, P1C, P1D selon la configuration
du registre PSTRCON. Par défaut, si on ne touche pas le registre PSTRCON, le signal PWM est disponible
sur P1A/RC2
01 : full bridge forward : P1D = sortie PWM, P1A active, P1B, P1C inactives
10 : half bridge : P1A, P1B = sorties PWM et PWM, P1C, P1D = E/S normales
11 : full bridge reverse : P1B = sortie PWM, P1C active, P1A, P1D inactives
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 26
DC1B1, DC1B0 : Ces deux bits constituent le nombre DCB utilisé dans le calcul de la largeur
d'impulsion.
CCP1M3 à CCP1M0 : mode de fonctionnement du module CCP1. Seules les combinaisons
concernant le mode PWM sont citées ici :
0000 : module CCP1 arrêté
1100 : mode PWM, P1A, P1C actives au niveau haut, P1B, P1D actives au niveau haut
1101 : mode PWM, P1A, P1C actives au niveau haut, P1B, P1D actives au niveau bas
1110 : mode PWM, P1A, P1C actives au niveau bas, P1B, P1D actives au niveau haut
1111 : mode PWM, P1A, P1C actives au niveau bas, P1B, P1D actives au niveau bas
(Attention aux utilisateurs du logiciel de simulation PROTEUS-ISIS, il semble que les deux dernières
configurations ne fonctionnent pas correctement)
T2CON
— TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
T2CKPS1,T2CKPS0: rapport du Prédiviseur (PREDIV)
00 : division par 1
01 : division par 4
1x : division par 16
PSTRCON
-- -- -- STRSYNC STRD STRC STRB STRA
STRSYNC
0 : la distribution du signal PWM sur les sorties est actualisée à chaque période PWM
1 : la distribution du signal PWM sur les sorties est actualisée à chaque cycle instruction
STRx
0 : La sortie P1x est une E/S normale
1 : La sortie P1x contient le signal PWM
A la mise sous tension, le registre PSTRCON est égal à - - - 0 0 0 0 1, ce qui fait que le signal PWM
est disponible sur la sortie P1A/RC2
Best practice
Pour éviter les aléas lors de la phase du démarrage du module CCP, il est conseillé de n'activer (TRIS)
la sortie PWM que lorsque le timer TMR2 a terminé un cycle (TMR2IF passe à 1) affin de s'assurer que
le rapport cyclique et correcte.
Travaux dirigés:
Programme qui écoute le port série (L'USART) à la vitesse de 9600, s'il reçoit :
• Il utilise 3 fils. SDA pour les données, SCL pour l'horloge et un fil pour la masse,
• Lors d'une communication, un circuit joue le rôle de master, l'autre le rôle du slave. C'est toujours
le master qui génère le signal horloge,
• Un master peut communiquer avec plusieurs slaves. Chaque slave est caractérisé par une adresse
unique. Un système peut comporter plusieurs masters. Dès qu'un master prend le contrôle du bus,
les autres doivent attendre que le bus soit de nouveau libre. un système d'arbitrage permet de
détecter les collisions. Certains circuit comme le PIC peuvent fonctionner soit en master soit en
slave
Vcc
Bus I2C
SDA SCK SDA SCK SDA SCK SDA SCK SDA SCK
• les E/S SDA et SCK fonctionnent en mode collecteur ouvert (ou drain ouvert) de sorte qu'un circuit
peut soit forcer la ligne au niveau bas soit libérer la ligne. le niveau haut est obtenu par une
résistance de tirage (pull-up) externe.
Vcc
Lecture
Lecture
Ecriture Ecriture
SCK
SDA
SCK stoP
Les Microcontrôleurs et Systèmes embarqués A. OUMNAD page 29
• L'échange d'un octet se fait toujours en 9 coups d'horloge. Le 9ème coup d'horloge sert à échanger
l'acquittement qui est placé sur la ligne SDA par le récepteur. 0 pour acquittement positif (ACK), 1
pour acquittement négatif (NoACK)
Acknowledge
SDA D7 D6 D5 D4 D3 D2 D1 D0
SCK
R/W
SSPBUF
SSPCON
SSPCON2 SCK/RC3
SSPSTA
SSPSR SDA/RC4
SSPADD
La librairie i2c_lib.inc permet d'utiliser le module I2C du PIC en mode master. Elle contient les
fonctions suivantes:
i2c_init: Initialise le module. W doit contenir un entier qui fixe la fréquence (F) de l'horloge de
Fosc
communications. Cet entier est calculé par la formule − 1
4 × F
Les vitesses standard du bus I2C sont 100kHz, 400kHz et 1 MHz.
i2c_write_a: envoie l'octet (adresse R/W) présent dans W sur le bus I2C puis teste l'acquittement, Si
négatif, voie un ReSTART puis retransmet l'adresse et reteste. Cette fonction est bloquante
dans le cas où l'acquittement est toujours négatif
i2c_write_d: envoie l'octet présent dans W sur le bus I2C puis teste l'acquittement, Si négatif,
retransmet l'octet puis reteste. Cette fonction est bloquante dans le cas où l'acquittement
est toujours négatif