Académique Documents
Professionnel Documents
Culture Documents
Zcc 7 TZ
Zcc7!8Z
N
8
8[8
!..N
"$.N
![
8X8888 per/et
de sortir Pus,u0-
"./C
Oicro3contr5leur
PC8
N
Zcc 7 TZ
Zcc7!8Z
N
8 8[8
*44!?$ per/et
de sortir Pus,u0-
88./C avec
Z
%4
7.2!?Z
TD II2 GEII-1 IUT Troyes (Serge Moutou)
4. Comman&er &es bobines moteurs et relais ae# "2*
Il e&iste des transistors de puissance adapts. Par e&e/ple le transistor *%!?\ propose un gain
co/pris entre 8T et 8T.. Ln peut l0utiliser avec un courant I7!2T C (?C en pointe+. 4on fai'le gain
ncessite un courant I* asseQ i/portant2 allant au3del- des possi'ilits des ports traditionnels
(typi,ue/ent !./C+. Par e&e/ple pour co//uter !C2 il faut un I*7@./C dans le pire des cas. Il faut
donc un transistor suppl/entaire.
e /ontage appel %arlington e&iste en 'oWtier uni,ue : par e&e/ple le *J?$ peut co//uter des
courants Pus,u0- $../C.
Exercice 2
Le transistor 8X8888 est 'lo,u2 il circule @./C dans I*
!M+ 4i N8 est choisi - ??. 2 ,uelle puissance passe dans N8 E
8M+ 4i le transistor 8X8888 est satur (Z)sat7.28Z+ ,uelle puissance passe dans N8 E
?M+ Lors,ue le *%!?\ est satur2 il circule Il circule I7!C et l0on a Z)sat7.2:.Z. Duelle puissance
est dissipe dans le *%!?\ E
Exercice 5 tir du %4 final de duin 8.!! (onstruction d0un signal PfO pour un /oteur+
%ans tout cet e&ercice2 on dispose d0un ,uartQ gnrant OU lock - @ OAQ. Ln utilisera le ti/er !
docu/ent au B% prcdent.
0est le Bi/er! ,ui va tre responsa'le de la ralisation de la priode de notre signal PfO (OLI
Oodulation de Largeur d0I/pulsion+ ou - rapport cycli,ue varia'le. ette priode est choisie - 8. /s et
on rappelle ,ue notre horloge a une fr,uence de @OAQ. Le fonctionne/ent gnral du progra//e est
le suivant :
3 initialise le ti/er
3 initialiser la co/paraison
*oucle infinie
24 / 32
Oicro3contr5leur
PCi
Z
cc
7TZ
N
!
N
8@Z
harge
BLP!$!
BLP!$! :
!"/C G I
%/a&
G 8./C avec Z
%
G!2?Z - !./C
!/C G I
G!./C
%i/ensionner N
!
.
Oicro3contr5leur
PC8 N
!
N
8
Zcc 7 !TZ
?[?
*%!?\
Zcc 7 !TZ
O
8X8888
per/et de
sortir Pus,u0-
"./C sous
".Z
I
*
%!
TD II2 GEII-1 IUT Troyes (Serge Moutou)
3 attendre une co/paraison et /ettre la sortie N8 - .
3 attendre ,ue le ti/er! dclenche un overflow et /ettre syst/ati,ue/ent la sortie N8 - !
fin 'oucle
!M+ %onner la ou les instructions per/ettant de raliser une division par $. Duelle priode a3t3on alors
- l0entre du 'loc =%tection synchronise= E Duelle est la fr,uence #%4 correspondante E
&#!nses :
8M+ Par co/'ien doit3on diviser la fr,uence #%4 pour o'tenir nos B 7 8./s E
&#!nse :
?M+ 4i la division de la ,uestion 8 est ralise par le ti/er!2 avec valeur doit3on initialiser le ti/er! (en
dci/al et en he&adci/al+
&#!nses :
@M+ %onner l0instruction ,ui slectionne le /ode =dtection synchronise= et le ,uartQ co//e entre
ainsi ,ue BNO!LX.
&#!nses :
TM+ Duelle instruction attend le d'orde/ent du ti/er! E
&#!nse :
"M+ Zoir docu/entation sur la co/paraison au B% prcdent.
La co/paraison est choisie co//e : =!.!. co/pare sort rien sur P /ais sur PI#=. Duelle
instructions per/ettent de choisir ce /ode E
&#!nses :
:M+ Duelles valeurs faut3il /ettre dans PN!A et PN!L pour raliser un rapport cycli,ue de !.g 2
c0est - dire une attente de 8/s E
&#!nses :
$M+ Duelle est l0instruction ,ui per/et d0attendre la co/paraison E
&#!nse :
Duestions hors %4
\M+ o/plteQ les valeurs /an,uantes (co//entaires // EE+ dans le progra//e ci3dessous ,ui ralise
co/pl1te/ent le PfO (en /ode !.!.+
1 TRISC.F2=0; //sortie
2 // timer1
3 T1CON = T1CON | ; // ??
4 // comparaison
5 CCP1CON = CCP1CON & 0xFA | 0x0A; // mode 1010 pour la comparaison
6 CCPR1H = 0x ; // ??
7 CCPR1L = 0x ; // ??
8 PIR1.CCPIF=0;
9 PIR1.TMR1IF=0;
10 while(1) {
11 while(PIR1.CCPIF==0);
12 PORTC.F2=1;
13 PIR1.CCPIF=0;
14 while(PIR1.TMR1IF==0);
15 // c'est parti pour un tour
16 TMR1H = 0x // ??
17 TMR1L = 0x // ??
18 PORTC.F2=1;
19 PIR1.TMR1IF=0;
8. R
25 / 32
TD II2 GEII-1 IUT Troyes (Serge Moutou)
!.M+ Ln utilise le sch/a avec un 8X8888 et un *%!?\ en changeant PC8 en N8. Duel courant
/oyen passe dans le /oteur si le di/ensionne/ent des rsistances est tel ,ue le /a&i/u/ de
courant est de !2T C E
.. Comman&er plusieurs moteurs ae# un #ir#uit unique
Il e&iste des circuits capa'le de co//ander : /oteurs co//e le ULX8..? ,ui a - peu pr1s les
//es caractristi,ues ,ue le *J$? (/ais sept fois+. Ils sont appels %arlington driver I. Le
ULX8$.? poss1de !" 'roches et peut co//ander $ /oteurs avec la possi'ilit d0utiliser deu& sorties
identi,ues pour co//ander un seul /oteur.
Le circuit ULX8..? est capa'le de dlivrer T.. /C sous T.Z.
26 / 32
IX!
IX8
IX?
IX@
IXT
IX"
IX:
($+ HX%
LUB!
LUB8
LUB?
LUB@
LUBT
LUB"
LUB:
Z (\+
ULX8..?
. Z
Z
O
O
ULX8$.?
LUB!
LUB8
LUB?
LUB@
LUBT
LUB"
LUB:
LUB$
Z(!.+
. Z
Z
O
O
IX!
IX8
IX?
IX@
IXT
IX"
IX:
IX$
(\+ HX%
TD II2 GEII-1 IUT Troyes (Serge Moutou)
TD 8 : Le mode capture du module CCP (Capture/Compare/PWM)
%ans le /ode capture2 CPP&1. et CPP&1+ capturent la valeur du ti/er ! ou du ti/er ? ,uand un
vne/ent se produit sur N8/PP! du port . Un vne/ent est dfini co//e :
un front descendant
un front /ontant
tous les @ fronts /ontants
tous les !" fronts /ontants
Cttention le P'&TC doit tre configur en entre pour le 'it '8 (avec T&I(C+.
Exercice : Utilisation du /ode capture pour lire un clavier P48
Ne/ar,ue prli/inaire : en toute rigueur2 il serait prfra'le de raliser cette capture avec une
interruption. Les interruptions sont a'ordes au B% T.
Prsentation du protocole P48 :
Le protocole P48 co/plet est un /lange de protocole synchrone et asynchrone :
27 / 32
ps20"ata
,us1
r"1
20 21 22 23 24 25 26 27 P
ps8_clk
s
t
a
r
t
,
i
t
s
t
(
p
,
i
t
PORTC
RC2/CCP1
CCP1CON
1,4,16
CCP1M3
CCP1M2
CCP1M1
CCP1M0
}
PIR1
b
7
b
6
b
5
b
4
b
3
b
2
b
1
b
0
CCP1IF
CCPR1H CCPR1L
TMR1H TMR1L
CAPTURE POUR 16F877
0000 : Module CCP1 dsactiv
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
b
7
b
6
b
5
b
4
b
3
b
2
b
1
b
0
b
7
b
6
b
5
b
4
b
3
b
2
b
1
b
0
TD II2 GEII-1 IUT Troyes (Serge Moutou)
ob seules les pre/iers signau& ps8_clk et ps8_data vont nous intresser. o//e c0est le clavier ,ui
/et les donnes c0est - lui de fa'ri,uer l0horloge. La fr,uence d0horloge est co/prise entre !.kAQ et
!"kAQ et on va utiliser la partie capture non pas pour /esurer la fr,uence de l0horloge (dans un
pre/ier te/ps en tout cas+2 /ais pour dtecter les fronts descendants de l0horloge gr^ce au 'it
P!I# du registre PIN!.
!M+ >crire le sous3progra//e =void initKBD(void)" destin - initialiser le fonctionne/ent du
/odule P pour ,u0il intercepte les fronts descendants de P48_clk2 si les donnes ps8_data sont
sont sur le 'it '! du PLNB. Xe pas ou'lier de /ettre les deu& 'its du PLNB en entre.
8M+ >crire le progra//e principal ,ui lit les infor/ations - cha,ue fois ,u0un front descendant arrive et
construit le 'it du scan3code apr1s lecture pour le sortir sur le PLNB* (positionn en sortie+.
?M+ Utiliser /aintenant co/pl1te/ent le /ode capture pour calculer la fr,uence /oyenne de l0horloge
ps8_clk si notre fr,uence de ,uartQ est @ OAQ..
&em%r9ue : le co/pilateur Oikro poss1de une li'rairie de lecture du P4/8.
Prototype void Ps8_Init(unsigned short hport+e
%escription InitialiQes port for work with P4/8 key'oard2 with default pin settings. Port pin . is
%ata line2 and port pin ! is lock line. iou need to call either Ps8_Init or Ps8_onfig
'efore using other routines of P4/8 li'rary.
Prototype void Ps8_onfig(char hport2 char clock2 char data+e
%escription InitialiQes port for work with P4/8 key'oard2 with custo/ pin settings. Para/eters
data and clock specify pins of port for %ata line and lock line2 respectively. %ata
and clock need to 'e in range ...: and cannot point to the sa/e pin. iou need to
call either Ps8_Init or Ps8_onfig 'efore using other routines of P4/8 li'rary.
Prototype char Ps8_[ey_Nead(char hvalue2 char hspecial2 char hpressed+e
%escription Bhe function retrieves infor/ation a'out key pressed. Para/eter value holds the
value of the key pressed. #or characters2 nu/erals2 punctuation /arks2 and space2
value will store the appropriate C4II value. Noutine jrecogniQesk the function of
4hift and aps Lock2 and 'ehaves appropriately. Para/eter special is a flag for
special function keys (#!2 )nter2 )sc2 etc+. If key pressed is one of these2 special
will 'e set to !2 otherwise ..
Para/eter pressed is set to ! if the key is pressed2 and . if released.
Voici un exemple trouv dans sa documentation :
unsi3ned s$ort ,e0data7 special7 do#n;
9oid 2ain%( )
:;:O = 0x05; // /isable analo3 co2parators %co22ent t$is <or P!:18(
!T:O = 0; // /isable all interrupts
Ps21!nit%&PORTA(; // !nit P=/2 >e0board on PORTA
/ela012s%100(; // ?ait <or ,e0board to <inis$
do )
i< %Ps21>e01Read%&,e0data7 &special7 &do#n(( )
i< %do#n && %,e0data == 1@(( )// Bac,space
// &&&do so2et$in3 #it$ a bac,space&&&
.
else i< %do#n && %,e0data == 1A(( )// Enter
Bsart1?rite%1A(;
.
else i< %do#n && Cspecial && ,e0data( )
Bsart1?rite%,e0data(;
.
.
/ela012s%10(; // debounce
. #$ile %1(;
.//DC
28 / 32
TD II2 GEII-1 IUT Troyes (Serge Moutou)
TD ; 8 +e m!de P<" du m!du*e CCP -C%#ture=C!m#%re=P<")
PfO signifie ` Pulse fidth Oodulation a2 ce ,uKon pourrait traduire par /odulation de largeur
dKi/pulsion. 4on o'Pectif est de changer une valeur /oyenne en Pouant sur le rapport cycli,ue. Puis,ue
ce /odule utilise essentielle/ent le ti/er 82 nous co//en]ons donc - le dcrire.
1. -es#ription &u timer 2
Le ti/er 8 est identi,ue sur le PI 16F877 et le 18F4550. Il s'agit d'un timer 8 bits dont la description
schmatique est prsente maintenant.
4a seule entre est l0entre horloge du PIY divise par @ suivie d0un pr3diviseur gr par deu& 'its.
Un co/parateur donne un signal ,ui sert de reset au ti/er8 et d0entre - un post3diviseur capa'le de
diviser par un no/'re entre ! et !".
La priode B peut tre calcule par :
B 7 (P&2 9 !+ & (Bi/er8 input clock period+ soit :
B 7 (P&29!+ & (Bosc & @ Bi/er 8 prescale value+
)&ercice !
Bhe PIY has an oscillator fre,uency of @ OAQ. fhat is the slowest Bi/er 8 interrupt rate it can
generate E
*y writing to the T2C'3 register2 Bi/er 8 is switched on2 with neither pre3 nor postscale. fhat is the
value you have to write to P&2 to realiQe a @2.. kAQ fre,uency E
Duand on s0intresse au PfO le choi& de la priode est ralis si/ple/ent co//e dans l0e&ercice !.
Puis,ue le tip/er8 est sur $ 'its2 la rsolution de la priode est de 8T". Le choi& du rapport cycli,ue
29 / 32
b
7
..................................
b
0
T2CON
b
7
b
6
b
5
b
4
b
3
b
2
b
1
b
0
Timer2
Timer2 dans 18F4550 et 16F877A
T2CKPS1
MCU
Clock
1, 2, .., 16
-
TOUTPS3
4
TMR2ON
PIR1
CCP1IF
b
7
b
6
b
5
b
4
b
3
b
2
b
1
b
0
TMR1IF
TOUTPS2
TOUTPS1
TOUTPS0
PR2
b
7
..................................
b
0
Comparateur
T2CKPS0
1, 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
TD II2 GEII-1 IUT Troyes (Serge Moutou)
est par contre dfini par le contenu d0un registre $ 'its CCP&1+ avec deu& 'its suppl/entaires
%!*! et %!*.. eci est /ontr dans la docu/entation ci3dessous :
30 / 32
b
7
..................................
b
0
T2CON
b
7
b
6
b
5
b
4
b
3
b
2
b
1
b
0
Timer2
PWM dans 18F4550 et 16F877A
T2CKPS1
MCU
Clock
1, 2, .., 16
-
TOUTPS3
4
TMR2ON
PIR1
CCP1IF
b
7
b
6
b
5
b
4
b
3
b
2
b
1
b
0
TMR1IF
TOUTPS2
TOUTPS1
TOUTPS0
PR2
b
7
..................................
b
0
Comparateur
T2CKPS0
1, 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
b
9
..................................
b
2
Comparateur
CCPR1H
b
9
..................................
b
2
b
1
b
0
b
1
b
0
8
8
10
10
CCP1CON
CCP1M3
CCP1M2
CCP1M1
CCP1M0
b
7
b
6
b
5
b
4
b
3
b
2
b
1
b
0
DC1B0
DC1B1
PORTC
RC2/CCP1
R Q
S
TRISC
0
b
7
b
6
b
5
b
4
b
3
b
2
b
1
b
0
b
7
b
6
b
5
b
4
b
3
b
2
b
1
b
0
CCPR1L
b
7
..................................
b
0
Entre n'importe quand prise en
compte en fin de priode.
TD II2 GEII-1 IUT Troyes (Serge Moutou)
Le PfO ne fonctionnera correcte/ent ,ue si CCPR1LPR2 .
La for/ule per/ettant de calculer ton est :
t
on
= (pulse width register) x (T
osc
x Timer2 prescale value)
&em%r9ue : noteQ la disparition du ter/e @ dans cette for/ule : ce n0est plus @ Bosc /ais 'ien Bosc.
Exercice 2
Bhe Bi/er 8 and PfO /odule of a !"#$:?C are operating in an application with a clock oscillator
fre,uency2 #L42 of @OAQ. Bhe Bi/er 8 prescaler is initially set to !:@2 the P&2 register is loaded with a
value 8@. (deci/al+2 and PN!A with a value of ?. (deci/al+.
! 3 a+ fhich register controls the period of the PfO wavefor/2 and which register controls the 0on0
ti/eE
! 3 '+ #or the settings descri'ed2 what is the resulting PfO period E
! 3 c+ #or the settings descri'ed2 what is the appro&i/ate resulting 0on0 ti/e E
8M+ )crire le progra//e ,ui ralise ce fonctionne/ent.
&em%r9ue : le co/pilateur Oikro poss1de une li'rairie de gestion du PfO. Zoici un e&e/ple trouv
dans sa docu/entation :
/ET$e exa2ple c$an3es P?; dut0 ratio on pin R:2 continuall0& !< FE/ is
connected
to R:27 0ou can obser9e t$e 3radual c$an3e o< e2itted li3$t& E/
c$ar i = 07 G = 0;
9oid 2ain%( )
PORT: = 0x''; // PORT: is output
P#21!nit%-000(; // !nitialiHe P?; 2odule at ->IH
P#21=tart%(; // =tart P?;
#$ile %1( )
// =lo# do#n7 allo# us to see t$e c$an3e on FE/*
<or %i = 0; i J 20; iKK( /ela01us%-00(;
GKK;
P#21:$an3e1/ut0%G(; // :$an3e dut0 ratio
.
.
Prototype void Pw/_hange_%uty(char duty_ratio+e
%escription hanges PfO duty ratio. Para/eter duty_ratio takes values fro/ . to 8TT2 where .
is .g2 !8: is T.g2 and 8TT is !..g duty ratio. Lther specific values for duty ratio
can 'e calculated as (Percenth8TT+/!...
31 / 32
PR2
CCPR1L
Timer2
t
on
T
TD II2 GEII-1 IUT Troyes (Serge Moutou)
A33EXE
Descri#ti!n de *% mm!ire &A"
Cddr Xa/e *it : *it " *it T *it @ *it ? *it 8 *it ! *it . Zalue on
Power3on
Neset
*ank .
..h IX%#
Utilise le contenu de #4N pour adresser les donnes (pas un registre+
3333 3333
.!h BON. Bi/er te/ps rel $ 'its &&&& &&&&
.8h PL o/pteur progra//e ($ 'its de poids fai'le+ .... ....
.?h 4BCBU4 INP NP! NP. /BL /P% U % ...! !&&&
.@h #4N Pointeur indirect de //oire 3
.Th PLNBC 3 3 3
NC@/
BL[I
NC? NC8 NC! NC. 333& &&&&
."h PLNB* N*: N*" N*T N*@ N*? N*8 N*!
N*./IXB
.:h 3333 Xon i/pl/ent
.$h ))%CBC Negistre de donnes ))PNLO &&&& &&&&
.\h ))C%N Negistre d0adresses ))PNLO &&&& &&&&
.Ch PLCBA 333 333 333
o/pteur progra//e (poids haut+ Pus,u0- T 'its
333. ....
.*h IXBLX HI) ))I) B.I) IXB) N*I) B.I# IXB# NI*# .... ...&
Ralis avec OpenOffice sous Linux
32 / 32