CoursPIC .pdf



Nom original: CoursPIC.pdfAuteur: serge moutou

Ce document au format PDF 1.4 a été généré par Draw / OpenOffice.org 2.4, et a été envoyé sur fichier-pdf.fr le 22/11/2014 à 02:29, depuis l'adresse IP 105.190.x.x. La présente page de téléchargement du fichier a été vue 1090 fois.
Taille du document: 543 Ko (21 pages).
Confidentialité: fichier public


Aperçu du document


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


CoursPIC.pdf - page 1/21
 
CoursPIC.pdf - page 2/21
CoursPIC.pdf - page 3/21
CoursPIC.pdf - page 4/21
CoursPIC.pdf - page 5/21
CoursPIC.pdf - page 6/21
 




Télécharger le fichier (PDF)


CoursPIC.pdf (PDF, 543 Ko)

Télécharger
Formats alternatifs: ZIP



Documents similaires


courspic
pic 2
processeur
arduino  led eclairage velo v2
chouqar ottman
programmateur de 16f84

Sur le même sujet..