Professional Documents
Culture Documents
EL MORNAN
SOMMAIRE
Page 1
EL MORNAN
Unit centrale de
traitement
microprocesseur
Mmoire
Entres/Sorties
Bus d'adresses
Bus de contrle
Page 2
1.2
EL MORNAN
Les entres/sorties
Les entres/sorties sont ncessaires pour que le microprocesseur communique avec le monde extrieur et,
videmment, avec l'utilisateur. Il serait tout fait inutile de raliser un ordinateur sans qu'il y ait quelques
entres et quelques sorties afin de communiquer avec l'extrieur.
1.3
videmment, pour que le systme fonctionne, il doit y avoir une communication entre le microprocesseur,
la mmoire et les entres/sorties. Cette communication est ralise l'aide de trois bus qui regroupent les
signaux, selon leur fonction.
1.3.1 Le bus de donnes
C'est un bus bidirectionnel sur lequel transitent les donnes changes par les lments du systme.
1.3.2 Le bus dadresses
Il s'agit d'un bus unidirectionnel, manant du microprocesseur et se propageant vers les dispositifs qu'il
peut adresser. L'adresse qu'il porte permet d'atteindre une case mmoire ou un registre spcifique avec
laquelle une opration est dsire.
1.3.3 Le bus de contrle
C'est un groupe de lignes issues de ou allant vers le microprocesseur et reliant ce dernier d'autres
dispositifs. Son rle est de vhiculer les signaux destins assurer la synchronisation et la commande de
l'ensemble du systme. Par exemple, la ligne Reset et R/W (lecture/criture), les lignes d'interruptions et
l'horloge appartiennent ce bus.
2. Les microcontrleurs :
2.1 Gnralits :
Un microcontrleur se prsente comme tant une unit de traitement de linformation de type
microprocesseur contenant tous les composants dun systme informatique, savoir, microprocesseur,
des mmoires et des priphriques (ports, timers, convertisseurs). Chaque fabricant a sa ou ses familles
de microcontrleurs.
Une famille se caractrise par un noyau commun (le microprocesseur, le jeu dinstruction).
Ainsi les fabricants peuvent prsenter un grand nombre de pins qui sadaptent plus au moins certaines
tches. Mais un programmeur connaissant une famille na pas besoin dapprendre utiliser chaque
membre, il lui faut connatre juste ces diffrences par rapport au pre de la famille. Ces diffrences sont
souvent, la taille des mmoires, la prsence ou labsence des priphriques et leurs nombres
Page 3
EL MORNAN
EL MORNAN
Page 5
EL MORNAN
EL MORNAN
Page 7
EL MORNAN
Page 8
EL MORNAN
Le bit C (Carry) : C est mis 1 lorsquune opration arithmtique gnre une retenue. Il est galement utilis
comme indicateur derreur lors dune multiplication ou dune division, et sert lors de certaines oprations de
dcalage ou rotation qui peuvent passer par son intermdiaire ou non.
Le bit Z (Zro) : Z est mis 1 lorsque le rsultat de linstruction excut est nul.
Les bits RP1 et RP0 : Bits indiquants sur quelle page (bank), le microprocesseur travail en adressage direct (seul 7
bits dadresses sont ncessaires).
RP1 RP0
bank 0 (adresse 00h-7Fh) ou page 0
bank 1 (adresse 80h-FFh) ou page 1
bank 2 (adresse 100h-17Fh) ou page 2
bank 3 (adresse 180h-1FFh) ou page 3
Le bit IRP : Bit indiquant sur quelle page (bank), le microprocesseur travail en adressage indirect (8 bits
dadresses sont ncessaires).
0 : bank 0, 1 (adresse 00h-FFh) ou page 0 et 1
1 : bank 2,3 (adresse 100h-1FFh) ou page 2 et 3
E) Ports
Port A :
RA0 RA4 sont des entres du port parallle A. Ces lignes sont bidirectionnelles (sauf pour RA4 en entre
seulement). De plus elles sont partages avec certains priphriques du pic (voir doc constructeur en fonction des
besoins).
Port B :
PB0 PB7 sont des sorties du port parallle B. Ces lignes sont bidirectionnelles. De plus elles sont partages avec
certains priphriques du pic (voir doc constructeurs en fonction des besoins).
On remarque que l'cran se dcoupe en 4 champs :
Page 9
EL MORNAN
Champ tiquette
Champ oprateur (code mnmonique) ou directive d'assemblage
Champ oprande
Champ commentaire
Pour passer d'un champ un autre, il suffit de mettre un espace avec la touche espace ou
TAB. Plusieurs espaces accols correspondent un seul et mme espace. Attention on ne peut sauter des champs,
c'est dire passer du champ tiquette au champ oprande. Seul le champ commentaire est un peu particulier. Si un
champ quelconque est rempli, on peut aller directement au champ commentaire. Il y a une exception, lorsqu'aucun
champ n'est rempli, l'diteur considre que toute la ligne est un champ commentaire, d'o la condition de mettre ;
en dbut de ligne.
On n'utilisera pas d'tiquette comportant plus de 8 caractres du code ASCII standard.
EQU
Permet de donner des quivalences (pour des valeurs).
Ex: FSR
EQU
H04.
Et dans le programme cela donnera :
MOVF FSR
; Ecriture de W dans FSR
#DEFINE
Permet de donner des quivalences (pour des chanes de caractres).
Ex: #DEFINE MONBIT
PORTA,1.
Et dans le programme cela donnera :
BCF MONBIT ; Met le bit 1 du port A 0 (quivalent BCF PORTA,1)
Page 10
EL MORNAN
ORG
Dtermine o le compilateur doit mettre les codes qui suivent cette commande.
Ex: ORG
0x00.
Page 11
EL MORNAN
Notez bien que le registre situ l'adresse 0x0C (banque 0) est aussi le registre de l'adresse 0x8C (banque
1)
Les outils de programmation (MPLAB ...) permettent d'attribuer un nom un registre.
Il est plus agrable de manipuler :
movwf compteur1
que :
movwf 0x0C
TIMR0
PORTA
PORTB
EEDATA
EEADR
EL MORNAN
OPTION_REG
TRISA
TRISB
EECON1
EECON2
STATUS
INTCON
FSR , INDF
PCL
PCLATH
sont indiffremment accessibles en banque 0 ou en banque 1 (donc peu importe la valeur du bit RP0 du
registre STATUS).
Une instruction ncessite 1 cycle, ou bien 2 cycles dans le cas d'une instruction de branchement (GOTO,
CALL ...).
Avec une horloge quartz de 20 MHz, un cycle correspond 4/(20.106) = 200 nanosecondes.
Le microcontrleur peut donc excuter jusqu' 5 millions d'instructions par seconde !
Jeu d'instructions
Page 13
EL MORNAN
Mnmonique ,
oprande
bit du
registre nombre de
cycles
STATUS
affect
Description
MOVLW k
C, DC , Z
C, DC , Z
dans (W)
k - (W) -> (W)
Ralise un ET logique entre k (8 bits) et (W),
ANDLW k
et place le rsultat dans (W)
Ralise un OU logique (inclusif) entre k (8 bits)
IORLW k
et (W), et place le rsultat dans (W)
Ralise un OU exclusif entre k (8 bits) et (W),
XORLW k
et place le rsultat dans (W)
L : label (tiquette)
Mnmonique ,
oprande
GOTO L
bit du registrenombre de
STATUS affect
cycles
Description
Branchement l'adresse L
Retour de sous-programme
Retour de sous-programme, avec chargement
RETLW k
de la valeur littrale k (8 bits) dans (W)
Page 14
RETFIE
EL MORNAN
CLRWDT
/TO, /PD
/TO, /PD
Description
bit du registre
STATUSaffect
nombre de
cycles
BCF f , b
BSF f , b
1 ou 2
1 ou 2
cycles
MOVWF f
MOVF f , d
C, DC , Z
ADDWF f , d
EL MORNAN
C, DC , Z
1 ou 2
1 ou 2
DECFSZ f , d
INCF f , d
INCFSZ f , d
CLRF f
CLRW
EL MORNAN
RLF f , d
RRF f , d
NOP
Adressage inhrent :
Ce mode nest pas proprement parler un mode dadressage, mais tous les fabricants le dcomptent
comme tel
Les instructions agissent sur les registres internes du microprocesseur. Les instructions comportent donc un code
oprateur seul sans oprande.
CLRW
Met le registre de travail W 0 et met le bit Z 1.
Page 17
EL MORNAN
Adressage immdiat
La donne est contenue dans l'instruction .La donne est contenue dans un registre.
L'adresse de la donne est contenue dans un pointeur
Exemple : movlw 0xC4; Transfert la valeur 0xC4 dans W
Adressage direct
La donne est contenue dans un registre. Ce dernier peut tre par un nom (par exemple W) ou une adresse
mmoire.
Exemple : movf 0x2B, 0
; Transfert dans W la valeur contenue l'adresse 0x2B.
!
L'adresse 0x2B peut correspondre 2 registres en fonction de la
banque
Adressage indirect
PCL
PCLATH
Le registre spcial PCL est situ l'adresse 0x02 (banque 0) de la mmoire des donnes (Data RAM).
Ce registre est galement accessible en banque 1 ( l'adresse 0x82).
Le registre spcial PCLATH est situ l'adresse 0x0A (banque 0) de la mmoire des donnes.
Ce registre est galement accessible en banque 1 ( l'adresse 0x8A).
Le PC contient une adresse code sur 13 bits :
Par exemple :
(PCL) = B'10110011'
(PCLATH) =B'---00010' (les bits 5 7 ne sont pas utiliss par le PIC 16F84A)
(PC) = B'0001010110011' (adresse 0x2B3 en numration hexadcimale).
Page 18
EL MORNAN
La prochaine instruction que va excuter le PIC est donc situe l'adresse 0x2B3 de la mmoire de
programme.
Vous pouvez manipuler le contenu des registres PCL et PCLATH.
Par exemple, les instructions :
movlw 0x02 ; W = 0x02
movwf PCLATH ; (PCLATH) = 0x02
movlw 0xB3 ; W = 0xB3
movwf PCL ; (PCL) = 0xB3
font sauter le programme l'adresse 0x2B3 (aprs l'excution de l'instruction movwf PCL).
On a ainsi fait un GOTO "programm" (goto 0x2B3)
EL MORNAN
instructions de la routine
RETURN ; retour de routine
Supposons que le C en soit l'excution de l'instruction MOVLW B'10010001'.
L'instruction suivante est l'instruction CALL : il s'agit d'une instruction d'appel un sous-programme.
Le C saute alors la position dfinie par l'tiquette "routine1".
Puis, les instructions du sous-programme sont excutes.
La fin du sous-programme est signale par l'instruction RETURN (ou aussi RETLW).
Cette instruction indique qu'il faut revenir l'instruction qui suit l'instruction CALL, c'est dire dans cette
exemple CLRW.
N.B. Les instructions CALL et RETURN (ou RETLW) s'utilisent toujours par paire.
3.5 La pile
La pile est une zone mmoire particulire.
Page 20
EL MORNAN
CALL
RETURN
RETLW
RETFIE
En effet, c'est dans la pile qu'est mmorise l'adresse de retour d'une routine.
Quand intervient une instruction CALL ou une interruption, l'adresse de l'instruction suivante (qui se
trouve dans le compteur de programme PC) est sauvegarde dans la pile.
Quand une instruction RETURN, RETLW ou RETFIE apparat, le C lit la dernire valeur sauvegarde
dans la pile, libre l'emplacement et se branche l'adresse indique.
Avec le mcanisme de la pile, un sous-programme peut appeler un sous-programme (ou plutt un soussous-programme) : la pile rserve un autre emplacement..
La taille de la pile est limite 8 niveaux (pour le PIC 16F84A).
S'il y a plus de 8 routines actives en mme temps, le contenu de la pile est cras et le programme ne
fonctionne plus correctement.
Cela se traduit par un plantage (le C ne fait plus rien) ou bien par un comportement plus ou moins
incohrent (le C fait des choses bizarres) ... problmes que l'on retrouve exactement sur des programmes
plus complexes (Windows de Microsoft ...).
Remarques :
- il ne peut y avoir qu'une seule routine d'interruption (car un seul vecteur d'interruption : H'0004')
- la routine d'interruption peut appeler un sous-programme (avec l'instruction CALL)
- un sous-programme ne doit pas s'appeler lui-mme
3.6 Le compteur
Le PIC 16F84 est dot d'un compteur 8 bits. La Figure en donne l'organigramme
Page 21
EL MORNAN
Page 22
EL MORNAN
Page 23
EL MORNAN
Valeurs
possibles
Signification
Rend impossible la lecture de la mmoire de programme
Flash
ON
CP
Lecture possible
ON
PWRTE
(Power-up Timer
Enable bit)
Temporisation dsactive
WDT
ON
(Watchdog Timer
Enable bit)
OFF
Dsactive le watchdog
Oscillateur de type Rsistance / Condensateur
RC
OSC
(Oscillator Selection
bits)
HS
XT
LP
Exemple de configuration
Dans le code source (fichier avec extension .asm), les fusibles de configuration sont indiqus au
compilateur avec la directive suivante :
__config _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
Page 24
EL MORNAN
Remarque
5. Les interruptions
Le PIC 16F84A dispose de 4 sources d'interruptions :
1.
Interruption sur la broche RB0/INT
2.
Interruption "RB" : sur changement du niveau logique d'au moins une de ces 4 broches : RB4,
RB5, RB6 ou RB7 (port B)
3.
Interruption de dbordement du registre TMR0 (H'FF' -> H'00')
4.
Interruption de fin d'criture de l'EEPROM
EL MORNAN
On veut donc provoquer une interruption quand on appuie sur le bouton poussoir.
Pour cela, il faut commencer par autoriser les interruptions de manire globale :
Sinon, le C se rebranche indfiniment sur la routine d'interruption (puisque INTF = 1) : le programme est
plant !
Sauvegarde et restauration du contexte de travail
Page 26
EL MORNAN
Il est important que le contexte de travail du programme principal soit le mme avant et aprs l'excution
de la routine d'interruption.
Cela concerne le registre STATUS et l'accumulateur W qui doivent retrouver le mme contenu (en effet,
ces deux registres sont souvent utiliss et donc modifis pendant la routine d'interruption).
Voici la procdure prconise par Microchip :
La routine d'interruption commence par la sauvegarde du registre W puis du registre STATUS :
org H'0004' ; vecteur d'interruption (directive du compilateur MPLAB)
movwf W_TEMP
swapf STATUS, W
movwf STATUS_TEMP
La routine d'interruption finit par la restauration du registre STATUS puis du registre W :
swapf STATUS_TEMP, W
movwf STATUS
swapf W_TEMP, f
swapf W_TEMP, W
retfie ; retour d'interruption
Page 27
EL MORNAN
Page 28
EL MORNAN
GIE = 1
INTE = 1
RBIE = 1
T0IE = 1
EEIE = 1
Dans la routine d'interruption (aprs avoir sauvegard le registre W et le registre STATUS), se pose la
question suivante : quelle est la source de l'interruption ?
La rponse se fait en testant, les uns aprs les autres, le niveau logique des drapeaux :
Par exemple, supposons que l'interruption est due au dbordement du registre TMR0 :
INTF = 0
RBIF = 0
T0IF = 1
EEIF = 0
INTF = 1
RBIF = 1
T0IF = 0
EEIF = 0
Dans ce cas, on se peut se contenter de traiter une seule source d'interruption la fois.
Ce sera l'interruption RB0/INT s'il se trouve que le drapeau INTF est test en premier.
Aprs retour dans le programme principal, on aura :
INTF = 0
RBIF = 1
T0IF = 0
EEIF = 0
Page 29
EL MORNAN
Page 30
EL MORNAN
6. Le mode SLEEP
6.1 Prambule
L'utilisation du mode SLEEP (Power-down mode) n'a d'intrt que dans les applications alimentes par
piles ou batteries.En effet, en mode SLEEP la consommation lectrique du C devient trs faible.
Attention : le timer du watchdog continue de fonctionner pendant le mode SLEEP (si le watchdog est
actif).
Il y a un RESET externe (niveau bas sur la broche /MCLR) : le programme est rinitialis (adresse
H'0000' de la mmoire de programme).
La temporisation du watchdog est dpasse (si le watchdog est actif) : le programme reprend
l'instruction qui suit l'instruction SLEEP.
Une interruption RB0/INT, RB ou EEPROM survient (si ces interruptions sont autorises) mme
quand le bit GIE (du registre INTCON) est gal 0 :
o
si GIE = 0 : le programme reprend l'instruction qui suit l'instruction SLEEP
o
si GIE = 1 : l'instruction qui suit l'instruction SLEEP est excute puis le programme saute
la routine d'interruption (adresse H'0004' de la mmoire de programme)
EL MORNAN
la consquence d'un bug (dans ce cas, c'est une erreur humaine et il faut corriger le programme)
la consquence d'une perturbation lectrique qui fait sauter le programme une adresse
quelconque et inattendue
Le plantage se traduit gnralement par un "blocage" : le C ne fait plus rien ou bien des choses tranges.
Il faut alors faire un RESET externe (en supposant qu'un bouton poussoir sur la broche /MCLR a t prvu
cet effet) :
Autrement, il faut couper l'alimentation, attendre quelques secondes que les condensateurs de filtrage se
dchargent, et remettre en route. Nous allons voir que le watchdog, par logiciel, permet de faire un
RESET interne.
Page 32
Taux de
prdivision
EL MORNAN
Dure
indicative
du Watchdog
0
XXX
18 ms
000
18 ms
001
36 ms
010
72 ms
011
144 ms
100
16
288 ms
101
32
576 ms
110
64
1,15 s
111
128
2,3 s
X = 0 ou 1
En effaant le watchdog intervalles rguliers (avec CLRWDT), le timer ne doit normalement jamais
"dborder".
En cas de plantage, le timer dborde ce qui gnre un RESET, et le programme redmarre.
Remarques :
L'instruction CLRWDT :
EL MORNAN
7.3 Reset
Il y a plusieurs types de Reset :
Page 34
EL MORNAN
/PD
Condition
EL MORNAN
EL MORNAN
8.2 Lecture
Pour lire une donne dans la mmoire eeprom, il faut mettre l'adresse dans EEADR et positionner RD 1.
La valeur lue est alors disponible dans EEDATA au cycle machine suivant. Le programme ci-dessous
donne un exemple de lecture dans la mmoire eeprom.
8.3 Ecriture
Pour crire une donne dans la mmoire eeprom, il faut d'abord mettre l'adresse dans EEADR et la donne
dans EEDATA. Un cycle bien spcifique doit ensuite tre respecter pour que l'criture ait lieu. L'exemple
suivant donne le cycle :
Page 37
EL MORNAN
Page 38
EL MORNAN
Page 39
EL MORNAN
Page 40
EL MORNAN
Page 41
EL MORNAN
Page 42
EL MORNAN
Page 43
EL MORNAN
Page 44
EL MORNAN
Page 45
EL MORNAN
Page 46
EL MORNAN
Page 47
EL MORNAN
Page 48
EL MORNAN
Page 49
EL MORNAN
Page 50
EL MORNAN
debut
{ bloc d'instructions }
movf REGISTRE , f
btfsc STATUS , Z
goto debut
suite
{ suite du programme }
9-6- Boucle While
Exemple :
Page 51
EL MORNAN
debut
movlw 0xE8 ; W = 0xE8
subwf REGISTRE, W ; W = (REGISTRE) - 0xE8
btfss STATUS , Z
goto suite
{ bloc d'instructions }
goto debut
suite
{ suite du programme }
9-7- Boucle FOR
Une variable (1 octet) sert de compteur.
Exemple :
Pour excuter le bloc d'instructions 20 fois, la valeur initiale du compteur doit tre 21 :
Page 52
EL MORNAN
EL MORNAN
{ suite du programme }
N.B. Avec (COMPTEUR) = 0xFF en valeur initiale, on effectue 254 boucles.
Avec (COMPTEUR) = 0x00 en valeur initiale, on effectue 255 boucles.
Avec (COMPTEUR) = 0x01 en valeur initiale, on effectue 0 boucle.
9-8- Manipulation de bits. Les masques
9-8-1- Mettre 0 certains bits d'un registre
Exemple : on veut mettre 0 les bits 1, 2, 4 et 6, les autres bits tant inchangs :
B'u0u0u00u'
movlw B'10101001' ; W = B'10101001' (on appelle a un masque)
andwf REGISTRE , f ; fonction ET logique
Valeur initiale : (REGISTRE) = B'11010101'
Valeur finale : (REGISTRE) = B'10000001'
N.B. S'il n'y a qu'un seul bit mettre 0, il faut simplement utiliser l'instruction bcf.
S'il faut mettre tous les bits 0, il faut simplement utiliser l'instruction clrf REGISTRE
9-8-2- Mettre 1 certains bits d'un registre
Exemple : on veut mettre 1 les bits 1, 2, 4 et 6, les autres bits tant inchangs :
B'u1u1u11u'
movlw B'01010110' ; W = B'01010110' (masque)
iorwf REGISTRE , f ; fonction OU logique
EL MORNAN
Exemple :
0x100
0x200
0x300
; xxxxxxxxxxx
; Routine table
; xxxxxxxxxxx
org 0x0300 ; adresse de dbut de la table
table
addwf PCL , f ; (PCL) = (PCL) + W
retlw D'1'
retlw D'11'
retlw D'21'
retlw D'31'
Page 55
EL MORNAN
retlw D'41'
retlw D'51'
retlw D'61'
retlw D'71'
retlw D'81'
retlw D'91'
retlw D'101'
retlw D'111'
retlw D'121'
retlw D'131'
retlw D'141'
retlw D'151'
retlw D'161'
retlw D'171'
retlw D'181'
retlw D'191'
retlw D'201'
retlw D'211'
retlw D'221'
retlw D'231'
retlw D'241'
retlw D'251'
; Fin de la routine table
; xxxxxxxxxxxxxxxxxx
Avec un dbut de routine l'adresse 0x300, l'instruction retlw D'1' se trouve l'adresse 0x301, retlw
D'11' l'adresse 0x302 etc...
Page 56
EL MORNAN
Dans le programme principal, pour appeler la routine, il faut au pralable charger le registre spcial
PCLATH avec la valeur 0x03 (0x02 si l'adresse de dbut est 0x200 etc ...) :
movlw 0x03 ; W = 0x03
movwf PCLATH ; (PCLATH) = 0x03
movlw D'16' ; W = D'16' : 16me ligne de la table
call table
movwf resultat ; (resultat) = D'161'
Page 57
EL MORNAN
: utilisation du timer
EQU
0x0C
retard2
EQU
0x0F
MOVWF retard1
MOVWF retard2
tempo
DECFSZ retard1,F
GOTO tempo
MOVLW 0xFF
MOVWF retard1
DECFSZ retard2,F
GOTO tempo
RETURN
Page 58
EL MORNAN
p=16f84A
#include p16f84A.inc
__config H'3FF9'
;------------ Dfinition des constantes ---------------
EQU
0x00
; variable W = 0
EQU
0x01
; variable F = 1
EQU
0x0C
key
EQU
0x12
OPTION_REG EQU
H'0081'
Page 59
EL MORNAN
MOVLW 0x00
MOVWF TRISB
MOVLW 0x1F
MOVWF TRISA
MOVLW 0x07
MOVWF OPTION_REG
clrf PORTB
clrf key
;-------------------- Programme principal ---------------------debut
MOVLW 0x06
MOVWF TMR0
MOVLW 0x7D
MOVWF retard1
call tempo
COMF key,f
EL MORNAN
movf key,w
movwf PORTB
; change l 'tat des leds chaque fois que la tempo est finie
goto debut
tempo
movf TMR0,w
btfss STATUS,2
;test du bit Z
goto tempo
MOVLW 0x06
MOVWF TMR0
DECFSZ retard1,F
GOTO tempo
return
END
EL MORNAN
; On ralise un compteur binaire sur les broches RB0 RB7 d' un PIC 16 F 84 le quartz utilis
; est de 4 Mhz , on effectue une tempo environ gale 0.2 seconde.
;------------ Directive d' assemblage pour MPLAB --------------list
p=16f84A
#include p16f84A.inc
__config H'3FF9'
;------------ Dfinition des constantes --------------#define inter0 0
; bouton marche
EQU
0x0C
retard2
EQU
0x0D
memo
EQU
0x0E
MOVLW B'00000000'
MOVWF TRISB
MOVLW 0x1F
MOVWF TRISA
bcf STATUS,5
MOVLW 0xFF
MOVWF retard1
MOVLW 0xFF
EL MORNAN
MOVWF retard2
MOVF memo, W
MOVWF PORTB
CALL tempo
; on appel la temporisation
MOVLW 0x01
ADDWF memo, F
; on additionne memo + 1
GOTO Main
GOTO tempo
MOVLW 0xFF
MOVWF retard1
DECFSZ retard2,F
GOTO tempo
RETURN
END
; fin du programme
Page 63
11.5
EL MORNAN
p=16f84A
#include p16f84A.inc
__config H'3FF9'
;------------ Dfinition des constantes --------------#define inter0 0
; bouton marche
EL MORNAN
EQU
0x0C
retard2
EQU
0x0F
retard3
EQU
0x10
MOVLW 0x00
MOVWF TRISB
MOVLW 0x1F
MOVWF TRISA
bcf STATUS,5
MOVWF PORTB
goto clignote
MOVLW B'00001001'
MOVWF PORTB
EL MORNAN
MOVLW B'00001100'
MOVWF PORTB
CALL tempo
MOVLW B'00001010'
MOVWF PORTB
CALL tempo2
MOVLW B'00001001'
MOVWF PORTB
CALL tempo2
MOVLW B'00100001'
MOVWF PORTB
CALL tempo
MOVLW B'00010001'
MOVWF PORTB
CALL tempo2
GOTO debut
MOVWF retard1
MOVWF retard2
MOVLW 0x12
MOVWF retard3
attente
DECFSZ retard1,F
GOTO attente
movlw 0xFF
; on recharge retard1
Page 66
EL MORNAN
movwf retard1
DECFSZ retard2,F
GOTO attente
movlw 0xFF
; on recharge retard2
movwf retard2
DECFSZ retard3,F
GOTO attente
RETURN
MOVWF retard1
MOVWF retard2
MOVLW 0x07
MOVWF retard3
attente2
DECFSZ retard1,F
GOTO attente2
movlw 0xFF
; on recharge retard1
movwf retard1
DECFSZ retard2,F
GOTO attente2
movlw 0xFF
; on recharge retard2
movwf retard2
DECFSZ retard3,F
GOTO attente2
RETURN
clignote
MOVLW B'00010010'
MOVWF PORTB
CALL tempo2
EL MORNAN
MOVLW B'00000000'
MOVWF PORTB
CALL tempo2
GOTO ret_cli
END
Page 68
EL MORNAN
; Titre : Perceuse
; PIC utilis : PIC 16 F 84
; On ralise une simulation dune perceuse en utilisant les broches RB0 RB3
; pour le bouton marche, le coup de poing d' arrt d'urgence et les deux fin de
; course haut et bas.
; Les broches RB4 RB7 reprsentent la rotation, la monte et la descente.
; Entres : RB0= Arrt
RA0= Marche
; Cycle :
; 1) appui sur marche -> rotation + descente
; 2) capteur bas actionn -> temporisation et rotation + remonte
; 3) capteur haut actionn -> rotation + temporisation et arrt rotation
; Arrt d'urgence : La perceuse s'arrte de tourner et remonte, un voyant dfaut mmorise
; l' action. Le voyant dfaut s' efface au prochain cycle.
;------------ Directive d' assemblage pour PLAB --------------list
p=16f84A
#include p16f84A.inc
Page 69
EL MORNAN
__config H'3FF9'
;------------ Dfinition des constantes --------------#define arret 0
; bouton arrt
#define marche
; bouton marche
#define capteur_h 1
; capteur haut
#define capteur_b 2
; capteur bas
EQU
0x0C
retard2
EQU
0x0F
retard3
EQU
0x10
MOVWF PORTB
capt
btfss PORTA,capteur_h
goto capt
; va capt
MOVLW B'00010000'
MOVWF PORTB
bcf INTCON,1
bsf INTCON,4
; on met 1 le 4eme bit du registre INTCON pour autoriser l' IT sur RB0
bsf INTCON,7 ; on met 1 le 7eme bit du registre INTCON pour autoriser toutes les IT
goto debut
; on retourne debut
EL MORNAN
MOVWF TRISB
MOVLW 0x1F
MOVWF TRISA
bcf STATUS,5
bsf INTCON,4
bsf INTCON,7
; on met 1 le 7eme bit du registre INTCON pour autoriser toutes les 'IT
MOVWF PORTB
debut
bsf INTCON,4
bsf INTCON,7
btfsc PORTB,arret
goto debut
btfss PORTA,marche
goto debut
; va debut
btfss PORTA,capteur_h
goto debut
; va debut ( init )
MOVLW B'00000000'
MOVWF PORTB
MOVLW B'00000110'
MOVWF PORTB
descente
btfss PORTA,capteur_b
EL MORNAN
goto descente
; va descente
CALL tempo
; on appel la temporisation
MOVLW B'00001010'
MOVWF PORTB
remonte
btfss PORTA,capteur_h
goto remonte
; va remonte
CALL tempo
; on appel la temporisation
MOVLW B'00000010'
MOVWF PORTB
CALL tempo
; on appel la temporisation
MOVLW B'00000000'
MOVWF PORTB
GOTO debut
-----------------------------------
tempo
MOVLW 0xFF
MOVWF retard1
MOVWF retard2
MOVLW 0x12
MOVWF retard3
attente
DECFSZ retard1,F
GOTO attente
movlw 0xFF
; on recharge retard1
movwf retard1
DECFSZ retard2,F
GOTO attente
movlw 0xFF
; on recharge retard2
movwf retard2
Page 72
DECFSZ retard3,F
EL MORNAN
GOTO attente
RETURN
END
Page 73
EL MORNAN
Page 74
EL MORNAN
. Lancer la simulation
Pour lancer la simulation il suffit de cliquer sur licone PLAY verte en bas de page
Page 75
EL MORNAN
En excutant la simulation en mode pas pas , vous pouvez ensuite excuter le programme par pas, mettre
des points darrt dans le programme, voir ltat des registres, etc...
Page 76
EL MORNAN
Au-dessus de lcran cristaux liquides proprement dit, on trouve une srie de 14 broches aux rles
Suivantes :
Broche 1 : masse ;
Broche 2 : Vcc ;
Broche 3 : luminosit ;
Broche 5, R/W : slection du mode lecture ou criture :
Page 77
EL MORNAN
criture
lecture
Page 78
EL MORNAN
U1
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
19
20
21
22
27
28
29
30
LCD
7
8
9
10
11
12
13
14
D0
D1
D2
D3
D4
D5
D6
D7
LM032L
RS
RW
E
RS
E
4
5
6
15
16
17
18
23
24
25
26
RW
VSS
VDD
VEE
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4/SS
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RE0/AN5/RD
RC2/CCP1
RE1/AN6/WR
RC3/SCK/SCL
RE2/AN7/CS
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
33
34
35
36
37
38
39
40
RS
RW
E
8
9
10
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
1
2
3
2
3
4
5
6
7
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
GND
VCC
VEE
13
14
1
PIC16F877
VDD=VCC
VSS=GND
13.2 Le clavier
13-2-1 Prsentation :
Le clavier est le priphrique le plus commode pour saisir du texte, mais dans notre carte on va utiliser
un clavier alphanumrique 16 touches matrices pour saisir des numros et un peut dalphabets, pour
connecter le clavier au microcontrleur on est besoin dun codeur de clavier 74LS922 pour prserver les
ressources du microcontrleur.
Page 79
EL MORNAN
Le clavier se compose de 16 touches reparties sur une matrice de 4 lignes (chaque ligne contient 4
touches) 4 pistes sont disposes horizontalement (elles correspondant aux 4 lignes de touches) et 4 autres
pistes sont disposes verticalement (elles correspondant aux 4 colonnes de touches). Chaque touche agit
comme un bouton poussoir qui tablit le contact entre une des 4 pistes horizontales et une des 4 pistes
verticales.
Chaque touche est un interrupteur, normalement en position ouverte .Lorsquune touche est
appuye un signal lectrique est envoy vers le codeur, circuit lectronique trs simple qui associe
chaque signal un code (par exemple le code ascii de la touche). Ce signal peut tre utilis pour envoyer
une interruption au processeur fin quil traite linformation. Les codeurs rellement utiliss assurent de
fonctions supplmentaires comme le dcodage automatique des touches appuyes longtemps.
Page 80
EL MORNAN
EL MORNAN
Page 82
EL MORNAN
Page 83
EL MORNAN
Le moteur pas pas+ULN2003A sont connects aux lignes RD0 RD3 du microcontrleur.
13-5-2 Moteur courant continu :
Le moteur courant continue est une machine lectrique tournante constitu de deux parties principales : le
stator (la partie fixe) et le rotor (la partie mobile).
Dans ce figure on utiliser deux relaies pour changer le sens de rotation du moteur courant continue. Les
deux pins MCC1 et MCC2 relier avec les pins RE0 etRE1 du microcontrleur.
Page 84
EL MORNAN
Lorsqu'on veut commander le sens de rotation dun moteur ( courant continu ou pas pas) on est souvent
oblig d'inverser la polarit. De plus il est gnralement prfrable de pouvoir faire varier la vitesse du
moteur. La solution est dutiliser le pont en H.
Sur le schma b ; il tourne dans le sens inverse du schma c, et enfin sur le schma d ; il est frein. Et
bien voici la base du pont en H, toute l'ide rside dans ce schma. Bien sr, pour l'implmenter, il va
nous falloir remplacer les interrupteurs par des transistors.
IN1
IN2
ETAT MOTEUR
ARRET
SENS 1
SENS 2
ARRET
Page 85
EL MORNAN
Lorsqu'on arrte le moteur, et qu'il continue tourner avec l'inertie, il se comporte comme une gnratrice.
Pour viter d'avoir des courants dans les transistors on monte des diodes de roues libres.
Page 86
EL MORNAN
VCC
REL2
D2
1N4148
5
3
Q2
R2
2N2222
POMP1
RL
20
2.2k
Montage du relais
Page 87
EL MORNAN
SWO
1
RE0
SW1
1
RE1
2
RE2
SW2
1
R9
R10
2.2k
2.2k
R8
2.2k
VCC
Prsentation :
Les liaisons sries permettant la communication entre deux systmes numriques en limitant le
nombre de Fils de transmission..
DCD (Data Carrier Detecte ) : Cette ligne est une entre active ltat haute. Elle signal lordinateur
quune liaison a t tablie avec un correspondant.
Page 88
EL MORNAN
RX( Reciver Data) : Cette ligne est une entre.Cest ici que transitent les informations du
correspondant vers lordinateur.
TX (Transmit Data ) : cette ligne est une sortie. Elle permet la vhicule des donnes de lordinateur
vers le correspondant.
DTR (Data Terminal Ready ) :Cette ligne est une sortie active ltat haut Elle permet lordinateur
de signaler au correspondant que le port srie t libr et quil peut tre utilis sil le souhaite.
GND (GrouND) : cest la masse.
DSR (Data Set Read) : Cette ligne est une entre active ltat haut. Elle permet au correspondant de
signaler quune donne est prte.
RTS (Request To Send ) : cette ligne est une sortie active ltat haut. Elle indique au correspondant
que lordinateur veut lui transmettre des donnes..
CTS (Clear To Send ) : Cette ligne est une entre active ltat haut.Elle indique lordinateur que le
correspondant est prt recevoir des donns.
RI( RING Indicator) :Cette ligne est une entre active ltat haut.Elle permet lordinateur de
savoir si un correspondant veut initier une communication avec lui.
Fonctionnement :
Pour pouvoir dialoguer avec le PC, le microcontrleur utilise son module USART signifie
(Universal Synchronous Asynchronous Reciever Transmitter ).
Cest donc un module qui permet denvoyer et de recevoir des donnes en mode srie, soit de
faon synchrone, soit asynchrone. Le module USART de notre PIC gre uniquement deux pins, savoir
RC6/TX/CK et RC7/RX/DT.
Une liaison srie synchrone ncessite une connexion ddie lhorloge, donc il reste une seule
ligne pour transmettre les donnes. Alors quen mode asynchrone on na pas besoin dune ligne
dhorloge, il nous restera alors deux lignes pour communiquer, chacune tant ddie un sens de
transfert. Nous pourrons donc envoyer et recevoir des donnes en mme temps.
Les liaisons RS 232 sont des liaisons asynchrones trs utilises en informatique. Elle ncessite que
lmetteur et le rcepteur soit inform de la vitesse choisie de transfert.
Puisque le rcepteur connat la vitesse du transfert il peut se passer de signal de synchronisation.
Trois lignes sont ncessaires cette liaison.
TX : transmission de donns.
RX:rcepteur de donn.
Page 89
EL MORNAN
GND :masse
Grce cette liaison la carte peut servir dinterface entre un PC et un montage extrieure afin
dadapter les signaux TTL du microcontrleur au standard RS232
Un MAX232 est monte de faucon classique, les lignes RX, TX et la masse sont disponibles sur
un connecteur DB9 mle qui permet ainsi de relier la carte au PC avec un simple cble srie.
Page 90
EL MORNAN
Page 91
EL MORNAN
1. Prsentation :
Le bus I2C qui nutilise que deux lignes de signal (et les masses correspondantes bien sr) permet un
certain nombre dappareils dchange des informations sous forme srie avec un dbit pouvant atteindre
100 Kbits par seconde ou 400 kbits par seconde pour les versions les plus rcentes. Mme si ces dbits
peuvent sembler relativement faibles, les premires applications du bus I2C sont des applications audio
ou vido pour lesquelles la simplicit de mise en uvre est nettement plus importante quun dbit lev.
Les points forts du bus I2C sont :
Premirement cest un bus srie bifilaire utilisant une ligne de donnes appele SDA (Serial Data) et une
ligne dhorloge appele SCL (Serial Clock).
Les donnes peuvent tre changes dans les deux sens sans restriction.
Le bus est multi-matre : chaque abonn dispose dune adresse code sur 7 bits, on peut donc connecter
simultanment 128 abonns dadresses diffrentes sur le mme bus.
Un acquittement est gnr pour chaque octet de donne transfr.
Le bus peut travailler une vitesse maximum de 100 K bits par seconde (ou 400 Kbits par seconde) tant
entendu que son protocole permet de ralentir automatiquement lquipement le plus rapide pour sadapter
la vitesse de llment le plus lent, lors dun transfert.
Le nombre maximum dabonns nest limit que par la charge capacitive maximale du bus qui peut tre de
400pF.
Les donnes envoyes par paquets de huit bits indpendants(le bit de poids fort est envoy le premier) sur
la ligne SDA, chaque octet est suivie par un bit dacquittement .La ligne SCL fonctionne comme une
horloge srielle dun registre dcalage, tant que cette ligne est ltat haut les donnes de la ligne SDA
doivent tre stables.
Page 92
EL MORNAN
Certaines combinaisons particulires de niveaux et de fronts des deux lignes dterminant la condition de
dpart ou darrt de la transmission des donnes.
Condition de dpart : Un front descendant sur SDA quand SCL est ltat haut.
Condition darrt : Un front montant sur SDA quand SCL est ltat haut.
EL MORNAN
2. Connexion de PCF8583:
Lhorloge temps rel PCF8583 accs I2C est raccorde la ligne RC3 du Pic pour lhorloge (SCL) et
RC4 pour les donnes (SDA), la liaison aux lignes RC3 et RC4 seffectue en changeant ltat du SW9.
Les rsistances R48 et R49 maintiennent positivement ces signaux au repos. Le montage contient aussi
une pile rechargeable pour alimenter le PCF8583 en cas o la carte nest pas alimente.
Le bus I2C appartient la catgorie des bus srie par opposition aux bus parallle ou les donnes sont
transmises par bloc, les donnes sont ici envoyes bit par bit par groupe doctet sur la ligne SDA.La ligne
SCL fonctionne comme une horloge srielle dun registre dcalage. Tant que la ligne SCL est ltat
haut les donnes de la ligne SDA doivent tre stables.
Lorsque la ligne SCL est ltat bas, le circuit qui met les donnes peut modifier ltat.
Certaines combinaisons particulires de niveaux et de fronts des deux lignes dterminant la condition de
dpart ou darrt de la transmission des donnes.
Condition de dpart : Un front descendant sur SDA quand SCL est ltat haut.
Condition darrt : Un front montant sur SDA quand SCL est ltat haut.
Page 94
EL MORNAN
MCLR
Cette broche sert initialiser le microcontrleur.
Le microcontrleur dispose de plusieurs sources de RESET :
POR.
EXTERNAL RESET
WDT
BOR
POR: (POWER ON RESET) Mise sous tension.
Un front montant sur MCLR dclenche l'initialisation du microcontrleur. Le temps ncessaire est au
minimum de 72ms et au maximum de 72ms+1024*Tosc. Le microcontrleur dispos en interne dun
circuit de dtection de niveau, quand la tension VDD est comprise entre 1.2V et 1.7V, il dmarre une
procdure dinitialisation.
Cette broche peut tre simplement relie VDD si on na pas besoin de RESET externe. Par contre si on
souhaite implanter un bouton de remise zro, on pourra cbler un simple rseau RC sur la broche
MCLR.
Page 95
EL MORNAN
Remarque importante : On peut se passer de circuit RC la seule condition que le temps de mont de
VDD soit suffisamment rapide (au minimum 50mV/ms). Si le temps de monte est infrieur 50mV/ms,
il faut rajouter un rseau RC.
EXTERNAL RESET (Mise ltat bas de MCLR). Remise zro extrieure. Il faut appliquer un
niveau bas sur l'entre RESET pendant au moins 2S pour que l'Initialisation soit prise en compte.
WDT: Chien de garde.
Si le WDT arrive la fin du temps de garde sans avoir t rafrachi il y aura alors une initialisation du
microcontrleur.
BOR: Baisse de lalimentation.
Si la tension VDD chute en dessous de 4V pendant 100S au moins, le microcontrleur peut gnrer un
RESET.
C1
U1
1nF
X1
C2
1nF
13
14
CRYS T AL
1
2
3
4
5
6
7
8
9
10
OSC1/CLK IN
OSC2/CLK OUT
MCLR/V pp/T HV
RA0/AN0
RA1/AN1
RA2/AN2/V RE FRA3/AN3/V RE F+
RA4/T 0CKI
RA5/AN4/S S
RE0/AN5/RD
RE1/AN6/W R
RE2/AN7/CS
RB 0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RC0/T 1OS O/T 1CKI
RC1/T 1OSI/CCP2
RC2/CCP 1
RC3/S CK /S CL
RC4/SDI/S DA
RC5/SDO
RC6/T X/CK
RC7/RX/DT
RD0/PS P0
RD1/PS P1
RD2/PS P2
RD3/PS P3
RD4/PS P4
RD5/PS P5
RD6/PS P6
RD7/PS P7
33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
PIC16F877
.
Brochage du circuit doscillation PIC16F877
Page 96
EL MORNAN
Remarque : La consommation du circuit sera d'autant plus faible que la frquence sera petite, cela peut
tre intressant pour des applications de faible consommation (alimentation autonome).
Pour des applications faible consommation, on peut utiliser les sries LF (Low Frequency and Low
Power).
LInterruption : RBO/INT.
Cette broche une double fonction elle peut tre utilise comme une broche standard RBO ou comme une
entre dinterruption INT.
Si cette broche est utilise comme une entre d'interruption externe, elle doit tre maintenue un niveau
haut par l'intermdiaire de rsistances de 10 k pour ne pas dclencher dinterruptions imprvues, cela
permet aussi de relier plusieurs sources d'interruptions sur une mme ligne (OU CABLE).
Page 97
EL MORNAN
EL MORNAN
Le PORT C (8 bits) I/O pure et/ou TIMER 1 et/ou SPI / I2C et/ou USART.
Le PORT D (8 bits) I/O pure et/ou port parallle 8 bits associ au PORT E.
Le PORT E (3 bits) I/O pure et/ou pilotage du PORT E RE0/RD, RE1/WR et RE2/CS.
Tableau de caractristiques
EL MORNAN
que les diffrents registres de donnes. Elle contient galement les variables utilises par le programme.
La RAM est la mmoire la plus utilise. Toutes les donnes qui y sont stockes sont perdues lors dune
coupure de courant.
La RAM est subdivise de plus en deux parties dans chacune on trouve des cases mmoire spciales
appele REGISTRES SPECIAUX et des cases mmoire libre dont on peut se servir provoque un
fonctionnement spcial du PIC ou la mise en service dune fonction particulire.
3 LEPROM Interne :
Le pic 16F877contient galement la mmoire lectriquement effaable, rcrivable et stable. Ce type de
mmoire est daccs plus lent. Pour grer cette EEPROM on a besoin de quatre registres, savoir EEDR,
EEDATA, EECON1 et EECON2.
Le registre EEADR est utilis pour placer ladresse relative en EEPROM, tandis que le EEDATA contient
la donn lire ou crire.
Ladresse relative de laccs EEPROM est donc comprise entre 0000 et 00FF ce qui nous permet dutiliser
un registre de huit bit pour dfinir cette adresse.
Organisation mmoire
Comme les PICs utilisent un bus pour les instructions et un bus pour les donnes, il faut considrer deux
plans mmoire lun pour les instructions et lautre pour les donnes ainsi que les registres internes.
Page
100
EL MORNAN
Le plan mmoire est linaire les adresses vont de 0000h 1FFFh (8k mots de 14 bits), par page de 2K
mots. On peut remarquer, le vecteur de reset est fig en 0000h.
Les PICs nont quun seul vecteur dinterruption en 0004h. Lors dune interruption, le sous programme
associ devra dterminer quel priphrique a demand une interruption.
La pile utilise par les sous programmes nest pas implante en mmoire de donne comme avec les
microcontrleurs classiques, mais dans la mmoire programme. Elles sont utilises lors dappels de sous
programmes, on ne peut pas imbriquer plus de 8 sous programmes (Ce qui est dj beaucoup).
EL MORNAN
Page
102
EL MORNAN
Il va bien sr de soi que nimporte quel vnement ne peut pas dclencher une interruption. Il faut que 2
conditions principales soient remplies :
Lvnement en question doit figurer dans la liste des vnements susceptibles de provoquer une
interruption pour le processeur sur lequel on travaille
Lutilisateur doit avoir autoris linterruption, cest dire doit avoir signal que lvnement en
question devait gnrer une interruption.
Le programme principal ne sait pas quand il est interrompu, il est donc crucial de lui remettre ses registres
dans ltat o ils taient avant linterruption.
En effet, supposons que linstruction xxx ait positionn un flag (par exemple, le bit dindicateur Z). Si par
malheur, la routine dinterruption a modifi ce bit, le programme ne pourra pas se poursuivre
normalement.
Nous voyons galement que linstruction xxx termine son excution avant de se brancher sur la routine
dinterruption. Une instruction commence nest donc jamais interrompue.
Mcanisme dinterruption sur les PICs :
les PICs rpondent au fonctionnement gnral ci-dessus, mais elles ont galement leurs particularits.
Voyons maintenant le principe des interruptions sur les PICs
Tout dabord, ladresse de dbut de toute interruption est fixe. Il sagit toujours de ladresse 0x04.
Toute interruption provoquera le saut du programme vers cette adresse.
Toutes les sources dinterruption arrivant cette adresse, si le programmeur utilise plusieurs
sources dinterruptions, il lui faudra dterminer lui-mme laquelle il est en train de traiter.
Les PICs en se connectant cette adresse, ne sauvent rien automatiquement, hormis le contenu du
PC, qui servira connatre ladresse du retour de linterruption. Cest donc lutilisateur de se charger
des sauvegardes.
Le contenu du PC est sauv sur la pile interne (8 niveaux). Donc, si vous utilisez des interruptions,
vous ne disposez plus que de 7 niveaux dimbrication pour vos sous-programmes. Moins si vous utilisez
des sous-programmes dans vos interruption.
Page
103
EL MORNAN
Le temps de raction dune interruption est calcul de la manire suivante : le cycle courant de
l'instruction est termin, le flag d'interruption est lu au dbut du cycle suivant. Celui-ci est achev, puis le
processeur s'arrte un cycle pour charger l'adresse 0x04 dans PC. Le processeur se connecte alors
l'adresse 0x04 o il lui faudra un cycle supplmentaire pour charger l'instruction excuter. Le temps
mort total sera donc compris entre 3 et 4 cycles.
Une interruption ne peut pas tre interrompue par une autre interruption. Les interruptions sont
donc invalides automatiquement lors du saut ladresse 0x04 par leffacement du bit GIE (que nous
allons voir).
14.9
Le convertisseur
Le CAN est un priphrique intgr destin mesurer une tension et la convertir en nombre binaire qui
pourra tre utilis par un programme.
Le16F877 travaille avec un convertisseur analogique/numrique qui permet un chantillonnage sur 10 bits.
Le signal numrique peut donc prendre 1024 valeurs possibles. On sait que pour pouvoir numriser une
grandeur, nous devons connatre la valeur minimale quelle peut prendre, ainsi que sa valeur maximale,
Les pics considrent par dfaut que la valeur minimale correspond leur Vss dalimentation, tandis que la
valeur maximale correspond la tension positive dalimentation Vdd. le principe de la conversion suit la
squence est la suivante :
- Le pic connecte le pin sur laquelle se trouve la tension mesurer un condensateur interne, qui va se
charger via une rsistance interne jusque la tension applique.
Le pin est dconnect du condensateur, et ce dernier est connect sur le convertisseur
analogique/numrique interne.
Le temps ncessaire la conversion est gal au temps ncessaire la conversion dun bit multipli par le
nombre de bits dsirs pour le rsultat. Concernant notre pic, il faut savoir quil ncessite, pour la
conversion dun bit, un temps nomm Tad.
Ce temps est driv par division dhorloge principale. Le diviseur peut prendre une valeur de 2, 8 ou 32. Le
temps de conversion Tad ne peut dtendre, pour des raisons lectroniques, en dessous de 1.6 us pour les
versions classiques de 16F87x, et en dessous de 6 us pour les versions LC. Donc en fonction des
frquences utilises pour le quartz du pic, on choisit le diviseur le plus appropri.
Voici un tableau qui reprend les valeurs de diviseur utiliser pour quelques frquences courantes du quartz
et pour les PICs de type classique :
Diviseur
20Mhz
5Mhz
4Mhz
2Mhz
1,25Mhz
333,3Khz
100ns
400ns
500ns
1s
1,6s
6s
400ns
1,6s
2s
4s
6,4s
24s
32
1,6s
6,4s
8s
16s
25,6s
96s
Osc RC
2-6s
2-6s
2-6s
2-6s
2-6s
2-6s
Page
104
EL MORNAN
Les valeurs 400ns; 1,6s; 2s; 4s; 6,4; 24s correspondent au meilleur diviseur en fonction de la
frquence choisie, en ce qui nous concerne puisquon utilise une frquence de 4MHZ, on utilisera la
valeur de 2s dans notre programmation. Il faut prsent prciser que le PIC ncessite un temps Tad
avant le dmarrage effectif de la conversion, et un temps supplmentaire Tad la fin de la conversion.
Rsumons donc le temps ncessaire pour effectuer lensemble des oprations :
- On charge le condensateur interne (ncessite le temps Tacq).
- On effectue la conversion (ncessite le temps 12 * Tad).
- On doit attendre 2 * Tad avant de pouvoir recommencer une autre conversion.
EL MORNAN
On voit trs bien sur ce schma que les pins AN2 et AN3 servent selon la position du slecteur dentre
analogique ou de tension de rfrence. Le slecteur de canal permet de slectionner lequel des 8 canaux
va tre appliqu au convertisseur analogique/digital.
On voit que la slection de la source des tensions de rfrence dpend de bits du registre ADCON1, tandis
que le canal slectionn pour tre numris dpend dADCON0. Cest le registre ADCON1 qui
dtermine si ce port sera utilis comme port I/O ou comme port analogique. Nous en aurons besoin dans
la programmation.
ADRESL
B9
B8
B7
B6
B5
B4
B3
B2
B1
B0
B9
B8
ADRESL
B7
B6
B5
B4
B3
B2
B1
B0
La justification droite sera principalement utilise lorsque nous avons besoin de lintgralit des 10 bits
de rsultat, tandis que la justification gauche est trs pratique lorsque 8 bits vous suffisent. Dans ce cas,
les 2 bits de poids faibles se trouvent isols dans ADRESL, il suffit donc de ne pas en tenir compte. Cette
approche est destine nous pargner des dcalages de rsultats.
Le choix de la mthode seffectue laide du bit 7 dADCON1.
Le registre ADCON1 :
Ce registre permet de dterminer le rle de chacune des pins AN0 AN7. Il permet donc de choisir si un
pin sera utilis comme entre analogique, comme entre/sortie standard, ou comme tension de rfrence.
Il permet galement de dcider de la justification du rsultat.
Pour pouvoir utiliser un pin en mode analogique, il faudra que ce pin soit configur galement en entre
par TRISA. Le registre ADCON1 dispose, comme tout registre accessible de notre PIC, de 8 bits, dont
seulement 5 sont utiliss :
Page
106
EL MORNAN
ADFM
B6
INUTILISE
lu comme 0
B5
INUTILISE
lu comme 0
B4
INUTILISE
lu comme 0
B3
PCFG3
B2
PCFG2
B1
PCFG1
B0
PCFG1
Le bit ADFM permet de dterminer si le rsultat de la conversion sera justifi droite (1) ou gauche (0).
Nous trouvons dans ce registre les 4 bits de configuration des pins lis au convertisseur
analogique/numrique. Ces bits nous permettent donc de dterminer le rle de chaque pin.
Comme nous avons 16 combinaisons possibles, nous aurons autant de possibilits de configuration (en fait,
vous verrez que nous nen avons que15)
Le registre ADCON0 :
Ce registre est le dernier utilis par le convertisseur analogique/numrique. Il contient les bits que nous
allons manipuler lors de notre conversion. Sur les 8 bits de notre registre, 7 seront utiliss.
Page
107
EL MORNAN
ADCS1
B6
ADCS0
B5
CHS2
B4
CHS1
B3
CHS0
B2
GO/DONE
B1
Inutilis
lu comme 0
B0
ADON
A/D ON bit
14.10 loscillateur :
Lhorloge est un systme qui peut tre ralise soit avec un QUARTZ(a), soit avec une horloge
extrieur(b), soit avec un circuit RC(c), dans ce dernier la stabilit du montage est limite.
La frquence maximale dutilisation va dpendre de Microcontrleur utilis. Le suffixe indiqu sur le
Page
108