Upload
others
View
26
Download
0
Embed Size (px)
Citation preview
Cours 1- 2 : Architecture interne du PIC 16FXXX
16F84
Mémoire programme
1k
16F873
4k
16F887
8k
b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
Mémoire données
RAM
File en anglaisBanc Reg/RAM
SFRSpecial Function Registers
b7 b6 b5 b4 b3 b2 b1 b0
Banc de registres
RAM
File
SFRSpecial Function Registers
b7 b6 b5 b4 b3 b2 b1 b0
Banc de registres
RAM
b7 b6 b5 b4 b3 b2 b1 b0
Banc de registres
Banque 0 Banque 1
Identique
Que valent m et n ?
68 octets 16F84
68 octets 16F842x96=192 octets 16F873 sur 4 banques dont deux identiques.
status
RAM
File
SFRSpecial Function Register
b7 b6 b5 b4 b3 b2 b1 b0
Banc de registresb7 b6 b5 b4 b3 b2 b1 b0
W
b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
Pointeur de pile
b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
PCL
Status IRP RP1 RP0 /TO /PD Z DC C
Modèle de programmation du PIC 16F84
L'instruction MOVLW
8 niveaux
PCLATH
Les registres jaunes ne font pas partie du banc de registres
Registre de travail
MOVLW K MOVLW K 11 00xx kkkk kkkk11 00xx kkkk kkkk
16F84
b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
b7 b6 b5 b4 b3 b2 b1 b0
W
1 1 0 0 0 0 1 0 0 1 1 1 1 0
Mémoire programme
La valeur est transférée à partir de la mémoire programme vers le registre de travail.
Registre de travail
Mnémonique
Opérande Opcode sur 14 bits
Compteur programme
Assembler et désassembler
Les deux autres instructions MOV
Mnémonique
Opérande Opcode sur 14 bits
MOVLW K MOVLW K 11 00xx kkkk kkkk11 00xx kkkk kkkk
Assembler
Désassembler
MOVF f,dMOVF f,d 00 1000 dfff ffff00 1000 dfff ffff
W
Registre de travailstatus
RAM
Banc de registres
PCL
PCLATH
N'importe où dans File
b7 b6 b5 b4 b3 b2 b1 b0
d=1
d=0
MOVWF fMOVWF f 00 0000 1fff ffff00 0000 1fff ffff
W
Registre de travailstatus
RAM
Banc de registres
PCL
PCLATH
N'importe où dans File
b7 b6 b5 b4 b3 b2 b1 b0
Positionne Z de STATUS
Les instructions MOV sur architecture complète
Architecture du 16F84A
ALU
ACC W
MUX
STATUS
FSR reg
Adr MUX
RAM Addr
Indirect Addr7
Instruction register
5
direct Addr
Instruction Decode &Control
Timinggénération
OSC2/CLKOUTOSC1/CLKIN
MCLR OSC2/CLKOUTOSC1/CLKIN
Power-upTimer
Oscillator startupTimerPower-onReset
WatchdogTimer
RAMFile Registers68 x 8
7
FLASHProgramMemory1K x 14
Program Counter
8 Level stack(10 bits)
8 Data bus
14
10
TMR0
RA4/T0CKI
I/0 PortsRA3 ..RA0
RB7 ..RB1
RB0/INT
PORTA
PORTB
MOVLW K
MOVWF f
MOVF f,davec d=0
Exécuter un programme avec un compteur programme
Ampli de puissance
Des PORTs pour les entrées et sorties (notées E/S)
b7
b6
b5
b4
b3
b2
b1
b0
PORTA
PIC16F
E/SE/S
E/SE/S
E/S
E/SE/S
E/S
Bus interne E/S physique
b7
b6
b5
b4
b3
b2
b1
b0
TRISARB2
PORT
Détermine la direction : (1) entrée ou (0) sortie
Les PORTs du PIC 16F84
(1) RA2RA3
RA4/T0CKIMCLR
masse/VSSRB0/INT
RB1RB2
(9) RB3
RA1 (18)RA0OSC1/CLKINOSC2/CLKOUTVDD/VccRB7RB6RB5RB4 (10)
Deux ports :- PORTA 5 bits RA0 -> RA4-PORTB 8 bits RB0 -> RB7
Les PORTs du PIC 16F887
PIC16F
MCLRRA0RA1RA2RA3RA4RA5RE0RE1RE2VCCGNDRA7RA6RC0RC1RC2RC3RD0RD1
RB7RB6RB5RB4RB3RB2RB1RB0Vcc
GNDRD7RD6RD5RD4RC7RC6RC5RC4RD3RD2
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
Les modèles électriques des PORTs
5
4
3
2
1
0 5 10 15 20 25
1.0
0.8
0.6
0.4
0.2
0 5 10 15 20 25
max
min
typ
IOH (mA)
VOH (V)
Les ports du 16F84 sont supposés délivrer ou recevoir jusqu'à 25mA
IOL (mA)
VOL (V)
max
min
typ
Les résistances de tirage des PORTs
Après avoir déterminé les modèles de Thévenin des PORTs on s'intéresse maintenant aux résistances de tirage.
PIC 16FXXX
b7
b6
b5
b4
b3
b2
b1
b0
PORTVcc
(en) pull-up resistor(fr) Résistance de tirage
interne
Sur PIC pull-up avec bit RPBU du registre OPTION
Rth
UHth = 5V
IOH
R'th
ULth=0V
IOL
On prendra toujours Rth =100 Ω
16<R'th<3656<Rth<180
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.
Sortie haute
Sortiebasse
Micro-contrôleur
PA1Micro-contrôleur
PA1
Vcc
Cours 3 - 4 Interfaces externes des micro-contrôleurs
II) Interfacer des LEDs
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 R 1Source 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 portExemple :Kingbright led rouge 10mA l=627nm 15mcd à 10mA VD = 1,95VKingbright led vert 10mA l=565nm 12mcd à 10mA VD = 2,09V
Pour information les résistances utilisées sur EasyPIC5 sont de 1kΩ.
Micro-contrôleur comme source de courant Micro-contrôleur comme puits de courant
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
PIC 16F
(16) OSC1
PIC 16F
(16) OSC1
RF
RS
(17) OSC2
sleep
R1
R1
RExt
CExt
Rappel :Diode bloquée Diode passante
C1=22pF
C2=22pF
RD
UD
UD ou U0 : tension de seuilSi UD inconnue prendre 1,8V.RD : résistance dynamiqueSi RD inconnue prendre 0Ω.
IS
IE
ATTENTION les ports ne sont pas forcément symétriques : IS peut être différent de IE.
abcdefg
PIC16F877A
RC0RC1RC2RC3RC4RC5RC6
a
290
RB0RB1
sw6
10k
DC5611EWA Common Cathode
Pour généraliser l'utilisation des LEDs, on peut s'intéresser aux afficheurs sept segments
Anode commune Cathode commune
Comment allume-t-on un afficheur anode commune, un afficheur cathode commune ?
Multiplexage de plusieurs afficheurs :
a ab g gb
PIC16F
MCLRRA0RA1RA2RA3RA4RA5RE0RE1RE2VCCGNDRA7RA6RC0RC1RC2RC3RD0RD1
RB7RB6RB5RB4RB3RB2RB1RB0Vcc
GNDRD7RD6RD5RD4RC7RC6RC5RC4RD3RD2
b
c
d
e
f g
EasyPIC5
a b c d e f g DP
1k 1k
b
c
d
e
f g
DIS0DIS3
DIS0
DIS3
III) Interfacer des sorties puissantesPour commander des sorties puissantes il faut ajouter des transistors (BJT Bipolar Junction Transistor). Les sorties puissantes peuvent être :- des relais- des bobines- des LEDs- des moteurs
Micro-contrôleur
PA2 R1
RC
Vcc = 5VVcc=12V
R2
2K2
100R680R
1K
2N2222 permet de sortir jusqu'à 60mA
Certains micro-contrôleurs ont une résistance interne pull-up par défaut à la mise sous tension. Le transistor est alors passant. Pour éviter cela on peut ajouter la résistance R2.
IV) Interfacer des sorties puissantes avec des FETOn peut utiliser des transistors à effet de champ à la place des BJT. Nous examinons le cas des MOSFET.
Micro-contrôleur
PA2
RC
Vcc = 5VVcc=12V
R2 2K2
BSS138 permet de sortir jusqu'à 220mA avec VDS=0,13V
V) Encore plus de puissanceIl 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.
Micro-contrôleur
PAi
Vcc=5V
R1 RC
24V
Charge
TLP181
TLP181 :16mA < IDmax < 20mA avec VD <1,3V à 10mA1mA < IC <10mADimensionner R1.
Résistance pull-up = résistance de tirage
Problème des Pull-Up internes pour les entréesSur PIC pull-up avec bit RPBU du registre OPTIONinitialisé à 1 à la mise sous tension mais ????.
Il existe des familles spécialement faites pour être commandées directement par des PORTs. Voir ZVN4206A et ZVN4306A de chez Zetex.
VI) Commander des bobines moteurs et relais avec BJTIl 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.
Micro-contrôleur
PA2 R1
R2
Vcc = 15V
3K3
Le transistor 2N2222 est bloqué, il circule 40mA dans IB1°) Si R2 est choisi à 330 Ω, quelle puissance passe dans R2 ?2°) Si le transistor 2N2222 est saturé (VCEsat=0,2V) quelle puissance passe dans R2 ?3°) Lorsque le BD139 est saturé, il circule Il circule IC=1A et l'on a VCEsat=0,70V. Quelle puissance est dissipée dans le BD139 ?
BD139
Vcc = 15V
M
2N2222 permet de sortir jusqu'à 60mA sous 60V
IB
D1
VII) Quelques circuits spécialisésOn peut trouver des circuits spécialisés destinés à commander directement des moteurs.
Le circuit L293D de chez Texas
Voici le schéma interne :
Montage simple qui nécessite cependant un bit par interrupteur.On ne peut pas toujours se le permettre.
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 à RA0Comment fait-on avancer un robot motorisé par deux moteurs ? Comment le fait-on reculer ?
VIII) Interfacer des entrées- Les boutons
Micro-contrôleur
RA4
Vcc=5V
R1
Cela fonctionne-t-il sans pull-up ?
RA1
Micro-contrôleur
RA4 Vcc=5V
R2
RA1
R1
Vcc=5V
Sans pull-up interne
R3470Ω
4,7kΩ
4,7kΩ
Ajouter interface afficheur LCD
b7
b6
b5
b4
b3
b2
b1
b0
1 3
5 6
7 9
0*
4
8
#
Vcc
clavier
PORTB 2
Résistances de tirage
Application au clavier
sw6
10k
PIC16F
MCLRRA0RA1RA2RA3RA4RA5RE0RE1RE2VCCGNDRA7RA6RC0RC1RC2RC3RD0RD1
RB7RB6RB5RB4RB3RB2RB1RB0Vcc
GNDRD7RD6RD5RD4RC7RC6RC5RC4RD3RD2
b
c
d
e
f g
a b c d e f g DP DIS0DIS3
DIS0
DIS2
J15RA3
Vcc
P1
Cours 45 : les périphériques internes de la famille 16F
I) Les registres et noms des bits en Mikro C
OPTION
b7
b6
b5
b4
b3
b2
b1
b0
T0CST0SEPSAPS2
PS1
PS0
Ficher entête Mikro C
//**MikroC fichier P18F84A.c ***//********** bits de OPTIONNOT_RBPU = 0x0007,INTEDG = 0x0006,T0CS = 0x0005,T0SE = 0x0004,PSA = 0x0003,PS2 = 0x0002,PS1 = 0x0001,PS0 = 0x0000,...
Remarque : les noms de la documentation et les noms du fichier d'entête ne correspondent pas toujours !
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;...
Documentationtechnique
Les trois façons de programmer en Mikro C
RBPUINTEDG
INTCON
RA4/T0CKI
b7 ..................................
b
0 OPTION
b7
b6
b5
b4
b3
b2
b1
b0
PORTA
b7
b6
b5
b4
b3
b2
b1
b0
Timer0
II) Timer0 dans 16FXXX
T0CS
MCUClock
=1
T0SEPSA
MUX 0
2, 4, ...,256=2(n+1)
MUX 01
1
PS2
PS1
PS0
Timer0
4
T0SE : Source Edge selectb
7
b6
b5
b4
b3
b2
b1
b0
TMR0IF
Overflow (8 bits)
b7
b6
b5
b4
b3
b2
b1
b0
T0IE
INTERBIE
T0IF
INTF
RBIF
GIE
EEIE
INTCON0x0B Banque 0 et 1 &
&
&
&
Timer0
Overflow
III) Interruption timer0
b7 .....................................
b
0
b15
.................................. b
0
T1CON0xFCD
b7
b6
b5
b4
b3
b2
b1
b0
PORTC
b7
b6
b5
b4
b3
b2
b1
b0
Timer1
IV) Timer1 dans 18F4550 et 16F877A
TMR1CS
MCUClock
T1OSCEN
MUX 0
1, 2, 4,8=2(n)
MUX 10
1
RD16
T1CKPS1
T1CKPS0
TMR1ON
T1Run
Timer10xFB3h TMR1H0xFB2h TMR1L
4
&
NOT_T1SYNC
Détection synchronisée
T1OSI
PIR1
CCP1IF
b7
b6
b5
b4
b3
b2
b1
b0
TMR1IF
overflow
T1OSO/T1CLI
Timer1H
Write TMR1L
Timer1High Byte
8
88
Read TMR1L
Timer1L
Sync with internal clock
1
0
0
1
TMR1CS
Prescaler1,2,4,8
T1OSI
T1CKPS<1:0>
Internal Data Bus
Timer1 dans 16FXXX
T1OSO/T1CLI
FOsc/4
T1OSCEN
NOT_T1SYNC
&TMR1ON
PORTC
RC2/CCP1
CCP1CON
1,4,16
CCP1M3CCP1M2
CCP1M1
CCP1M0
PIR1
b7
b6
b5
b4
b3
b2
b1
b0
CCP1IF
CCPR1H CCPR1L
TMR1H TMR1L
V) CAPTURE POUR 16F877
0000 : Module CCP1 désactivé0100 : Capture tous les fronts descendants0101 : Capture tous les fronts montants0110 : Capture tous les 4 fronts montants0111 : Capture tous les 16 fronts montants
b7
b6
b5
b4
b3
b2
b1
b0
b7
b6
b5
b4
b3
b2
b1
b0
PORTC
RC2/CCP1
CCP1CON
CCP1M3
CCP1M2CCP1M1
CCP1M0
Q S R
Special Event Trigger
VI) COMPARAISON PIC 16F877
TRISC
CCPR1H CCPR1L
TMR1H TMR1L
Comparaison
PIR1
CCP1IF
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)
0
0010 : Compare bascule sortie quand comparaison (CCPxIF)1000 : Compare force CCP à un (CCPIF est géré)1001 : Compare force CCP à zéro (CCPIF est géré)1010 : Compare sort rien sur CCP mais sur CCPIF1011 : Compare force Special Event Trigger reset sur timer1 (CCP1IF est géré)
b7
b6
b5
b4
b3
b2
b1
b0
b7
b6
b5
b4
b3
b2
b1
b0
b7
b6
b5
b4
b3
b2
b1
b0
b7
b6
b5
b4
b3
b2
b1
b0
Logique de sortie
TMR1IF
b7 ..................................
b
0
T2CONb
7
b6
b5
b4
b3
b2
b1
b0
Timer2
VII) Timer2 dans 18F4550 et 16F877A
T2CKPS1
MCUClock
1, 2, .., 16
TOUTPS3
4
TMR2ON
PIR1
CCP1IF
b7
b6
b5
b4
b3
b2
b1
b0
TMR1IF
TOUTPS2
TOUTPS1
TOUTPS0
PR2
b7 ..................................
b
0
Comparateur
T2CKPS01, 4, 16
TMR2IF&
0000 = 1: 1 0001 = 1: 2 0010 = 1: 3.... 1111 = 1:16
00 = 1: 1 01 = 1: 4 1x = 1: 16
Reset
b7 ..................................
b
0
T2CON
b7
b6
b5
b4
b3
b2
b1
b0
Timer2
VIII) PWM dans 18F4550 et 16F877A
T2CKPS1
MCUClock
1, 2, .., 16
TOUTPS3
4
TMR2ON
PIR1
CCP1IF
b7
b6
b5
b4
b3
b2
b1
b0
TMR1IF
TOUTPS2
TOUTPS1
TOUTPS0
PR2
b7 ..................................
b
0
Comparateur
T2CKPS01, 4, 16
TMR2IF
&
0000 = 1: 1 0001 = 1: 2 0010 = 1: 3.... 1111 = 1:16
00 = 1: 1 01 = 1: 4 1x = 1: 16
Reset
b9 ..................................
b
2
Comparateur
CCPR1H
b9 ..................................
b
2
b1
b0
b1
b
0
8
8
10
10
CCP1CON
CCP1M3CCP1M2
CCP1M1
CCP1M0
b7
b6
b5
b4
b3
b2
b1
b0
DC1B0
DC1B1
PORTC
RC2/CCP1 R Q S
TRISC
0
b7
b6
b5
b4
b3
b2
b1
b0
b7
b6
b5
b4
b3
b2
b1
b0
CCPR1Lb
7 ..................................
b
0
Entrée n'importe quand prise en compte en fin de période.
CCP1CON (CCP1M3210)1100 : Enable PWM