Nouvelle page sur le TimerX

Postby gibi » Wed May 30, 2007 12:00 am

Bonjour Etienne,

Merci, cela fait toujours plaisir à lire.

J'ai commencé à décortiquer le timer C.
C'est un timer qui fonctionne par comparaison avec un autre signal, interne ou externe.

Donc pour générer un PWM, le timer Y et Z sont peut-être plus adaptés, et ils sont facilement modulables aussi bien sur le front haut que sur le front bas. Mais bon, ils sont moins précis.

A propos du timer C, j'ai un petit doute sur la traduction des TCC03 et TCC04

Sélection du signal d'entrée, sur un front positif ou négatif
0.0 positif
0.1 négatif
1.0 positif et négatif
1.1 selon le premier signal entrant

Cela te semble-t-il correct ?
Jean.


gibi
 
Posts: 104
Joined: Fri Jan 17, 2014 4:36 pm

Postby ymasquel » Wed May 30, 2007 12:00 am

Bonjour Jean,

Selon la page 64 du HARDWARE MANUAL :
TCC04--TCC03----INTERRUPTION DECLENCHEE SUR
---0--------0--------FLANC MONTANT
---0--------1--------FLANC DESCENDANT
---1--------0--------FLANC MONTANT OU DESCENDANT
---1--------1--------EVITER CETTE CONFIGURATION

J'ai vérifié les 3 premières configurations. Attention, c'est bien TCC04 en première colonne !!!

Amicalement, Yves.
Amicalement,
Yves.
ymasquel
Site Admin
 
Posts: 3387
Joined: Thu Jan 02, 2014 10:44 am
Location: Oise (60)

Postby ebonv » Wed May 30, 2007 12:00 am

Bonjour,

dans mon aplication j'utilise le timer x et y pour d'autres comptage parce qu'ils fonctionne en free runing il me reste le timerC pour mon pwm.
La seul chose qui me gènera plus tard c'est que les broches ratachées au timerC ne peuvent aparamant pas ètre programées séparément pour la largeur d'impulsion, à moins que je n'ai pas lu entre les lignes!

la présentation des tableau de codage gèbère un doute.
j'avais invers& pour la sortie (tcc15 et 15)

a+

etienne
ebonv
 
Posts: 74
Joined: Fri Jan 17, 2014 4:35 pm

Postby gibi » Wed May 30, 2007 12:00 am

Bonjour,

D'après ce que je lis sur la doc, et les problèmes que tu rencontres, je traduit la doc comme ceci :

Deux registres TCC00 et TCC10 se partagent la programmation du timer C.
TCC00 Début du comptage 1 comptage, 0 stop
TCC01 et TCC02, Diviseur de fréquence avec
0.0 1/1
0.1 1/8
1.0 1/32
1.1 FRing fast

TCC03 et TCC04
Sélection du signal d'entrée, sur un front positif ou négatif
0.0 positif
0.1 négatif
1.0 positif ou négatif
1.1 ne pas utiliser

TCC05 et TCC06 Réservé Doivent être mis à 0
TCC07 Sélection de l'NT3 ou d'une entrée interne
0 INT3
1 FRing128


TCC10 et TCC11 Sélection du filtre d'entrée
0.0 pas de filtre
0.1 filtre et f1
1.0 filtre et f8
1.1 filtre et f32

TCC12 Rechargement du compteur
0 pas de rechargement
1 place TC à 0000 pour une nouvelle utilisation

TCC13 Mode fonctionnement en entrée ou sortie
0 mode capture d'un signal
1 mode sortie CMP d'un signal
TCC12 et TCC14 à TCC17 doivent être mis à 0 si TCC13 = 0 ( mode capture). La lecture du timer C se fait avec le registre TM0

TCC14 et TCC15
Sortie d'un signal sur les broches CMP0
0.0 pas d'action
0.1 signal inversé
1.0 signal mis à 0
1.1 signal mis à 1

TCC16 et TCC17
Sortie d'un signal sur les broches CMP1
0.0 pas d'action
0.1 signal inversé
1.0 signal mis à 0
1.1 signal mis à 1


Les sorties sont CMP00 à CMP02, CMP10 à CMP12 (P1_0 à P1_2 et P3_0 à P3_2)
La sélection des sorties se fait avec le registre TCOUT

