You are on page 1of 21

Cours 1- 2 : Architecture interne du PIC 16FXXX

Mmoire 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 ?

Mmoire donnes
SFR Special Function Registers Banc de registres

68 octets 16F84 2x96=192 octets 16F873 sur 4 banques dont deux identiques.

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

Modle de programmation du PIC 16F84


Banc de registres status
PCLATH PCL

Registre de travail W

SFR Special Function Register

b7 b6 b 5 b4 b3 b2 b1 b0
Compteur programme
b9 b8 b7 b6 b5 b4 b3 b2 b1 b0

File

Pointeur de pile

RAM
b7 b6 b 5 b4 b3 b 2 b1 b0
Status IRP RP1 RP0

b9 b8 b7 b6 b5 b4 b3 b2 b1 b0

8 niveaux

/TO /PD Z

DC C

L'instruction MOVLW
Mnmonique Oprande MOVLW K 11 00xx kkkk kkkk

Les registres jaunes ne font pas partie du banc de registres

Opcode sur 14 bits

Mmoire programme
Registre de travail
1
1 0 0 0 0 1 0 0 1 1 1 1 0

16F84

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 transfre partir de la mmoire programme vers le registre de travail.

Assembler et dsassembler Assembler


Mnmonique Oprande MOVLW K 11 00xx kkkk kkkk Opcode sur 14 bits

Dsassembler Les deux autres instructions MOV N'importe o dans File MOVF f,d 00 1000 dfff ffff

Banc de registres status


PCLATH PCL

d=1

Registre de travail

RAM d=0 N'importe o dans File


Banc de registres status
PCLATH PCL

b7 b6 b 5 b4 b3 b 2 b1 b0
Positionne Z de STATUS

MOVWF f

00 0000 1fff ffff


Registre de travail

RAM

b7 b6 b 5 b4 b3 b 2 b1 b0

Les instructions MOV sur architecture complte


10

Program Counter FLASH Program Memory 1K x 14


14

Data bus

8 Level stack (10 bits)

RAM File Registers 68 x 8


7 RAM Addr

MOVF f,d avec d=0

Instruction register
5 direct Addr

Adr MUX 7 Indirect Addr

TMR0

FSR reg STATUS


RA4/T0CKI

MOVLW K
Power-up Timer Oscillator startup Timer Power-on Reset Watchdog Timer

PORTA
MUX

I/0 Ports

Instruction Decode & Control Timing gnration

RA3 ..RA0

ALU

RB7 ..RB1

MOVWF f
RB0/INT

PORTB

ACC W

OSC2/CLKOUT OSC1/CLKIN

MCLR

OSC2/CLKOUT OSC1/CLKIN

Architecture du 16F84A

Excuter un programme avec un compteur programme

Des PORTs pour les entres et sorties (notes E/S)


PORT
b7 b6

E/S E/S E/S E/S E/S E/S E/S E/S

Ampli de puissance Bus interne E/S physique RB2

PIC16F

b5 b4 b3 b2 b1 b0

TRISA
b7 b6 b5 b4 b3 b2 b1 b0

Dtermine la direction : (1) entre 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 modles lectriques des PORTs V (V) 5 OH 4 3 2 1 0 5 10 15 IOH (mA) 20 25 min max typ

Les ports du 16F84 sont supposs dlivrer ou recevoir jusqu' 25mA

1.0 0.8 0.6 0.4 0.2

VOL (V) max typ min

10

15 IOL (mA)

20

25

IOH

IOL

Sortie haute

Rth

56<Rth<180

R'th 16<R'th<36

Sortie basse

UHth = 5V

ULth=0V

On prendra toujours Rth =100 Aprs avoir dtermin les modles de Thvenin des PORTs on s'intresse maintenant aux rsistances de tirage.

Les rsistances de tirage des PORTs


A quoi cela sert ? On les utilise en gnral pour les entres et cela peut viter d'utiliser ces mmes rsistances en externe.
Vcc

PORT
b7 b6 b5 b4 b3 b2 b1 b0

(en) pull-up resistor (fr) Rsistance de tirage interne

PIC 16FXXX

Sur PIC pull-up avec bit RPBU du registre OPTION

Cours 3 - 4 Interfaces externes des micro-contrleurs


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 frquences basses (32,768 kHz jusqu' 200 kHz) - RC Resistor Capacitor difficile de prvoir la frquence d'oscillation avec certitude. Vcc
C1=22pF

(16) OSC1 RF

RExt (16) OSC1 sleep CExt PIC 16F

RS
C2=22pF (17) OSC2

PIC 16F

II) Interfacer des LEDs


Rappel : Diode bloque Diode passante RD UD

UD ou U0 : tension de seuil Si UD inconnue prendre 1,8V. RD : rsistance dynamique Si RD inconnue prendre 0. Vcc R1 Micro-contrleur IE PA1 Micro-contrleur comme puits de courant

PA1

R1

IS

Micro-contrleur Micro-contrleur comme source de courant

