SlideShare una empresa de Scribd logo
IUT Cumaná




   MICROCONTROLADORES II
        MÓDULO CCP
(CAPTURA/COMPARACIÓN/PWM)


      PROF. LUIS ZURITA
IUT Cumaná



                       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.
       • 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
IUT Cumaná



           FLUJOGRAMA CCP1 CAPTURA




Prof. Luis Zurita              Microcontroladores II
IUT Cumaná



                    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.
       • 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
IUT Cumaná



             FLUJOGRAMA CCP1 COMPARACIÓN




Prof. Luis Zurita                    Microcontroladores II
IUT Cumaná



                                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.
       •     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
IUT Cumaná



                    FLUJOGRAMA PWM




Prof. Luis Zurita                    Microcontroladores II
IUT Cumaná



                                 SEÑAL PWM




               Periodo=[(PR2)+1]*4*Tosc*(Valor predivisor TMR2)

               Duty Cycle=(CCPRxL:CCP1CON(5:4))*Tosc*(V. predivisor TMR2)




Prof. Luis Zurita                                                      Microcontroladores II
IUT Cumaná



                                 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
IUT Cumaná



                    Modo PWM
       Pasos para configurar el PWM:
       1. Asignar PR2.
       2. Asignar CCPRxL y CCPxCON(5:4).
       3. Configurar RCy/CCPx de salida.
       4. Asignar Pre-divisor en T2CON.
       5. Activar TMR2 en T2CON.
       6. Configurar CCPx en modo PWM.

Prof. Luis Zurita                          Microcontroladores II
IUT Cumaná



                                     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
IUT Cumaná



                    CCP1CON




Prof. Luis Zurita             Microcontroladores II
IUT Cumaná



                    TABLAS MÓDULO CCP
                      Modo CCP     Recurso de Timer
                       Captura         Timer1
                     Comparación       Timer1
                        PWM            Timer2




Prof. Luis Zurita                                     Microcontroladores II
IUT Cumaná

                             EJERCICIOS CCP                   Captura:
                                                           Medir período,
                          Se configuran los bancos            Ton, Toff
 Zona de Configuración




                         Se configura el módulo CCP         Comparación:
                                                           Setpoint 16 bits
                             Se configuran las                 PWM:
                                                            Genera señal
                          Interrupciones (opcional)
                                                              Captura:
                            Se regresa al Banco 0          Comparaciones
                                                             Y acciones
                             Resto del programa             Comparación:
                         (Tratamiento de la información)    Acción sobre RCx
                                                                PWM:
                                                           En base a acción
                                                            Generar Señal
Prof. Luis Zurita                                                 Microcontroladores II
MÓDULO CCP EN LENGUAJE C                            IUT Cumaná



          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:
      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;
      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
MÓDULO CCP EN LENGUAJE C                               IUT Cumaná




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         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
MÓDULO CCP EN LENGUAJE C                        IUT Cumaná




       • 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:
                    long CCP_1;             long CCP_2;
                    #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 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
Ejercicio 1. Medición de Período de una señal                                             IUT Cumaná
       #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;             //Entra otro pulso
       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(){
         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
Ejercicio 1. Medición de Período de una señal                                    IUT Cumaná



       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

           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
Ejercicio 1. Medición de Período de una señal       IUT Cumaná




Prof. Luis Zurita                                 Microcontroladores II
Ejercicio 2. Generación de una señal cuadrada
  mediante la Comparación con el CCP2
                                                                  IUT Cumaná




       • 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
         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
Ejercicio 2. Generación de una señal cuadrada
  mediante la Comparación con el CCP2
                                                                                                          IUT Cumaná




       #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
         }
         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
Ejercicio 2. Generación de una señal cuadrada
  mediante la Comparación con el CCP2
                                                      IUT Cumaná




Prof. Luis Zurita                          Microcontroladores II
Ejercicio 3. Generación de una señal PWM
  mediante el CCP1
                                                                      IUT Cumaná




       • 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
       #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
