TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: otto_79 en 23 de Abril de 2009, 15:11:39

Título: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: otto_79 en 23 de Abril de 2009, 15:11:39
Buenas tardes gomias...
                                  Les comento le idea es la de poder saber con "exatitud" las vueltas de un motor(tacometro) o bien la frecuencia de algun equipo electronico(frecuencimetro), el principio de contar los pulsos que hay en un segundo o dos y lugo multiplicarlo por 60 o 30 no esta mal, pero no te permite medir frecuencias de por ejemplo 38 -40 RPM, entonces que queda? "medir" o "contar" el tiempo entre pulso y pulso y luego calcular cuantas veces entra ese "tiempo" en un minuto... la idea de dejar contando durante un minuto no sirve ya que hay otros trabajos que controlar como temperatura y algun estado logico para detener una maquinaria.
Cualquier idea o comentario constructivo sera agradecido.

Cordiales Saludos.
Título: Re: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: reiniertl en 23 de Abril de 2009, 15:41:28
Nada mejor para eso que la combinación TIMER1 + CCP. El timer 1 da la temporización, viene siendo el cronómetro, el CCP en modo captura te da la sincronización de marcha/parada del cronómetro. En este caso el CCP se debe utilizar para capturar el valor del contador, saber que tiempo ha pasado se debe hacer por software, pero en las interrupciones que generará el CCP y no el TIMER.

Si lo que quieres es medir el tiempo de pulso, bastará con un CCP, si necesitas saber el ciclo útil necesitarás dos de ellos uno activo por frente de subida y el otro por frente de caida.

Hasta donde se es la mejor solución, revisa el datasheet del PIC que usas a ver si tiene CCP, si no es así te tienes que buscar uno con CCP y luego ir y revisar como anda este módulo.

Saludos
Reinier
Título: Re: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: otto_79 en 23 de Abril de 2009, 16:03:51
Hola antes que nada te agradezco la respuesta, mira no necesito saber la duracion de un pulso, sino que necesito saber que tiempo trasncurre entre un pulso y el otro que le sigue  asi sabiendo ese valor puedor calcular cuantas veces entra en en un minuto con esto puedo saber cuantas  hay en un minutos con la ventaja de qe puedo medir rpm menores a 60 y sin tener que esperar un minutos. mmm quedo claro el desafio?

toda idea suma gracias...
Título: Re: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: J_jOsE en 23 de Abril de 2009, 18:12:06
hola otto_79  :mrgreen:

talvez te sirva este link
http://picmania.garcia-cuervo.net/tecnicas_en_c_4.php

no lo e probado pero creo que es lo que buscas

salu_2 a to_2
Título: Re: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: otto_79 en 23 de Abril de 2009, 20:46:07
Bueno, gracias mil...
Título: Re: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: reiniertl en 28 de Abril de 2009, 11:50:01
Primero tendrías que definir con que frente llega el pulso, si con la subida o la caida, o sea con frente positivo o negativo respectivamente. Recordemos que un pulso es así:

      ____
|___|      si es con frente negativo, es decir comienza con la caida y termina en el instante en que comienza la caída de la señal.

 ___
|    |___ si es con frente positivo, es decir comienza con la subida y termina en el instante en que comienza la subida de la señal.

Luego para medir cuanto dura el pulso, que es lo mismo que medir cuanto tiempo hay entre un pulso y otro, suponiendo que todos los pulsos son del mismo período, basta con echar a andar un contador con el frente que inicia el pulso y detenerlo con el frente que inicia el siguiente.  Para eso los PICs disponen de un módulo muy útil el CCP, que trabaja de conjunto con un temporizador, típicamente el TIMER1 y si el dispositivo tiene otros timers con el 1 y el 3.

El procedimiento es bastante simple, aunque a algunos pueda parecerle lo contrario. Basta con configurar el CCP para que haga la captura del TIMER1 con cada frente que nos interesa y llevar la cuenta de los desbordamientos del TIMER1 y de las interrupciones del CCP, un breve estudio de ambos periféricos es un método muy útil para saber exactamente cuanto dura un pulso, o que distancia separa a uno de otros en un tren de pulsos donde todos son de la misma duración.