TCOUT0 Sélection du bit 0
1 : CMP0_0
TCOUT1 Sélection du bit 1
1 : CMP0_1
TCOUT2 Sélection du bit 2
1 : CMP0_2
TCOUT3 Sélection du bit 3
1 : CMP1_0
TCOUT4 Sélection du bit 4
1 : CMP1_1
TCOUT5 Sélection du bit 5
1 : CMP1_2
TCOUT6 Inversion du bit 0
1 : inverse CMP0_0 à CMP0_2
TCOUT7 Inversion du bit 1
1 : inverse CMP1_0 à CMP1_2

TC Compteur. Peut être lu en cours d'utilisation
TM1 Fréquence PWM
TM0 Largeur du cycle PWM

Après cette longue énumération que j'espère exacte, il convient de placer les registres TCC14 et TCC15 à 1 pour avoir un signal positif en sortie.
Ce qui est moins clair, c'est le rôle des registres TCC16 et TCC17.
Ont-ils le rôle de couper la fréquence selon la valeur PWM choisie ?
= 1.0 permmettrait de ne plus avoir de signal au moment où la comparaison entre les registres TM0 et TM1 est faites, se qui limiterait la largeur du signal.

La sélection de la sortie se fait avec TCOUT. Quel est le rôle des deux groupes de sortie CMP0 et CMP1 ? Peut-on diviser le signal sur deux sorties ?

A bientot,
Jean
gibi
 
Posts: 104
Joined: Fri Jan 17, 2014 4:36 pm

Postby ebonv » Wed May 30, 2007 12:00 am

bonjour,

TCc14 et 15 définissent le mode d'action quand TM0 = TC et TCC16 et 17 définissent le mode d'action quand TM1 =TC.

Donc dans mon aplication TCC16 et 17 définissent la fréquence et font descendre à 0 la broche et TCC14 et 15 définissent la durée et font montée la broche.
donc la ou les broches (choisies par TCOUTx)son a 1, le compteur démare lorsque qu'il y a égalité entre TM0 et TC je fait descendre la broche (TCC15 et 14 = 10) et lorsqu'il y a égalité entre TM1 et TC je fait remonter la ou les broche à 1 (TCC17 et 16 = 11) dans ma boucle de programe je modifie TM0 pour fair évoluer la largeur d'impulsion.

le fait de faire possitionner TCOUTx à 1 ou à 0 a pour effait d'activer ou désactiver la broche concerné.

Je crois qu'il y à possibilité d'activer une intéruption a chaque comparaison pour d'autre modif ( peut-être pour générer des largeur différente sur chaque broche) mais je n'en suis pas encore la et je ne suis par sur d'avoir tout compris sur ce TIMER.

Ne pas oublier de mettre à 1 la broche concerner avant toute chose ????

a +

Etienne
ebonv
 
Posts: 74
Joined: Fri Jan 17, 2014 4:35 pm

Postby gibi » Wed May 30, 2007 12:00 am

Bonjour,

Tu devrais regarder le pdf rej05b0288_r8cap.pdf qui montre comment commander un moteur bruhsless avec le timer C
A la page 38 tu verras qu'ils placent le pwm_period sur TM1 et la durée de l'impulsion sur TM0.
Si la durée est maximum TMO = 0xffff

Et ils ne placent pas un bit à 1 sur le port de sortie.

static void _PWM_Set ( void )
{
pwm_period = PWM_15kHz; /* PWM period */
tm1 = pwm_period; /* set a tm1 register (PWM period) */
switch (pwm_duty) {
case DUTY_10P: /* case 10%: */
tm0 = DUTY_10P_COMP; /* set a tm0 register */
break;
case DUTY_20P: /* case 20%: */
tm0 = DUTY_20P_COMP; /* set a tm0 register */
break;
default:
tm0 = 0xffff; /* set a tm0 register */
}
tcout = 0x47; /* CMP00-CMP02 enable, CMP10-CMP12 disable */
/* CMP00-CMP02 reverse */
tcc00 = 1; /* timer C count start */
}

Jean
gibi
 
Posts: 104
Joined: Fri Jan 17, 2014 4:36 pm

Postby Guest » Wed May 30, 2007 12:00 am

Merci pour ces explications

Les pages d'infos de Gibi sont excellentes et bien écrites

Guest
 

Previous

Return to R8C/13 (01-2006)

Who is online

Users browsing this forum: No registered users and 1 guest