Está en la página 1de 6

Curso taller: Microcontroladores PIC

Mdulos CCP del PIC18F2550 en modo captura


Como ya habamos visto, el PIC18F2550 tiene dos mdulos CCP cada uno de los cuales tiene un registro de
16 bits (CCPRxH:CCPRxL) que puede funcionar en tres posibles modos: captura, comparacin o PWM. Los
mdulos CCP se controlan mediante sus registros CCPxCON. En los modos captura y comparacin los
mdulos CCP utilizan los temporizadores Timer1 o Timer3. La asignacin de uno de ambos temporizadores
a uno o ambos mdulos se hace mediante un bit del registro T3CON. Por eso, haremos una revisin previa
de los temporizadores Timer1 y Timer3.
Temporizador Timer1
Timer1 es un mdulo que se puede configurar para funcionar como temporizador o contador de 16 bits
mediante el registro TMR1 formado por los registros TMR1H y TMR1L. La fuente de seal para este
temporizador se puede seleccionar entre el reloj interno o el oscilador interno propio de Timer1.
Timer1 puede producir una interrupcin por desbordamiento del registro TMR1. Adems, al funcionar
junto con los mdulos CCP se puede programar un reset de TMR1 con el disparo por evento especial que
tienen dichos mdulos.

Diagrama en bloques de Timer1


Timer1 tiene su propio oscilador de baja potencia que le permite tener ofrece una opcin adicional de
reloj. Ese oscilador tambin puede servir como fuente de reloj de bajo consumo para el microcontrolador
en operacin de potencia controlada. Tambin puede proporcionar funcionalidad de reloj de tiempo real
(RTC) con un mnimo de cdigo y componentes adicionales. El control de Timer1 se hace mediante el
registro T1CON.
Registro T1CON

Universidad Continental

Microcontroladores PIC

Ing. Juan L. Merlo G

Curso taller: Microcontroladores PIC

Modos de funcionamiento de Timer1


Timer1 puede funcionar en tres posibles modos:
- Temporizador
- Contador sncrono
- Contador asncrono
El modo de operacin se selecciona con el bit TMR1CS (T1CON<1>). Si TMR1CS=0, Timer1 funciona como
temporizador, incrementando el valor de TMR1 con cada ciclo de instruccin (fOSC/4). Si TMR1CS=1, Timer1
funciona como contador de pulsos externos incrementando el valor de TMR1 con cada flanco ascendente
de su entrada de reloj externo o de su oscilador si est habilitado. Cuando Se habilita Timer1, los pines
RC1/T1OSI/UOE y RC0/T1OSO/T13CKI se hacen entradas sin importar el estado de sus bits TRIS.
Funcionamiento de Timer1 en modo de lectura/escritura en dos partes de 8 bits o en una sola de 16 bits
Normalmente el byte ms significativo de TMR1 no es accesible directamente y las lecturas y escrituras
deben hacerse a travs de un buffer que es TMR1H. Por ese motivo, cuando se lee TMR1 debe leerse
primero la parte alta (TMR1H) y luego la parte baja (TMR1L) lo que puede originar un error de lectura si es
que ocurre un desbordamiento entre ambas lecturas. Al escribir un dato en TMR1 tambin debe escribirse
primero el buffer TMR1H y luego el byte TMR1L. Al escribir un dato en TMR1L se transfiere al mismo
tiempo el contenido de TMR1H al byte ms significativo de TMR1.
Para evitar todo este embrollo, se puede configurar Timer1 para admitir lecturas y escrituras de 16 bits,
es decir del registro TMR1 completo en una sola operacin. Esto se hace poniendo a 1 el bit RD16
(T1CON<8>). Esto hace que una lectura de TMR1L cargue automticamente el contenido del byte ms
significativo de TMR1 en el buffer TMR1H.
Oscilador de Timer1
El PIC18F2550 cuenta con un circuito oscilador integrado entre los pines T1OSI (entrada) y T1OSO (salida)
que se habilita poniendo a 1 el bit T1OSCEN (T1CON<3>). Se trata de un oscilador de bajo consumo
ajustado para cristales de 32,768 kHz que funciona en todos los modos de potencia controlada del
microcontrolador. Al ponerlo a funcionar, se debe proveer en programa un tiempo adecuado para
asegurar su correcto arranque.
En la figura siguiente se puede ver las conexiones y componentes externos del oscilador de Timer1. Los
valores de C1 y C2 pueden variar un poco hacia arriba o hacia abajo dependiendo de las caractersticas de
cada cristal. Hay que tener en cuenta que valores mayores de C1 y C2 proporcionan mayor estabilidad al
oscilador, pero incrementan el tiempo de arranque.
Universidad Continental