Saludos
Reinier
Título: Re: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: otto_79 en 05 de Mayo de 2009, 23:35:08
Gracias por la respuesta, fue muy nitritiva la explicacion, mmm tendras por ahi algun material sobre el modulo ccp en basic?
un abrazo
Título: Re: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: PalitroqueZ en 11 de Mayo de 2009, 22:49:39
Nada mejor para eso que la combinación TIMER1 + CCP. El timer 1 da la temporización, viene siendo el cronómetro, el CCP en modo captura te da la sincronización de marcha/parada del cronómetro. En este caso el CCP se debe utilizar para capturar el valor del contador, saber que tiempo ha pasado se debe hacer por software, pero en las interrupciones que generará el CCP y no el TIMER.

Si lo que quieres es medir el tiempo de pulso, bastará con un CCP, si necesitas saber el ciclo útil necesitarás dos de ellos uno activo por frente de subida y el otro por frente de caida.

Hasta donde se es la mejor solución, revisa el datasheet del PIC que usas a ver si tiene CCP, si no es así te tienes que buscar uno con CCP y luego ir y revisar como anda este módulo.

Saludos
Reinier

Estoy haciendo unas practicas calculando la frecuencia mediante el par timer1+ccp(interrumpido) y como era de esperarse hay problemas, el problema es que como al terminar de calcular el período de la señal, hay que hacer otras actividades, entonces el proceso de medir la frecuencia viene siendo por "tiempos discretos" dando como resultado que la señal mostrada cambia significativamente en cada medición (los últimos dígitos casi ni se ven de lo rápido que cambian)

 :(



Título: Re: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: otto_79 en 13 de Mayo de 2009, 22:39:18
Nada mejor para eso que la combinación TIMER1 + CCP. El timer 1 da la temporización, viene siendo el cronómetro, el CCP en modo captura te da la sincronización de marcha/parada del cronómetro. En este caso el CCP se debe utilizar para capturar el valor del contador, saber que tiempo ha pasado se debe hacer por software, pero en las interrupciones que generará el CCP y no el TIMER.

Si lo que quieres es medir el tiempo de pulso, bastará con un CCP, si necesitas saber el ciclo útil necesitarás dos de ellos uno activo por frente de subida y el otro por frente de caida.

Hasta donde se es la mejor solución, revisa el datasheet del PIC que usas a ver si tiene CCP, si no es así te tienes que buscar uno con CCP y luego ir y revisar como anda este módulo.

Saludos
Reinier

Estoy haciendo unas practicas calculando la frecuencia mediante el par timer1+ccp(interrumpido) y como era de esperarse hay problemas, el problema es que como al terminar de calcular el período de la señal, hay que hacer otras actividades, entonces el proceso de medir la frecuencia viene siendo por "tiempos discretos" dando como resultado que la señal mostrada cambia significativamente en cada medición (los últimos dígitos casi ni se ven de lo rápido que cambian)

 :(


Hola que tal...

                  pensaba en lo que has comentado, y me pregunto si probaste de agregar un pequeño delay al final de la rutina de escritura de esta manera se haria un poco mas legible.
 espero contribuya en algo el comentario     saludos.


Título: Re: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: reiniertl en 14 de Mayo de 2009, 16:43:41
Palitroquez, no entiendo a que te refieres con TIMER1+CCP interrumpido, si me explicas que cosa es a lo mejor te puedo ayudar con eso que estás tratando de hacer.

Saludos
Reinier
Título: Re: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: PalitroqueZ en 14 de Mayo de 2009, 22:19:45
Reiniert, es lo mismo que explicabas en uno de tus post arriba, configurar el CCP en modo captura junto con el timer1, pero solo usar la interrupción del CCP.

ya he disminuido bastante la variación del resultado de la captura y es (no se porque) para borrar el registro CCP1 hay que apagar el modulo primero. y después volverlo a encender.




Título: Re: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: satandreu en 19 de Mayo de 2009, 07:24:17
Buenas, me cuelo en este mensaje porque creo que es la solución a lo que andaba buscando. Tengo un aparato que al iniciarse emite una secuencia luminosa mediante un led. La secuencia consta de 3 parpadeos que varían de más largo a más corto hasta que ya se queda el led prendido. ¿Como podría detectar esos 3 parpadeos mediante el pic?.

Gracias.
Título: Re: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: reiniertl en 19 de Mayo de 2009, 11:26:57
Palitroquez, el problema es que el registro del CCP, se captura desde el TIMER, no se puede escribir allí, sólo leer, cuando está en modo captura. Si está en modo comparación si se puede escribir, porque pones allí el valor de comparación.

satandreu, Si lo que te interesa es detectar tres parpadeos, no creo que te haga falta tanta complicación, basta poner un fotodetector a una entrada de interrupción externa y contar tres interrupciones, listo. Si quieres medir el tiempo de duración de cada parpadeo, entonces puedes utilizar este método, pero poniendo el fotodetector a una de las entradas de comparación.

Saludos
Reinier
Título: Re: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: PalitroqueZ en 19 de Mayo de 2009, 20:48:43
Palitroquez, el problema es que el registro del CCP, se captura desde el TIMER, no se puede escribir allí, sólo leer, cuando está en modo captura. Si está en modo comparación si se puede escribir, porque pones allí el valor de comparación.

...

y mira que leí varias veces el datasheet y no me percaté de ese detalle, de todas formas ya se como borrar el ccp en ese modo.
Título: Re: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: satandreu en 20 de Mayo de 2009, 23:10:42
satandreu, Si lo que te interesa es detectar tres parpadeos, no creo que te haga falta tanta complicación, basta poner un fotodetector a una entrada de interrupción externa y contar tres interrupciones, listo. Si quieres medir el tiempo de duración de cada parpadeo, entonces puedes utilizar este método, pero poniendo el fotodetector a una de las entradas de comparación.

Solo quiero contar el número de parpadeos y lo cierto es que no había contado con esta solución tan sencilla. Supongo que la interrupción externa a la que te refieres es a la de cambio de estado del puerto ¿no?. Ahora lo veo claro pero al no estar en casa para probarlo me entra un cabreo de 3 pares de coj....

Gracias por la idea, ya postearé resultados.

Saludos.
Título: Re: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: fluf en 20 de Junio de 2009, 01:47:43
Hola,
 yo tengo la misma interrogante.
Necesito medir el tiempo de un pulso con exactitud. ACA (http://picmania.garcia-cuervo.net/tecnicas_en_c_1.php) hay una excelente explicacion, pero esta en lenguaje C, no se como hacerlo en el BASIC de PSI  :( que es el compilador que yo utilizo. Ya consulte el manual de la pagina del PSI y no habla de interrupciones ni CCP  :( :(
Alguna idea ????
Título: Re: Como medir un tiempo entre un pulso de inicio y uno final? IDEAS???
Publicado por: bigluis en 12 de Septiembre de 2009, 23:07:10
La opcion de usar el TIMER1 y el CCP es muy buena, pero es util si y solo si tienes un pic con ese tipo de registros, a la hora de utilizar un pic sin ese tipo de registros es mejor utilizar lenguaje asambler por ejemplo:

Código: [Seleccionar]
Prueba1
btfss PORTB,1 ;saltar si PORTB.1=1
goto Prueba1 ;Si PORTB.1=0 regresa a Prueba1 y compruba de nuevo el bit
Prueba2
incf contador ;incrementa el registro contador (elejido por el usuario)
                    ;aqui puedes agregar retardos para un tamaño de pulso grande.
btfsc PORTB,1 ;Salta si el PORTB.1=0
goto Prueba2 ;Si PORTB.1=1 regresa a Prueba2 para incrementar el contador
-----------    ;aquí continua el codigo

con este codigo puedes lograr contar el tamaño de pulsos de hasta 5us hasta 700us para frecuencias de reloj de 4MHz, sin tener que utilizar entradas analogicas ni timer1.

Este Codigo tambien puede ser introducido en MikroBasic o MikroC con una funcion propia del compilador.