Aller au contenu

Utiliser les PIC 16F et 18F/Le mode capture du module CCP (Capture Compare PWM)

Leçons de niveau 15
Une page de Wikiversité, la communauté pédagogique libre.
Début de la boite de navigation du chapitre
Le mode capture du module CCP (Capture Compare PWM)
Icône de la faculté
Chapitre no 11
Leçon : Utiliser les PIC 16F et 18F
Chap. préc. :Le mode comparaison du module CCP (Capture Compare PWM)
Chap. suiv. :Le mode PWM du module CCP (Capture Compare PWM)

Exercices :

Le mode capture du module CCP (Capture Compare PWM)
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Utiliser les PIC 16F et 18F : Le mode capture du module CCP (Capture Compare PWM)
Utiliser les PIC 16F et 18F/Le mode capture du module CCP (Capture Compare PWM)
 », n'a pu être restituée correctement ci-dessus.

Une capture est un moyen matériel permettant la mesure de temps. On la retrouve dans la majorité des microcontrôleurs actuels.

Le mode capture du 16F877

[modifier | modifier le wikicode]

Une capture est une lecture de manière matérielle de la valeur d'un timer, lecture synchronisée sur un événement extérieur. La lecture étant déclenchée de manière matérielle, on n'a pas besoin d'attendre de fronts d'horloge pour la réaliser.


L'intérêt de cette capture est d’éviter d’utiliser une interruption pour la réaliser : on aurait alors affaire à une capture logicielle.

Description matérielle

[modifier | modifier le wikicode]

Dans le mode capture, CPPR1H et CPPR1L capturent la valeur du timer 1 quand un événement se produit sur RC2/CPP1 du port C. Un événement est défini comme :

  • un front descendant
  • un front montant
  • tous les 4 fronts montants
  • tous les 16 fronts montants
La capture du 16F877

Attention le PORTC doit être configuré en entrée pour le bit b2 (avec TRISC) comme indiqué sur la figure.

Le fonctionnement de l’ensemble peut se résumer comme suit :

  • Le cadre en pointillés représente toujours une sorte de filtrage sélectionné par les 4 bits de poids faibles de CCP1CON. Les choix possibles sont présentés dans le schéma
  • Toute capture positionnera, le drapeau CCP1IF du registre PIR1. C'est un drapeau mis à un par le matériel mais qui sera remis à 0 par logiciel.
  • Le drapeau CCP1IF est capable de déclencher une interruption, mais ceci n’est pas documenté pour l'instant.
  • Une capture déclenche une recopie de la valeur 16 bits du timer1 dans le registre CCPR1. Cette recopie est symbolisée par un triangle dans nos schémas.

Noms des bits pour Hitech C

[modifier | modifier le wikicode]

Quelques extraits des fichiers d'inclusions nous montrent le nom des bits :

/* Definitions for PORTC register */
volatile bit	RC0		@ ((unsigned)&PORTC*8)+0;
volatile bit	RC1		@ ((unsigned)&PORTC*8)+1;
volatile bit	RC2		@ ((unsigned)&PORTC*8)+2;
volatile bit	RC3		@ ((unsigned)&PORTC*8)+3;
volatile bit	RC4		@ ((unsigned)&PORTC*8)+4;
volatile bit	RC5		@ ((unsigned)&PORTC*8)+5;
volatile bit	RC6		@ ((unsigned)&PORTC*8)+6;
volatile bit	RC7		@ ((unsigned)&PORTC*8)+7;

/* Definitions for TRISC register */
volatile bit	TRISC0		@ ((unsigned)&TRISC*8)+0;
volatile bit	TRISC1		@ ((unsigned)&TRISC*8)+1;
volatile bit	TRISC2		@ ((unsigned)&TRISC*8)+2;
volatile bit	TRISC3		@ ((unsigned)&TRISC*8)+3;
volatile bit	TRISC4		@ ((unsigned)&TRISC*8)+4;
volatile bit	TRISC5		@ ((unsigned)&TRISC*8)+5;
volatile bit	TRISC6		@ ((unsigned)&TRISC*8)+6;
volatile bit	TRISC7		@ ((unsigned)&TRISC*8)+7;

/* Definitions for PIR1 register */
volatile bit	TMR1IF		@ ((unsigned)&PIR1*8)+0;
volatile bit	TMR2IF		@ ((unsigned)&PIR1*8)+1;
volatile bit	CCP1IF		@ ((unsigned)&PIR1*8)+2;
volatile bit	SSPIF		@ ((unsigned)&PIR1*8)+3;
volatile bit	TXIF		@ ((unsigned)&PIR1*8)+4;
volatile bit	RCIF		@ ((unsigned)&PIR1*8)+5;
volatile bit	ADIF		@ ((unsigned)&PIR1*8)+6;

/* Definitions for CCP1CON register */
               bit	CCP1M0		@ ((unsigned)&CCP1CON*8)+0;
               bit	CCP1M1		@ ((unsigned)&CCP1CON*8)+1;
               bit	CCP1M2		@ ((unsigned)&CCP1CON*8)+2;
               bit	CCP1M3		@ ((unsigned)&CCP1CON*8)+3;
               bit	DC1B0		@ ((unsigned)&CCP1CON*8)+4;
               bit	DC1B1		@ ((unsigned)&CCP1CON*8)+5;
               bit	P1M0		@ ((unsigned)&CCP1CON*8)+6;
               bit	P1M1		@ ((unsigned)&CCP1CON*8)+7;

Le mode capture du 18FXXXX

[modifier | modifier le wikicode]

La différence essentielle est la possibilité d’utiliser le timer 3 (géré par T3CON) pour la capture. Le PIC 18F dispose d'un autre module de comparaison CCP2.

Une figure sera plus parlante :

Le mode capture du module CCP1 du PIC 16F

C'est bien le bit T3CCP2 de T3CON qui sélectionne le timer 3 dans le module CCP1 d’après la documentation officielle.