Microcontroladores PIC

Ing. Juan L. Merlo G

Curso taller: Microcontroladores PIC

Componentes externos del oscilador de Timer1


Timer1 como fuente de reloj del sistema
El oscilador de Timer1 se puede utilizar como reloj del sistema en los modos de operacin de potencia
controlada. Poniendo al valor 0b01 los bits SCS1:SCS0 (registro OSCCON<1:0>) la CPU y los perifricos
toman seal de reloj del oscilador secundario que es precisamente el oscilador de Timer1.
Mientras el oscilador de Timer1 proporciona seal de reloj al sistema, el flag de estado de reloj de sistema
de Timer1 T1RUN (T1CON<6>). Este flag puede utilizarse para saber el modo actual de reloj del sistema.
Opcin de bajo consumo de Timer1
Timer1 puede operar en dos niveles distintos de consumo de energa. La seleccin se hace con el bit de
configuracin LPT1OSC. Si LPT1OSC=1, Timer1 funciona en modo de bajo consumo. Si LPT1OSC=0, Timer1
consume ms energa; este es el modo de funcionamiento por defecto. En realidad, el modo de bajo
consumo de Timer1 solo debe utilizarse en aplicaciones de bajo ruido porque el ruido proveniente del
entorno puede desestabilizar al temporizador.
Interrupcin por Timer1
Timer1 puede producir una interrupcin cuando el registro TMR1 se desborda y se recicla pasando de
0xFFFF a 0x0000, lo que hace que el flag TMR1IF (PIR<1>) se ponga a 1 indicando que se produjo el
desbordamiento. La interrupcin se puede habilitar poniendo a 1 el bit de interrupcin de Timer1 TMR1IE
(PIE1<0>).
Reseteo de Timer1 con el disparo por evento especial de los mdulos CCP
Si cualquiera de los mdulos CCP se configura en modo comparacin para generar un disparo por evento
especial (CCP1M3:CCP1M0 o CCP2M3:CCP2M0 = 1011), esta seal de disparo reiniciar el temporizador
Timer1. Simultneamente, el disparo producido por CCP2 iniciar una conversin A/D si el ADC est
habilitado. Para hacer uso de esta caracterstica, Timer1 debe estar configurado como temporizador o
como contador sncrono. De esta manera el registro CCPRxH:CCPRxL se convierte efectivamente en un
registro de perodo para Timer1. Si Timer1 estuviera configurado como contador asncrono, el reseteo de
Timer1 podra fallar.
En el improbable caso de que coincida un disparo por evento especial y una operacin de escritura a
Timer1, tendr prioridad la operacin de escritura.
Temporizador Timer3
Timer3 es una especie de temporizador gemelo de Timer1 pues tiene la misma estructura y las mismas
caractersticas y puede funcionar con el mismo oscilador externo de Timer1. La nica diferencia est en un
par de bits del registro de control T3CON.
Registro T3CON

Universidad Continental

Microcontroladores PIC

Ing. Juan L. Merlo G

Curso taller: Microcontroladores PIC