Ejercicio 3. Generación de una señal PWM
  mediante el CCP1. Continuación.
                                                                                        IUT Cumaná




       void main(){                                   set_pwm1_duty(0x2EE);
           set_tris_c(0xF0);                          printf(lcd_putc,"fPORC= 60");
           set_tris_d(0x00);                          break;
           setup_timer_2(T2_DIV_BY_1,224,1);          case (3):
           setup_ccp1(CCP_PWM);                       set_pwm1_duty(0x304);
           lcd_init();                                printf(lcd_putc,"fPORC= 80");
           while(TRUE){                               break;}
                 A=input_a();                         }
                 switch(A){                       }
                 case (0):
                 set_pwm1_duty(0xC8);
                 printf(lcd_putc,"fPORC= 25");
                 break;
                 case (1):
                 set_pwm1_duty(0x1F4);
                 printf(lcd_putc,"fPORC= 50");
                 break;
                 case (2):


Prof. Luis Zurita                                                            Microcontroladores II
Ejercicio 3. Generación de una señal PWM
  mediante el CCP1
                                                 IUT Cumaná




Prof. Luis Zurita                     Microcontroladores II
Ejercicio 3. Generación de una señal PWM
  mediante el CCP1
                                                 IUT Cumaná




Prof. Luis Zurita                     Microcontroladores II
Ejercicio 3. Generación de una señal PWM
  mediante el CCP1
                                                 IUT Cumaná




Prof. Luis Zurita                     Microcontroladores II
Ejercicio 3. Generación de una señal PWM
  mediante el CCP1
                                                 IUT Cumaná




Prof. Luis Zurita                     Microcontroladores II
IUT Cumaná



           EJERCICIO CCP1 COMPARACIÓN

       • Configure    el    Módulo     CCP  en   modo
         Comparación, donde:
       • El TMR1 está configurado para contar pulsos
         externos, con un prescaler 1:1, flanco
         ascendente.
       • Se debe cargar CCPR1L con la constante
         Ncompar, y producir una interrupción cada vez
         que se alcanza el valor fijado.
       • Al ocurrir esto, RB0 cambia de estado.
       • RC2, no debe modificar su valor.

Prof. Luis Zurita                               Microcontroladores II
IUT Cumaná



                    EJERCICIO CCP1 CAPTURA
       • Realice la medición de la duración de un pulso en alto.
       • Emplear el módulo CCP1 y capturar el valor del TMR1
         cada vez que llegue un flanco ascendente y otro
         descendente por la línea RC2/CCP1. Conocida la
         velocidad a la que evoluciona el TMR1, se puede
         determinar la duración del tiempo transcurrido entre
         ambos flancos, lo que nos dará la anchura del pulso.
       • Configure al Timer1 con reloj interno y prescaler 1:1,
         para obtener medida máxima de período= 65,536 ms.
       • Cambie la orden de captura de ascendente a
         descendente al ocurrir la primera captura. (Dentro de
         la RSI).


Prof. Luis Zurita                                        Microcontroladores II
IUT Cumaná



                       EJERCICIO PWM
       • Generar una señal de onda cuadrada por la línea
         RC2/CCP1 cuyo periodo puede ser modificado así como
         la anchura del pulso (Duty Cycle).
       • Utilice las siguientes fórmulas
               – (Período) T=(PR2+1)*4*Tosc*TMR2 preescaler.
               – (Duty Cycle)=
               – (DC)=(CCPR1L:CCPCON1<5:4>)*Tosc*TMR2 preescaler.
       • La señal de salida tiene un periodo determinado por la
         constante "Periodo" y una anchura "Duty Cycle”
         determinada por la constante "Duty"




Prof. Luis Zurita                                               Microcontroladores II

Más contenido relacionado

