CCP PIC modo comparación


Compartir: Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0

CCP PIC modo comparación; el módulo CCPx donde x puede ser 1 o 2 para el PIC16F877A que es que se usará para los ejemplos, otros PIC pueden tener mas módulos CCP; el módulo CCP PIC modo comparación lo que hace es comparar continuamente el valor que va tomando el temporizador timer1 (el cual tiene que haber sido configurado como temporizador o como contador síncrono), con un valor almacenado previamente en los registros CCPRxH y CCPRxL del módulo CCPx, los cuales juntos hacen un solo registro de 16 bits, al que se le llamará CCPRx, pero no olvidar que estará formado por los dos registros.

Los valores que va tomando el registro TMR1 se comparan con el valor almacenado en el registro CCPRx hasta que los valores de estos registros se hacen iguales, y cuando eso ocurra se producirán algunos eventos en el microcontrolador pic, como el que se pondrá a 1 el bit CCPxIF del registro PIR1 o PIR2 dependiendo de cual de los módulos CCPx se esté utilizando, por lo que al ponerse a 1 el bit CCPxIF este indicará que se ha producido la igualdad entre ambos registros, además si se ha habilitado el uso de interrupciones se producirá una interrupción por comparación del módulo CCPx; por programa se puede elegir algunos eventos mas que ocurrirán cuando ambos registros se igualen utilizando el módulo CCP PIC modo comparación, estos eventos afectarán a los pines CCPx del microcontrolador PIC, que para el PIC16F877A son el pin 17 o pin CCP1 y el pin 16 o pin CCP2, para el uso de estos pines con el módulo CCP PIC modo comparación es necesario que estos pines sean configurados como salidas digitales; los eventos que pueden producirse en estos pines son los siguientes:

  • El pin CCPx se pondrá a 1 al producirse la igualdad entre el registro CCPRx y el registro TMR1, y se pondrá a 1 el bit CCPxIF el que indicará que se ha producido la igualdad entre ambos registros, a su vez este bit puede ser utilizado en interrupciones, si estas están habilitadas, producidas por el módulo CCP PIC modo comparación.
  • El pin CCPx se pondrá a 0 al producirse la igualdad entre el registro CCPRx y el registro TMR1, y se pondrá a 1 el bit CCPxIF el que indicará que se ha producido la igualdad entre ambos registros, a su vez que puede ser utilizado en interrupciones, si estas están habilitadas, producidas por el módulo CCP PIC modo comparación.
  • El pin CCPx no se ve afectado al producirse la igualdad entre el registro CCPRx y el registro TMR1, pero se pondrá a 1 el bit CCPxIF el que indicará que se ha producido la igualdad entre ambos registros, a su vez que puede ser utilizado en interrupciones, si estas están habilitadas, producidas por el módulo CCP PIC modo comparación.

Los 3 eventos anteriores ocurren de manera similar tanto para el módulo CCP1 y para el módulo CCP2 solo habrá que tener en cuenta sus respectivos registros; hay otro evento mas que se puede producir pero este variará de un módulo a otro.

  • Se lanza o produce una acción especial (así lo han llamado), al producirse la igualdad entre el registro CCPRx y el registro TMR1 se pondrá a 1 el bit CCPxIF, el que indicará que se ha producido la igualdad de ambos registros, a su vez que puede ser utilizado en interrupciones, si estas están habilitadas, producidas por el módulo CCP PIC modo comparación; si el módulo CCP utilizado es el módulo CCP1 este reseteará el registro TMR1 esto es lo pondrá a 0; si el módulo utilizado es  el módulo CCP2 además de resetear el registro TMR1 también provocará o lanzará una conversión analógica digital si el módulo CAD está habilitado.

CCP PIC modo comparación: Registro CCPxCON

Mediante este registro se elige en modo de trabajo del módulo CCPx, en la siguiente imagen se muestra el registro con los respectivos nombres de los bits que lo conforman.

CCP pic modo captura

Los bits 7 y 6 de este registro no se utilizan por lo que se les pone a 0.

Los bits 5 y 4 no se usan en modo comparación, por lo que se les pondrá a 0, tampoco son utilizados en el modo captura pero si en el modo PWM como se verá cuando se trate este modo.

Los bits 3, 2, 1 y 0 son los que se utilizarán para elegir el modo de trabajo del módulo CCP, si estos 4 bits se ponen a 0 el módulo CCP estará deshabilitado; para el uso del módulo CCP PIC modo comparación los valores asignados a estos pines serán como se indican en la siguiente tabla, para decidir que tipo de evento se quiere que ocurra al producirse la igualdad entre el registro CCPRx y el registro TMR1, tal como se comentó lineas arriba.

ccp pic modo comparación bits

Donde RCy/CCPx se refiere al pin correspondiente pin 17 o RC2 o CCP1 y pin 16 RC1 o CCP2 para el PIC16F877A.

Luego que ocurre la igualdad entre el registro CCPRx y el registro TMR1 se producirá el evento seleccionado mediante la combinación de bits indicados en la tabla.

