SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
Módulos CCP
©ATE-Universidad de Oviedo
1
Módulos CCP
©ATE-Universidad de Oviedo
2
MÓDULO CCP (Captura/Comparación/PWM)
• Un microcontrolador de la gama media de los PIC16 puede tener hasta 2 módulos CCP.
• Cada módulo CCP tiene un registro de 16 bits que se puede utilizar de 3 formas distintas:
1. Como registro de 16 bits para captura de tiempo al producirse un evento.
2. Como registro de 16 bits para compararlo con el valor de cuenta del temporizador
TMR1, pudiendo provocar un evento cuando se alcanza el valor contenido en este
registro.
3. Como registro de 10 bits del ciclo de trabajo de una señal PWM generada por el
microcontrolador.
• Los 2 módulos CCP disponibles se comportan casi idénticamente, salvo el caso del
funcionamiento por disparo de evento especial (special event trigger) que tiene una
pequeña diferencia si se trata del módulo CCP1 ó del módulo CCP2.
• Tras un reset, el módulo CCP está apagado (al forzar los bits de configuración al valor 0).
• En las siguientes transparencias se describirá el funcionamiento de CCP1. El
funcionamiento de CCP2 es idéntico (salvo la excepción indicada anteriormente) pero cada
uno tiene sus propios registros de carga y configuración (véase tabla adjunta).
Módulos CCP
©ATE-Universidad de Oviedo
3
La siguiente tabla muestra qué temporizadores utiliza el módulo CCP en cada uno de sus
modos de funcionamiento:
MÓDULO CCP (Captura/Comparación/PWM)
La siguiente tabla muestra las posibles interacciones entre los módulos CCP, donde CCPx
es uno de los módulos y CCPy es el otro:
Módulos CCP
©ATE-Universidad de Oviedo
4
CCPxCON -- CCP1CON (17h) Y CCP2CON (1Dh):
Registros de control de cada módulo CCP
bit 7-6 No implementados: Leídos como ‘0’.
bit 5-4 DCxB1:DCxB0: Bits 0 y 1 del valor que
fija el ciclo de trabajo en el modo PWM.
Modo Captura:
No se usa
Modo Comparación:
No se usa
Modo PWM:
Estos bits son los 2 LSBs para el
ciclo de trabajo. Los 8 bits más
significativos están en CCPRxL.
bit 3-0 CCPxM3:CCPxM0: Bits de selección
del modo de funcionamiento del módulo
CCPx:
0000= Captura/Comparación/PWM off
(resetea el módulo CCPx)
0100= Modo Captura, cada flanco de bajada
0101= Modo Captura, cada flanco de subida
0110= Modo Captura, cada 4 flancos de subida
0111= Modo Captura, cada 16 flancos de subida
1000= Modo comparación, el pin CCPx se pone a “1” cuando
TMR1 alcanza el valor del registro de 16 bits
(CCPRxH:CCPRxL). El bit CCPIF se pone a 1.
1001= Modo comparación, el pin CCPx se pone a “0” cuando
TMR1 alcanza el valor del registro de 16 bits
(CCPRxH:CCPRxL). El bit CCPIF se pone a 1.
1010= Modo comparación, generación de interrupción
software cuando se produce la igualdad. CCPIF se pone a 1.
El pin CCPx no se ve afectado.
1011= Modo comparación, generación de disparo de evento
especial (special event trigger). CCPIF se pone a 1. El pin
CCPx no se ve afectado. CCP1 resetea el TMR1; CCP2
resetea el TMR1 y lanza una conversión A/D nueva (si el
módulo del conversor A/D está habilitado.
11xx= modo PWM
Módulos CCP
©ATE-Universidad de Oviedo
5
MODO CAPTURA
• En modo Captura, los registros CCPRxH:CCPRxL toman el valor de 16 bits que tenga el TMR1
cuando se produce un determinado evento en el pin CCPx (RC2/CCP1 para el módulo CCP1 y
RC1/T1OSI/CCP2 para el módulo CCP2). Los posibles eventos son:
• Cada flanco de bajada.
• Cada flanco de subida.
• Cada 4 flancos de subida.
• Cada 16 flancos de subida.
El evento se configura con los bits CCPxM3:CCPxM0 de los registros CCP1CON y CCP2CON
respectivamente.
• El bit CCP1IF (PIR1<2>) ó CCP2IF (PIR2<0>) se ponen a “1” cuando se produce el evento
configurado, pudiendo provocar un salto a la rutina de interrupción. El correspondiente flag
debe limpiarse por software.
• Si se produce otra captura antes de que se lea el valor del registro CCPRx, el último valor
sobreescribe el valor anterior (que se pierde).
• En modo captura, el pin RC2/CCP1
y/o el pin RC1/T1OSI/CCP2 deben
configurarse como entrada por
puesta a uno de los bits TRISC<2> y
TRISC<1> respectivamente.
Si el bit RC2/TRISC1 y/o
RC1/CCP2 se configura como salida,
una escritura a este pin del puerto
podría originar una captura.
¿ Cuenta ?
Módulos CCP
©ATE-Universidad de Oviedo
6
Prescaler
÷ 1 , 4 , 16
Detección de
flanco y
CCPRxH CCPRxL
TMR1H TMR1L
CCPxCON<3:0>
Qs
CCPxIF ← 1
RCy/CCPx
Captura
T1SYNC
Reloj internoT1CKPS1:T1CKPS0
TMR1ON
On/off
TMR1CS
Prescaler
1 , 2 , 4 , 8
Entrada
de reloj
sincronizada
2
Detección de
sincronización
1
0
fOSC/4
Reloj
interno
0
1
T1OSCEN
Habilita
oscilador
T1OSC
RC0
T1OSO
T1CKl
RC1
T1OSI
CCP2
Módulo CCP
Módulo TMR1
MODO CAPTURA:
Hay que configurar
módulo CCP
y
módulo TMR1
Módulos CCP
©ATE-Universidad de Oviedo
7
MODO CAPTURA
• FUNCIONAMIENTO DEL TMR1 PARA EL MODO CAPTURA: El TMR1 debe estar corriendo en
modo temporizador ó en modo contador síncrono para que el módulo CCP produzca la comparación.
No puede funcionar en modo contador asíncrono.
• CAMBIO ENTRE MODOS CAPTURA: Si se cambia de un modo captura (p.e. de 4 flancos) a otro
(p.e. de cada flanco), el cambio puede generar una falsa interrupción. El usuario debe por
software limpiar el bit CCPxIE para deshabilitar las interrupciones, limpiar el flag CCPxIF y luego
cambiar el modo de captura. El cambio entre dos modos captura debe realizarse según el siguiente
subprograma:
CLRF CCP1CON ; Apaga el módulo CCP
MOVLW NEW_CAPT_PS ; Preparo en W el nuevo prescaler y preparo CCP ON
MOVWF CCP1CON ; Cargo CCP1CON el valor
• CONTADOR DE FLANCOS DEL CCP (PRESCALER DEL CCP): Si en medio de una cuenta de 4 ó 16
flancos de subida se apaga el módulo CCP o se pasa a un modo que no sea el modo Captura
(mediante los bits CCPxM3:CCPxM0), el prescaler del CCP se resetea.
• FUNCIONAMIENTO EN MODO DORMIDO: En modo dormido, el TMR1 no se incrementa (esta
en modo síncrono ó temporizador). Pero, el prescaler del CCP sí puede continuar incrementando el
contador de eventos y cuando llega al valor configurado pone el bit CCPxF a “1” provocando que el
micro se “despierte”. No obstante, el contenido del TMR1 se transfiere a los CCPR pero el TMR1
no se ha visto incrementado y por tanto, el valor cargado no tiene un significado dado.
Módulos CCP
©ATE-Universidad de Oviedo
8
EJEMPLO DE INICIALIZACIÓN EN MODO CAPTURA
CLRF CCP1CON ; Módulo CCP1 OFF
CLRF TMR1H ; limpio TMR1H
CLRF TMR1L ; limpio TMR1L
CLRF INTCON ; Deshabilito interrupciones
BSF STATUS, RP0 ; Banco 1
BSF TRISC, CCP1 ; Pin RC2/CCP1 entrada
CLRF PIE1 ; Deshabilito interrupciones de periféricos
BCF STATUS, RP0 ; Banco 0
CLRF PIR1 ; limpio flags de interrupciones de periféricos
MOVLW 0x06 ; Modo captura, cada 4º flanco de subida
MOVWF CCP1CON ;
BSF T1CON, TMR1ON ; Timer 1 ON
; En este ejemplo no usamos la interrupciones del CCP1
; se muestrea el flag de CCP para detectar cuándo se produce una captura
; Si se quisiera utilizar interrupciones habría que habilitarlas en el proceso de
; inicialización
; Evento que provoca una captura
Evento_captura
BTFSS PIR1, CCP1IF
GOTO Evento_captura
;
; Si llegamos aquí es que se han producido 4 flancos de subida en el pin CCP1
;
BCF PIR1, CCP1IF ; Se debe limpiar el flag para una nueva comparación
Módulos CCP
©ATE-Universidad de Oviedo
9
REGISTROS ASOCIADOS CON EL MÓDULO CCP EN MODO
CAPTURA
Módulos CCP
©ATE-Universidad de Oviedo
10
MODO COMPARACION
• En modo comparación, el valor de 16 bits almacenado en los registros CCPRx es comparado
continuamente con el valor de los registros del TMR1. Cuando se produce una igualdad, el pin
CCPx puede experimentar o no un evento, que puede ser:
• Puesta a “1”.
• Puesta a “0”.
• Sin cambio.
• El evento viene fijado por el valor de los bits CCPxM3:CCPxM0 (CCPxCON<3:0>) (véase 4ª
transparencia de esta presentación).
• Al mismo tiempo que se produce un evento en el pin se puede producir una interrupción ya
que el flag CCPxIF (de PIR1 ó PIR2) se pone a “1”.
• TMR1 debe estar funcionando en
modo temporizador ó modo contador
síncrono para que el módulo CCP
funcione correctamente en el modo
comparación. En modo contador
asíncrono, el modo comparación no
funciona.
Módulos CCP
©ATE-Universidad de Oviedo
11
Q S
R
Lógica de
salida
CCPRxH CCPRxL
TMR1H TMR1L
CCPxCON<3:0>
TRISC<2>
CCPxIF ← 1
RCy / CCPx
Coincidencia
Comparador
Lanza acción
especial
T1SYNC
Reloj internoT1CKPS1:T1CKPS0TMR1CS
Prescaler
1 , 2 , 4 , 8
2
Detección de
sincronización
1
0
fOSC/4
Reloj
interno
T1OSCEN
Habilita
oscilador
T1OSC
RC0
T1OSO
T1CKl
RC1
T1OSI
CCP2
1
0
TMR1ON
On/off
Módulo CCP
Módulo TMR1
Configuraciones para modo Comparación
Módulos CCP
©ATE-Universidad de Oviedo
12
MODO COMPARACION
• CONFIGURACION DEL PIN CCPx PARA MODO COMPARACION: El pin CCPx que quiera
verse modificado debe configurarse como salida, limpiando el bit del registro TRISC
correspondiente. En el momento que se selecciona el modo de comparación deseado, el pin CCP
se pone al nivel contrario al que tiene que cambiar cuando se produzca la igualdad entre los
registros CCPRx y TMR1. Si la igualdad no afecta al pin CCPx, este tendrá el valor que se le
haya dado previamente en el registro PORTC.
• MODO INTERRUPCION SOFTWARE: En este modo, el pin CCPx no se ve afectado, solo se
activará al flag CCPxIF a 1 y se generará la interrupción si está habilitada.
• MODO DISPARO DE EVENTO ESPECIAL: Cuando se produce la igualdad, el registro TMR1
se resetea convirtiéndose por tanto, en un registro que marca la periodicidad del evento. En
el caso del módulo CCP2, además de resetear el TMR1 se lanza una nueva conversión A/D (si
el módulo de conversión A/D está activo) permitiendo programar la conversión A/D a periodos
de tiempo fijos.
• FUNCIONAMIENTO EN MODO DORMIDO: Al no funcionar el TMR1 (modo síncrono) en
modo dormido, el módulo CCP en modo comparación no funciona. El pin CCPx tendrá el valor
que tenía antes de entrar en modo SLEEP y “despertará” con ese valor.
• TRAS UN RESET: El módulo CCP está apagado.
Módulos CCP
©ATE-Universidad de Oviedo
13
EJEMPLO DE INICIALIZACIÓN EN MODO COMPARACION
CLRF CCP1CON ; Modulo CCP1 OFF
CLRF TMR1H ; limpio TMR1H
CLRF TMR1L ; limpio TMR1L
;aquí podriamos cargar el valor de la comparación en CCPR1H y CCPR1L
CLRF INTCON ; Deshabilito interrupciones
BSF STATUS, RP0 ; Banco 1
BCF TRISC, CCP1 ; Pin RC2/CCP1 SALIDA
CLRF PIE1 ; Deshabilito interrupciones de perifericos
BCF STATUS, RP0 ; Banco 0
CLRF PIR1 ; limpio flags de interrupciones de periféricos
MOVLW 0x08 ; Modo comparación, a 1 el pin CCP1 cuando se iguale
MOVWF CCP1CON ;
BSF T1CON, TMR1ON ; Timer 1 ON
; En este ejemplo no usamos la interrupciones del CCP1
; se muestrea el flag de CCP para detectar cuando se produce la igualdad de la comparación
; Si se quisiera utilizar interrupciones habría que habilitarlas en el proceso de inicialización
Evento_comparacion
BTFSS PIR1, CCP1IF
GOTO Evento_comparación
;
; Si llegamos aquí es que se ha producido una igualdad entre TMR1 y CCP1RH:CCP1RL
;
BCF PIR1, CCP1IF ; Se debe limpiar el flag para una nueva comparación
Módulos CCP
©ATE-Universidad de Oviedo
14
REGISTROS ASOCIADOS CON EL MÓDULO CCP EN
MODO COMPARACIÓN
Módulos CCP
©ATE-Universidad de Oviedo
15
MODO PWM
• En modo PWM (MODULACIÓN DE ANCHO DE PULSO - Pulse Width Modulation), el objetivo
es obtener a través de alguna de las patillas CCPx una forma de onda como la mostrada en la
figura donde tanto el periodo como el ciclo de trabajo (Duty cycle) puede variar con el
objetivo, por ejemplo, de regular la velocidad de un motor, la luminosidad de una bombilla,
etc.
• El periodo de la señal viene fijado por la configuración de TMR2 y por el contenido del
registro PR2 (0x92). Este registro de 8 bits contiene los 8 bits más significativos de una
cuenta de 10 bits.
• El ciclo de trabajo o ciclo útil (duty cycle) viene definido por el contenido del valor del
registro CCPRxL junto con los bits CCP1CON<5:4> antes de comenzar un nuevo periodo.
•El temporizador base con el que se compara el contenido de estos registros es el TMR2.
TMR2 = 0
TMR2 = PR2
TMR2 = D
T
D
Módulos CCP
©ATE-Universidad de Oviedo
16
MODO PWM
• PERIODO DE LA ONDA PWM:
Se calcula utilizando la siguiente fórmula:
Cuando TMR2 es igual a PR2, en el siguiente
incremento de ciclo se producen tres acciones:
• El TMR2 se resetea.
• El pin CCPx se pone a 1. Salvo si el ciclo de
trabajp esta fijado a 0 donde el pin CCPx no se
pondrá a 1 nunca (el biestable RS es de
borrado prioritario).
• El nuevo ciclo de trabajo es cargado desde el
registro CCPRxL al registro CCPRxH que es el
que realmente se compara con el TMR2 para
fijar el ciclo ce trabajo.
T = (PR2 + 1) · 4 · TOSC · PRESCALERTMR2
Módulos CCP
©ATE-Universidad de Oviedo
17
MODO PWM
CICLO DE TRABAJO DE LA ONDA PWM:
• El ciclo de trabajo viene definido por el valor
que se carga en el registro CCPR1L (8bits más
significativos) junto con los bits CCP1CON<5:4>
(2 bits menos significativos). Por tanto se
consigue una resolución de 10 bits
(DCxB9:DCxB0). La siguiente ecuación se utiliza
para calcular el ciclo de trabajo (duty cycle) de
la onda PWM:
• Los registros CCPR1L y los bits
CCP1CON<5:4> pueden escribirse en cualquier
instante de tiempo, pero no se cargan en
CCPR1H y por tanto, no tiene efecto, hasta
que finalice el periodo de la onda PWM actual.
• Si el ciclo de trabajo de la onda PWM es
mayor que el periodo, la señal que sale por la
patilla CCPx está siempre a 1.
T ON = (CCPRxL:CCPxCON<5:4>) · TOSC · PRESCALERTMR2
Módulos CCP
©ATE-Universidad de Oviedo
18
TRISC<y>
RCy/CCPx
R Q
S
CCPRxL
CCPxCON<5:4>
TMR2 ← 0
CCPx ← 1 (si D≠0)
CCPRxH ← CCPRxL
(*) TMR2 se concatena con
un reloj interno de 2 bits
con frecuencia fosc para
poder crear una base de
tiempos de 10 bits
Registros de Duty Cycle
Comparador
TMR2 (*)
Comparador
PR2
CCPRxH (esclavo)
T2CKPS1:T2CKPS0
Prescaler
1 , 4 , 16
2
fOSC/4
Reloj
interno
Configuraciones para MODO PWM
Módulo CCP
Módulo TMR2
El postscaler de TMR2 no se utiliza
para determinar la frecuencia PWM
pero sí se puede emplear para contar
periodos completos de esa señal
Módulos CCP
©ATE-Universidad de Oviedo
19
MODO PWM
• La máxima resolución (máximo nº de bits que resultan útiles para definir el ciclo de
trabajo) que se puede obtener para una onda PWM generada en este módulo viene
dada por la siguiente fórmula:
• La siguiente tabla muestra frecuencias y resoluciones que se pueden obtener con un
oscilador de 20 MHz
• La máxima resolución (en tiempo) viene fijada por el prescaler escogido para el
TMR2:
( )
bits
2log
log
Res 2
⎟⎟
⎠
⎞
⎜⎜
⎝
⎛
⋅
= TMRPWM
osc
PSf
f
Nmax * Tosc * Prescaler TMR2 = 1/fPWM
Módulos CCP
©ATE-Universidad de Oviedo
20
MODO PWM
Pasos para configurar el módulo CCP para funcionar en modo PWM:
1. Definir el periodo de la onda PWM escribiendo en el registro PR2.
2. Definir el ciclo de trabajo (tiempo en estado alto) escribiendo en los registros
CCPRxL y en los bits CCPxCON<5:4>.
3. Definir el pin CCPx como salida, poniendo a “0” el bit TRISC<2> (para CCP1) y/o
el bit TRISC<1> (para CCP2).
4. Seleccionar el valor del prescaler del TMR2 y habilitar el TMR2 por puesta a 1
del nit TMR2ON (T2CON<2>).
5. Configurar el módulo CCP1 para funcionar en modo PWM
En modo SLEEP, el TMR2 no se incrementa y por tanto el estado del módulo CCP no
cambia. Si el pin CCPx está a un determinado nivel (0 ó 1) cuando se ejecuta la
instrucción SLEEP, el pin continuará en ese valor y se despertará con ese valor.
No se puede generar una onda periódica en esa situación
Módulos CCP
©ATE-Universidad de Oviedo
21
Ejemplo:
Cálculo de PR2 para obtener una onda PWM cuya frecuencia sea de 78,125 kHz. La
Fosc es de 20 MHz y el prescaler del TMR2 = 1.
1/78,125kHz = [(PR2)+1] * 4 * 1/20MHz * 1
12,8us = [(PR2)+1] * 4 * 50ns * 1 PR2 = 63
Encontrar la máxima resolución del ciclo de trabajo que puede usarse con una frecuencia
PWM de 78,125 KHz y un oscilador de 20 MHz
TPWM = 2N * TOSC 1/78,125kHz = 2N * 1/20MHz * 1 12,8 us = 2N * 50 ns * 1
256 = 2N N= 8
MODO PWM
Por tanto, un ciclo de trabajo con una resolución de 8 bits es la que se obtiene si se
quiere obtener una onda PWM de 78,125 kHz de frecuencia con un oscilador de 20
MHz.
Es decir los valores a cargar para el ciclo de trabajo estan en el margen 0 ≤
DCxB9:DCxB0 ≤ 255. Cualquier valor mayor de 255 provocará que el ciclo de trabajo sea
del 100% del periodo de la onda PWM.
La resolución será mayor si la frecuencia de la onda PWM es menor. Si la frecuencia
crece, la resolución decrece.
Módulos CCP
©ATE-Universidad de Oviedo
22
EJEMPLO DE INICIALIZACIÓN EN MODO PWM
; Suponemos T2CON a 00h, por tanto, prescaler a 1 y apagado. Suponemos oscilador de 20 MHz
CLRF CCP1CON ; Módulo CCP off
CLRF TMR2 ; limpio Timer2
MOVLW 0x7F ; PR2 = 7Fh = 127
MOVWF PR2 ; PeriodoPWM= (127 + 1) * 4 * 50ns * 1 = 25,6 us
MOVLW 0x1F ; 8 bits altos del registro del duty a b’00011111’
MOVWF CCPR1L ;
CLRF INTCON ; Deshabilito interrupciones
BSF STATUS, RP0 ; Banco 1
BCF TRISC, PWM1 ; Pin RC2/CCP1 salida PWM
CLRF PIE1 ; Deshabilito interrupciones de periféricos
BCF STATUS, RP0 ; Banco 0
CLRF PIR1 ; Limpio flags de periféricos
MOVLW 0x2C ; modo PWM, 2 LSBs del duty a b’10’
MOVWF CCP1CON ; registro del duty b’0001111110’ = 126d
;por tanto duty = 126 * 50ns * 1 = 6,3 us 6,3us/25,6us = 24,6% de duty
BSF T2CON, TMR2ON ; Timer2 ON
;
; La interrupción de CCP1 no está activa en este modo PWM
; el final del periodo se detecta por muestreo del TMR2IF
;
Periodo_PWM
BTFSS PIR1, TMR2IF
GOTO Periodo_PWM
;OJO, solo se detecta el final del periodo si el postscaler del TMR2 está a 1:1
BCF PIR1, TMR2IF
En el modo PWM
los flags CCP1IF
y CCP2IF no se
utilizan
Módulos CCP
©ATE-Universidad de Oviedo
23
REGISTROS ASOCIADOS CON EL MÓDULO CCP EN
MODO PWM
Módulos CCP
©ATE-Universidad de Oviedo
24
Características eléctricas del módulo CCP
Entrada en
modo captura
Salida en modo
comparación o PWM
Módulos CCP
©ATE-Universidad de Oviedo
25
Ejemplo de uso del módulo CCP – modo PWM
para la generacion de un “ring” de llamada telefónica
Se trata de realizar el diseño del programa encargado de generar el “ring de
llamada de un teléfono”. Para eso empleamos el módulo CCP1 de un PIC16F877 y la
placa de prácticas que dispone de un zumbador cuyo esquema eléctrico aparece a
continuación (el jumper J9 debe estar puesto).
Se emplea un oscilador de 4MHz para el microcontrolador.
Módulos CCP
©ATE-Universidad de Oviedo
26
GENERACION DE UN RING TELEFÓNICO
320Hz....Silencio480Hz320Hz......480Hz320Hz480Hz320Hz
25ms25ms25ms25ms25ms25ms25ms25ms
1s
(sonido)
2s1s (sonido)
El timbre de llamada consistirá en un intervalo de 1s de sonido (en el
que se van alternando dos tonos de 320Hz y de 480Hz durante 25ms
cada uno), seguido de un intervalo de silencio de 2s y así
sucesivamente.
Módulos CCP
©ATE-Universidad de Oviedo
27
Planteamiento:
Se utiliza el módulo CCP1 en modo PWM para generar dos ondas cuadradas con frecuencias de emisión
320Hz y 480Hz. Para reducir armónicos, se hace que éstas ondas sean cuadradas (t en estado alto = t
en estado bajo)
Se utiliza el temporizador TMR0 para temporizar intervalos de 25ms, mediante interrupción. Un
segundo se contabiliza por 40 interrupciones de TMR0 y 2 segundos por 80 interrupciones de TMR0.
Cuando entra una interrupción, se evalúa el estado actual y las posibles modificaciones en el mismo de
acuerdo con el siguiente diagrama de estados:
GENERACION DE UN RING TELEFÓNICO
Estado 0
Silencio
CCP1 inactivo
Estado 1
PWM generando 320Hz
80 interrupciones de
TMR0 (2s) en Estado 0
Estado 2
PWM generando 480Hz
Interrupción de TMR0
(25µs)
Interrupción de TMR0
(25µs)
40 interrupciones de
TMR0 (1s) en Estados 1
ó 2
Módulos CCP
©ATE-Universidad de Oviedo
28
Cálculos: Modo PWM
Frecuencia: 1/frecuencia = (4/fosc) * Prescaler TMR2 * (PR2+1)
Con fosc=4MHz
Prescaler TMR2 = 16 (elegido)
Resulta: para 320Hz PR2= 194 (0xC2)
para 480Hz PR2=129 (0x81)
Ancho de pulso (tiempo en estado alto):
1/(2*frecuencia) = (1/fosc) * Prescaler TMR2 * (CCPR1L+2bits)
Tomamos los 2 bits de menor peso a cero
Resultando: para 320Hz CCPR1L = 97 (0x61)
para 480Hz CCPR1L = 65 (0x41)
TMR0:
Para temporizar 25ms = (4/fosc) * Prescaler TMR0 * (256-Precarga)
Resulta: Precarga = 158 (0x9E)
GENERACION DE UN RING TELEFÓNICO
Módulos CCP
©ATE-Universidad de Oviedo
29
Algoritmo utilizado –PROGRAMA PRINCIPAL:
•INICIALIZACIÓN
•Puertos: PORTC con RC2 como salida
•TMR0 como temporizador y prescaler de 256
•Carga de PR2 para generar 320Hz (0xC2)
•CCP1 en modo PWM
•TMR2 con prescaler de 16
•Inicializamos variable ESTADO con código de onda de 320Hz
•Ponemos a cero CONTADOR de interrupciones
•Cargamos registro de ancho del pulso (duty) CCPR1L (0x61)
•Precarga de TMR0 para desbordar tras 25ms (0x9E)
•Borramos flag T0IF y activamos interrupciones de TMR0
•Ponemos en marcha TMR2
•BUCLE PRINCIPAL INFINITO
(Del que sólo se saldrá por interrupción debida a TMR0)
GENERACION DE UN RING TELEFÓNICO
Módulos CCP
©ATE-Universidad de Oviedo
30
INICIO bsf STATUS,RP0 ;Paso al banco 1
bcf TRISC,2 ;Defino pin RC2/CCP1 como salida
; Para temporizar 25ms con TMR0: 25ms = (4/4MHz)* 256 * (256-158)
; precarga de TMR0: 158 (0x9E)
movlw b'00000111' ;TMR0 modo temporizador
movwf OPTION_REG ;y prescaler de 256
; 1/320Hz = (PR2+1)* Prescaler_TMR2 (=16) * 4/4MHz ---> PR2= 194 (0xC2)
movlw 0xC2 ;Cargo PR2 para 320Hz
movwf PR2 ;aprovecho que estamos en banco 1
bcf STATUS,RP0 ;Vuelvo al banco 0
movlw b'00001111' ;Definimos CCP1
movwf CCP1CON ;en modo PWM
movlw b'00000011' ;Defino TMR2 con prescaler 16
movwf T2CON ;y parado al principio
movlw 0x01 ;Inicializo señal PWM de f=320Hz
movwf ESTADO ;en variable ESTADO
clrf CONTADOR ;Pongo a 0 contador de interrupciones
; Registro de duty: 1/(2*320Hz)=(CCPR1L_2bits) * PrescalerTMR2 * 1/4MHz
; CCPR1L=97 (0x61)
movlw 0x61 ;Cargo registro de duty
movwf CCPR1L ;para ton = 1/(2*320Hz)
movlw 0x9E ;Precargo TMR0
movwf TMR0 ;para que desborde tras 25ms
movlw b'10100000' ;Pongo a 0 flag de TMR0 y activo
movwf INTCON ;sus interrupciones
bsf T2CON,TMR2ON ;Pongo en marcha TMR2
BUCLE goto BUCLE ;Bucle infinito en espera de interrupción
Módulos CCP
©ATE-Universidad de Oviedo
31
Algoritmo utilizado para Tratamiento de INTERRUPCION:
Se comprueba que T0IF=1 si no está a 1, salimos de inmediato
Salvamos el contexto del programa ppal. (W y STATUS)
Precargamos TMR0 puesto que desbordó
Incrementamos CONTADOR de interrupciones
Verificamos ESTADO actual para evaluar posibles cambios
Si ESTADO==0 (silencio) y CONTADOR == 80 (2s)
ponemos CONTADOR a cero
cambiamos ESTADO a 1 (onda de 320Hz)
activamos módulo CCP en PWM
cargamos PR2 y CCPR1L adecuadamente para 320Hz
Si ESTADO ==1 (onda 320Hz)
cambiamos ESTADO a 2 (onda de 480Hz)
cargamos PR2 y CCPR1L adecuadamente para esa frecuencia
Si ESTADO ==2 (onda 480Hz)
cambiamos ESTADO a 1 (onda de 320Hz)
cargamos PR2 y CCPR1L para generar 320Hz
Si ESTADO era 1 ó 2
Si CONTADOR ==40 (ha pasado 1s emitiendo)
ponemos CONTADOR a cero
cambiamos ESTADO a 0 (silencio)
desactivamos CCP2
Ponemos a cero el flag de TMR0 (T0IF)
Recuperamos contexto del programa ppal. (W y STATUS)
Retornamos del programa de tratamiento de interrupción
Módulos CCP
©ATE-Universidad de Oviedo
32
PTI btfss INTCON,T0IF ;Si entramos aquí por otro motivo
retfie ;distinto a T0IF=1 salimos de inmediato
movwf W_temp ;Salvamos el registro W
swapf STATUS,W ;y el registro STATUS por
movwf ST_temp ;si acaso se manipulan para el principal
movlw 0x9E ;Precargamos de nuevo TMR0
movwf TMR0 ;para otros 25ms
incf CONTADOR,F ;Incrementamos el Contador de 25ms
;Ahora miramos en qué estado estábamos
movf ESTADO,F ;Comparamos ESTADO con 0
btfsc STATUS,Z
goto SILENCIO ;Si era el 0 es de Silencio
movf ESTADO,W ;Comparamos ESTADO con 0x01
xorlw 0x01
btfsc STATUS,Z
goto A_320Hz ;Si era el 1 estaba a 320HZ
movf ESTADO,W ;Comparamos estado con 2
xorlw 0x02
btfsc STATUS,Z
goto A_480Hz ;Si era el 2 estaba a 480Hz
goto SALIR_PTI ;Si no era ninguno de los conocidos salimos
RUTINADEINTERRUPCION
Módulos CCP
©ATE-Universidad de Oviedo
33
SILENCIO
movf CONTADOR,W ;Si el ESTADO era de Silencio, salimos
xorlw d'80' ;al cabo de 2s (80 interrupciones)
btfss STATUS,Z
goto SALIR_PTI ;si no llegamos a 80 salimos sin cambiar
clrf CONTADOR ;si ya pasaron 2s borramos contador
movlw 0x01 ;y cargamos 0x01 para codificar el
movwf ESTADO ;paso a ESTADO de 320Hz
movlw b'00001111' ;Activamos el módulo CCP en modo PWM
movwf CCP1CON ;de nuevo si había que cambiar
bsf STATUS,RP0
movlw 0xC2 ;Cargo PR2 para 320Hz
movwf PR2 ;PR2 está en banco 1
bcf STATUS,RP0
movlw 0x61 ;Cargo también registro de duty
movwf CCPR1L ;para ton = 1/(2*320Hz)
goto SALIR_PTI ;Vamos a salir de la interrupción
RUTINADEINTERRUPCION
Módulos CCP
©ATE-Universidad de Oviedo
34
A_320Hz movlw 0x02 ;El Estado era de generar onda
movwf ESTADO ;de 320Hz, tenemos que cambiar a 480Hz
; 1/480Hz = (PR2+1)* Prescaler_TMR2 (=16) * 4/4MHz ---> PR2= 129 (0x81)
bsf STATUS,RP0
movlw 0x81 ;Precarga de PR2 para 480Hz
movwf PR2
bcf STATUS,RP0
; Registro de duty: 1/(2*480Hz)=(CCPR1L_2bits) * PrescalerTMR2 * 1/4MHz
; CCPR1L=65 (0x41)
movlw 0x41 ;Cargamos el Ton también
movwf CCPR1L ;para la mitad del periodo
goto FIN_TONOS
A_480Hz movlw 0x01 ;El Estado era generando onda de 480Hz
movwf ESTADO ;hay que cambiar de Estado a 320Hz
bsf STATUS,RP0
movlw 0xC2 ;Modificamos PR2 para 320Hz
movwf PR2
bcf STATUS,RP0
movlw 0x61 ;Cargamos también Ton
movwf CCPR1L
RUTINADEINTERRUPCION
Módulos CCP
©ATE-Universidad de Oviedo
35
FIN_TONOS ;Parte final común de emisión
movf CONTADOR,W ;Comparamos contador con 40
xorlw d'40' ;para ver si ha pasado ya 1 segundo
btfss STATUS,Z
goto SALIR_PTI ;Si no hemos llegado, salimos
clrf CONTADOR ;si ya hemos llegado ponemos a 0 CONTADOR
clrf ESTADO ;pasamos a estado de Silencio
bcf PORTC,1 ;y anulamos salida
clrf CCP1CON ;Desactivamos el módulo CCP2 en silencio
SALIR_PTI
bcf INTCON,T0IF ;ponemos a cero el flag para la sig. interrupción
swapf ST_temp,W ;Recuperamos el registro STATUS con un SWAPF
movwf STATUS
swapf W_temp,F ;Recuperamos también el W con dos SWAPF
swapf W_temp,W
retfie ;Retornamos de programa de tratamiento de
;interrupción
RUTINADEINTERRUPCION

Más contenido relacionado

La actualidad más candente (20)

Módulo EUSART del PIC16F887
Módulo EUSART del PIC16F887Módulo EUSART del PIC16F887
Módulo EUSART del PIC16F887
 
Clase Timer 1
Clase Timer 1Clase Timer 1
Clase Timer 1
 
Timer 0 - Pic16F877A
Timer 0 - Pic16F877ATimer 0 - Pic16F877A
Timer 0 - Pic16F877A
 
Clase USART
Clase USARTClase USART
Clase USART
 
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
 
Guía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupcionesGuía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupciones
 
Micro2 tema 3
Micro2 tema 3Micro2 tema 3
Micro2 tema 3
 
Ccp2009170309
Ccp2009170309Ccp2009170309
Ccp2009170309
 
Curso Micro Tema 4
Curso Micro Tema 4Curso Micro Tema 4
Curso Micro Tema 4
 
Interrupciones y Temporizadores pucesi
Interrupciones y Temporizadores   pucesiInterrupciones y Temporizadores   pucesi
Interrupciones y Temporizadores pucesi
 
Curso Micro Tema 3 2
Curso Micro Tema 3 2Curso Micro Tema 3 2
Curso Micro Tema 3 2
 
Timers
TimersTimers
Timers
 
Modulo Timer 0 del PIC16F887
Modulo Timer 0 del PIC16F887Modulo Timer 0 del PIC16F887
Modulo Timer 0 del PIC16F887
 
Microprogramacion - Interrupciones y timers
Microprogramacion - Interrupciones y timersMicroprogramacion - Interrupciones y timers
Microprogramacion - Interrupciones y timers
 
Pwm
PwmPwm
Pwm
 
4. interrupciones y temporizadores
4. interrupciones y temporizadores4. interrupciones y temporizadores
4. interrupciones y temporizadores
 
Pic16f877 guia detallada parte2
Pic16f877 guia detallada parte2Pic16f877 guia detallada parte2
Pic16f877 guia detallada parte2
 
Conversor ADC
Conversor ADCConversor ADC
Conversor ADC
 
UNIDAD IV
UNIDAD IVUNIDAD IV
UNIDAD IV
 
Timer0 PIC16F84A
Timer0 PIC16F84ATimer0 PIC16F84A
Timer0 PIC16F84A
 

Similar a Modulos ccp v2(ring telefono)

Curso de microcontroladores capitulo 07
Curso de microcontroladores capitulo 07Curso de microcontroladores capitulo 07
Curso de microcontroladores capitulo 07Hamiltonn Casallas
 
Compare capture pwm mode 5
Compare capture pwm mode 5Compare capture pwm mode 5
Compare capture pwm mode 5georgemanson69
 
Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Hamiltonn Casallas
 
Curso de microcontroladores capitulo 09
Curso de microcontroladores capitulo 09Curso de microcontroladores capitulo 09
Curso de microcontroladores capitulo 09Hamiltonn Casallas
 
Introducción pic 16 f 84 universidad de la marina mercante
Introducción pic 16 f 84   universidad de la marina mercanteIntroducción pic 16 f 84   universidad de la marina mercante
Introducción pic 16 f 84 universidad de la marina mercanteDaniel Remondegui
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativosjbersosa
 
Usart PIC config LANDA
Usart PIC config LANDAUsart PIC config LANDA
Usart PIC config LANDAdave
 
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizadorLab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizadorDaniel Pardo
 
TEMA 5 PROGRAMACION DEL MODULO CCP DEL MICROCONTROLADOR.pdf
TEMA 5 PROGRAMACION DEL MODULO CCP DEL MICROCONTROLADOR.pdfTEMA 5 PROGRAMACION DEL MODULO CCP DEL MICROCONTROLADOR.pdf
TEMA 5 PROGRAMACION DEL MODULO CCP DEL MICROCONTROLADOR.pdfCocosAlbertoPalmeraz
 
Curso de microcontroladores capitulo 12
Curso de microcontroladores capitulo 12Curso de microcontroladores capitulo 12
Curso de microcontroladores capitulo 12Hamiltonn Casallas
 
Introducpic2
Introducpic2Introducpic2
Introducpic2conalep
 
Introducpic
IntroducpicIntroducpic
Introducpicconalep
 

Similar a Modulos ccp v2(ring telefono) (20)

Curso de microcontroladores capitulo 07
Curso de microcontroladores capitulo 07Curso de microcontroladores capitulo 07
Curso de microcontroladores capitulo 07
 
Compare capture pwm mode 5
Compare capture pwm mode 5Compare capture pwm mode 5
Compare capture pwm mode 5
 
Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06
 
Curso de microcontroladores capitulo 09
Curso de microcontroladores capitulo 09Curso de microcontroladores capitulo 09
Curso de microcontroladores capitulo 09
 
Introducción pic 16 f 84 universidad de la marina mercante
Introducción pic 16 f 84   universidad de la marina mercanteIntroducción pic 16 f 84   universidad de la marina mercante
Introducción pic 16 f 84 universidad de la marina mercante
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Niple diapopsitiva
Niple   diapopsitivaNiple   diapopsitiva
Niple diapopsitiva
 
Niple diapopsitiva
Niple   diapopsitivaNiple   diapopsitiva
Niple diapopsitiva
 
Niple diapopsitiva
Niple   diapopsitivaNiple   diapopsitiva
Niple diapopsitiva
 
Usart PIC config LANDA
Usart PIC config LANDAUsart PIC config LANDA
Usart PIC config LANDA
 
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizadorLab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
 
Ejercicio 07 Timers
Ejercicio 07 TimersEjercicio 07 Timers
Ejercicio 07 Timers
 
TEMA 5 PROGRAMACION DEL MODULO CCP DEL MICROCONTROLADOR.pdf
TEMA 5 PROGRAMACION DEL MODULO CCP DEL MICROCONTROLADOR.pdfTEMA 5 PROGRAMACION DEL MODULO CCP DEL MICROCONTROLADOR.pdf
TEMA 5 PROGRAMACION DEL MODULO CCP DEL MICROCONTROLADOR.pdf
 
In terrupciones pic
In terrupciones picIn terrupciones pic
In terrupciones pic
 
Compilador CCS.ppt
Compilador CCS.pptCompilador CCS.ppt
Compilador CCS.ppt
 
Adc y usart pic16 f887
Adc y usart pic16 f887Adc y usart pic16 f887
Adc y usart pic16 f887
 
Curso de microcontroladores capitulo 12
Curso de microcontroladores capitulo 12Curso de microcontroladores capitulo 12
Curso de microcontroladores capitulo 12
 
Introducpic2
Introducpic2Introducpic2
Introducpic2
 
Introducpic
IntroducpicIntroducpic
Introducpic
 
final PWM
final PWMfinal PWM
final PWM
 

Último

Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 

Último (19)

Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 

Modulos ccp v2(ring telefono)

  • 1. Módulos CCP ©ATE-Universidad de Oviedo 1 Módulos CCP ©ATE-Universidad de Oviedo 2 MÓDULO CCP (Captura/Comparación/PWM) • Un microcontrolador de la gama media de los PIC16 puede tener hasta 2 módulos CCP. • Cada módulo CCP tiene un registro de 16 bits que se puede utilizar de 3 formas distintas: 1. Como registro de 16 bits para captura de tiempo al producirse un evento. 2. Como registro de 16 bits para compararlo con el valor de cuenta del temporizador TMR1, pudiendo provocar un evento cuando se alcanza el valor contenido en este registro. 3. Como registro de 10 bits del ciclo de trabajo de una señal PWM generada por el microcontrolador. • Los 2 módulos CCP disponibles se comportan casi idénticamente, salvo el caso del funcionamiento por disparo de evento especial (special event trigger) que tiene una pequeña diferencia si se trata del módulo CCP1 ó del módulo CCP2. • Tras un reset, el módulo CCP está apagado (al forzar los bits de configuración al valor 0). • En las siguientes transparencias se describirá el funcionamiento de CCP1. El funcionamiento de CCP2 es idéntico (salvo la excepción indicada anteriormente) pero cada uno tiene sus propios registros de carga y configuración (véase tabla adjunta).
  • 2. Módulos CCP ©ATE-Universidad de Oviedo 3 La siguiente tabla muestra qué temporizadores utiliza el módulo CCP en cada uno de sus modos de funcionamiento: MÓDULO CCP (Captura/Comparación/PWM) La siguiente tabla muestra las posibles interacciones entre los módulos CCP, donde CCPx es uno de los módulos y CCPy es el otro: Módulos CCP ©ATE-Universidad de Oviedo 4 CCPxCON -- CCP1CON (17h) Y CCP2CON (1Dh): Registros de control de cada módulo CCP bit 7-6 No implementados: Leídos como ‘0’. bit 5-4 DCxB1:DCxB0: Bits 0 y 1 del valor que fija el ciclo de trabajo en el modo PWM. Modo Captura: No se usa Modo Comparación: No se usa Modo PWM: Estos bits son los 2 LSBs para el ciclo de trabajo. Los 8 bits más significativos están en CCPRxL. bit 3-0 CCPxM3:CCPxM0: Bits de selección del modo de funcionamiento del módulo CCPx: 0000= Captura/Comparación/PWM off (resetea el módulo CCPx) 0100= Modo Captura, cada flanco de bajada 0101= Modo Captura, cada flanco de subida 0110= Modo Captura, cada 4 flancos de subida 0111= Modo Captura, cada 16 flancos de subida 1000= Modo comparación, el pin CCPx se pone a “1” cuando TMR1 alcanza el valor del registro de 16 bits (CCPRxH:CCPRxL). El bit CCPIF se pone a 1. 1001= Modo comparación, el pin CCPx se pone a “0” cuando TMR1 alcanza el valor del registro de 16 bits (CCPRxH:CCPRxL). El bit CCPIF se pone a 1. 1010= Modo comparación, generación de interrupción software cuando se produce la igualdad. CCPIF se pone a 1. El pin CCPx no se ve afectado. 1011= Modo comparación, generación de disparo de evento especial (special event trigger). CCPIF se pone a 1. El pin CCPx no se ve afectado. CCP1 resetea el TMR1; CCP2 resetea el TMR1 y lanza una conversión A/D nueva (si el módulo del conversor A/D está habilitado. 11xx= modo PWM
  • 3. Módulos CCP ©ATE-Universidad de Oviedo 5 MODO CAPTURA • En modo Captura, los registros CCPRxH:CCPRxL toman el valor de 16 bits que tenga el TMR1 cuando se produce un determinado evento en el pin CCPx (RC2/CCP1 para el módulo CCP1 y RC1/T1OSI/CCP2 para el módulo CCP2). Los posibles eventos son: • Cada flanco de bajada. • Cada flanco de subida. • Cada 4 flancos de subida. • Cada 16 flancos de subida. El evento se configura con los bits CCPxM3:CCPxM0 de los registros CCP1CON y CCP2CON respectivamente. • El bit CCP1IF (PIR1<2>) ó CCP2IF (PIR2<0>) se ponen a “1” cuando se produce el evento configurado, pudiendo provocar un salto a la rutina de interrupción. El correspondiente flag debe limpiarse por software. • Si se produce otra captura antes de que se lea el valor del registro CCPRx, el último valor sobreescribe el valor anterior (que se pierde). • En modo captura, el pin RC2/CCP1 y/o el pin RC1/T1OSI/CCP2 deben configurarse como entrada por puesta a uno de los bits TRISC<2> y TRISC<1> respectivamente. Si el bit RC2/TRISC1 y/o RC1/CCP2 se configura como salida, una escritura a este pin del puerto podría originar una captura. ¿ Cuenta ? Módulos CCP ©ATE-Universidad de Oviedo 6 Prescaler ÷ 1 , 4 , 16 Detección de flanco y CCPRxH CCPRxL TMR1H TMR1L CCPxCON<3:0> Qs CCPxIF ← 1 RCy/CCPx Captura T1SYNC Reloj internoT1CKPS1:T1CKPS0 TMR1ON On/off TMR1CS Prescaler 1 , 2 , 4 , 8 Entrada de reloj sincronizada 2 Detección de sincronización 1 0 fOSC/4 Reloj interno 0 1 T1OSCEN Habilita oscilador T1OSC RC0 T1OSO T1CKl RC1 T1OSI CCP2 Módulo CCP Módulo TMR1 MODO CAPTURA: Hay que configurar módulo CCP y módulo TMR1
  • 4. Módulos CCP ©ATE-Universidad de Oviedo 7 MODO CAPTURA • FUNCIONAMIENTO DEL TMR1 PARA EL MODO CAPTURA: El TMR1 debe estar corriendo en modo temporizador ó en modo contador síncrono para que el módulo CCP produzca la comparación. No puede funcionar en modo contador asíncrono. • CAMBIO ENTRE MODOS CAPTURA: Si se cambia de un modo captura (p.e. de 4 flancos) a otro (p.e. de cada flanco), el cambio puede generar una falsa interrupción. El usuario debe por software limpiar el bit CCPxIE para deshabilitar las interrupciones, limpiar el flag CCPxIF y luego cambiar el modo de captura. El cambio entre dos modos captura debe realizarse según el siguiente subprograma: CLRF CCP1CON ; Apaga el módulo CCP MOVLW NEW_CAPT_PS ; Preparo en W el nuevo prescaler y preparo CCP ON MOVWF CCP1CON ; Cargo CCP1CON el valor • CONTADOR DE FLANCOS DEL CCP (PRESCALER DEL CCP): Si en medio de una cuenta de 4 ó 16 flancos de subida se apaga el módulo CCP o se pasa a un modo que no sea el modo Captura (mediante los bits CCPxM3:CCPxM0), el prescaler del CCP se resetea. • FUNCIONAMIENTO EN MODO DORMIDO: En modo dormido, el TMR1 no se incrementa (esta en modo síncrono ó temporizador). Pero, el prescaler del CCP sí puede continuar incrementando el contador de eventos y cuando llega al valor configurado pone el bit CCPxF a “1” provocando que el micro se “despierte”. No obstante, el contenido del TMR1 se transfiere a los CCPR pero el TMR1 no se ha visto incrementado y por tanto, el valor cargado no tiene un significado dado. Módulos CCP ©ATE-Universidad de Oviedo 8 EJEMPLO DE INICIALIZACIÓN EN MODO CAPTURA CLRF CCP1CON ; Módulo CCP1 OFF CLRF TMR1H ; limpio TMR1H CLRF TMR1L ; limpio TMR1L CLRF INTCON ; Deshabilito interrupciones BSF STATUS, RP0 ; Banco 1 BSF TRISC, CCP1 ; Pin RC2/CCP1 entrada CLRF PIE1 ; Deshabilito interrupciones de periféricos BCF STATUS, RP0 ; Banco 0 CLRF PIR1 ; limpio flags de interrupciones de periféricos MOVLW 0x06 ; Modo captura, cada 4º flanco de subida MOVWF CCP1CON ; BSF T1CON, TMR1ON ; Timer 1 ON ; En este ejemplo no usamos la interrupciones del CCP1 ; se muestrea el flag de CCP para detectar cuándo se produce una captura ; Si se quisiera utilizar interrupciones habría que habilitarlas en el proceso de ; inicialización ; Evento que provoca una captura Evento_captura BTFSS PIR1, CCP1IF GOTO Evento_captura ; ; Si llegamos aquí es que se han producido 4 flancos de subida en el pin CCP1 ; BCF PIR1, CCP1IF ; Se debe limpiar el flag para una nueva comparación
  • 5. Módulos CCP ©ATE-Universidad de Oviedo 9 REGISTROS ASOCIADOS CON EL MÓDULO CCP EN MODO CAPTURA Módulos CCP ©ATE-Universidad de Oviedo 10 MODO COMPARACION • En modo comparación, el valor de 16 bits almacenado en los registros CCPRx es comparado continuamente con el valor de los registros del TMR1. Cuando se produce una igualdad, el pin CCPx puede experimentar o no un evento, que puede ser: • Puesta a “1”. • Puesta a “0”. • Sin cambio. • El evento viene fijado por el valor de los bits CCPxM3:CCPxM0 (CCPxCON<3:0>) (véase 4ª transparencia de esta presentación). • Al mismo tiempo que se produce un evento en el pin se puede producir una interrupción ya que el flag CCPxIF (de PIR1 ó PIR2) se pone a “1”. • TMR1 debe estar funcionando en modo temporizador ó modo contador síncrono para que el módulo CCP funcione correctamente en el modo comparación. En modo contador asíncrono, el modo comparación no funciona.
  • 6. Módulos CCP ©ATE-Universidad de Oviedo 11 Q S R Lógica de salida CCPRxH CCPRxL TMR1H TMR1L CCPxCON<3:0> TRISC<2> CCPxIF ← 1 RCy / CCPx Coincidencia Comparador Lanza acción especial T1SYNC Reloj internoT1CKPS1:T1CKPS0TMR1CS Prescaler 1 , 2 , 4 , 8 2 Detección de sincronización 1 0 fOSC/4 Reloj interno T1OSCEN Habilita oscilador T1OSC RC0 T1OSO T1CKl RC1 T1OSI CCP2 1 0 TMR1ON On/off Módulo CCP Módulo TMR1 Configuraciones para modo Comparación Módulos CCP ©ATE-Universidad de Oviedo 12 MODO COMPARACION • CONFIGURACION DEL PIN CCPx PARA MODO COMPARACION: El pin CCPx que quiera verse modificado debe configurarse como salida, limpiando el bit del registro TRISC correspondiente. En el momento que se selecciona el modo de comparación deseado, el pin CCP se pone al nivel contrario al que tiene que cambiar cuando se produzca la igualdad entre los registros CCPRx y TMR1. Si la igualdad no afecta al pin CCPx, este tendrá el valor que se le haya dado previamente en el registro PORTC. • MODO INTERRUPCION SOFTWARE: En este modo, el pin CCPx no se ve afectado, solo se activará al flag CCPxIF a 1 y se generará la interrupción si está habilitada. • MODO DISPARO DE EVENTO ESPECIAL: Cuando se produce la igualdad, el registro TMR1 se resetea convirtiéndose por tanto, en un registro que marca la periodicidad del evento. En el caso del módulo CCP2, además de resetear el TMR1 se lanza una nueva conversión A/D (si el módulo de conversión A/D está activo) permitiendo programar la conversión A/D a periodos de tiempo fijos. • FUNCIONAMIENTO EN MODO DORMIDO: Al no funcionar el TMR1 (modo síncrono) en modo dormido, el módulo CCP en modo comparación no funciona. El pin CCPx tendrá el valor que tenía antes de entrar en modo SLEEP y “despertará” con ese valor. • TRAS UN RESET: El módulo CCP está apagado.
  • 7. Módulos CCP ©ATE-Universidad de Oviedo 13 EJEMPLO DE INICIALIZACIÓN EN MODO COMPARACION CLRF CCP1CON ; Modulo CCP1 OFF CLRF TMR1H ; limpio TMR1H CLRF TMR1L ; limpio TMR1L ;aquí podriamos cargar el valor de la comparación en CCPR1H y CCPR1L CLRF INTCON ; Deshabilito interrupciones BSF STATUS, RP0 ; Banco 1 BCF TRISC, CCP1 ; Pin RC2/CCP1 SALIDA CLRF PIE1 ; Deshabilito interrupciones de perifericos BCF STATUS, RP0 ; Banco 0 CLRF PIR1 ; limpio flags de interrupciones de periféricos MOVLW 0x08 ; Modo comparación, a 1 el pin CCP1 cuando se iguale MOVWF CCP1CON ; BSF T1CON, TMR1ON ; Timer 1 ON ; En este ejemplo no usamos la interrupciones del CCP1 ; se muestrea el flag de CCP para detectar cuando se produce la igualdad de la comparación ; Si se quisiera utilizar interrupciones habría que habilitarlas en el proceso de inicialización Evento_comparacion BTFSS PIR1, CCP1IF GOTO Evento_comparación ; ; Si llegamos aquí es que se ha producido una igualdad entre TMR1 y CCP1RH:CCP1RL ; BCF PIR1, CCP1IF ; Se debe limpiar el flag para una nueva comparación Módulos CCP ©ATE-Universidad de Oviedo 14 REGISTROS ASOCIADOS CON EL MÓDULO CCP EN MODO COMPARACIÓN
  • 8. Módulos CCP ©ATE-Universidad de Oviedo 15 MODO PWM • En modo PWM (MODULACIÓN DE ANCHO DE PULSO - Pulse Width Modulation), el objetivo es obtener a través de alguna de las patillas CCPx una forma de onda como la mostrada en la figura donde tanto el periodo como el ciclo de trabajo (Duty cycle) puede variar con el objetivo, por ejemplo, de regular la velocidad de un motor, la luminosidad de una bombilla, etc. • El periodo de la señal viene fijado por la configuración de TMR2 y por el contenido del registro PR2 (0x92). Este registro de 8 bits contiene los 8 bits más significativos de una cuenta de 10 bits. • El ciclo de trabajo o ciclo útil (duty cycle) viene definido por el contenido del valor del registro CCPRxL junto con los bits CCP1CON<5:4> antes de comenzar un nuevo periodo. •El temporizador base con el que se compara el contenido de estos registros es el TMR2. TMR2 = 0 TMR2 = PR2 TMR2 = D T D Módulos CCP ©ATE-Universidad de Oviedo 16 MODO PWM • PERIODO DE LA ONDA PWM: Se calcula utilizando la siguiente fórmula: Cuando TMR2 es igual a PR2, en el siguiente incremento de ciclo se producen tres acciones: • El TMR2 se resetea. • El pin CCPx se pone a 1. Salvo si el ciclo de trabajp esta fijado a 0 donde el pin CCPx no se pondrá a 1 nunca (el biestable RS es de borrado prioritario). • El nuevo ciclo de trabajo es cargado desde el registro CCPRxL al registro CCPRxH que es el que realmente se compara con el TMR2 para fijar el ciclo ce trabajo. T = (PR2 + 1) · 4 · TOSC · PRESCALERTMR2
  • 9. Módulos CCP ©ATE-Universidad de Oviedo 17 MODO PWM CICLO DE TRABAJO DE LA ONDA PWM: • El ciclo de trabajo viene definido por el valor que se carga en el registro CCPR1L (8bits más significativos) junto con los bits CCP1CON<5:4> (2 bits menos significativos). Por tanto se consigue una resolución de 10 bits (DCxB9:DCxB0). La siguiente ecuación se utiliza para calcular el ciclo de trabajo (duty cycle) de la onda PWM: • Los registros CCPR1L y los bits CCP1CON<5:4> pueden escribirse en cualquier instante de tiempo, pero no se cargan en CCPR1H y por tanto, no tiene efecto, hasta que finalice el periodo de la onda PWM actual. • Si el ciclo de trabajo de la onda PWM es mayor que el periodo, la señal que sale por la patilla CCPx está siempre a 1. T ON = (CCPRxL:CCPxCON<5:4>) · TOSC · PRESCALERTMR2 Módulos CCP ©ATE-Universidad de Oviedo 18 TRISC<y> RCy/CCPx R Q S CCPRxL CCPxCON<5:4> TMR2 ← 0 CCPx ← 1 (si D≠0) CCPRxH ← CCPRxL (*) TMR2 se concatena con un reloj interno de 2 bits con frecuencia fosc para poder crear una base de tiempos de 10 bits Registros de Duty Cycle Comparador TMR2 (*) Comparador PR2 CCPRxH (esclavo) T2CKPS1:T2CKPS0 Prescaler 1 , 4 , 16 2 fOSC/4 Reloj interno Configuraciones para MODO PWM Módulo CCP Módulo TMR2 El postscaler de TMR2 no se utiliza para determinar la frecuencia PWM pero sí se puede emplear para contar periodos completos de esa señal
  • 10. Módulos CCP ©ATE-Universidad de Oviedo 19 MODO PWM • La máxima resolución (máximo nº de bits que resultan útiles para definir el ciclo de trabajo) que se puede obtener para una onda PWM generada en este módulo viene dada por la siguiente fórmula: • La siguiente tabla muestra frecuencias y resoluciones que se pueden obtener con un oscilador de 20 MHz • La máxima resolución (en tiempo) viene fijada por el prescaler escogido para el TMR2: ( ) bits 2log log Res 2 ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ ⋅ = TMRPWM osc PSf f Nmax * Tosc * Prescaler TMR2 = 1/fPWM Módulos CCP ©ATE-Universidad de Oviedo 20 MODO PWM Pasos para configurar el módulo CCP para funcionar en modo PWM: 1. Definir el periodo de la onda PWM escribiendo en el registro PR2. 2. Definir el ciclo de trabajo (tiempo en estado alto) escribiendo en los registros CCPRxL y en los bits CCPxCON<5:4>. 3. Definir el pin CCPx como salida, poniendo a “0” el bit TRISC<2> (para CCP1) y/o el bit TRISC<1> (para CCP2). 4. Seleccionar el valor del prescaler del TMR2 y habilitar el TMR2 por puesta a 1 del nit TMR2ON (T2CON<2>). 5. Configurar el módulo CCP1 para funcionar en modo PWM En modo SLEEP, el TMR2 no se incrementa y por tanto el estado del módulo CCP no cambia. Si el pin CCPx está a un determinado nivel (0 ó 1) cuando se ejecuta la instrucción SLEEP, el pin continuará en ese valor y se despertará con ese valor. No se puede generar una onda periódica en esa situación
  • 11. Módulos CCP ©ATE-Universidad de Oviedo 21 Ejemplo: Cálculo de PR2 para obtener una onda PWM cuya frecuencia sea de 78,125 kHz. La Fosc es de 20 MHz y el prescaler del TMR2 = 1. 1/78,125kHz = [(PR2)+1] * 4 * 1/20MHz * 1 12,8us = [(PR2)+1] * 4 * 50ns * 1 PR2 = 63 Encontrar la máxima resolución del ciclo de trabajo que puede usarse con una frecuencia PWM de 78,125 KHz y un oscilador de 20 MHz TPWM = 2N * TOSC 1/78,125kHz = 2N * 1/20MHz * 1 12,8 us = 2N * 50 ns * 1 256 = 2N N= 8 MODO PWM Por tanto, un ciclo de trabajo con una resolución de 8 bits es la que se obtiene si se quiere obtener una onda PWM de 78,125 kHz de frecuencia con un oscilador de 20 MHz. Es decir los valores a cargar para el ciclo de trabajo estan en el margen 0 ≤ DCxB9:DCxB0 ≤ 255. Cualquier valor mayor de 255 provocará que el ciclo de trabajo sea del 100% del periodo de la onda PWM. La resolución será mayor si la frecuencia de la onda PWM es menor. Si la frecuencia crece, la resolución decrece. Módulos CCP ©ATE-Universidad de Oviedo 22 EJEMPLO DE INICIALIZACIÓN EN MODO PWM ; Suponemos T2CON a 00h, por tanto, prescaler a 1 y apagado. Suponemos oscilador de 20 MHz CLRF CCP1CON ; Módulo CCP off CLRF TMR2 ; limpio Timer2 MOVLW 0x7F ; PR2 = 7Fh = 127 MOVWF PR2 ; PeriodoPWM= (127 + 1) * 4 * 50ns * 1 = 25,6 us MOVLW 0x1F ; 8 bits altos del registro del duty a b’00011111’ MOVWF CCPR1L ; CLRF INTCON ; Deshabilito interrupciones BSF STATUS, RP0 ; Banco 1 BCF TRISC, PWM1 ; Pin RC2/CCP1 salida PWM CLRF PIE1 ; Deshabilito interrupciones de periféricos BCF STATUS, RP0 ; Banco 0 CLRF PIR1 ; Limpio flags de periféricos MOVLW 0x2C ; modo PWM, 2 LSBs del duty a b’10’ MOVWF CCP1CON ; registro del duty b’0001111110’ = 126d ;por tanto duty = 126 * 50ns * 1 = 6,3 us 6,3us/25,6us = 24,6% de duty BSF T2CON, TMR2ON ; Timer2 ON ; ; La interrupción de CCP1 no está activa en este modo PWM ; el final del periodo se detecta por muestreo del TMR2IF ; Periodo_PWM BTFSS PIR1, TMR2IF GOTO Periodo_PWM ;OJO, solo se detecta el final del periodo si el postscaler del TMR2 está a 1:1 BCF PIR1, TMR2IF En el modo PWM los flags CCP1IF y CCP2IF no se utilizan
  • 12. Módulos CCP ©ATE-Universidad de Oviedo 23 REGISTROS ASOCIADOS CON EL MÓDULO CCP EN MODO PWM Módulos CCP ©ATE-Universidad de Oviedo 24 Características eléctricas del módulo CCP Entrada en modo captura Salida en modo comparación o PWM
  • 13. Módulos CCP ©ATE-Universidad de Oviedo 25 Ejemplo de uso del módulo CCP – modo PWM para la generacion de un “ring” de llamada telefónica Se trata de realizar el diseño del programa encargado de generar el “ring de llamada de un teléfono”. Para eso empleamos el módulo CCP1 de un PIC16F877 y la placa de prácticas que dispone de un zumbador cuyo esquema eléctrico aparece a continuación (el jumper J9 debe estar puesto). Se emplea un oscilador de 4MHz para el microcontrolador. Módulos CCP ©ATE-Universidad de Oviedo 26 GENERACION DE UN RING TELEFÓNICO 320Hz....Silencio480Hz320Hz......480Hz320Hz480Hz320Hz 25ms25ms25ms25ms25ms25ms25ms25ms 1s (sonido) 2s1s (sonido) El timbre de llamada consistirá en un intervalo de 1s de sonido (en el que se van alternando dos tonos de 320Hz y de 480Hz durante 25ms cada uno), seguido de un intervalo de silencio de 2s y así sucesivamente.
  • 14. Módulos CCP ©ATE-Universidad de Oviedo 27 Planteamiento: Se utiliza el módulo CCP1 en modo PWM para generar dos ondas cuadradas con frecuencias de emisión 320Hz y 480Hz. Para reducir armónicos, se hace que éstas ondas sean cuadradas (t en estado alto = t en estado bajo) Se utiliza el temporizador TMR0 para temporizar intervalos de 25ms, mediante interrupción. Un segundo se contabiliza por 40 interrupciones de TMR0 y 2 segundos por 80 interrupciones de TMR0. Cuando entra una interrupción, se evalúa el estado actual y las posibles modificaciones en el mismo de acuerdo con el siguiente diagrama de estados: GENERACION DE UN RING TELEFÓNICO Estado 0 Silencio CCP1 inactivo Estado 1 PWM generando 320Hz 80 interrupciones de TMR0 (2s) en Estado 0 Estado 2 PWM generando 480Hz Interrupción de TMR0 (25µs) Interrupción de TMR0 (25µs) 40 interrupciones de TMR0 (1s) en Estados 1 ó 2 Módulos CCP ©ATE-Universidad de Oviedo 28 Cálculos: Modo PWM Frecuencia: 1/frecuencia = (4/fosc) * Prescaler TMR2 * (PR2+1) Con fosc=4MHz Prescaler TMR2 = 16 (elegido) Resulta: para 320Hz PR2= 194 (0xC2) para 480Hz PR2=129 (0x81) Ancho de pulso (tiempo en estado alto): 1/(2*frecuencia) = (1/fosc) * Prescaler TMR2 * (CCPR1L+2bits) Tomamos los 2 bits de menor peso a cero Resultando: para 320Hz CCPR1L = 97 (0x61) para 480Hz CCPR1L = 65 (0x41) TMR0: Para temporizar 25ms = (4/fosc) * Prescaler TMR0 * (256-Precarga) Resulta: Precarga = 158 (0x9E) GENERACION DE UN RING TELEFÓNICO
  • 15. Módulos CCP ©ATE-Universidad de Oviedo 29 Algoritmo utilizado –PROGRAMA PRINCIPAL: •INICIALIZACIÓN •Puertos: PORTC con RC2 como salida •TMR0 como temporizador y prescaler de 256 •Carga de PR2 para generar 320Hz (0xC2) •CCP1 en modo PWM •TMR2 con prescaler de 16 •Inicializamos variable ESTADO con código de onda de 320Hz •Ponemos a cero CONTADOR de interrupciones •Cargamos registro de ancho del pulso (duty) CCPR1L (0x61) •Precarga de TMR0 para desbordar tras 25ms (0x9E) •Borramos flag T0IF y activamos interrupciones de TMR0 •Ponemos en marcha TMR2 •BUCLE PRINCIPAL INFINITO (Del que sólo se saldrá por interrupción debida a TMR0) GENERACION DE UN RING TELEFÓNICO Módulos CCP ©ATE-Universidad de Oviedo 30 INICIO bsf STATUS,RP0 ;Paso al banco 1 bcf TRISC,2 ;Defino pin RC2/CCP1 como salida ; Para temporizar 25ms con TMR0: 25ms = (4/4MHz)* 256 * (256-158) ; precarga de TMR0: 158 (0x9E) movlw b'00000111' ;TMR0 modo temporizador movwf OPTION_REG ;y prescaler de 256 ; 1/320Hz = (PR2+1)* Prescaler_TMR2 (=16) * 4/4MHz ---> PR2= 194 (0xC2) movlw 0xC2 ;Cargo PR2 para 320Hz movwf PR2 ;aprovecho que estamos en banco 1 bcf STATUS,RP0 ;Vuelvo al banco 0 movlw b'00001111' ;Definimos CCP1 movwf CCP1CON ;en modo PWM movlw b'00000011' ;Defino TMR2 con prescaler 16 movwf T2CON ;y parado al principio movlw 0x01 ;Inicializo señal PWM de f=320Hz movwf ESTADO ;en variable ESTADO clrf CONTADOR ;Pongo a 0 contador de interrupciones ; Registro de duty: 1/(2*320Hz)=(CCPR1L_2bits) * PrescalerTMR2 * 1/4MHz ; CCPR1L=97 (0x61) movlw 0x61 ;Cargo registro de duty movwf CCPR1L ;para ton = 1/(2*320Hz) movlw 0x9E ;Precargo TMR0 movwf TMR0 ;para que desborde tras 25ms movlw b'10100000' ;Pongo a 0 flag de TMR0 y activo movwf INTCON ;sus interrupciones bsf T2CON,TMR2ON ;Pongo en marcha TMR2 BUCLE goto BUCLE ;Bucle infinito en espera de interrupción
  • 16. Módulos CCP ©ATE-Universidad de Oviedo 31 Algoritmo utilizado para Tratamiento de INTERRUPCION: Se comprueba que T0IF=1 si no está a 1, salimos de inmediato Salvamos el contexto del programa ppal. (W y STATUS) Precargamos TMR0 puesto que desbordó Incrementamos CONTADOR de interrupciones Verificamos ESTADO actual para evaluar posibles cambios Si ESTADO==0 (silencio) y CONTADOR == 80 (2s) ponemos CONTADOR a cero cambiamos ESTADO a 1 (onda de 320Hz) activamos módulo CCP en PWM cargamos PR2 y CCPR1L adecuadamente para 320Hz Si ESTADO ==1 (onda 320Hz) cambiamos ESTADO a 2 (onda de 480Hz) cargamos PR2 y CCPR1L adecuadamente para esa frecuencia Si ESTADO ==2 (onda 480Hz) cambiamos ESTADO a 1 (onda de 320Hz) cargamos PR2 y CCPR1L para generar 320Hz Si ESTADO era 1 ó 2 Si CONTADOR ==40 (ha pasado 1s emitiendo) ponemos CONTADOR a cero cambiamos ESTADO a 0 (silencio) desactivamos CCP2 Ponemos a cero el flag de TMR0 (T0IF) Recuperamos contexto del programa ppal. (W y STATUS) Retornamos del programa de tratamiento de interrupción Módulos CCP ©ATE-Universidad de Oviedo 32 PTI btfss INTCON,T0IF ;Si entramos aquí por otro motivo retfie ;distinto a T0IF=1 salimos de inmediato movwf W_temp ;Salvamos el registro W swapf STATUS,W ;y el registro STATUS por movwf ST_temp ;si acaso se manipulan para el principal movlw 0x9E ;Precargamos de nuevo TMR0 movwf TMR0 ;para otros 25ms incf CONTADOR,F ;Incrementamos el Contador de 25ms ;Ahora miramos en qué estado estábamos movf ESTADO,F ;Comparamos ESTADO con 0 btfsc STATUS,Z goto SILENCIO ;Si era el 0 es de Silencio movf ESTADO,W ;Comparamos ESTADO con 0x01 xorlw 0x01 btfsc STATUS,Z goto A_320Hz ;Si era el 1 estaba a 320HZ movf ESTADO,W ;Comparamos estado con 2 xorlw 0x02 btfsc STATUS,Z goto A_480Hz ;Si era el 2 estaba a 480Hz goto SALIR_PTI ;Si no era ninguno de los conocidos salimos RUTINADEINTERRUPCION
  • 17. Módulos CCP ©ATE-Universidad de Oviedo 33 SILENCIO movf CONTADOR,W ;Si el ESTADO era de Silencio, salimos xorlw d'80' ;al cabo de 2s (80 interrupciones) btfss STATUS,Z goto SALIR_PTI ;si no llegamos a 80 salimos sin cambiar clrf CONTADOR ;si ya pasaron 2s borramos contador movlw 0x01 ;y cargamos 0x01 para codificar el movwf ESTADO ;paso a ESTADO de 320Hz movlw b'00001111' ;Activamos el módulo CCP en modo PWM movwf CCP1CON ;de nuevo si había que cambiar bsf STATUS,RP0 movlw 0xC2 ;Cargo PR2 para 320Hz movwf PR2 ;PR2 está en banco 1 bcf STATUS,RP0 movlw 0x61 ;Cargo también registro de duty movwf CCPR1L ;para ton = 1/(2*320Hz) goto SALIR_PTI ;Vamos a salir de la interrupción RUTINADEINTERRUPCION Módulos CCP ©ATE-Universidad de Oviedo 34 A_320Hz movlw 0x02 ;El Estado era de generar onda movwf ESTADO ;de 320Hz, tenemos que cambiar a 480Hz ; 1/480Hz = (PR2+1)* Prescaler_TMR2 (=16) * 4/4MHz ---> PR2= 129 (0x81) bsf STATUS,RP0 movlw 0x81 ;Precarga de PR2 para 480Hz movwf PR2 bcf STATUS,RP0 ; Registro de duty: 1/(2*480Hz)=(CCPR1L_2bits) * PrescalerTMR2 * 1/4MHz ; CCPR1L=65 (0x41) movlw 0x41 ;Cargamos el Ton también movwf CCPR1L ;para la mitad del periodo goto FIN_TONOS A_480Hz movlw 0x01 ;El Estado era generando onda de 480Hz movwf ESTADO ;hay que cambiar de Estado a 320Hz bsf STATUS,RP0 movlw 0xC2 ;Modificamos PR2 para 320Hz movwf PR2 bcf STATUS,RP0 movlw 0x61 ;Cargamos también Ton movwf CCPR1L RUTINADEINTERRUPCION
  • 18. Módulos CCP ©ATE-Universidad de Oviedo 35 FIN_TONOS ;Parte final común de emisión movf CONTADOR,W ;Comparamos contador con 40 xorlw d'40' ;para ver si ha pasado ya 1 segundo btfss STATUS,Z goto SALIR_PTI ;Si no hemos llegado, salimos clrf CONTADOR ;si ya hemos llegado ponemos a 0 CONTADOR clrf ESTADO ;pasamos a estado de Silencio bcf PORTC,1 ;y anulamos salida clrf CCP1CON ;Desactivamos el módulo CCP2 en silencio SALIR_PTI bcf INTCON,T0IF ;ponemos a cero el flag para la sig. interrupción swapf ST_temp,W ;Recuperamos el registro STATUS con un SWAPF movwf STATUS swapf W_temp,F ;Recuperamos también el W con dos SWAPF swapf W_temp,W retfie ;Retornamos de programa de tratamiento de ;interrupción RUTINADEINTERRUPCION