PPTX
Limitaciones de la transmision digital
PPTX
Circuitos moduladores y receptores de am
PDF
PIC 18F4550... 2021.pdf
PDF
Filtro pasa banda pasivo
PDF
Señales y sistemas
PPTX
Plc y reles
PDF
Grafcet
PDF
Ss cap9 - diezmado e interpolacion
Limitaciones de la transmision digital
Circuitos moduladores y receptores de am
PIC 18F4550... 2021.pdf
Filtro pasa banda pasivo
Señales y sistemas
Plc y reles
Grafcet
Ss cap9 - diezmado e interpolacion

La actualidad más candente (20)

DOCX
TRANSFORMADA DE LAPLACE PARA CIRCUITOS RLC
PPT
Sistemas de segundo orden
PDF
flip flop.pdf
PDF
Amplificadores de potencia
PDF
Circuitos secuenciales sincronos y asincronos
PPSX
Amplificadores de potencia
PPTX
Comunicación Serial
PDF
05 respuesta en el tiempo de un sistema de control
DOCX
Transformada de hilbert
PDF
GUÍA DE EJERCICIOS RESUELTOS TEMA 4
PDF
Realimentacion del estado
DOCX
5to laboratorio
PDF
Instrumentacion ii
PDF
Método Denavit-Hartenberg
PPT
Tema 2 teoría de la información y capacidad de canal
PPSX
Control de sistemas no lineales
PDF
correlacion-de-senales
PPT
5a clase el amplificador diferencial
PDF
Ejercicios de control Ladder de PLC
PDF
Unidad III: Polos y Ceros de una función de transferencia.
TRANSFORMADA DE LAPLACE PARA CIRCUITOS RLC
Sistemas de segundo orden
flip flop.pdf
Amplificadores de potencia
Circuitos secuenciales sincronos y asincronos
Amplificadores de potencia
Comunicación Serial
05 respuesta en el tiempo de un sistema de control
Transformada de hilbert
GUÍA DE EJERCICIOS RESUELTOS TEMA 4
Realimentacion del estado
5to laboratorio
Instrumentacion ii
Método Denavit-Hartenberg
Tema 2 teoría de la información y capacidad de canal
Control de sistemas no lineales
correlacion-de-senales
5a clase el amplificador diferencial
Ejercicios de control Ladder de PLC
Unidad III: Polos y Ceros de una función de transferencia.
Publicidad

Destacado (20)

PPTX
MICROCONTROLADORES II EN C. TEMA 2
PPTX
PWM con PIC16F877A: Modulos y Registros Involucrados
PPT
Ccp2009170309
PDF
Microcontroladores ii en c. tema 4
PDF
MICROCONTROLADORES II EN C. TEMA 5
PDF
MANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN C
PPT
Curso Micro Tema 3
PPTX
Tema3 Microii
PDF
GUÍA MPLAB 8.53
PPT
Curso Micro Tema 5
PPT
Curso Micro Tema 4
PPT
Curso Micro Tema 3 2
PDF
Micro2 tema 3
PPT
Curso Micro Tema 1
PDF
Manejo de perifericos para microcontroladore
PDF
Micro2 tema 4
PDF
Micro2 tema 5
PDF
Guía de ejercicios resueltos tema 2
PDF
TEMA 2 DE INSTRUMENTACION 3
PDF
6. pwm ccp
MICROCONTROLADORES II EN C. TEMA 2
PWM con PIC16F877A: Modulos y Registros Involucrados
Ccp2009170309
Microcontroladores ii en c. tema 4
MICROCONTROLADORES II EN C. TEMA 5
MANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN C
Curso Micro Tema 3
Tema3 Microii
GUÍA MPLAB 8.53
Curso Micro Tema 5
Curso Micro Tema 4
Curso Micro Tema 3 2
Micro2 tema 3
Curso Micro Tema 1
Manejo de perifericos para microcontroladore
Micro2 tema 4
Micro2 tema 5
Guía de ejercicios resueltos tema 2
TEMA 2 DE INSTRUMENTACION 3
6. pwm ccp
Publicidad

