860 likes | 1.02k Views
DTO. INGENIERIA ELECTRÓNICA. PICmicro GAMA MEDIA: PIC16F87X. TEMA 6. PICmicro GAMA MEDIA: PIC16F87X. Arquitectura. PICmicro GAMA MEDIA: PIC16F87X. Arquitectura. PICmicro GAMA MEDIA: PIC16F87X. Arquitectura. PICmicro GAMA MEDIA: PIC16F87X. Arquitectura. PICmicro GAMA MEDIA: PIC16F87X.
E N D
DTO. INGENIERIA ELECTRÓNICA PICmicro GAMA MEDIA: PIC16F87X TEMA 6
PICmicro GAMA MEDIA: PIC16F87X Arquitectura
PICmicro GAMA MEDIA: PIC16F87X Arquitectura
PICmicro GAMA MEDIA: PIC16F87X Arquitectura
PICmicro GAMA MEDIA: PIC16F87X Arquitectura
PICmicro GAMA MEDIA: PIC16F87X Arquitectura
PICmicro GAMA MEDIA: PIC16F87X Arquitectura
PICmicro GAMA MEDIA: PIC16F87X • Modulos • Puertos de Entrada/Salida. • Puerto Esclavo Paralelo (PSP). • Temporizadores/contadores de 8/16 bits (TMR). • Captura / Comparación / PWM (CCP). • Comparadores Analógicos. • Conversión Analógica / Digital (A/D). • Transmisor Receptor Asíncrono Síncrono Universal (USART ó SCI). • Puerto Serie Síncrono Básico ó Maestro(BSSP ó MSSP). • Memoria EEPROM de datos. • FLASH EEPROM de programa modificable desde el código.
PICmicro GAMA MEDIA: PIC16F87X • Conversión A/D • Un sistema de conversión A/D hacer llegar al controlador digital la información suministrada por el proceso analógico que se desea controlar. Establece una relación biunívoca entre el valor de la señal en su entrada y la palabra digital obtenida en su salida. • La conversión A/D se fundamenta en la teoría de muestreo: “Si una señal continua, S(t) , tiene una banda de frecuencia en la que fm es la mayor frecuencia, dicha señal podrá reconstruirse sin distorsión a partir de muestras de la señal tomadas a una frecuencia de valor fs > 2·fm” • Circuitos de captura y mantenimiento (S/H=Sample and hold): Muestrean la señal analógica (durante un intervalo de tiempo) y mantienen ese valor, generalmente en un condensador, durante el tiempo que dura la transformación A/D propiamente dicha.
PICmicro GAMA MEDIA: PIC16F87X • Conversión A/D • Tipos de convertidores: Directo, Aproximaciones sucesivas, de simple rampa, de doble rampa, de paso intermedio a frecuencia. • Aproximaciones Sucesivas: es el implementado en los PICs, se basa en ir eliminando mitades de tabla hasta quedarse con el valor que más se aproxima a la tensión analógica a convertir. Sea uº=3,2V 1) Prueba con 1000 (2,5V) 2,5 < 3,2 mitad superior 2) Prueba con 1100 (3,75V) 3,75 > 3,2 mitad inferior 3) Prueba con 1010 (3,125V) 3,125 < 3,2 mitad superior 4) Prueba con 1011 (3,4375V) 3,4375 > 3,2 valor inferior
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Convierte la señal analógica en un número digital de 10 bits. • Los 16F876/873 tienen 5 canales (en puerto A) y los 16F877/874 tienen 8 canales (5 en el puerto A y 3 en el puerto E). • Tienen tensiones de referencia VREF+ y VREF- seleccionables por software. Pueden ser VDD y VSS o las tensiones aplicadas en los pines RA3 / RA2 . • Puede seguir funcionando cuando el PIC está en modo SLEEP ya que dispone de un oscilador RC interno propio. • Hay 11 registros asociados a este periférico. • Definición de pines de entrada y señales aplicadas • TRISA – PORTA – TRISE - PORTE • Manejo de interrupciones • INTCON – PIE1 – PIR1 • Control del conversor A/D • ADCON0 – ADCON1 – ADRESH - ADRESL
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Estructura Interna
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Función de transferencia. • La primera transición tiene lugar cuando la tensión analógica de entrada alcanza el valor VREF- + (VREF+ - VREF-)/1024 = 1 LSb. • Caso de que VREF+ = VDD y que VREF- = VSS
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Registro ADCON0 (1Fh) [PIC16F87x] • bit 7-6 ADCS1:ADCS0: Selección del reloj para la conversión A/D • 00 = fOSC/2 01 = fOSC/8 10 = fOSC/32 11 = fRC • bit 5-3 CHS2:CHS0: Selección del canal de conversión • 000 = Canal 0 001 = Canal 1 010 = Canal 2 011 = Canal 3 • 100 = Canal 4 101 = Canal 5 110 = Canal 6 111 = Canal 7 • bit 2 GO/DONE: Estado de la conversión • Si ADON=1: • 1 = Conversión en progreso 0 = Conversión finalizada • bit 0 ADON: Bit de encendido del convertidor A/D • 1 = Módulo A/D encendido 0 = Módulo A/D apagado
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Registro ADCON1 (9Fh) [PIC16F87x] • bit 7 ADFM: Selección de formato del resultado • 1 = Ajuste a la derecha 0 = Ajuste a la izquierda • bit 3-0 PCFG3:PCFG0: Configuración de las entradas al módulo A/D
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Registro ADCON0 (1Fh) [PIC16F87xA] • bit 7-6 ADCS1:ADCS0: Selección del reloj para la conversión A/D junto con ADCS2 • que está en ADCON1. • ADCS2=0 00 = fOSC/2 01 = fOSC/8 10 = fOSC/32 11 = fRC • ADCS2=1 00 = fOSC/4 01 = fOSC/16 10 = fOSC/64 11 = fRC • Registro ADCON1 (9Fh) [PIC16F87xA] • bit 6 ADCS2: Selección de reloj para conversión A/D junto con ADCS1 y ADCS0.
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Registro INTCON (0Bh , 8Bh , 10Bh , 18Bh) • bit 7 GIE: Habilitación global de interrupciones • bit 6 PEIE: Habilitación de interrupciones de periféricos • Registro PIE1 (8Ch) • bit 6 ADIE: Habilitación de la interrupción del convertidor A/D • Registro PIR1 (0Ch) • bit 6 ADIF: Flag de la interrupción del convertidor A/D • 1 = Conversión A/D completada. 0 = Conversión A/D aún no completada.
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Pasos en una conversión A/D • Configurar el módulo A/D. • Definir entradas analógicas y tensión de referencia. (ADCON1) • Seleccionar el canal de la conversión. (ADCON0) • Seleccionar el reloj de la conversión. (ADCON0) • Encender el módulo A/D. (ADCON0) • Configurar la interrupción por conversión A/D. • Bajar el flag ADIF. (PIR1). • Habilitar la interrupción del convertidor A/D. (PIE1). • Habilitar las interrupciones de los periféricos. (INTCON). • Habilitar la máscara global de interrupciones. (INTCON) • Esperar a que transcurra el tiempo de adquisición. • Tiempo necesario para capturar el valor analógico a convertir. • Los valores típicos del tiempo de adquisición son del orden de 20µs.
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Comenzar la conversión. • Poner a “1” el bit GO/DONE. (ADCON0) • No activar este bit a la vez que se enciende el convertidor A/D • Esperar a que se complete la conversión A/D. • Controlando cuándo el bit GO/DONE se pone a “0”. • Esperando a que llegue la interrupción del convertidor. • Leer el resultado de la conversión. • Disponible en los registros ADRESH:ADRESL. • Bajar el flagADIF si se están usando interrupciones. • Llevar a cabo la siguiente conversión. • Volver al paso 1 ó 2, según convenga. • Espera mínima antes de empezar la siguiente adquisición: 2·TAD • (Esta espera no es necesaria en el caso de los PIC16F87xA porque el interruptor de captura se “cierra” en cuanto se obtiene el resultado). • TAD: Tiempo necesario para la conversión de un bit.
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Tiempo de adquisición: tiempo necesario para cargar el condensador de mantenimiento CHOLD • Máxima impedancia recomendada para la fuente: Rs<10K. • En estas condiciones, TACQ ≈ 20µS • Hasta que no acabe la conversión, no empieza otra adquisición (SS abierto) • Esperar TACQ : a) Tras una conversión; • b) tras seleccionar un nuevo canal; • c) Tras encender el módulo AD
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Tiempo de conversión: la conversión de 10 bits dura 12TAD • TAD configurable en ADCON0 (reloj de la conversión). • TAD=2·TOSC TAD=8·TOSC TAD=32·TOSC TAD=2µs÷6µs (típ. 4µs) • También • TAD=4·TOSC TAD=16·TOSC TAD=64·TOSC en PIC16F87xA • Para un funcionamiento correcto se necesita un valor mínimo de TAD=1,6µs.
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Tiempo de conversión y adquisición en PIC16F87x
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Tiempo de conversión y adquisición en PIC16F87xA
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Módulo A/D cuando el micro entra en modo dormido ( SLEEP) • El módulo A/D puede funcionar durante el modo dormido si se selecciona como reloj para la conversión el RC interno (ADCS1:ADCS0 = 11). • Si se elige como reloj el RC, el módulo A/D espera 1 ciclo de instrucción antes de iniciar la conversión. Esto permitiría la ejecución de la instrucción SLEEP que se coloque a continuación, esto eliminaría todo posible ruido de conmutación (debido al paso de normal a dormido) durante la conversión. • Cuando se haya completado la conversión, el bit GO/DONE se pondrá a “0” y el resultado se cargará en los registros ADRESH y ADRESL. Si la interrupción del conversor A/D está habilitada (ADIE y PEIE a “1”) el dispositivo se “despertará”. Si no estuviera habilitada, el módulo A/D se apagará aunque el bit ADON siga a “1”. • Si la fuente de reloj para la conversión no es la RC interna, una instrucción SLEEP provocará que la conversión que se esté ejecutando se aborte y que el módulo A/D se apague aunque el bit ADON siga a “1”.
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Efectos de un RESET sobre el módulo A/D • Un RESET del dispositivo provoca que los registros del módulo A/D se inicialicen a los valores indicados en la tabla. Por tanto, un RESET provoca que el módulo A/D se apague y que cualquier conversión que se estuviera realizando cuando se produce el RESET se aborte. Todos los pines asociados al módulo A/D pasan a ser entradas analógicas. Los valores acumulados en ADRESH:ADRESL no se modifican por un Power-On-Reset. El valor que contendrán los registros ADRESH:ADRESL tras un POR serán desconocidos inicialmente.
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Conversión A/D en el compilador C de CCS • Configuración del módulo conversor A/D • setup_adc (modo); • modo: ADC_OFF (ADCON0 ← 00h) • ADC_CLOCK_DIV_2 (ADCON0 ← 01h) • ADC_CLOCK_DIV_8 (ADCON0 ← 41h) • ADC_CLOCK_DIV_32 (ADCON0 ← 81h) • ADC_CLOCK_INTERNAL (ADCON0 ← C1h) • Definición de entradas analógicas • setup_adc_ports (valor); • valor: NO_ANALOGS (ADCON1 ← 86h) • ALL_ANALOG (ADCON1 ← 80h) • ANALOG_RA3_REF (ADCON1 ← 81h) • A_ANALOG (ADCON1 ← 82h) • A_ANALOG_RA3_REF (ADCON1 ← 83h) • RA0_RA1_RA3_ANALOG (ADCON1 ← 84h) • RA0_RA1_ANALOG_RA3_REF (ADCON1 ← 85h)
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Definición de entradas analógicas (cont.) • setup_adc_ports (valor); • valor: ANALOG_RA3_RA2_REF (ADCON1 ← 88h) • ANALOG_NOT_RE1_RE2 (ADCON1 ← 89h) • ANALOG_NOT_RE1_RE2_REF_RA3 (ADCON1 ← 8Ah) • ANALOG_NOT_RE1_RE2_REF_RA3_RA2 (ADCON1 ← 8Bh) • A_ANALOG_RA3_RA2_REF (ADCON1 ← 8Ch) • RA0_RA1_ANALOG_RA3_RA2_REF (ADCON1 ← 8Dh) • RA0_ANALOG (ADCON1 ← 8Eh) • RA0_ANALOG_RA3_RA2_REF (ADCON1 ← 8Fh) • Selección del canal analógico • set_adc_channel (canal); • canal: 0 (AN0) 4 (AN4) • 1 (AN1 ) 5 (AN5) • 2 (AN2) 6 (AN6) • 3 (AN3) 7 (AN7)
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Lectura del resultado • valor = read_adc (); • valor: Entero de 16 bits según la directiva #device adc= empleada. • La influencia de dicha directiva se recoge en la siguiente tabla • El fichero 16f876.h incluye como primera directiva #device PIC16F876. Es necesario incluir información del tipo de conversor A/D. Por ello los ficheros C que usen este módulo deberán comenzar por: • #device “16F876.h” • #device adc=10
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • setup_adc_ports (A_ANALOG); • setup_adc (ADC_CLOCK_INTERNAL); • set_adc_channel (3); • delay_us (20); • valor = read_adc (); • setup_adc (ADC_OFF); W ← 10000010 Banco 1 ADCON1 ← W Banco 0 W ← ADCON0 W ← W & 00111000 W ← W | 11000001 ADCON0 ← W W ← ADCON0 W ← W & 11000111 W ← W | 00011000 ADCON0 ← W GO/DONE ← 1 Espera a GO/DONE=0 W ← ADRESH TEMP ← W Banco 1 W ← ADRESL Banco 0 REGL ← W W ← TEMP REGH ← W W ← ADCON0 W ← W & 00111000 ADCON0 ← W
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Project >> New >> Pic Wizard >> nombre fichero y guardar
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • ad_fuente.h
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D: ejemplo lectura de tensión canal0 COMPILAR (F9) MONTARLO
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D: lectura del valor max/min en canal0 Simular en ISIS
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Abrir el MPLAB: Project >> Wizard >> Siguiente
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D • Ya se pueden utilizar las herramientas habituales de MPLAB
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D: práctica • Práctica: Linealizar la NTC NTSA0WB203 y obtener el valor de Temperatura mediante el PIC16F876. Ojo: Incluir #include <math.h>
PICmicro GAMA MEDIA: PIC16F87X • Modulo de Conversión A/D: práctica Simular en ISIS
PICmicro GAMA MEDIA: PIC16F87X • Modulo de CCP (COMPARACIÓN, CAPTURA Y 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: • Como registro de 16 bits para captura de tiempo al producirse un evento. • 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. • 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).
PICmicro GAMA MEDIA: PIC16F87X • Modulo de CCP • Condiciones de funcionamiento • Temporizadores necesarios. • Modo captura TMR1 • Modo comparación TMR1 • PWM TMR2 • Interacción entre los dos módulos CCP.
PICmicro GAMA MEDIA: PIC16F87X • Modulo de CCP • Registro CCP1CON / CCP2CON (17h / 1Dh) • bit 5-4 CCPxX:CCPxY: Bits menos significativos del PWM • En modo PWM: • Los dos bits menos significativos del ciclo de trabajo. • Los ocho bits más significativos están en CCPRxL. • bit 3-0 CCPxM3:CCPxM0: Bits de selección del modo CCP a utilizar • 0000 = Comparación/Captura/PWM desactivada (reset del módulo CCP) • 0100 = Modo de captura, cada flanco descendente • 0101 = Modo de captura, cada flanco ascendente • 0110 = Modo de captura, cada 4º flanco ascendente • 0111 = Modo de captura, cada 16º flanco ascendente • 1000 = Modo de comparación, CCPx=1 al igualarse (CCPxIF=1) • 1001 = Modo de comparación, CCPx=0 al igualarse (CCPxIF=1) • 1010 = Modo de comparación, genera interrupción al igualarse (CCPx invariable, CCPxIF=1) • 1011 = Modo de comparación, lanza acción especial (CCPxIF=1, CCPx invariable) CCP1 resetea • TMR1 / CCP2 resetea TMR1 y lanza una conversión A/D • 11xx = Modo PWM
PICmicro GAMA MEDIA: PIC16F87X • Modulo de CCP: 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).
PICmicro GAMA MEDIA: PIC16F87X • Modulo de CCP: MODO CAPTURA • 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. • 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. • 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. • 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. • 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.
PICmicro GAMA MEDIA: PIC16F87X • Modulo de CCP: 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>) • 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.
PICmicro GAMA MEDIA: PIC16F87X • Modulo de CCP: 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.
PICmicro GAMA MEDIA: PIC16F87X • Modulo de CCP: 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.
PICmicro GAMA MEDIA: PIC16F87X • Modulo de CCP: MODO PWM • PERIODO DE LA ONDA PWM. Se calcula utilizando la siguiente fórmula: • T = (PR2 + 1) ·( 4 / TOSC )· PRESCALERTMR2 • 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 trabajo 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.
PICmicro GAMA MEDIA: PIC16F87X • Modulo de CCP: 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: • D = (CCPRxL:CCPxCON<5:4>) · TOSC · PRESCALERTMR2 • 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. • Cuando TMR2 (+ 2 bits) se iguala a CCPxH (+ 2 bits), CCPx 0. • 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.