ATTENTION les ports ne sont pas forcment symtriques : IS peut tre diffrent de IE. Pour information VOH=4V pour ID=10mA et V0L = 0,4V pour ID=10mA pour le PIC 16F84. Calculer les modles de Thvenin 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 rsistances utilises sur EasyPIC5 sont de 1k.

Pour gnraliser l'utilisation des LEDs, on peut s'intresser aux afficheurs sept segments a g a b g

Anode commune

Cathode commune

Comment allume-t-on un afficheur anode commune, un afficheur cathode commune ? Multiplexage de plusieurs afficheurs : 290 DC5611EWACommonCathode a b c d e f g 1k a f e d g c b

PIC 16F877A

RC0 RC1 RC2 RC3 RC4 RC5 RC6

RB0 RB1

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 f e

DIS0 g c d b

10k

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 Rsistance pull-up = rsistance de tirage - des bobines Vcc = 5V - des LEDs Vcc=12V - des moteurs Certains micro-contrleurs ont une rsistance interne pull-up par dfaut la mise sous tension. Le transistor 100R RC est alors passant. Pour viter cela on 680R peut ajouter la rsistance R2. PA2 2K2 R1 R2 Micro-contrleur Problme des Pull-Up internes pour les entres Sur PIC pull-up avec bit RPBU du registre OPTION initialis 1 la mise sous tension mais ????. 1K 2N2222 permet de sortir jusqu' 60mA

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

Il existe des familles spcialement faites pour tre commandes directement par des PORTs. Voir ZVN4206A et ZVN4306A de chez Zetex.

PA2 R2 Micro-contrleur 2K2

BSS138 permet de sortir jusqu' 220mA avec VDS=0,13V

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 trs diffrente de celle du micro-contrleur. Vcc=5V R1
TLP181

24V RC Charge

TLP181 : 16mA < IDmax < 20mA avec VD <1,3V 10mA 1mA < IC <10mA Dimensionner R1.

Micro-contrleur PAi

VI) Commander des bobines moteurs et relais avec BJT


Il existe des transistors de puissance adapts. 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 ncessite un courant IB assez important, allant au-del des possibilits 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 supplmentaire. Vcc = 15V R2 3K3 R1 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 dissipe dans le BD139 ?

PA2

Micro-contrleur

VII) Quelques circuits spcialiss


On peut trouver des circuits spcialiss destins commander directement des moteurs.

Le circuit L293D de chez Texas


Voici le schma interne :

On suppose que - Pin 4 est relie RA3 - Pin 5 est relie RA2 - Pin 7 est relie RA1 - Pin 6 est relie RA0 Comment fait-on avancer un robot motoris par deux moteurs ? Comment le fait-on reculer ?

VIII) Interfacer des entres


- Les boutons Vcc=5V R1 Sans pull-up interne Vcc=5V

Cela fonctionnet-il sans pull-up ? RA4 Vcc=5V RA1 Micro-contrleur R1

4,7k RA4

RA1 Micro-contrleur

R3 470

R2 4,7k

Montage simple qui ncessite cependant un bit par interrupteur. On ne peut pas toujours se le permettre.

Application au clavier
Vcc

Rsistances de tirage PORTB


b7 b6 b5 b4 b3 b2 b1 b0
1 4 7 * 2 5 8 0 3 6 9 #

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 f e

DIS0 g c d b

10k

sw6

DIS2 DIS0

Cours45:lespriphriquesinternesdela famille16F
I)LesregistresetnomsdesbitsenMikroC Documentation technique
OPTION

FicherentteMikroC //**MikroC fichier P18F84A.c *** //********** bits de OPTION NOT_RBPU = 0x0007, INTEDG = 0x0006, T0CS = 0x0005, T0SE = 0x0004, PSA = 0x0003, PS2 = 0x0002, PS1 = 0x0001, PS0 = 0x0000, ...

b7 RBPU b6 INTEDG b5 T0CS b4 T0SE b3 PSA b2 PS2 b0 PS0 b1 PS1

Remarque : les noms de la documentation et les noms du fichier d'entte ne correspondent pas toujours !

Les trois faons de programmer en Mikro C


FicherprogrammeMikroC Void main( void) { .... //*** Toujours ***** OPTION_REG.B3 =1; //**** Si on connat le nom OPTION_REG.PSA =1; // **** ou encore PSA_bit = 1; ... }

II)Timer0dans16FXXX
4 MUX0 Timer0 b7..................................b0 Timer0 1 OPTION MCU Clock =1
T0SE:SourceEdgeselect

b7 b6 b5 T0CS b4 T0SE b3 PSA b2 PS2 b1 PS1 b0 PS0

Overflow(8bits)

b7 b6 b5 b4 b3 b2 b1 b0
INTCON TMR0IF

PORTA

b7
2,4,...,256 =2(n+1)

b6 b5 b4 b2 b1 b0
RA4/T0CKI b3

MUX0 1