Similar a MICROCONTROLADORES II EN C. TEMA 3 (20)

PPTX
Módulos ccp pic 16f887
PPTX
Ccpx
PDF
Presentacion 10 MODULO CCP para enseñanza.pdf
PDF
Modulos ccp v2(ring telefono)
PDF
Curso de microcontroladores capitulo 07
PDF
Compare capture pwm mode 5
PDF
preinforme PWM
PPT
TIMERS en microcontroladores PIC de microchip
DOCX
Ejemplos De Ccp
PDF
Ejercicio 07 Timers
PDF
Módulo Timer 1 del PIC16F887
PDF
In terrupciones pic
PDF
final PWM
PDF
Micro2 tema 2
PPTX
Arquitectura interna micro
PPT
Timers
PDF
Control nivel luz
Módulos ccp pic 16f887
Ccpx
Presentacion 10 MODULO CCP para enseñanza.pdf
Modulos ccp v2(ring telefono)
Curso de microcontroladores capitulo 07
Compare capture pwm mode 5
preinforme PWM
TIMERS en microcontroladores PIC de microchip
Ejemplos De Ccp
Ejercicio 07 Timers
Módulo Timer 1 del PIC16F887
In terrupciones pic
final PWM
Micro2 tema 2
Arquitectura interna micro
Timers
Control nivel luz

Más de Luis Zurita (20)

PDF
TALLER NORMAS APA
PDF
PROTOCOLO MODBUS
PDF
Guía rápidalcd y teclado
PDF
Pevmicroi ieo
PDF
Pevmicroii13 2
PDF
Pevmicro1 t2 13
PDF
Pev electronica
PDF
Grupos micro2 13
PDF
Pevmicro1 t2 13
PDF
Micro2 tema 1
PDF
Pevmicroii13 2
PDF
Notas def electronica
PDF
Notas proyecto3 iyc
PDF
Notas definitivas iyc2013
PDF
Proyecto 2 electronica
PDF
Acumuladas electronica
PDF
Pevmicro2013
PDF
Proyecto2 notas iyc2013
PDF
Acumuladas iyc2013
PDF
TMR0 Y RB0_INT
TALLER NORMAS APA
PROTOCOLO MODBUS
Guía rápidalcd y teclado
Pevmicroi ieo
Pevmicroii13 2
Pevmicro1 t2 13
Pev electronica
Grupos micro2 13
Pevmicro1 t2 13
Micro2 tema 1
Pevmicroii13 2
Notas def electronica
Notas proyecto3 iyc
Notas definitivas iyc2013
Proyecto 2 electronica
Acumuladas electronica
Pevmicro2013
Proyecto2 notas iyc2013
Acumuladas iyc2013
TMR0 Y RB0_INT

Último (20)

