miércoles, 20 de julio de 2016

El módulo CCP PWM

Con este modo de trabajo, se consiguen impulsos lógicos cuya anchura del nivel alto es de duración variable. El módulo CCPx donde x puede ser 1 o 2 dependiendo, se logra obtener por el pin CCPx una salida digital mediante su registro TRISC correspondiente, una señal periódica, con parte de la señal en alto y parte de la señal en bajo o toda la señal en alto o toda la señal en bajo.
La parte de la señal obtenida por el pin CCPx que está en alto se conoce como ciclo de trabajo y es representado por el valor almacenado en el registro CCPRxL, el tiempo que la señal está a nivel bajo se conoce como periodo de la señal y es representado por el valor almacenado en el registro PR2.
Para esta forma de trabajo del módulo CCP se hace uso del TMR2 y de su registro PR2. El valor almacenado en el registro CCPRxL que es el valor que representa el ciclo de trabajo de la señal PWM que se mantiene a 1, se cargará en el registro CCPxH.
El valor del registro CCPxH se compara permanentemente con el valor que va tomando el registro TMR2 y cuando se hacen iguales el pin CCPx se pondrá a nivel bajo, de esta manera se fija el ancho de pulso, y como el TMR2 seguirá aumentando de valor, hasta que este se haga igual nuevamente al valor almacenado en el registro PR2, momento en el cual el registro TMR2 se hará igual a 0 y el ciclo anterior volverá a repetirse.
Para obtener la salida PWM por el pin CCPx de tienen que cargar el periodo de la señal mediante un valor en el registro PR2 y además establecer un ciclo de trabajo mediante un valor cargado en el registro CCPRxL.
El tiempo que dura la onda es:
Período = [(PR2) + 1] • 4 • Tos • Valor Predivisor TMR2
Y para la anchura de pulso:
Anchura de impulsos = (CCPR1L:CCP1CON<5:4>) • Tosc • Valor Predivisor TMR2


Referencia Bibliográfica:
Milan Verle (2008). PIC Microcontrollers – Programming in Assembly. Editorial MikroElektronika.

El módulo CCP Comparación

En esta forma de trabajar el módulo CCP2 lo que hace es comparar continuamente el valor que va tomando el temporizador TMR1 (el cual tiene que haber sido configurado como temporizador), con un valor almacenado previamente en los registros CCPR2H yCCPR2L del módulo CCP, cuando ocurre la comparación al igualarse ambos valores, se producirá una interrupción en donde ocurre lo que se quiere en el pin 16. Cuando coinciden ambos valores, acontece uno de los siguientes eventos de acuerdo con la programación de los bits CCP1M3-0:

1. Pasa a nivel alto

2. Pasa a nivel bajo
3. No cambia su estado pero se produce una interrupción

Programa: 

Referencia Bibliográfica:

Milan Verle (2008). PIC Microcontrollers – Programming in Assembly. Editorial MikroElektronika

Módulo CCP Captura

Trabajará con el módulo CCP1 y lo que hace es guardar en sus registros CCPR1H y CCPR1L, (8 bits correspondientes a cada caso) el valor que se encuentra en el registro TMR1 justo cuando en el PIN 17 o pin CCP1 ocurre un evento determinado. Es importante mencionar que este pin tiene que ser configurado como una entrada digital mediante el registro TRISC correspondiente.Los eventos que pueden ocurrir sobre la pata para que se produzca la captura del valor TMR, serán:

1. Un flanco ascendente
2. Un flanco descendente
3. Cada 4 flancos ascendentes
4. Cada 16 flancos ascendentes

Mientras que si se usa el módulo CPP2, cualquiera de los sucesos o eventos mencionados para el módulo CCP1 provocarán una captura, solo que en este caso sucederán para sus registros CCPR2H y CCPR2L y el suceso tiene que suceder en el pin 16.



Tabla N° 1 - CCP2 y CCP1

Referencia Bibliográfica:
Milan Verle (2008). PIC Microcontrollers – Programming in Assembly. Editorial MikroElektronika

Introducción a CCP

Los microcontroladores disponen de dos módulos CCP, llamados CCP1 y CCP2, de los cuales cuentan 16 bits cada uno, es importante resaltar que a cada uno le corresponde un pin en específico, para el módulo CCP1 el pin 17 o RC2 y el módulo CCP2 el pin 16 o RC1, que solo se diferencian en un disparo especial.

Estos realizan tres funciones diferentes:

Modo captura:
se toma una pareja de uno de los módulos, siendo esta la que capture el valor almacenado en el Timer 1 cuando ocurre un evento en el pin RC2 o RC1.

Modo comparación: el valor que almacene el Timer 1 de 16 bits con algún valor previamente cargado en una pareja de registros de un módulo se compararan, cuando ambas funciones coincidan se producirá un evento en la pata RC2 o en la RC1, dependiendo del módulo.

Modo modulación por anchura de pulsos (PWM): en este caso se controla la señal dentro del intervalo de ancho de pulso en un nivel alto (1).

Cada uno de los módulos CCP1 y CCP2, cuentan con unos registros para su manipulación los cuales son:
El registro CCPxCON donde x será 1 o 2 dependiendo del módulo CCP utilizado, mediante el cual se controla el modo de trabajo.
Los registros CCPRxH y CCPRxL ambos de 8 bits actúan como uno solo y se puede considerar como un registro de 16 bits que es donde se guardan los valores obtenidos mediante el módulo CCP.
Es común provocar interrupciones mediante el módulo CCP por lo que en estos casos hay que tener en cuenta el uso de los registros INTCON, PIE1 y PIR1 para el módulo CCP1 y PIE2 y PIR2 para el módulo CCP2.

Tabla N°1 - Resumen general de las interacciones en los módulos CCP

Referencia Bibliográfica:
Milan Verle (2008). PIC Microcontrollers – Programming in Assembly. Editorial MikroElektronika

Programa para una señal cuadrada


;**************************************************************
; PROGRAMA DE GENERACIÓN DE ONDA CUADRADA
;**************************************************************

; Esta sección de programa se encarga de generar una señal ;cuadrada que será mostrada por el BIT 0, del PORTB, RB0. La ;lógica de este programa será poner una línea en alto un ;determinado tiempo y luego poner otra línea en bajo con la misma ;cantidad de tiempo

GENERACION
BSF PORTB,0
MOVF BASEPERIODO,W
MOVWF CONTADOR1


REPITE
CALL RETARDO
DECFSZ CONTADOR1,F
GOTO REPITE
BCF PORTB,0
MOVF BASEPERIODO,W
MOVWF CONTADOR1


REPITE1
CALL RETARDO
DECFSZ CONTADOR1,F
GOTO REPITE1
GOTO GENERACION