III)Interruptiontimer0
INTCON 0x0BBanque0et1 b7 GIE

& & & &

b6 EEIE b5 T0IE b4 b3 INTE RBIE

b2 T0IF b1 INTF b0 RBIF

Overflow Timer0 b7.....................................b0

IV)Timer1dans18F4550et16F877A
4 MUX0 T1CON 0xFCD 1 MCU Clock 1,2,4,8 =2(n) PORTC

Timer1 0xFB3hTMR1H 0xFB2hTMR1L b15..................................b0 Timer1 PIR1

b7 b6
&

RD16

T1Run
T1CKPS1 T1CKPS0
T1OSCEN NOT_T1SYNC

b7 b6 b5 b4 b3 b1 b2 CCP1IF b0 TMR1IF
overflow

b5 b4 b3 b2 b0

b1TMR1CS
TMR1ON

b7 b6
Dtection synchronise

b5 b4 b3
T1OSI
T1OSO/T1CLI

MUX1 0

b2 b1 b0

T1OSO/T1CLI
0 1 T1OSI FOsc/4
Prescaler 1,2,4,8

TMR1ON Syncwith internalclock 1 0

& Timer1 HighByte

Timer1L

TMR1CS T1OSCEN T1CKPS<1:0>

NOT_T1SYNC
WriteTMR1L ReadTMR1L Timer1H 8 InternalDataBus 8

Timer1dans16FXXX

V)CAPTUREPOUR16F877
CCPR1H CCPR1L PORTC PIR1

b7
TMR1H TMR1L

b7 b6 b5 b4 b3 b2 b1 b0
RC2/CCP1

b6 b5 b4 b3

CCP1CON

b7 b6 b5 b4 b3 CCP1M3 b2 CCP1M2 b1 CCP1M1 b0 CCP1M0

b2 CCP1IF b1 b0

1,4,16

0000:ModuleCCP1dsactiv 0100:Capturetouslesfronts descendants 0101:Capturetouslesfrontsmontants 0110:Capturetousles4frontsmontants 0111:Capturetousles16frontsmontants

VI)COMPARAISONPIC16F877

b7 b6 b5 b4 b3 b2 b1 b0 b7 b6 b5 b4 b3 b2 b1 b0

POR TC

SpecialEventTriggerdclenchera: unResetduTimer1(maispasunpositionnementdu drapeaud'interruptiondeTimer1) positionnementdubitGO/DONEquidmarreune conversionA/D(ECCP1seulement) TMR1H SpecialEventTrigger TMR1L

RC2/CCP1

QS R

Logiquedesortie

Comparaison

TRIS C

CCP1CO b7 N

CCPR1H CCPR1L PIR1

b6 b5 b4

b7

b3 CCP1M3
0

b2 CCP1M2 b1 CCP1M1 b0CCP1M0

b6 b5 b4 b3 b2 CCP1IF

0010:Comparebasculesortiequandcomparaison(CCPxIF) b1 1000:CompareforceCCPun(CCPIFestgr) b0 TMR1IF 1001:CompareforceCCPzro(CCPIFestgr) 1010:ComparesortriensurCCPmaissurCCPIF 1011:CompareforceSpecialEventTriggerresetsurtimer1(CCP1IFestgr)

VII)Timer2dans18F4550et16F877A
b7..................................b0 PR2
0000=1:1 0001=1:2 0010=1:3 .... 1111=1:16

PIR1

Comparateur Reset Timer2 b7..................................b0 &

T2CON

b7 b6 b5 b4 b3 b2 CCP1IF b1 TMR2IF b0 TMR1IF


4 MCU Clock

b7 b6 b5 b4 b3 b2 b1 b0

TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0

1,2,.., 16

1,4,16
00=1:1 01=1:4 1x=1:16

VIII)PWMdans18F4550et16F877A
b7..................................b0 PR2 8 Comparateur Reset 8 b7..................................b0 Timer2 T2CON

b7 b6 b5 b4 b3 b2 b0

TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON

0000=1:1 0001=1:2 0010=1:3 .... 1111=1:16

PIR1

b7 b6 b5 b4 b3 b2 CCP1IF b1 TMR2IF b0 TMR1IF b7 b6 b5 DC1B1 b4 DC1B0 b3 CCP1M3 b2 CCP1M2


0

1,2,..,16

T2CKPS1 b9..................................b2 b1b0 b1

10 Comparat eur

&

T2CKPS0

1,4,16
00=1:1 01=1:4 1x=1:16

CCP1CON

1 0 CCPR1 H b9..................................b2 CCPR1 L b7..................................b0

MCU Clock PORTC

b1 b0

b7 b CCP1M1 1 b6 b CCP1M0 b5 b4 b3
RQ S
RC2/CCP1

CCP1CON(CCP1M3210 1100:EnablePWM

b2 b1 b0

Entren'importequand priseencompteenfinde priode.

TRISC

b7 b6 b5 b4 b3
0

b2 b1 b0

You might also like