Académique Documents
Professionnel Documents
Culture Documents
Cour Spic
Cour Spic
Mémoire programme
1k 16F84
4k
8k
16F873
16F887
b7 b6 b5 b4 b3 b2 b1 b0
Banque 0 Banque 1
SFR Banc de registres Banc de registres
Special
Function
Registers File
68 octets 16F84
RAM Identique RAM
b7 b6 b 5 b4 b3 b 2 b1 b0 b7 b6 b5 b4 b3 b2 b1 b0
Modèle de programmation du PIC 16F84
Registre de travail
W
Banc de registres
SFR b7 b6 b 5 b4 b3 b2 b1 b0
Special PCL
Function status Compteur programme
Register
b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
PCLATH File
Pointeur de pile
b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
RAM
8 niveaux
b7 b6 b 5 b4 b3 b 2 b1 b0
Mnémonique
Opérande
Opcode sur 14 bits
MOVLW K 11 00xx kkkk kkkk
Mémoire programme
Registre de travail
1 1 0 0 0 0 1 0 0 1 1 1 1 0
W
16F84
b7 b6 b 5 b4 b3 b 2 b1 b0
Opérande
Opcode sur 14 bits
Désassembler
Les deux autres instructions MOV
Banc de registres
PCL d=1
status Registre de travail
PCLATH
W
RAM
b7 b6 b 5 b4 b3 b 2 b1 b0
PCLATH
W
RAM b7 b6 b 5 b4 b3 b 2 b1 b0
Les instructions MOV sur architecture complète
10
8
Data bus
Program Counter
FLASH
Program
MOVF f,d
RAM avec d=0
Memory 8 Level stack
File Registers
1K x 14 (10 bits)
68 x 8
14 7
RAM Addr
STATUS RA4/T0CKI
MOVLW K
PORTA
Power-up MUX
Timer I/0 Ports
RA3 ..RA0
Instruction Oscillator
Decode & startup
Control Timer
ALU RB7 ..RB1
Power-on
Reset MOVWF f
Timing PORTB
génération
Watchdog RB0/INT
Timer ACC W
Architecture du 16F84A
OSC2/CLKOUT MCLR OSC2/CLKOUT
OSC1/CLKIN OSC1/CLKIN
PORTA
Détermine la direction :
(1) entrée ou (0) sortie
max
4
typ
3
2 min
0 5 10 15 20 25
IOH (mA)
Les ports du 16F84 sont supposés délivrer ou recevoir jusqu'à 25mA
VOL (V)
1.0
max
0.8
typ
0.6
min
0.4
0.2
0 5 10 15 20 25
IOL (mA)
IOH IOL
UHth = 5V ULth=0V
Vcc
PORT
b7
(en) pull-up resistor
(fr) Résistance de tirage b6
interne b5
PIC 16FXXX b4
b3
b2
b1
b0
I) Horloge
Le 16F84 peut être configuré pour 4 modes d'horloge :
- XT- crystal : mode standard pour 1 – 4 MHz
- HS – High Speed aux alentours de 4 MHz : grande consommation de courant
- LP - Low Power fréquences basses (32,768 kHz jusqu'à 200 kHz)
- RC Resistor Capacitor difficile de prévoir la fréquence d'oscillation avec certitude.
Vcc
C1=22pF RExt
(16) OSC1
(16) OSC1
RF
sleep
RS
CExt
C2=22pF (17) OSC2
R1
IS
PA1 R1
Micro-contrôleur
IE
Micro-contrôleur PA1
a b g a b g
290 DC5611EWA Common Cathode
PIC RC0
16F877A RC1 a a
RC2 b f g b
RC3 c
RC4 d e c
RC5 e
RC6 f d
g
1k 1k
RB0
RB1
EasyPIC5
MCLR RB7
RA0 RB6 a b c d e f g DP
RA1 RB5
DIS3 DIS0
RA2 RB4
RA3 RB3 f g b
RA4 RB2
RA5 RB1
RE0 RB0 e c
RE1 Vcc
RE2 GND d
VCC PIC16FRD7
GND RD6
RA7 RD5
RA6 RD4
RC0 RC7
RC1 RC6 10k
RC2 RC5
RC3 RC4
RD0 RD3
RD1 RD2
sw6
DIS3
DIS0
III) Interfacer des sorties puissantes
Pour commander des sorties puissantes il faut ajouter des transistors (BJT Bipolar Junction
Transistor). Les sorties puissantes peuvent être :
- des relais Résistance pull-up = résistance de tirage
- des bobines Vcc = 5V
- des LEDs Vcc=12V
- des moteurs Certains micro-contrôleurs ont une
résistance interne pull-up par défaut
100R à la mise sous tension. Le transistor
RC
680R est alors passant. Pour éviter cela on
peut ajouter la résistance R2.
2K2
PA2 R1 2N2222 permet
de sortir jusqu'à
R2 1K 60mA
Micro-contrôleur
Vcc = 5V
Vcc=12V
Il existe des familles spécialement faites
pour être commandées directement par
des PORTs. Voir ZVN4206A et
RC ZVN4306A de chez Zetex.
BSS138 permet
PA2
de sortir jusqu'à
R2 220mA avec
2K2
VDS=0,13V
Micro-contrôleur
Vcc=5V 24V
TLP181 :
16mA < IDmax < 20mA avec VD <1,3V à 10mA
R1 RC Charge 1mA < IC <10mA
Dimensionner R1.
TLP181
Micro-contrôleur
PAi
VI) Commander des bobines moteurs et relais avec BJT
Il existe des transistors de puissance adaptés. Par exemple le transistor BD139 propose un gain β
compris entre 25 et 250. On peut l'utiliser avec un courant IC=1,5 A (3A en pointe). Son faible gain
nécessite un courant IB assez important, allant au-delà des possibilités des ports traditionnels
(typiquement 10mA). Par exemple pour commuter 1A, il faut un IB=40mA dans le pire des cas. Il
faut donc un transistor supplémentaire.
Vcc = 15V
Vcc = 15V Le transistor 2N2222 est bloqué, il
D1 M circule 40mA dans IB
R2 1°) Si R2 est choisi à 330 Ω, quelle
IB puissance passe dans R2 ?
BD139 2°) Si le transistor 2N2222 est
3K3
2N2222 permet saturé (VCEsat=0,2V) quelle
PA2 R1
de sortir puissance passe dans R2 ?
jusqu'à 60mA
3°) Lorsque le BD139 est saturé, il
sous 60V
circule Il circule IC=1A et l'on a
Micro-contrôleur VCEsat=0,70V. Quelle puissance
est dissipée dans le BD139 ?
Sans pull-up
R1 interne
Cela fonctionne- 4,7kΩ
t-il sans pull-up ?
RA4 RA4 Vcc=5V
Vcc=5V
RA1 RA1 R3
470Ω
Micro-contrôleur R1 Micro-contrôleur R2 4,7kΩ
Vcc
Résistances
de tirage
1 2
PORTB 3
b7 4 5 6
b6 7 8 9
b5
* 0 #
b4
b3
b2
b1
b0 clavier
DIS2
DIS0
Cours 45 : les périphériques internes de la
famille 16F
I) Les registres et noms des bits en Mikro C
Documentation
Ficher entête Mikro C
technique
//**MikroC fichier P18F84A.c ***
OPTION //********** bits de OPTION
NOT_RBPU = 0x0007,
b7 RBPU INTEDG = 0x0006,
b6 INTEDG T0CS = 0x0005,
b5 T0CS T0SE = 0x0004,
PSA = 0x0003,
b4 T0SE
PS2 = 0x0002,
b3 PSA PS1 = 0x0001,
b2 PS2 PS0 = 0x0000,
b1 PS1 ...
b0 PS0
Ficher programme Mikro C
Void main( void) {
....
//*** Toujours *****
OPTION_REG.B3 =1;
//**** Si on connaît le nom
OPTION_REG.PSA =1;
// **** ou encore
PSA_bit = 1;
...
}
II) Timer0 dans 16FXXX
4
MUX 0
Timer0 1 MCU
b7 .................................. b0 Clock
OPTION
Timer0 b7
=1
b6
Overflow (8 bits) b5 T0CS
T0SE : Source Edge select
b7 b4 T0SE
PORTA
b6 b3 PSA
b2 PS2 b7
b5
b1 PS1 2, 4, ...,256 b6
b4 =2(n+1)
b0 PS0 b5
b3
b4
b2 TMR0IF
b3RA4/T0CKI
b1
MUX 0 b2
b0 1 b1
INTCON
b0
III) Interruption timer0
INTCON
0x0B Banque 0 et 1 &
GIE &
b7
b6 EEIE &
b5 T0IE
&
b4 INTE
b3 RBIE
b2 T0IF
b1 Overflow
INTF
b0 Timer0
RBIF
b7 ..................................... b0
IV) Timer1 dans 18F4550 et 16F877A
4
Timer1 MUX 0
0xFB3h TMR1H
1
0xFB2h TMR1L T1CON
b15 .................................. b0
0xFCD
MCU
Timer1 b7 RD16 Clock
b6 T1Run
PIR1
b5 T1CKPS1
1, 2, 4,8
b7 & b4 T1CKPS0 =2(n)
b6 overflow
b3 T1OSCEN PORTC
b5
b2 NOT_T1SYNC
b7
b4
b1TMR1CS b6
b3
b0 TMR1ON b5
b2 CCP1IF Détection
synchronisée b4
b1
b3
b0 TMR1IF
MUX 1 b2
0 T1OSI b1
T1OSO/T1CLI
b0
T1OSO/T1CLI TMR1ON
&
0 1
Prescaler
Sync with
internal clock Timer1
1,2,4,8 0 Timer1L
1 High Byte
T1OSI FOsc/4
NOT_T1SYNC
TMR1CS
T1OSCEN Write TMR1L
8
T1CKPS<1:0> Read TMR1L
Timer1H
Timer1 dans 16FXXX
8
8
Internal Data Bus
V) CAPTURE POUR 16F877
PIR1
CCPR1H CCPR1L
b7
PORTC
b7 b6
TMR1H TMR1L b5
b6
b5 b4
b4 b3
b3 CCP1CON b2 CCP1IF
b2 b7 b1
RC2/CCP1
b1 b6 b0
b0 b5
b4
}
b3 CCP1M3 0000 : Module CCP1 désactivé
b2 CCP1M2 0100 : Capture tous les fronts
1,4,16 descendants
b1 CCP1M1 0101 : Capture tous les fronts montants
b0 CCP1M0 0110 : Capture tous les 4 fronts montants
0111 : Capture tous les 16 fronts montants
VI) COMPARAISON PIC 16F877
Special Event Trigger déclenchera:
un Reset du Timer1 (mais pas un positionnement du
drapeau d'interruption de Timer1)
POR positionnement du bit GO/DONE qui démarre une
b7 TC conversion A/D (ECCP1 seulement)
b6
b5 TMR1H TMR1L
b4
Special Event Trigger
b3
b2 RC2/CCP1 Q S Logique de sortie Comparaison
b1 R
b0
CCP1CO
TRIS CCPR1H CCPR1L
b7 C b7 N
b6 b6 PIR1
b5 b5 b7
b4 b4 b6
}
b3 b3 CCP1M3 b5
b2 0
b2 CCP1M2 b4
b1 b1 CCP1M1 b3
b0 b0CCP1M0 b2 CCP1IF
0010 : Compare bascule sortie quand comparaison (CCPxIF) b1
1000 : Compare force CCP à un (CCPIF est géré) b0 TMR1IF
1001 : Compare force CCP à zéro (CCPIF est géré)
1010 : Compare sort rien sur CCP mais sur CCPIF
1011 : Compare force Special Event Trigger reset sur timer1 (CCP1IF est géré)
VII) Timer2 dans 18F4550 et 16F877A
b7 .................................. b0
PR2
0000 = 1: 1
0001 = 1: 2 PIR1
0010 = 1: 3
Comparateur b7
T2CON ....
b7 1111 = 1:16 b6
Reset b6 TOUTPS3 b5
b5 TOUTPS2 1, 2, .., b4
Timer2
b4 TOUTPS1 16 b3
b7 .................................. b0 TOUTPS0 b2 CCP1IF
b3
&
b2 TMR2ON b1 TMR2IF
b1 T2CKPS1 b0 TMR1IF
1, 4, 16
b0 T2CKPS0
4
00 = 1: 1
01 = 1: 4 MCU
1x = 1: 16 Clock
VIII) PWM dans 18F4550 et 16F877A
b7 .................................. b0 0000 = 1: 1
0001 = 1: 2 PIR1
PR2
0010 = 1: 3 b7
T2CON ....
8 1111 = 1:16 b6
b7
TOUTPS3 b5
Comparateur b6
b5 TOUTPS2 1, 2, .., 16 b4
Reset b4 TOUTPS1 b3
8
b7 .................................. b0 TOUTPS0 b2 CCP1IF
b3
Timer2 b1 TMR2IF
b2 TMR2ON
T2CKPS1 b0 TMR1IF
b9 .................................. b2 b1 b0 b1 1, 4, 16
10 & b0 T2CKPS0
CCP1CON
b7
00 = 1: 1
01 = 1: 4 b6
Comparat 1x = 1: 16
eur b5 DC1B1
4 MCU b4 DC1B0
1 Clock
0 b3 CCP1M3
CCPR1 PORTC b2 CCP1M2
H b7 b CCP1M1
b9 .................................. b2 b1 1
b6 b CCP1M0
b0 0
b5
CCPR1
b4 CCP1CON (CCP1M3210
L
b7 .................................. b0
1100 : Enable PWM
b3
R Q RC2/CCP1 b2
S b1
b0
Entrée n'importe quand
TRISC
prise en compte en fin de
période. b7
b6
b5
b4
b3
0 b2
b1
b0