PDF
OK OK UNIDAD DE APRENDIZAJE 5TO Y 6TO CORRESPONDIENTE AL MES DE AGOSTO 2025.pdf
PDF
COMPLETO__PROYECTO_VIVAN LOS NIÑOS Y SUS DERECHOS_EDUCADORASSOS.pdf
PDF
Educación Artística y Desarrollo Humano - Howard Gardner Ccesa007.pdf
PDF
Tomo 1 de biologia gratis ultra plusenmas
PDF
Escuelas Desarmando una mirada subjetiva a la educación
PDF
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
PDF
Salvese Quien Pueda - Andres Oppenheimer Ccesa007.pdf
PDF
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
PDF
Híper Mega Repaso Histológico Bloque 3.pdf
PDF
Salcedo, J. et al. - Recomendaciones para la utilización del lenguaje inclusi...
DOCX
V UNIDAD - SEGUNDO GRADO. del mes de agosto
PDF
GUIA DE: CANVA + INTELIGENCIA ARTIFICIAL
PPT
Cosacos y hombres del Este en el Heer.ppt
PDF
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
PDF
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
PDF
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
PDF
biología es un libro sobre casi todo el tema de biología
DOCX
2 GRADO UNIDAD 5 - 2025.docx para primaria
PDF
Lección 6 Escuela Sab. A través del mar rojo.pdf
DOCX
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
OK OK UNIDAD DE APRENDIZAJE 5TO Y 6TO CORRESPONDIENTE AL MES DE AGOSTO 2025.pdf
COMPLETO__PROYECTO_VIVAN LOS NIÑOS Y SUS DERECHOS_EDUCADORASSOS.pdf
Educación Artística y Desarrollo Humano - Howard Gardner Ccesa007.pdf
Tomo 1 de biologia gratis ultra plusenmas
Escuelas Desarmando una mirada subjetiva a la educación
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
Salvese Quien Pueda - Andres Oppenheimer Ccesa007.pdf
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
Híper Mega Repaso Histológico Bloque 3.pdf
Salcedo, J. et al. - Recomendaciones para la utilización del lenguaje inclusi...
V UNIDAD - SEGUNDO GRADO. del mes de agosto
GUIA DE: CANVA + INTELIGENCIA ARTIFICIAL
Cosacos y hombres del Este en el Heer.ppt
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
biología es un libro sobre casi todo el tema de biología
2 GRADO UNIDAD 5 - 2025.docx para primaria
Lección 6 Escuela Sab. A través del mar rojo.pdf
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA

