|
|
Midiendo
un pulso. 2ª Parte. Tiempo en Alto mediante INTCCP |
|
| |
- Seguimos dándole vueltas al Tema de
Capturar el ancho de un pulso ...
|
- En
Midiendo un pulso. 1ª Parte. Tiempo en Alto con INTEXT hemos
utilizado la técnica de recoger el valor de TMR1 cuando ocurre la
interrupción externa por RB0, sea en el flanco de caída, sea en el de
subida. Con los valores de ambos flancos y simplemente restando el uno
del otro tenemos el valor del ancho del pulso.
|
- Hay otra manera de hacer exactamente
lo mismo de una forma absolutamente similar: Utilizando el módulo CCP
del PIC funcionando en modo Capture.
|
| A.-
Conceptos involucrados: |
| |
- Los conceptos son exactamente los
mismos que los descritos en la parte anterior por lo que os
ruego que la consultéis si os es necesario:
Midiendo un pulso. 1ª Parte
|
|
|
| B.-
Técnica a Aplicar: |
| |
- El módulo hardware CCP del PIC en
configuración Capture realiza de forma automática (por hardware) lo que
implementamos en nuestro anterior Técnica en C mediante la interrupción
externa por RB0.
|
- Cuando activamos el módulo CCP, le
configuramos el flanco que deseamos que lo dispare, subida o bajada,
automáticamente cada vez que se nos presente dicho flanco en el pin
correspondiente se copia el valor de TMR1, de 16 bits, en la pareja de
registros CCPRL y CCPRH.
|
- Cada vez que llega un flanco tenemos
en CCPR el valor en ese momento de TMR1.
|
- Si además habilitamos la Interrupción
CCP del PIC se producirá además una Petición de Servicio para esta
interrupción cada vez que nuestro esperado flanco se presente en el pin
correspondiente.
|
- En esta rutina de interrupción
podremos así cambiar el modelo de flanco a utilizar para el siguiente
disparo del CCP, cambiándolo ahora al flanco de bajada, y así en el
siguiente disparo tendremos en CCPR el nuevo valor de TIMER1 con lo
restando éste del anterior tendremos el ancho de pulso en High que
deseamos.
|
- Como veis es absolutamente idéntico al
método anterior pero sin tener que recoger "a mano" el valor de TMR1.
|
|
|
C.-
Implementación en C:
|
- Nota Importante: En mi ejemplo utilizo
el 18F4550 de la RRBOARD2 usando
del módulo CCP2, de los dos que tiene este PIC, configurándolo además
para que CCP2 en lugar de estar en RC1 como originalmente está
configurado y que estoy usando para otras cosas, se multiplexe por RB3
que lo tengo libre. Esto último se consigue en el 18F4550 usando el
fuse CCP2B3.
|
|
|