IUP SI 1 Examen Architecture des calculateurs 26 Avril 2004
Dur´ee 2h. Documents autoris´es.
Correction
1 G´en´eration d’un signal avec GPT1
Les registres de l’unit´e GPT1 du C167 sont initialis´es ainsi:
T2CON=0x25;
T3CON=0x2C0;
T4CON=0x26;
T2=20000;
T3=10000;
T4=10000;
DP3=0x08;
1. D´eduire de ces initialisations le mode de fonctionnement de chacun des temporisateurs.
T2 est utilis´e en rechargement de T3 sur fronts montants de T3OTL
T3 est en timer, r´esolution 400ns, d´ecompteur, sortie T3OUT activ´ee.
T4 est utilis´e en rechargement de T3 sur fronts descendants de T3OTL
2. Dessiner le chronogramme (´evolution en fonction du temps) de la valeur du registre T3 et de
celle du bit T3OTL sur un horizon d’environ 30 millisecondes.
T4=10000
T3
T2=20000
0
T3OTL
12ms (400ns x 30000)
3. Donner la p´eriode T du signal pr´esent sur la broche P3.3 ainsi que la valeur de son rapport
cyclique.
P´eriode T=30000x400ns=12ms, Rapport cyclique:2/3
4. D´eterminer une expression g´en´erale permettant de calculer T en fonction des valeurs contenues
dans T2 et T4 et de la r´esolution de l’horloge tr.
T= (T2 + T4)tr
5. Mˆeme question pour le rapport cyclique R.
R=T2
T2 + T4
6. En d´eduire les valeurs d’initialisations de T2 et T4 en fonction de T, tret R.
On d´eduit des deux expressions pr´ec´edentes:
T2 + T4 = T
tr
et T2 + T4 = T2
R
d’ou: T2 = RT
tr
et T4 = (1 − R)T
tr
IUP SI 1 Examen Architecture des calculateurs 26 Avril 2004
2 Communication s´erie
L’application propos´ee consiste `a traiter des requˆetes re¸cues par l’interm´ediaire de la ligne s´erie.
Une requˆete consiste en une demande d’acquisition d’un signal sur une entr´ee analogique. Elle
est simplement constitu´ee d’un nombre indiquant le num´ero du canal sur lequel doit se faire l’ac-
quisition.
La r´eponse `a la requˆete est la valeur exprim´ee en milli-volts (sous la forme d’un entier sur 16
bits) de la tension sur la broche correspondante. Elle est renvoy´ee par le micro-contrˆoleur sur la
ligne s´erie.
La communication se fait en asynchrone sur 8 bits sans parit´e avec 2 bits de stop `a 9600 bauds.
Les erreurs de transmission ne sont pas trait´ees.
On suppose que les fonctions suivantes sont fournies et accessibles en incluant dans le programme
la directive de compilation:
#include <com.h>
– Fonction d’initialisation de la liaison s´erie (hors registres d’interruptions).
void init_ASC0();
– Fonction qui renvoie la valeur en mV sur l’entr´ee canal.
int mesure(int canal);
– Fonction qui envoie sur la ligne s´erie l’entier valeur.
void emission(int valeur);
1. Ecrire un programme utilisant ces fonctions et permettant de r´epondre aux requˆetes re¸cues
(Ces requˆetes peuvent arriver n’importe quand).
#include<c167.h>
#include<gnutrap.h>
#include<com.h>
TRAP_noMD()x2B,reception);
void reception()
{
int V,canal;
canal=S0RBUF;
V=mesure(canal);
emission(V);
}
void main()
{
init_ASC0();
S0RIC=0x4C; // IT niveau 3
SET_SFRBIT(IEN);
while(1);
}
2. Ecrire la fonction d’initialisation de l’unit´e s´erie ASC0: init ASC0.
void init_ASC0()
{
S0CON=0x8019; // S0R=1, S0BRS=0, S0REN=1, S0STP=1, S0M=1
S0BG=65;
SET_SFRBIT(DP3.10);
SET_SFRBIT(P3.10);
}
IUP SI 1 Examen Architecture des calculateurs 26 Avril 2004
3. Ecrire la fonction mesure.
int mesure(int canal)
{
int M;
ADCON=canal;
SET_SFRBIT(ADST);
WAIT_UNTIL_BIT_SET(ADCIR);
CLR_SFRBIT(ADCIR);
M=(ADDAT & 0x3F)*5./1024.; // conversion en mV
return M;
}
4. Ecrire la fonction emission sachant que l’on envoie d’abord les bits de poids faible de l’entier.
void emission()
{
S0TBUF=valeur & 0x00FF;
WAIT_UNTIL_BIT_SET(S0TBIR);
CLR_SFRBIT(S0TBIR);
S0TBUF=(valeur >> 8) & 0x00FF;
WAIT_UNTIL_BIT_SET(S0TBIR);
CLR_SFRBIT(S0TBIR);
}
3 Mesure de p´eriode
On utilise l’unit´e CAPCOM1 en mode capture pour mesurer la p´eriode d’un signal TTL. Le
signal est connect´e `a la broche CC4IO du C167 et le timer T1 est utilis´e sans rechargement (T1REL=0).
La mesure de la p´eriode se fait entre deux fronts descendants du signal. Apr`es la capture permettant
de d´eterminer la p´eriode, T1 est r´einitialis´e `a 0 pour la capture suivante.
3.1 Initialisations
1. On choisit la r´esolution de T1 permettant d’obtenir la meilleure pr´ecision. Quelle est cette
r´esolution? et quelle est la p´eriode maximale que l’on peut mesurer sans d´ebordement de T1?
R´esolution min: 400ns
P´eriode max: 26,2ms
2. Quelle est la p´eriode minimale (et donc la fr´equence maximale) mesurable sachant que l’on
veut une pr´ecision meilleure que 1%?
P´eriode min=100 x 400ns=40 µs
Fr´equence max=1/P´eriode min=25 kHz
3. Quels sont les registres `a programmer pour r´ealiser la capture sachant que l’on veut g´en´erer
une interruption de niveau 5 (groupe 0) sur chaque front descendant du signal `a mesurer?
Quelles sont les initialisations n´ecessaires de ces registres?
CCM1=0x0A
CC4IC=0x54
T01CON=0x4000 (T1R=1)
3.2 Mesure
On suppose que l’interruption provoqu´ee par un front descendant du signal `a mesurer correspond
`a la fois `a la fin d’une p´eriode (et donc `a sa mesure) et au d´ebut d’une nouvelle p´eriode.
IUP SI 1 Examen Architecture des calculateurs 26 Avril 2004
Donner le code de la fonction d’interruption correspondante. Le r´esultat (fr´equence du signal)
exprim´e en Hertz sera stock´e dans la variable globale float FREQ.
void mesure()
{
FREQ=2.5E6/CC4;
T1=0;
}
4 Signal PWM
On souhaite g´en´erer un signal p´eriodique, dont une p´eriode est repr´esent´ee sur la figure suivante,
en utilisant l’unit´e PWM du C167.
84ms 2ms
100ms
1. Quel est le mode de fonctionnement de PWM qui permet de g´en´erer un signal de ce type?
Sur quel bit de quel port peut-on r´ecup´erer le signal?
Il faut utiliser les canaux 0 et 1 en mode rafale. La sortie se fait sur POUT0
(P7.0). On choisit une r´esoultion de 3,2µs
2. Donner la programmation des registres de contrˆole PWMCON0 et PWMCON1 de l’unit´e
PWM permettant de g´en´erer ce signal.
PWCON0=0x0013 (PT0=1, PT1=0, PTR0=1, PTR1=1)
PWMCON1=0x1001 (PEN0=1, PM0=PM1=0, PB01=1)
3. D´eterminer les valeurs `a donner aux diff´erents registres PPx et PWx utilis´es. Justifier vos
r´eponses.
PP0 = 100ms
3,2µs −1 = 31249 (P´eriode=100ms)
PP1 = 2ms
3,2µs −1 = 39999 (P´eriode=2ms)
P W 0 = 84
100 (PP0 + 1) = 26250 (Rapport cyclique=0,16)
P W 1 = PP1+1
2= 20000 (Rapport cyclique=0,5)
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!