La diferencia respecto de T1CON son los bits T3CCP2:T3CCP1 que sirven para asignar los temporizadores
Timer1 y Timer3 a los mdulos CCP1 y CCP2.
El modo captura de los mdulos CCP
La seleccin del modo de captura se hace en el registro CCPxCON que es el registro de control de cada
mdulo CCP. El registro de datos, como ya sabemos, es el registro de 16 bits CCPRx formado, a su vez, por
los registros de 8 bits CCPRxH:CCPRxL.
Asignacin de temporizadores a los mdulos CCP
Los mdulos CCP hacen uso de los temporizadores Timer1 y Timer3 para los modos de comparacin y
captura. Para el modo PWM ambos mdulos utilizan el temporizador Timer2.
La asignacin de los temporizadores se hace mediante los-bits T3CCP2:T3CCP1 del registro T3CON. Ambos
mdulos CCP pueden estar activos a la vez y compartir el mismo temporizador si estn configurados para
funcionar en el mismo modo (Comparacin/Captura/PWM) al mismo tiempo. Si Timer1 o Timer3 se
configuran en modo de contador asncrono, el modo de captura no funcionar.
Asignacin de pin CCP2
El pin CCP2 (salida de comparacin, entrada de captura) se asigna con el bit de configuracin CCP2MX. Si
CCP2MX=1, el pin CCP2 est multiplexado con RC1; este es el estado por defecto. Si CCP2MX=0, el pin
CCP2 estar multiplexado con RB3.
El bit TRIS correspondiente (TRISC1 o TRISB3) debe ponerse a 0 o a 1 para que el pin CCP2 funcione
correctamente.

Universidad Continental

Microcontroladores PIC

Ing. Juan L. Merlo G

Curso taller: Microcontroladores PIC


Registro CCPxCON:

Modo captura
En este modo, el par de registros CCPRx=CCPRxH:CCPRxL captura el valor de 16 bits de TMR1 o TMR3
cuando ocurre uno de los siguientes eventos en el pin CCPx:
- Flanco descendente
- Flanco ascendente
- 4 flancos ascendentes
- 16 flancos ascendentes en el pin CCPx
El evento se selecciona con los bits de seleccin de modo resaltados en la figura anterior. Cuando se
produce una captura, el flag CCPxIF se pone a 1 y debe posteriormente ser puesto a 0 en programa por el
usuario. Si ocurriera una nueva captura antes de leer el registro CCPRx, el nuevo valor capturado
sobreescribir al anterior.
Seleccin de Timer1 o Timer3
El temporizador elegido debe funcionar en modo temporizador o en modo contador sncrono. En modo
asncrono, la operacin de captura no funcionar.
Precaucin con la interrupcin por captura
Cuando se cambia el modo de captura, se puede producir una falsa interrupcin. Para evitar esto, el
programador deber mantener desactivado el bit de habilitacin de interrupcin CCPxIE para evitar falsas
interrupciones. Tambin el flag de interrupcin CCPxIF debe ponerse a 0 despus de cualquier cambio del
modo de operacin del mdulo CCP.

Universidad Continental

Microcontroladores PIC

Ing. Juan L. Merlo G

Curso taller: Microcontroladores PIC

Diagrama en bloques del modo de captura


Predivisor del mdulo CCP
Hay 4 posibles valores de predivisor en el modo de captura que se especifican junto con el modo de
operacin mediante los bits CCPxM3:CCPxM0 del registro CCPxCON. Cad vez que se apaga el mdulo CCP
o se deshabilita el modo de captura, el predivisor se borra. Esto implica que cualquier reset del dispositivo.
Cambiar de un predivisor de modo captura al otro puede provocar una falsa interrupcin y el predivisor
no se borrar, por lo que, la primera captura posterior al cambio podra hacerse con un predivisor no
reseteado. Para evitar esto se debe primero apagar el mdulo CCP y luego hacer el cambio de predivisor.

Universidad Continental

Microcontroladores PIC

Ing. Juan L. Merlo G