MICROCONTROLADORES II EN C. TEMA 3

  • 1. IUT Cumaná MICROCONTROLADORES II MÓDULO CCP (CAPTURA/COMPARACIÓN/PWM) PROF. LUIS ZURITA
  • 2. IUT Cumaná 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. • 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
  • 3. IUT Cumaná FLUJOGRAMA CCP1 CAPTURA Prof. Luis Zurita Microcontroladores II
  • 4. IUT Cumaná 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. • 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
  • 5. IUT Cumaná FLUJOGRAMA CCP1 COMPARACIÓN Prof. Luis Zurita Microcontroladores II
  • 6. IUT Cumaná 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. • 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
  • 7. IUT Cumaná FLUJOGRAMA PWM Prof. Luis Zurita Microcontroladores II
  • 8. IUT Cumaná SEÑAL PWM Periodo=[(PR2)+1]*4*Tosc*(Valor predivisor TMR2) Duty Cycle=(CCPRxL:CCP1CON(5:4))*Tosc*(V. predivisor TMR2) Prof. Luis Zurita Microcontroladores II
  • 9. IUT Cumaná 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
  • 10. IUT Cumaná Modo PWM Pasos para configurar el PWM: 1. Asignar PR2. 2. Asignar CCPRxL y CCPxCON(5:4). 3. Configurar RCy/CCPx de salida. 4. Asignar Pre-divisor en T2CON. 5. Activar TMR2 en T2CON. 6. Configurar CCPx en modo PWM. Prof. Luis Zurita Microcontroladores II
  • 11. IUT Cumaná 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
  • 12. IUT Cumaná CCP1CON Prof. Luis Zurita Microcontroladores II
  • 13. IUT Cumaná TABLAS MÓDULO CCP Modo CCP Recurso de Timer Captura Timer1 Comparación Timer1 PWM Timer2 Prof. Luis Zurita Microcontroladores II
  • 14. IUT Cumaná EJERCICIOS CCP Captura: Medir período, Se configuran los bancos Ton, Toff Zona de Configuración Se configura el módulo CCP Comparación: Setpoint 16 bits Se configuran las PWM: Genera señal Interrupciones (opcional) Captura: Se regresa al Banco 0 Comparaciones Y acciones Resto del programa Comparación: (Tratamiento de la información) Acción sobre RCx PWM: En base a acción Generar Señal Prof. Luis Zurita Microcontroladores II
  • 15. MÓDULO CCP EN LENGUAJE C IUT Cumaná 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: 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; 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
  • 16. MÓDULO CCP EN LENGUAJE C IUT Cumaná 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 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
  • 17. MÓDULO CCP EN LENGUAJE C IUT Cumaná • 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: long CCP_1; long CCP_2; #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 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
  • 18. Ejercicio 1. Medición de Período de una señal IUT Cumaná #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; //Entra otro pulso 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(){ 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
  • 19. Ejercicio 1. Medición de Período de una señal IUT Cumaná 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 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
  • 20. Ejercicio 1. Medición de Período de una señal IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 21. Ejercicio 2. Generación de una señal cuadrada mediante la Comparación con el CCP2 IUT Cumaná • 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 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
  • 22. Ejercicio 2. Generación de una señal cuadrada mediante la Comparación con el CCP2 IUT Cumaná #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 } 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
  • 23. Ejercicio 2. Generación de una señal cuadrada mediante la Comparación con el CCP2 IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 24. Ejercicio 3. Generación de una señal PWM mediante el CCP1 IUT Cumaná • 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 #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
  • 25. Ejercicio 3. Generación de una señal PWM mediante el CCP1. Continuación. IUT Cumaná void main(){ set_pwm1_duty(0x2EE); set_tris_c(0xF0); printf(lcd_putc,"fPORC= 60"); set_tris_d(0x00); break; setup_timer_2(T2_DIV_BY_1,224,1); case (3): setup_ccp1(CCP_PWM); set_pwm1_duty(0x304); lcd_init(); printf(lcd_putc,"fPORC= 80"); while(TRUE){ break;} A=input_a(); } switch(A){ } case (0): set_pwm1_duty(0xC8); printf(lcd_putc,"fPORC= 25"); break; case (1): set_pwm1_duty(0x1F4); printf(lcd_putc,"fPORC= 50"); break; case (2): Prof. Luis Zurita Microcontroladores II
  • 26. Ejercicio 3. Generación de una señal PWM mediante el CCP1 IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 27. Ejercicio 3. Generación de una señal PWM mediante el CCP1 IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 28. Ejercicio 3. Generación de una señal PWM mediante el CCP1 IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 29. Ejercicio 3. Generación de una señal PWM mediante el CCP1 IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 30. IUT Cumaná EJERCICIO CCP1 COMPARACIÓN • Configure el Módulo CCP en modo Comparación, donde: • El TMR1 está configurado para contar pulsos externos, con un prescaler 1:1, flanco ascendente. • Se debe cargar CCPR1L con la constante Ncompar, y producir una interrupción cada vez que se alcanza el valor fijado. • Al ocurrir esto, RB0 cambia de estado. • RC2, no debe modificar su valor. Prof. Luis Zurita Microcontroladores II
  • 31. IUT Cumaná EJERCICIO CCP1 CAPTURA • Realice la medición de la duración de un pulso en alto. • Emplear el módulo CCP1 y capturar el valor del TMR1 cada vez que llegue un flanco ascendente y otro descendente por la línea RC2/CCP1. Conocida la velocidad a la que evoluciona el TMR1, se puede determinar la duración del tiempo transcurrido entre ambos flancos, lo que nos dará la anchura del pulso. • Configure al Timer1 con reloj interno y prescaler 1:1, para obtener medida máxima de período= 65,536 ms. • Cambie la orden de captura de ascendente a descendente al ocurrir la primera captura. (Dentro de la RSI). Prof. Luis Zurita Microcontroladores II
  • 32. IUT Cumaná EJERCICIO PWM • Generar una señal de onda cuadrada por la línea RC2/CCP1 cuyo periodo puede ser modificado así como la anchura del pulso (Duty Cycle). • Utilice las siguientes fórmulas – (Período) T=(PR2+1)*4*Tosc*TMR2 preescaler. – (Duty Cycle)= – (DC)=(CCPR1L:CCPCON1<5:4>)*Tosc*TMR2 preescaler. • La señal de salida tiene un periodo determinado por la constante "Periodo" y una anchura "Duty Cycle” determinada por la constante "Duty" Prof. Luis Zurita Microcontroladores II