Cours 1- 2 : Architecture interne du PIC 16FXXX

Transcription

Cours 1- 2 : Architecture interne du PIC 16FXXX
Cours 1- 2 : Architecture interne du PIC 16FXXX
Mémoire programme
4k
1k
16F84
8k
16F873
16F887
b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
Que valent m et n ?
Mémoire données
SFR
Special
Function
Registers
68 octets 16F84
2x96=192 octets 16F873 sur 4
banques dont deux identiques.
Banc de registres
File en anglais
Banc Reg/RAM
RAM
b7 b6 b5 b4 b3 b2 b1 b0
Banque 0
SFR
Special
Function
Registers
Banc de registres
Banque 1
Banc de registres
File
RAM
68 octets 16F84
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
Special
Function
Register
b7 b6 b 5 b4 b3 b2 b1 b0
PCL
status
Compteur programme
b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
File
PCLATH
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
Status
IRP RP1 RP0
/TO /PD Z
DC C
Les registres jaunes ne font
pas partie du banc de registres
L'instruction MOVLW
Mnémonique
Opérande
MOVLW K
Opcode sur 14 bits
11 00xx kkkk kkkk
Mémoire programme
Registre de travail
1
1
0
0
0
0
1 0
0
1
1 1
1
0
16F84
W
b7 b6 b 5 b4 b3 b 2 b1 b0
b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
La valeur est transférée à partir de la mémoire
programme vers le registre de travail.
Assembler et désassembler
Assembler
Mnémonique
Opérande
MOVLW K
Opcode sur 14 bits
11 00xx kkkk kkkk
Désassembler
Les deux autres instructions MOV
MOVF f,d
N'importe où dans File
00 1000 dfff ffff
Banc de registres
PCL
status
d=1
Registre de travail
PCLATH
W
RAM
b7 b6 b 5 b4 b3 b 2 b1 b0
d=0
N'importe où dans File
Positionne Z de STATUS
MOVWF f
00 0000 1fff ffff
Banc de registres
PCL
Registre de travail
status
PCLATH
RAM
W
b7 b6 b 5 b4 b3 b 2 b1 b0
Les instructions MOV sur architecture complète
10
8
Program Counter
FLASH
Program
Memory
1K x 14
8 Level stack
(10 bits)
14
RAM
File Registers
68 x 8
7
Instruction register
Adr MUX
direct Addr
OSC2/CLKOUT
OSC1/CLKIN
TMR0
FSR reg
RA4/T0CKI
PORTA
Power-up
Timer
Oscillator
startup
Timer
Power-on
Reset
Watchdog
Timer
MCLR
7
Indirect Addr
STATUS
MOVLW K
Timing
génération
MOVF f,d
avec d=0
RAM Addr
5
Instruction
Decode &
Control
Data bus
OSC2/CLKOUT
OSC1/CLKIN
MUX
ALU
I/0 Ports
RA3 ..RA0
RB7 ..RB1
MOVWF f
PORTB
RB0/INT
ACC W
Architecture du 16F84A
Exécuter un programme avec un compteur programme
Des PORTs pour les entrées et sorties (notées E/S)
PORT
b7
b6
PIC16F
b5
b4
b3
b2
b1
b0
Ampli de puissance
E/S
E/S
E/S
E/S
E/S
E/S
E/S
TRISA
Bus interne
E/S physique
RB2
b7
b6
b5
b4
E/S
b3
b2
b1
b0
Détermine la direction :
(1) entrée ou (0) sortie
PORTA
Les PORTs du PIC 16F84
(1) RA2
RA3
RA4/T0CKI
MCLR
masse/VSS
RB0/INT
RB1
RB2
(9) RB3
RA1 (18)
RA0
OSC1/CLKIN
OSC2/CLKOUT
VDD/Vcc
RB7
RB6
RB5
RB4 (10)
Deux ports :
- PORTA 5 bits RA0 -> RA4
-PORTB 8 bits RB0 -> RB7
Les PORTs du PIC 16F887
Cinq ports :
- PORTA 8 bits RA0 -> RA7
- PORTB 8 bits RB0 -> RB7
- PORTC 8 bits RC0 -> RC7
- PORTD 8 bits RD0 -> RD7
- PORTE 2 bits RE0 -> RE2
MCLR
RB7
RA0
RB6
RA1
RB5
RA2
RB4
RA3
RB3
RA4
RB2
RA5
RB1
RE0
RB0
RE1
Vcc
RE2
GND
VCCPIC16FRD7
GND
RD6
RA7
RD5
RA6
RD4
RC0
RC7
RC1
RC6
RC2
RC5
RC3
RC4
RD0
RD3
RD1
RD2
Les modèles électriques des PORTs
V (V)
5 OH
max
4
typ
3
min
2
1
0
5
10
15
IOH (mA)
20
25
Les ports du 16F84 sont supposés délivrer ou recevoir jusqu'à 25mA
1.0
VOL (V)
max
0.8
typ
0.6
min
0.4
0.2
0
5
10
15
IOL (mA)
20
25
IOH
Sortie
haute
Rth
IOL
R'th 16<R'th<36
56<Rth<180
UHth = 5V
Sortie
basse
ULth=0V
On prendra toujours Rth =100 Ω
Après avoir déterminé les modèles de Thévenin des PORTs on s'intéresse
maintenant aux résistances de tirage.
Les résistances de tirage des PORTs
A quoi cela sert ? On les utilise en général pour les entrées et cela peut éviter
d'utiliser ces mêmes résistances en externe.
Vcc
(en) pull-up resistor
(fr) Résistance de tirage
interne
PIC 16FXXX
PORT
b7
b6
b5
b4
b3
b2
b1
b0
Sur PIC pull-up avec bit RPBU du registre OPTION
Cours 3 - 4 Interfaces externes des micro-contrôleurs
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
PIC 16F
PIC 16F
II) Interfacer des LEDs
Rappel :
Diode bloquée
Diode passante
RD
UD ou U0 : tension de seuil
Si UD inconnue prendre 1,8V.
RD : résistance dynamique
Si RD inconnue prendre 0Ω.
UD
PA1
R1
Vcc
R1
IS
Micro-contrôleur
IE
Micro-contrôleur
Micro-contrôleur comme source de courant
PA1
Micro-contrôleur comme puits de courant
ATTENTION les ports ne sont pas forcément symétriques : IS peut être différent de IE.
Pour information VOH=4V pour ID=10mA et V0L = 0,4V pour ID=10mA pour le PIC 16F84.
Calculer les modèles de Thévenin correspondants.
Si on ne connait rien on prend VD = 1,8V et V0L = 0V et VOH=Vcc.
Calcul de R1
Source de courant : R1= (VOH-VD) /ID avec VD tension directe de la diode et VOH tension haute du
port.
Puits de courant : R1= (Vcc-VD-V0L) /ID avec V0L tension basse du port
Exemple :
Kingbright led rouge 10mA l=627nm 15mcd à 10mA VD = 1,95V
Kingbright led vert 10mA l=565nm 12mcd à 10mA VD = 2,09V
Pour information les résistances utilisées sur EasyPIC5 sont de 1kΩ.
Pour généraliser l'utilisation des LEDs, on peut s'intéresser aux afficheurs sept segments
a
g
b
a
g
b
Cathode commune
Anode commune
Comment allume-t-on un afficheur anode commune, un afficheur cathode commune ?
Multiplexage de plusieurs afficheurs :
PIC
16F877A
RC0
RC1
RC2
RC3
RC4
RC5
RC6
290
RB0
RB1
DC56­11EWA Common Cathode
a
a
b
c
d
e
f
g
f
b
g
e
c
d
1k
1k
EasyPIC5
MCLR
RB7
RA0
RB6
RA1
RB5
RA2
RB4
RA3
RB3
RA4
RB2
RA5
RB1
RE0
RB0
RE1
Vcc
RE2
GND
VCC PIC16FRD7
GND
RD6
RA7
RD5
RA6
RD4
RC0
RC7
RC1
RC6
RC2
RC5
RC3
RC4
RD0
RD3
RD1
RD2
DIS3
a b c d e f g DP
DIS0
f
e
c
d
10k
sw6
DIS3
DIS0
b
g
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
à la mise sous tension. Le transistor
100R
RC
est alors passant. Pour éviter cela on
680R
peut ajouter la résistance R2.
2K2
R1
PA2
R2
1K
2N2222 permet
de sortir jusqu'à
60mA
Micro-contrôleur
Problème des Pull-Up internes pour les entrées
Sur PIC pull-up avec bit RPBU du registre OPTION
initialisé à 1 à la mise sous tension mais ????.
IV) Interfacer des sorties puissantes avec des FET
On peut utiliser des transistors à effet de champ à la place des BJT. Nous examinons le cas des
MOSFET.
Vcc = 5V
Vcc=12V
RC
BSS138 permet
de sortir jusqu'à
220mA avec
VDS=0,13V
PA2
R2
Il existe des familles spécialement faites
pour être commandées directement par
des PORTs. Voir ZVN4206A et
ZVN4306A de chez Zetex.
2K2
Micro-contrôleur
V) Encore plus de puissance
Il faut utiliser des opto-coupleurs. Il permettent aussi une isolation galvanique ce qui est important
si la tension d'alimentation est très différente de celle du micro-contrôleur.
24V
Vcc=5V
R1
RC Charge
TLP181
Micro-contrôleur
PAi
TLP181 :
16mA < IDmax < 20mA avec VD <1,3V à 10mA
1mA < IC <10mA
Dimensionner R1.
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
R2
PA2
3K3
R1
Micro-contrôleur
Vcc = 15V
Le transistor 2N2222 est bloqué, il
circule 40mA dans IB
M
D1
1°) Si R2 est choisi à 330 Ω, quelle
puissance passe dans R2 ?
IB
BD139
2°) Si le transistor 2N2222 est
saturé (VCEsat=0,2V) quelle
2N2222 permet
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
VCEsat=0,70V. Quelle puissance
est dissipée dans le BD139 ?
VII) Quelques circuits spécialisés
On peut trouver des circuits spécialisés destinés à commander directement des moteurs.
Le circuit L293D de chez Texas
Voici le schéma interne :
On suppose que
- Pin 4 est reliée à RA3
- Pin 5 est reliée à RA2
- Pin 7 est reliée à RA1
- Pin 6 est reliée à RA0
Comment fait-on avancer un robot motorisé par deux moteurs ? Comment le fait-on reculer ?
VIII) Interfacer des entrées
- Les boutons
Vcc=5V
Cela fonctionnet-il sans pull-up ?
RA4
4,7kΩ
R1
Sans pull-up
interne
RA4
Vcc=5V
Vcc=5V
RA1
Micro-contrôleur
RA1
R1
Micro-contrôleur
R3
470Ω
R2 4,7kΩ
Montage simple qui nécessite cependant un bit par interrupteur.
On ne peut pas toujours se le permettre.
Application au clavier
Vcc
Résistances
de tirage
PORTB
b7
b6
b5
b4
1
2
3
4
5
6
7
8
9
*
0
#
b3
b2
b1
b0
clavier
Ajouter interface afficheur LCD
Vcc
RA3
J15
P1
MCLR
RB7
RA0
RB6
RA1
RB5
RA2
RB4
RA3
RB3
RA4
RB2
RA5
RB1
RE0
RB0
RE1
Vcc
RE2
GND
VCC PIC16FRD7
GND
RD6
RA7
RD5
RA6
RD4
RC0
RC7
RC1
RC6
RC2
RC5
RC3
RC4
RD0
RD3
RD1
RD2
DIS3
a b c d e f g DP
DIS0
f
e
c
d
10k
sw6
DIS2
DIS0
b
g
Cours 4­5 : les périphériques internes de la famille 16F
I) Les registres et noms des bits en Mikro C
Documentation
technique
OPTION b7 RBPU
b6 INTEDG
b5 T0CS
b4 T0SE
b3 PSA
b2 PS2
b1 PS1
Ficher entête Mikro C
//**MikroC fichier P18F84A.c ***
//********** bits de OPTION
NOT_RBPU
= 0x0007,
INTEDG
= 0x0006,
T0CS
= 0x0005,
T0SE
= 0x0004,
PSA
= 0x0003,
PS2
= 0x0002,
PS1
= 0x0001,
PS0
= 0x0000,
...
b0 PS0
Remarque : les noms de la documentation et les noms du fichier
d'entête ne correspondent pas toujours !
Les trois façons de programmer en Mikro C
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
1
Timer0
b7 .................................. b0
Timer0
OPTION MCU
Clock
b7
=1
b6
b7
b5 T0CS
b4 T0SE
b5
b2 PS2
b3
b0 PS0
Overflow (8 bits)
b6
b3 PSA
b4
b1 PS1
b2
T0SE : Source Edge select
PORTA
b7
2, 4, ...,256
=2(n+1)
b3RA4/T0CKI
MUX 0
1
b0
b2
b1
INTCON
b0
III) Interruption timer0
INTCON
0x0B Banque 0 et 1
b7
&
&
GIE
b6 EEIE
b5 T0IE
b4
b3
&
&
INTE
RBIE
b2 T0IF
b1
INTF
b0
RBIF
b5
b4 TMR0IF
b1
b6
Overflow
Timer0
b7 ..................................... b0
IV) Timer1 dans 18F4550 et 16F877A
4
Timer1
0xFB3h TMR1H
0xFB2h TMR1L
b15 .................................. b0
MUX 0
Timer1
b7
&
b6
overflow
b5
b4
MCU
Clock
RD16
b6
PIR1
b7
1
T1CON
0xFCD
T1Run
b5
T1CKPS1
b4
T1CKPS0
b3
1, 2, 4,8
=2(n)
PORTC
T1OSCEN
b2
NOT_T1SYNC
b0
TMR1ON
b7
b1TMR1CS
b3
b2 CCP1IF
b1
b0 TMR1IF
b6
b5
Détection synchronisée
b4
b3
MUX 1
0
T1OSI
T1OSO/T1CLI
TMR1ON
T1OSO/T1CLI
0
1
T1OSI
Prescaler
1,2,4,8
Sync with internal clock
b2
b1
b0
&
1
0
Timer1
High Byte
Timer1L
FOsc/4
TMR1CS
T1OSCEN
NOT_T1SYNC
Write TMR1L
8
Read TMR1L
T1CKPS<1:0>
Timer1 dans 16FXXX
Timer1H
8
Internal Data Bus
8
V) CAPTURE POUR 16F877
PIR1
CCPR1H CCPR1L
b7
PORTC
b7
TMR1H
b6
TMR1L
b3
b4
b0
b2 CCP1IF
CCP1CON
b3
b1
b5
b4
b5
b2
b6
RC2/CCP1
b7
b1
b6
b0
b5
b4
b3 CCP1M3
b2 CCP1M2
b1 CCP1M1
b0 CCP1M0
1,4,16
}
0000 : Module CCP1 désactivé
0100 : Capture tous les fronts descendants
0101 : Capture tous les fronts montants
0110 : Capture tous les 4 fronts montants
0111 : Capture tous les 16 fronts montants
VI) COMPARAISON PIC 16F877 POR
TC
b7
Special Event Trigger déclenchera:
­ un Reset du Timer1 (mais pas un positionnement du drapeau d'interruption de Timer1)
­ positionnement du bit GO/DONE qui démarre une conversion A/D (ECCP1 seulement)
b6
b5
TMR1H
b4
TMR1L
Special Event Trigger
b3
RC2/CCP1
b2
b1
Q S
R
Logique de sortie
Comparaison
b0
b7
TRIS
C
CCP1CO
b7 N
b6
b6
b4
b4
b5
b5
b3
b3 CCP1M3
b2
b1
b0
0
b2 CCP1M2
b1 CCP1M1
b0CCP1M0
CCPR1H CCPR1L
PIR1
b7
}
b6
b5
b4
b3
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
Comparateur
Reset
Timer2
b7 .................................. b0
&
T2CON
b7
b6
b5
b4
b3
b2
b1
b0
­
0000 = 1: 1 0001 = 1: 2 0010 = 1: 3
.... 1111 = 1:16
TOUTPS1
1, 2, .., 16
b4
b3
b1 TMR2IF
TMR2ON
T2CKPS0
b6
b2 CCP1IF
TOUTPS0
T2CKPS1
b7
b5
TOUTPS3
TOUTPS2
PIR1
1, 4, 16
00 = 1: 1 01 = 1: 4 1x = 1: 16
b0 TMR1IF
4
MCU
Clock
VIII) PWM dans 18F4550 et 16F877A
b7 .................................. b0
PR2
T2CON
8
b7
b6
Comparateur
b5
Reset
8
b7 .................................. b0
b4
b3
Timer2
­
&
CCPR1
L
b7 ..................................
b0
b7
b6
b5
TOUTPS2
b4
1, 2, .., 16
b3
TOUTPS1
b2 CCP1IF
TOUTPS0
b2
TMR2ON
b0
T2CKPS0
b1 TMR2IF
b0 TMR1IF
1, 4, 16
CCP1CON
b7
00 = 1: 1 01 = 1: 4 1x = 1: 16
Comparat
eur
1
0
CCPR1
H
b9 .................................. b2
PIR1
TOUTPS3
T2CKPS1
b9 .................................. b2 b1 b0 b1
10
0000 = 1: 1 0001 = 1: 2 0010 = 1: 3
.... 1111 = 1:16
b6
b5 DC1B1
MCU
Clock
4
b4 DC1B0
b3 CCP1M3
b2 CCP1M2
PORTC
b7 b CCP1M1
1
b6 b CCP1M0
b1 b0
b5
b4
b3
R Q
S
RC2/CCP1
b2
b1
b0
Entrée n'importe quand prise en compte en fin de période.
TRISC
b7
b6
b5
b4
b3
0
b2
b1
b0
0
CCP1CON (CCP1M3­2­1­0
1100 : Enable PWM

Documents pareils