Este documento proporciona información sobre el módulo CCP (Captura/Comparación/PWM) de los microcontroladores. Explica los diferentes modos de funcionamiento del módulo CCP como modo captura, comparación y PWM. Incluye diagramas de flujo y tablas sobre los recursos de timer y registros asociados a cada modo.
Registro del Pic16F84A más importante y utilizado, los bits de este registro indican el estado de la última operación aritmética, causa el reset y selecciona el banco para la memoria de datos.
Registro del Pic16F84A más importante y utilizado, los bits de este registro indican el estado de la última operación aritmética, causa el reset y selecciona el banco para la memoria de datos.
Las capacidades sociomotrices son las que hacen posible que el individuo se pueda desenvolver socialmente de acuerdo a la actuación motriz propias de cada edad evolutiva del individuo; Martha Castañer las clasifica en: Interacción y comunicación, introyección, emoción y expresión, creatividad e imaginación.
Instrucciones del procedimiento para la oferta y la gestión conjunta del proceso de admisión a los centros públicos de primer ciclo de educación infantil de Pamplona para el curso 2024-2025.
2. MODO CAPTURA
• En este modo CCP1 y CCP2 funcionan de forma idéntica. (En los
nombres de registros a continuación x=1,2)
• En este modo la pareja de registros CCPRxH:CCPRxL captura el
valor de 16 bits que contiene TMR1 cuando sucede un evento en
la pata RCy/CCPx del PORTC (estos pines deben configurarse
como entradas con un 1 en TRISC).
• Los eventos son los configurados en CCPxM3:CCPxM0 del
registro de control CCPxCON, para el modo Captura.
• Los eventos son los configurados en CCPxM3:CCPxM0 del
registro de control CCPxCON, para el modo Captura.
• Al realizar la captura se activa el bit de interrupción CCPxIF y si
la interrupción está habilitada mediante CCPxIE, se genera una
interrupción al cargar el CCPRxH:CCPRxL con TMR1.
• TMR1 en este modo debe estar configurado como temporizador o
contador síncrono, nunca en modo asíncrono.
• Al cambiar la condiciones de funcionamiento dentro del modo
captura conviene desactivar el módulo primero.
Prof. Luis Zurita Microcontroladores II
4. MODO COMPARACIÓN
• Los registros CCPRxH:CCPRxL comparan su valor de forma
continua con el valor de TMR1. Cuando coinciden el pin RCy/CCPx
del PORTC (configurado como salida) sufre un evento.
• Los eventos son los configurados en CCPxM3:CCPxM0 del
registro de control CCPxCON para el modo Comparación.
• Al coincidir CCPRxH:CCPRxL y TMR1 se activa el bit de
interrupción CCPxIF y si la interrupción está habilitada mediante
CCPxIE, se genera un interrupción.
interrupción CCPxIF y si la interrupción está habilitada mediante
CCPxIE, se genera un interrupción.
• TMR1 en este modo debe estar configurado como temporizador o
contador síncrono, nunca en modo asíncrono.
• Si se ha seleccionado el modo disparo especial, el módulo CCP1 y
CCP2 realizan tareas distintas. El CCP1 pone a 0 el TMR1 y el
CCPR1 funciona como un Registro de Período capaz de generar
periódicamente interrupciones. El CCP2 pone a 0 el TMR1 y
además inicia una conversión del A/D, con lo que se pueden
realizar conversiones periódicas. Aunque TMR1=0 no se genera
interrupción del timer1.
Prof. Luis Zurita Microcontroladores II
6. MODO PWM
• Con este modo se consiguen impulsos, cuya anchura de nivel alto es de
duración variable y sirven para control de motores y generación de
señales.
• Se utiliza un módulo CCP, el timer2 y un pin RCy/CCPx de salida.
• El comparador entre el valor PR2 y TMR2 cuando detecta la igualdad:
1. Activa ‘1’ el flip-flop de salida.
2. Resetea TMR2.
3. El valor de CCPRxL se carga en CCPRxH.3. El valor de CCPRxL se carga en CCPRxH.
• El periodo de la señal se calcula como:
Periodo=[(PR2)+1]*4*Tosc*(Valor predivisor TMR2)
• Se comparan los valores de 10 bits ([CCPRxH:CCP1CON(5:4)]) y TMR2
concatenados con los dos bits de menor peso del reloj interno) cuando
son iguales:
1. Desactiva ‘0’ el flip-flop de salida.
2. No resetea TMR2
• El ciclo activo es:
Ancho pulso=(CCPRxL:CCP1CON(5:4))*Tosc*(V. predivisor TMR2)
Prof. Luis Zurita Microcontroladores II
8. Bit 7-6: No implementados: Se lee como "0"
CCP1CON
U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
--- CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
Bit 7 Bit 0
Bit 7-6: No implementados: Se lee como "0"
Bit 5-4: CCP1X: CCP1Y: bit menos significativos de PWM
Modo Captura sin usar
Modo Comparación sin usar
Modo PWM: Estos dos bit son los menos significativos del ciclo
de PWM.
Los ocho bits más significativos se encuentran en CCPR1L.
Bit 3-0: CCP1M3-.CCP1M0; bit de selección del modo de
trabajo del módulo comparador CCP1.
Prof. Luis Zurita Microcontroladores II
10. TABLAS MÓDULO CCP
Modo CCP Recurso de Timer
Captura Timer1
Comparación Timer1
PWM Timer2
Prof. Luis Zurita Microcontroladores II
11. EJERCICIOS CCPZonadeConfiguración
Se configuran los bancos
Se configura el módulo CCP
Se configuran las
Interrupciones (opcional)
Captura:
Medir período,
Ton, Toff
Captura:
Comparación:
Setpoint 16 bits
PWM:
Genera señal
ZonadeConfiguración
Interrupciones (opcional)
Se regresa al Banco 0
Resto del programa
(Tratamiento de la información)
Captura:
Comparaciones
Y acciones
Comparación:
Acción sobre RCx
PWM:
En base a acción
Generar Señal
Prof. Luis Zurita Microcontroladores II
12. El compilador C contiene un conjunto de funciones para el
manejo del módulo CCP.
• Para leer el contenido de un módulo CCP se utiliza (x= 1 ó 2):
valor=CCP_x;
donde valor es un entero de 16 bits que se carga con el valor del
CCP respectivo.
• Para escribir el contenido de un módulo CCP se utiliza:
CCP_x=valor;
MÓDULO CCP EN LENGUAJE C
CCP_x=valor;
donde valor es un entero de 16 bits que se carga con el valor del
CCP respectivo.
• Configuración del módulo CCPX:
setup_ccpx (modo);
modo hace referencia a los bits CCPxM3:CCPxM0 del registro
CCPxCON.
El modo permite configurar al PIC para que trabaje en modo PWM,
Captura o comparación.
Prof. Luis Zurita Microcontroladores II
13. MÓDULO CCP EN LENGUAJE C
Setup_CCPx(modo) Modo Registro CCPxCON
CCP_OFF Deshabilitación 00000000
CCP_CAPTURE_FE Captura por flanco de bajada 00000100
CCP_CAPTURE_RE Captura por flanco de subida 00000101
CCP_CAPTURE_DIV_4 Captura cada 4 pulsos 00000110
CCP_CAPTURE_DIV_16 Captura cada 16 pulsos 00000111CCP_CAPTURE_DIV_16 Captura cada 16 pulsos 00000111
CCP_COMPARE_SET_ON_MATCH Salida a 1 en comparación 00001000
CCP_COMPARE_CLR_ON_MATCH Salida a 0 en comparación 00001001
CCP_COMPARE_INT Interrupción en comparación 00001010
CCP_COMPARE_RESET_TIMER Reset TMR1 en comparación 00001011
CCP_PWM Modo PWM habilitado 00001100
Prof. Luis Zurita Microcontroladores II
14. • Los valores para comparar se fijan en los registros
CCPRx. En el compilador C, estos registros están
definidos en el fichero include, por ejemplo para el
16F87x.h:
MÓDULO CCP EN LENGUAJE C
long CCP_1; long CCP_2;
#byte CCP_1=0x15 #byte CCP_2=0x1B#byte CCP_1=0x15 #byte CCP_2=0x1B
#byte CCP_1_LOW=0x15 #byte CCP_2_LOW=0x1B
#byte CCP_1_HIGH=0x16 #byte CCP_2_HIGH=0x1C
set_pwmx_duty(valor);
valor: dato de 8 o 16 bits (10 bits efectivos) que determina el
ciclo de trabajo. Este valor, junto con el valor del preescaler
del TMR2, determina el valor del ciclo de trabajo. En la
configuración del TIMER2, el postcaler debe valer 1.
Prof. Luis Zurita Microcontroladores II
15. Ejercicio 1. Medición de Período de una señal
Sea una señal cuadrada de frecuencia F, Para medir el período (1/F),
se deben tomar dos muestras, una al inicio de la señal y una al final
del período que se desea determinar, sea en el flanco ascendente o
en el flanco descendente:
F
Prof. Luis Zurita Microcontroladores II
F
FMedida inicial Medida Final
Período (T) = Medida Final – Medida Inicial (seg)
Frecuencia (F)= 1 / T (Hz)
Normalmente se recomienda utilizar la interrupción por captura para
realizar la medición del período de una señal. A continuación el
lenguaje c:
16. #include <16f877A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#define use_portD_lcd_true
#include <lcd.c>
#byte PIR1=0x0C
int1 nuevopulso=0; //contador de pulsos (inicial, final)
int16 TFF=0,TFI=0,TFTOTAL=0; //Tiempo flancos
float APERIODO=0.0; //Valor final del ancho de pulso
int1 cambio=0; //Cambio de flanco de disparo
#int_ccp1 //Función interrupción por Captura
void ccp1_int(){
Ejercicio 1. Medición de Período de una señal
void ccp1_int(){
if(cambio==0){ //Flanco de subida. Lectura inicial
TFI=CCP_1; //Carga del valor del registro CCPR1 en flanco subida
//setup_ccp1(CCP_CAPTURE_FE); //Configuración modo Captura en flanco de bajada
cambio=1; //Control de cambio de flanco inicial a final
} else { //Flanco Final
TFF=CCP_1; //Carga del valor del registro CCPR1 en flanco bajada
//setup_ccp1(CCP_CAPTURE_RE); //Configuración modo Captura en flanco de subida
cambio=0; //Control de cambio de flanco
if(nuevopulso==0){ //Fin de pulso...
nuevopulso=1; //pulso a medir
}
}
}
Prof. Luis Zurita Microcontroladores II
17. void main() {
lcd_init();
setup_timer_1(T1_INTERNAL); //Configuración TMR1
setup_ccp1(CCP_CAPTURE_RE);
//Configuración modo Captura en flanco de subida
cambio = 0; //Control de cambio a 0
enable_interrupts(int_ccp1); //Habilitación interrupción modulo CCP
enable_interrupts(global); //Habilitación interrupción global
Ejercicio 1. Medición de Período de una señal
while(true) {
if(nuevopulso==1){ //¿Pulso nuevo?
TFTOTAL=(TFF-TFI); //Período total.
APERIODO = TFTOTAL*1.0; //Período total en microsegundos (a 4MHz:1us)
printf(lcd_putc,"fMED. FRECUENCIAn");
printf(lcd_putc,"T = %6.1fuS ", APERIODO);
nuevopulso=0; //Periodo medido, espera nuevo
}
}
}
Prof. Luis Zurita Microcontroladores II
18. Ejercicio 1. Medición de Período de una señal
Prof. Luis Zurita Microcontroladores II
19. • El CCP en modo comparación, compara
continuamente el valor del TIMER1 con el valor
precargado en el registro CCPR2H:L; Cuando son
iguales se produce un cambio de nivel en el pin CCP
correspondiente y se puede activar la interrupción
por comparación del módulo CCP si la misma ha sido
Ejercicio 2. Generación de una señal cuadrada
mediante la Comparación con el CCP2
por comparación del módulo CCP si la misma ha sido
habilitada.
• En cada cambio de nivel del pin CCP se debe cargar el
valor para obtener una señal cuadrada con un duty
del 50%. Haga los cálculos para generar una señal de
2 kHz.
Prof. Luis Zurita Microcontroladores II
20. #include <16f877A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
int1 cambio=0; //Variable de control de cambio
#int_ccp2
void ccp2_int(){ //Función de interrupción
if(++cambio==1){ //cambio++;
setup_ccp2(CCP_COMPARE_CLR_ON_MATCH); //Modo Comparación, cambio a 0
} else{
setup_ccp2(CCP_COMPARE_SET_ON_MATCH); //Modo Comparación, cambio a 1
}
Ejercicio 2. Generación de una señal cuadrada
mediante la Comparación con el CCP2
}
set_timer1(0); //Borrado de TMR1
CCP_2 = 199; //Inicialización del registro CCPR2 para un Duty del 50%
}
void main() {
disable_interrupts(global);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1); //Configuración TMR1
setup_ccp2(CCP_COMPARE_SET_ON_MATCH); //Configuración inicial modulo CCP
CCP_2 = 199; //Inicialización del registro CCPR2 para un Duty del 50%
enable_interrupts(int_ccp2); //Habilitación interrupción modulo CCP2
enable_interrupts(global); //Habilitación interrupción general
while (TRUE){
}
}
Prof. Luis Zurita Microcontroladores II
21. Ejercicio 2. Generación de una señal cuadrada
mediante la Comparación con el CCP2
Prof. Luis Zurita Microcontroladores II
23. SEÑAL PWM
La resolución máxima en bits viene dada por:
Nota: Si el valor del duty cycle de la PWM es más
largo que el período de la PWM, el pin CCP1 no
podrá ser puesto a cero
Prof. Luis Zurita Microcontroladores II
24. • En el siguiente ejercicio se va a generar una señal PWM
con cuatro coeficientes cíclicos distintos que dependen
de dos interruptores que seleccionan el modo de la señal
(25%, 50%, 60% y 80%). El modo elegido debe mostrarse
en una pantalla LCD:
#include <16F877A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
Ejercicio 3. Generación de una señal PWM
mediante el CCP1
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use fast_io(c)
#use fast_io(d)
#use standard_io(a)
#define use_portd_lcd_true
#include <lcd.c>
byte A=0;
Prof. Luis Zurita Microcontroladores II