Se puede cambiar en cualquier momento el evento que se producirá al utilizar el módulo CCP PIC modo comparación, para lo cual hay que apagar el módulo CCP cambiar  el tipo de evento que se quiere que ocurra y volver a habilitar el módulo CCP.

Si se quiere que el estado del pin CCPx se ponga a 1 al utilizar el CCP PIC modo comparación, el estado de salida normal para ese pin tendrá que ser 0, de lo contrario no se verá afectado.

Si se quiere que el estado del pin CCPx se ponga a 0 al utilizar el CCP PIC modo comparación, el estado de salida normal para ese pin tendrá que ser 1, de lo contrario no se verá afectado.

 😉 Mediante la utilización del módulo CCP PIC modo comparación se pueden generar señales de trenes de pulsos con intervalos de tiempos esto es periodos constantes o variables, lo cual se logra cambiando el valor almacenado en el registro CCPRx y alternando el evento producido en el pin CCPx utilizado.

Se utilizará el XC8 para los primeros ejemplos para de esta manera conocer la manipulación de los registros en el módulo CCP PIC modo comparación; luego se harán otros ejemplos con el uso del CCS, el cual trae funciones integradas para la manipulación de estos registros.

CCP PIC modo comparación con el MPLAB XC8.

Ejemplo 1, en este caso se obtendrá una onda cuadrada de un periodo de 5ms por el pin CCP2, la intensión de este ejemplo es ver como se manipulan los registros del módulo CCP PIC modo comparación.

En un primer momento se obtendrá por el pin CCP2 del PIC16F877A una salida de 0, el registro CCPR2 se carga con un valor de 2500, el registro CCP2CON se prepara  para que al ocurrir la igualdad entre el registro TMR1 y el registro CCPR2, el estado del pin CCP2 cambie a 1 lo que ocurre luego de 2500us, que es el valor guardado en el registro CCPR2, en ese momento han transcurrido 2500us o 2,5ms ya que el timer 1 aumenta en una unidad cada microsegundo, durante los 2,5ms la salida por el pin CCP2 será 0 que es el medio periodo de la onda cuadrada que se quiere generar, en el momento de la igualdad se producirá una interrupción por comparación.

Al producirse la interrupción por comparación en la rutina de atención a las interrupciones se cambiará la configuración del  registro CCP2CON para que al ocurrir una nueva igualdad entre los registros TMR1 y CCPR2 el estado del pin CCP2 se ponga a 1, (en cada interrupción producida el registro TMR1 tendrá que ser cargado a 0 para que cuando nuevamente alcance el valor de 2500 se vuelva a producir otra interrupción por comparación), con esto se logra que el pin CCP2 se mantenga a 1 por 2500us hasta que se produzca un nueva interrupción, en la cual se volverá a cambiar la configuración del registro CCP2CON, logrando de esta manera que la salida por el pin CCP2 se mantenga 2,5ms en alto y 2,5ms en bajo obteniéndose la onda cuadrada con periodo de 5ms.

El siguiente es el código utilizado en el XC8 para obtener la onda cuadrada de 5ms utilizando el módulo CCP PIC modo comparación, en cada linea de código está comentado el porque de la necesidad de esa linea de código.

ccp pic modo comparación ejemplo1 código1

ccp pic modo comparación ejemplo1 código2

ccp pic modo comparación ejemplo1 código3

La siguiente es una imagen del ejemplo 1 simulado, se puede ver que la frecuencia es de 199Hz casi los 200Hz que corresponden a un periodo de 5ms, se puede ver que es el periodo obtenido mediante el uso del módulo CCP PIC modo comparación.

ccp pic modo comparación ejemplo1 circuito

Ejemplo 2, en el siguiente ejemplo para el uso del módulo CCP PIC modo comparación, se hace unos cambios en el ejemplo 1, la idea en si es la misma se generará una onda cuadrada en el pin CCP2, pero en este caso el periodo de la señal será variable lo cual se logra cambiando el valor del registro CCPR2, por lo que el momento en que el valor almacenado en este registro se iguale con el valor del timer1 sucederá en diferentes tiempos, mediante este procedimiento se obtienen señales por este pin que al conectarlo a un altavoz mediante un transistor, se obtendrán sonidos de muy variada frecuencia, el código del programa en el XC8 es el siguiente:

ccp pic modo comparación en xc8 ejemplo2 código1

ccp pic modo comparación en xc8 ejemplo2 código2

ccp pic modo comparación en xc8 ejemplo2 código3

Las siguientes son unas imágenes del ejemplo 2 simulado, se pueden ver diferentes frecuencias en las tomas, con lo que en el altavoz conectado en el pin CCP2 mediante el transistor 2N3904 se oirán diferentes sonidos dependiendo de la frecuencia de la onda cuadrada que se vaya obteniendo por el pin CCP2 lo cual se logra mediante el uso del módulo CCP PIC modo comparación.

ccp pic modo comparación ejemplo2 circuito1

ccp pic modo comparación ejemplo2 circuito2

Compartir: Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0