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

CCP (Compare, Caption, PWM) est un module interne au PIC qui peut fonctionner suivant trois modes :
* Comparaison (compare), ce mode permet en autre de générer des évènements périodiques,
* Capture (Caption), ce mode permet en autre d’effectuer des mesures de temps,
* Modulation de largeur d'impulsion (MLI ou PWM en anglais).
L'objectif de ce chapitre est de générer des signaux de fréquences déterminées. Ce travail est réalisé en général avec ce module CCP et plus exactement son mode comparaison. Nous allons commencer par décrire le fonctionnement du timer 1 du 16F877.

## Le Timer 1 et ses registres

Le timer 1 est un peu différent du timer0 par le fait qu’il est sur 16 bits. Pour les PIC de la série 18F, nous avons déjà vu, que le timer0 est aussi sur 16 bits.
Les registres utilisés par le Timer1 sont donc :
* TMR1H et TMR1L,
* T1CON
* éventuellement le PORTC, et PIR1.
La détection synchronisée doit être obligatoirement utilisée dans les modes compare (de ce TD) et le mode capture du TD suivant.

### Fonctionnement

Nous allons expliquer tout ce qui peut être déduit du schéma de documentation présenté.
* Prenez l'habitude d'interpréter les cadres en pointillés : ici on a encore un diviseur dont la valeur de division est choisie par les bits T1CKPS1 et T1CKPS0 du registre T1CON.
* Le dépassement de capacité du timer1 est mémorisé par un drapeau TMR1IF de PIR1. Ce drapeau ne se remet pas à zéro tout seul, c’est à vous de le faire.
* Le fonctionnement du timer1 peut être interrompu par le bit TMR1ON de T1CON.
* Le bit TMR1CS de T1CON choisit la source horloge du timer1. Elle peut être soit un oscillateur externe fabriqué sur PORTC (si le bit en question vaut 1) soit le quartz (divisé par 4)
* On est encore confronté au problème de l'écriture dans un registre 16 bits par un processeur 8 bits. Ce problème a déjà été rencontré dans le timer0 du 18FXXXX.
** Pour écrire on commence par les 8 bits de poids fort puis par les 8 bits du poids faible.
** Pour lire on commence par lire les 8 bits de poids faible puis les 8 bits de poids fort.

### Le nom des bits pour Mikro C

Sera documenté plus tard.

### Le nom des bits pour Hitech C

On les retrouve à partir du fichier d'en-tête correspondant !
Voila de quoi travailler !

## Le mode comparaison

Le mode comparaison va nous permettre de générer des signaux de fréquence déterminée.
Le fonctionnement de ce module est le suivant :
* vous imaginez que la valeur de TMR1 varie sans arrêt au rythme d'une horloge qui a été documentée dans la section précédente.
* quand le timer1 a la même valeur que le registre CCPR1 on dit qu'on a une comparaison.
* Une comparaison positionne toujours le bit CCP1IF du registre PIR1.
* Pour le reste tout va dépendre de la valeur des bits CCP1M3... CCP1M0 du registre CCP1CON.
** 0010 : Compare bascule sortie quand comparaison (CCPxIF)
** 1000 : Compare force CCP à un (CCPIF est géré)
** 1001 : Compare force CCP à zéro (CCPIF est géré)
** 1010 : Compare sort rien sur CCP mais sur CCPIF
** 1011 : Compare force Special Event Trigger reset sur timer1 (CCP1IF est géré)
* Comme on peut le remarquer, la logique de sortie permet éventuellemnt de changer le bit RC2 de PORTC à condition bien entendu que l’on ait pris soin de configurer correctement TRISC.

### Le nom des bits pour Mikro C

Nous documenterons cela plus tard.

### Le nom des bits pour HitechC

On les retrouve à partir du fichier d'en-tête correspondant !
| Interruption timer0 en langage C | Le mode capture du module CCP (Capture Compare PWM) |